sub pi-spigot(Int $digits) { my $len = 1 + floor 10 * $digits / 3; my @a = 2 xx $len; my Int $nines = 0; my Int $predigit = 0; join '', gather for 1 .. ($digits + 1) -> $j { my Int $q = 0; loop (my int $i = $len; $i > 0; $i = $i - 1) { my int $x = 10 * @a[$i - 1] + $q * $i; @a[$i - 1] = $x % ( 2 * $i - 1); $q = $x div (2 * $i - 1); } @a[0] = $q % 10; $q div= 10; if $q == 9 { ++$nines; } elsif $q == 10 { take $predigit + 1, 0 xx $nines; $nines = 0; $predigit = 0; } else { take $predigit; $predigit = $q; take 9 xx $nines; $nines = 0; } } } multi MAIN($n = 100) { say pi-spigot($n.Int); } multi MAIN('test') { use Test; plan 1; is pi-spigot(100), '0314159265358979323846264338327950288419716939937510582097494459230781640628620899862803482534211706', 'it works'; }