Lychrel numbers: Difference between revisions

Content added Content deleted
m (→‎{{header|Perl 6}}: Style tweaks)
Line 2,427: Line 2,427:
Number of Lychrel palindromes < 10_000: 3
Number of Lychrel palindromes < 10_000: 3
Lychrel palindromes < 10_000: 4994, 8778, 9999</pre>
Lychrel palindromes < 10_000: 4994, 8778, 9999</pre>

=={{header|Phix}}==
<lang Phix>constant iterations = 500,
limit = 10000
sequence seeds = {},
cache = {}
sequence temp = repeat(0,iterations)
sequence palin = {}
integer related = 0

for n=1 to limit do
string num = sprintf("%d",n),
rev = reverse(num)
bool palindrome = (num=rev)
for i=1 to iterations do
integer digit, carry = 0
for x=length(num) to 1 by -1 do
digit = num[x]+rev[x]+carry-'0'
carry = digit>'9'
num[x] = digit-carry*10
end for
if carry then num = "1" & num end if
temp[i] = num
rev = reverse(num)
if num=rev then exit end if
end for
if num!=rev then
bool no_match = true
num = sprintf("%d",n)
if palindrome then
palin = append(palin, num)
end if
for c=1 to length(cache) do
string seed = cache[c]
-- check against previous found seeds
for i=iterations to 1 by -1 do
string ti = temp[i]
if length(seed)>length(ti) then
exit
elsif seed=ti then
no_match = false
related += 1
exit
end if
end for
if no_match=false then exit end if
end for
if no_match then
seeds = append(seeds,num)
cache = append(cache,temp[$])
end if
end if
end for
printf(1,"%d lychrel seeds: %s\n",{length(seeds),join(seeds, ", ")})
printf(1,"related lychrel: %d\n",related)
printf(1,"%d lychrel palindromes: %s\n", {length(palin),join(palin, ", ")})</lang>
{{out}}
Completes in under a second
<pre>
5 lychrel seeds: 196, 879, 1997, 7059, 9999
related lychrel: 244
3 lychrel palindromes: 4994, 8778, 9999
</pre>


=={{Header|PicoLisp}}==
=={{Header|PicoLisp}}==