Largest palindrome product
- Task
Task description is taken from Project Euler (https://projecteuler.net/problem=4)
A palindromic number reads the same both ways. The largest palindrome made from the product of two 2-digit numbers is 9009 = 91 × 99.
Find the largest palindrome made from the product of two 3-digit numbers.
Go
Though, unlike Wren, can deal with 18 digit integers. Note also that it's a lot quicker in Go to reverse a number arithmetically than to reverse its string equivalent. <lang go>package main
import "fmt"
func reverse(n uint64) uint64 {
r := uint64(0) for n > 0 { r = n%10 + r*10 n /= 10 } return r
}
func main() {
pow := uint64(10)
nextN:
for n := 2; n < 10; n++ { low := pow*9 + 1 pow *= 10 high := pow - 1 fmt.Printf("Largest palindromic product of two %d-digit integers: ", n) for i := high; i >= low; i-- { for j := high; j >= low; j-- { p := i * j if p%10 != 9 { continue } if p == reverse(p) { fmt.Printf("%d x %d = %d\n", i, j, p) continue nextN } } } }
}</lang>
- Output:
Largest palindromic product of two 2-digit integers: 99 x 91 = 9009 Largest palindromic product of two 3-digit integers: 993 x 913 = 906609 Largest palindromic product of two 4-digit integers: 9999 x 9901 = 99000099 Largest palindromic product of two 5-digit integers: 99979 x 99681 = 9966006699 Largest palindromic product of two 6-digit integers: 999999 x 999001 = 999000000999 Largest palindromic product of two 7-digit integers: 9999979 x 9467731 = 94677111177649 Largest palindromic product of two 8-digit integers: 99999999 x 99990001 = 9999000000009999 Largest palindromic product of two 9-digit integers: 999999969 x 998396971 = 998396940049693899
Raku
<lang perl6>use Prime::Factor; (^6).map: -> $oom {
LOOP: for (+(1 ~ (0 x $oom)) .. +(9 ~ (9 x $oom))).reverse.map({ +($_ ~ .flip) }) -> $pal { for my @factors = $pal.&divisors.grep: {.chars == ($oom + 1)} { next unless $pal div $_ ∈ @factors; say "Largest palindromic product of two {$oom + 1}-digit integers: $_ × {$pal div $_} = $pal" and last LOOP; } }
}</lang>
Largest palindromic product of two 2-digit integers: 91 × 99 = 9009 Largest palindromic product of two 3-digit integers: 993 × 913 = 906609 Largest palindromic product of two 4-digit integers: 9901 × 9999 = 99000099 Largest palindromic product of two 5-digit integers: 99681 × 99979 = 9966006699 Largest palindromic product of two 6-digit integers: 999999 × 999001 = 999000000999
Ring
<lang ring> load "stdlib.ring" see "working..." + nl
prodOld = 0 limitStart = 100 limitEnd = 999
for n = limitStart to limitEnd
for m = limitStart to limitEnd prodNew = n*m if prodNew > prodOld and palindrome(string(prodNew)) prodOld = prodNew first = n second = m ok next
next
see "The largest palindrome is:" + nl see "" + first + " * " + second + " = " + prodOld + nl see "done..." + nl </lang>
- Output:
working... The largest palindrome is: 913 * 993 = 906609 done...
Wren
<lang ecmascript>var pow = 10 for (n in 2..7) {
var low = pow * 9 + 1 pow = pow * 10 var high = pow - 1 System.write("Largest palindromic product of two %(n)-digit integers: ") var nextN = false for (i in high..low) { for (j in high..low) { var p = i * j if (p%10 != 9) continue var s = p.toString if (s == s[-1..0]) { System.print("%(i) x %(j) = %(p)") nextN = true break } } if (nextN) break }
}</lang>
- Output:
Largest palindromic product of two 2-digit integers: 99 x 91 = 9009 Largest palindromic product of two 3-digit integers: 993 x 913 = 906609 Largest palindromic product of two 4-digit integers: 9999 x 9901 = 99000099 Largest palindromic product of two 5-digit integers: 99979 x 99681 = 9966006699 Largest palindromic product of two 6-digit integers: 999999 x 999001 = 999000000999 Largest palindromic product of two 7-digit integers: 9999979 x 9467731 = 94677111177649