Distinct palindromes within decimal numbers

func palindromes(arr) {
    gather {
        for a in (0..arr.end), b in (a .. arr.end) {
            var sublist = arr.items(a..b -> ...)
            take(sublist) if (sublist == sublist.flip)
        }
    }.uniq
}

for n in (100..125) {
    say "#{n} -> #{palindromes(n.digits).sort.map{.join}.sort_by{.len}.join(' ')}"
}

[9, 169, 12769, 1238769, 123498769, 12346098769, 1234572098769,
 123456832098769, 12345679432098769, 1234567905432098769, 123456790165432098769,
 83071934127905179083, 1320267947849490361205695, "amanaplanacanalpanama"].each {|n|
    var p = palindromes(n.kind_of(Number) ? n.digits : n.chars).grep { .len >= 2}
    say ("#{'%25s' % n} has #{'%2d' % p.len} palindromes of length 2 or more: ",
        p.sort.map{.join}.sort_by{.len}.join(' '))
}

Output:

Last updated

Was this helpful?