Largest palindrome product: Difference between revisions

Added Quackery.
(Added Quackery.)
Line 1,178:
12 378 (999999000001, 999999999999) 999999000000000000999999
13 1097 (9999999993349, 9999996340851) 99999963342000024336999999
</pre>
 
=={{header|Quackery}}==
 
The largest product of two 3 digit numbers is 999*999 = 998001.
The smallest product of two 3 digit numbers is 100*100 = 10000.
Therefore we need only consider 6 and 5 digit palindromic numbers.
 
Considering 6 digit palindromic numbers:
 
The largest is 999999.
The smallest is 100001.
These can be costructed from the numbers 100 to 999.
Therefore there are 899 6 digit palindromic numbers.
 
The same applies to 5 digit palindromic numbers:
The largest is 99999.
The smallest is 10001.
These can be costructed from the numbers 100 to 999.
Therefore there are 899 5 digit palindromic numbers.
 
'''Method:'''
 
* Construct the 6 digit palindromic numbers in reverse numerical order.
* Test each one to see if it is divisible by a 3 digit number with a 3 digit result, starting with 999.
* If it is, the solution has been found.
* If no solution found, consider 5 digit palindromes.
 
A six digit solution was found, and as it was found virtually instantaneously I did not feel that any optimisations were necessary.
 
I went on to find the largest five digit soultion, even though the task did not call for it, as it was a trivial exercise.
 
<syntaxhighlight lang="Quackery"> [ [] swap
[ 10 /mod
rot join swap
dup 0 = until ]
drop ] is ->digits ( n --> [ )
 
[ behead swap
witheach
[ swap 10 * + ] ] is ->number ( [ --> n )
 
[ ->digits
dup reverse join
->number ] is evenpal ( n --> n )
 
[ ->digits
dup reverse
behead drop join
->number ] is oddpal ( n --> n )
 
[ 2dup mod 0 != iff
[ 2drop false ]
done
/ 100 1000 within ] is solution ( n n --> b )
 
false
899 times
[ i 100 + evenpal
899 times
[ dup i 100 +
solution if
[ dip not
conclude ] ]
over iff
[ nip conclude ]
else drop ]
dup iff
[ say "Six digit solution found: " echo ]
else
[ drop say "No six digit solution found." ]
cr
false
899 times
[ i 100 + oddpal
899 times
[ dup i 100 +
solution if
[ dip not
conclude ] ]
over iff
[ nip conclude ]
else drop ]
dup iff
[ say "Five digit solution found: " echo ]
else
[ drop say "No five digit solution found." ]
</syntaxhighlight>
 
{{out}}
 
<pre>Six digit solution found: 906609
Five digit solution found: 99899
</pre>
 
1,483

edits