func perfect_shuffle(deck) { deck/2 -> zip.flat } [8, 24, 52, 100, 1020, 1024, 10000].each { |size| var deck = @(1..size) var shuffled = deck var n = (1..Inf -> lazy.first { (shuffled = perfect_shuffle(shuffled)) == deck }) printf("%5d cards: %4d\n", size, n) }