Casting out nines
func cast_out(base = 10, min = 1, max = (base**2 - 1)) {
var b9 = base-1
var ran = b9.range.grep {|n| n%b9 == (n*n % b9) }
var x = min//b9
var r = []
loop {
ran.each {|n|
var k = (b9*x + n)
return r if (k > max)
r << k if (k >= min)
}
++x
}
return r
}
say cast_out().join(' ')
say cast_out(16).join(' ')
say cast_out(17).join(' ')Output:
Last updated
Was this helpful?