Lychrel numbers: Difference between revisions
Content added Content deleted
SqrtNegInf (talk | contribs) m (→{{header|Sidef}}: Fix link: Perl 6 --> Raku) |
No edit summary |
||
Line 829: | Line 829: | ||
NIL |
NIL |
||
</pre> |
</pre> |
||
=={{header|Crystal}}== |
|||
{{trans|Ruby}} |
|||
<lang ruby>require "set" |
|||
require "big" |
|||
def add_reverse(num, max_iter=1000) |
|||
num = num.to_big_i |
|||
nums = [] of BigInt |
|||
(1..max_iter).each_with_object(Set.new([num])) do |_, nums| |
|||
num += reverse_int(num) |
|||
nums << num |
|||
return nums if palindrome?(num) |
|||
end |
|||
end |
|||
def palindrome?(num) |
|||
num == reverse_int(num) |
|||
end |
|||
def reverse_int(num) |
|||
num.to_s.reverse.to_big_i |
|||
end |
|||
def split_roots_from_relateds(roots_and_relateds) |
|||
roots = roots_and_relateds.dup |
|||
i = 1 |
|||
while i < roots.size |
|||
this = roots[i] |
|||
if roots[0...i].any?{ |prev| this.intersects?(prev) } |
|||
roots.delete_at(i) |
|||
else |
|||
i += 1 |
|||
end |
|||
end |
|||
root = roots.map{|each_set| each_set.min} |
|||
related = roots_and_relateds.map{|each_set| each_set.min} |
|||
related = related.reject{|n| root.includes?(n)} |
|||
return root, related |
|||
end |
|||
def find_lychrel(maxn, max_reversions) |
|||
series = (1..maxn).map{|n| add_reverse(n, max_reversions*2)} |
|||
roots_and_relateds = series.select{|s| s.size > max_reversions} |
|||
split_roots_from_relateds(roots_and_relateds) |
|||
end |
|||
maxn, reversion_limit = 10000, 500 |
|||
puts "Calculations using n = 1..#{maxn} and limiting each search to 2*#{reversion_limit} reverse-digits-and-adds" |
|||
lychrel, l_related = find_lychrel(maxn, reversion_limit) |
|||
puts " Number of Lychrel numbers: #{lychrel.size}" |
|||
puts " Lychrel numbers: #{lychrel}" |
|||
puts " Number of Lychrel related: #{l_related.size}" |
|||
pals = (lychrel + l_related).select{|x| palindrome?(x)}.sort |
|||
puts " Number of Lychrel palindromes: #{pals.size}" |
|||
puts " Lychrel palindromes: #{pals}"</lang> |
|||
{{out}} |
|||
<pre> |
|||
Calculations using n = 1..10000 and limiting each search to 2*500 reverse-digits-and-adds |
|||
Number of Lychrel numbers: 5 |
|||
Lychrel numbers: [196, 879, 1997, 7059, 9999] |
|||
Number of Lychrel related: 244 |
|||
Number of Lychrel palindromes: 3 |
|||
Lychrel palindromes: [4994, 8778, 9999] |
|||
</pre> |
|||
=={{header|D}}== |
=={{header|D}}== |