Find palindromic numbers in both binary and ternary bases: Difference between revisions

Line 1,048:
 
=={{header|Julia}}==
<lang julia>ispalindrome(str::Stringn, bas) = str(s = string(n, base=bas); s === reverse(strs))
{{Output?}}
prin3online(n) = println(lpad(n, 15), lpad(string(n, base=2), 40), lpad(string(n, base=3), 30))
{{works with|Julia|0.6}}
reversebase3(n) = (x = 0; while n != 0 x = 3x + (n %3); n = div(n, 3); end; x)
<lang julia>ispalindrome(str::String) = str == reverse(str)
ispalindrome(n::Int) = ispalindrome(dec(n))
ispalindromeinbase(n::Integer, bases::Integer...) = all(ispalindrome(base(b, n)) for b in bases)
prin3online(n) = @printf("%12d %28s %20s\n", n, base(2,n), base(3,n))
 
function printpalindromes(N)
@printf("%12s %28s %20s", "Base 10", "Base 2", "Base 3\n")
lo, hi, pow2, pow3, count, i = 0, 1, 1, 1, 1, 0
prin3online(0)
println(lpad("Number", 15), lpad("Base 2", 40), lpad("Base 3", 30))
prin3online(1)
prin3online(0)
n = 1
while true
k = 0
for j in lo:hi-1
while k < 6
n + i = 2j
n = (3 * j + 1) * pow3 + reversebase3(j)
if ispalindromeinbase(n, 2, 3)
prin3online if ispalindrome(n, 2)
k += 1 prin3online(n)
count += 1
end
if count >= N
end</lang>
return
end
end
end
if i == pow3
pow3 *= 3
else
pow2 *= 4
end
 
while true
while pow2 <= pow3
pow2 *= 4
end
lo2 = div(div(pow2, pow3) - 1, 3)
hi2 = div(div(pow2 * 2, pow3), 3) + 1
lo3 = div(pow3, 3)
hi3 = pow3
 
if lo2 >= hi3
pow3 *= 3
elseif lo3 >= hi2
pow2 *= 4
else
lo = max(lo2, lo3)
hi = min(hi2, hi3)
break
end
end
end
end
 
printpalindromes(6)
end</lang>{{out}}
<pre>
Number Base 2 Base 3
0 0 0
1 1 1
6643 1100111110011 100010001
1422773 101011011010110110101 2200021200022
5415589 10100101010001010100101 101012010210101
90396755477 1010100001100000100010000011000010101 22122022220102222022122
</pre>
 
=={{header|Kotlin}}==
4,102

edits