- #!/usr/bin/perl
-
- use strict;
- use warnings;
- use combinatorics;
- use euler;
-
-
-
- sub only1s {
- my $hash = shift;
- for (keys %$hash) {
- return 0 if $hash->{$_} > 1;
- }
- return 1;
- }
-
-
-
- my ($count) = 0;
- my $digits = {};
-
- $digits->{$_} = 0 for 0..9;
-
-
-
-
- for my $d8d9d10 (map { $_ * 17 } 1..58) {
-
- $d8d9d10 = ('0' x (3-length $d8d9d10)) . $d8d9d10;
-
-
- $digits->{$_}++ for split //, $d8d9d10;
-
-
- goto OUT unless only1s $digits;
-
-
-
- for my $d7 (sort grep { $digits->{$_} < 1 } keys %$digits) {
- $digits->{$d7}++;
-
-
- for my $d6 (grep { $digits->{$_} < 1 } (0,5)) {
- $digits->{$d6}++;
-
-
-
- for my $d4 (grep { $digits->{$_} < 1 } (0, 2, 4, 6, 8)) {
- $digits->{$d4}++;
-
-
-
- for my $d3 (grep { $digits->{$_} < 1 } 0..9) {
- $digits->{$d3}++;
-
- for my $d5 (grep { $digits->{$_} < 1 } 0..9) {
- $digits->{$d5}++;
-
- for my $d2 (grep { $digits->{$_} < 1 } 0..9) {
- $digits->{$d2}++;
-
- if ("$d3$d4$d5" % 3 == 0 && "$d5$d6$d7" % 7 == 0 && ("$d6$d7" . substr $d8d9d10, 0, 1) % 11 == 0 && index("$d2$d3$d4$d5$d6$d7$d8d9d10",0) != -1) {
-
- my $s = ($d7 . substr($d8d9d10, 0, 2));
-
- print "$d2$d3$d4$d5$d6$d7$d8d9d10\n" if $s % 13 == 0;
- }
-
-
- $digits->{$d2}--;
- }
-
- $digits->{$d5}--;
- }
-
-
- $digits->{$d3}--;
- }
-
-
- $digits->{$d4}--;
- }
-
-
- $digits->{$d6}--;
- }
-
- $digits->{$d7}--;
- }
-
-
- OUT: $digits->{$_} = 0 for 0..9;
- }
-
-
-
-
- print $count;