Skip to content

Instantly share code, notes, and snippets.

@masak
Created May 27, 2015 18:33
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save masak/875711cac32ba0244f7a to your computer and use it in GitHub Desktop.
Save masak/875711cac32ba0244f7a to your computer and use it in GitHub Desktop.
Perl 6 version of sherriff's faster send-more-money script
# ported from https://gist.github.com/sheriff/c63fb15a4b1502219097
my %digits = 0..9 X=> 1;
sub choose(%set, &fn) {
&fn($_) for grep { %set{$_} }, keys %set;
}
sub guard { &^fn() if $^condition }
choose { %digits, map { $_ => 0 }, 0 }, -> $s {
choose { %digits, map { $_ => 0 }, $s }, -> $e {
choose { %digits, map { $_ => 0 }, $s, $e }, -> $n {
choose { %digits, map { $_ => 0 }, $s, $e, $n }, -> $d {
choose { %digits, map { $_ => 0 }, 0, $s, $e, $n, $d }, -> $m {
choose { %digits, map { $_ => 0 }, $s, $e, $n, $d, $m }, -> $o {
choose { %digits, map { $_ => 0 }, $s, $e, $n, $d, $m, $o }, -> $r {
choose { %digits, map { $_ => 0 }, $s, $e, $n, $d, $m, $o, $r }, -> $y {
my $send = $s ~ $e ~ $n ~ $d;
my $more = $m ~ $o ~ $r ~ $e;
my $money = $m ~ $o ~ $n ~ $e ~ $y;
guard $send + $more == $money, -> {
say "$send + $more = $money";
}
}}}}}}}}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment