- #!/usr/bin/perl
-
- use strict;
- use warnings;
- use combinatorics;
- use euler;
-
-
-
- sub distinct_elements {
- my %hash;
- return (int @_ == int grep { not $hash{$_}++ } @_) ? 1 : 0;
- }
-
-
-
- my (@d5d6d7, @d6d7d8, @d7d8d9, @d8d9d10);
-
-
-
- for (1..999/17) {
- $_ = 17*$_;
- $_ = '0' x (3-length($_)) . $_;
- push @d8d9d10, $_ if distinct_elements split //, $_;
- }
-
-
- my (@d3d4d5, @d4d5d6);
-
-
-
- for my $d3 (0..9) {
- for my $d4 (0, 2, 4, 6, 8) {
- for my $d6 (0, 5) {
- for my $d5(0..9) {
- push @d3d4d5, "$d3$d4$d5" if "$d3$d4$d5" % 3 == 0 && distinct_elements(split //, "$d3$d4$d5");
- push @d4d5d6, "$d4$d5$d6" if distinct_elements(split //, "$d4$d5$d6");
- }
- }
- }
- }
-
-
- my (@d3d4d5d6);
-
-
-
- for my $left (@d3d4d5) {
- for my $right (@d4d5d6) {
- push @d3d4d5d6, "$left" . substr($right, 2) if (substr($left, 1, 2) eq substr($right, 0, 2));
- }
- }
-
-
-
- @d3d4d5d6 = grep { distinct_elements split(//, $_)} @d3d4d5d6;
-
-
-
- my (@d3d4d5d6d7);
-
-
-
- for my $left (@d3d4d5d6) {
- my $leftish = substr($left, -2);
- for my $right (0..9) {
- push @d3d4d5d6d7, "$left$right" if "$leftish$right" % 7 == 0 && distinct_elements split(//, "$left$right");
- }
- }
-
-
-
- @d3d4d5d6d7 = grep { distinct_elements split(//, $_)} @d3d4d5d6d7;
-
-
-
-
- my @d3_10;
- for my $left (@d3d4d5d6d7) {
- for my $right (@d8d9d10) {
- next unless (substr($left, -2) . substr($right,0,1)) % 11 == 0;
- next unless (substr($left, -1) . substr($right,0,2)) % 13 == 0;
- next unless distinct_elements split(//,"$left$right");
- push @d3_10, "$left$right";
- }
- }
-
-
- @d3_10 = grep { distinct_elements split(//, $_) } @d3_10;
-
- my @all;
-
- for my $d1 (1..9) {
- for my $d2 (0..9) {
- for (@d3_10) {
- push @all, "$d1$d2$_";
- }
- }
- }
-
- @all = grep { distinct_elements split(//, $_) } @all;
-
- my %h = ();
- my $sum = 0;
- for my $k (grep {not $h{$_}++} @all) {
- $sum += $k;
- }
-
- print $sum;