There are 31 three digit triangular numbers
There are 307 five digit triangular numbers
There are 26 three digit ones which lack matching digits.
There are 9 five digit ones matching the pattern 'THREE'.
THREE: 17955
ONE: 435
SIX: 820
TEN: 153
Elapsed time: 0.02 0 0 0
##```
##
#!/usr/bin/perl -w # -*-Perl-*-
use strict;
sub triangular {
use integer;
my $n=shift;
$n*($n+1)/2;
}
my @threedigit = map triangular($_),
(int(sqrt(2*100))..int(sqrt(2*1000)));
my @fivedigit = map triangular($_),
(int(sqrt(2*10000))..int(sqrt(2*100000)));
print "There are ".scalar @threedigit." three digit triangular numbers\n";
print "There are ".scalar @fivedigit." five digit triangular numbers\n";
my @threes;
for (@threedigit){
$_ !~ m/(\d)\d*\1/g and push @threes,$_;
}
@threedigit = @threes;
@threes = ();
print "There are ".scalar @threedigit." three digit ones which lack matching digits.\n";
my @fives;
for (@fivedigit){
$_ =~ m/^\d*(\d)\1$/ and
$_ !~ m/^\d*(\d)\d*\1\d+$/g and
push @fives,$_;}
@fivedigit = @fives;
@fives = ();
print "There are ".scalar @fivedigit." five digit ones matching the pattern 'THREE'.\n";
my @THREE;
my @TEN;
# eliminate fives which dont give a TEN
for (@fivedigit) {
my $t5 = $_;
my ($T,$H,$R,$E) = split //,$t5;
my $N = "[^$T$H$R$E]";
for (@threedigit) {
my $t3 = $_;
my @t3 = split //, $t3;
if ($t3 =~ m/$T$E$N/){
$N=$t3[2];
push @threes, $t3;
push @fives, $t5;
}
}
}
# Now Brute Force
my $size = $#fives;
my %solution = ('THREE'=>[],'TEN'=>[],'ONE'=>[],'SIX'=>[]);
my $idx;
for $idx (0..$size) {
my ($T,$H,$R,$E) = split //, $fives[$idx];
my ($XT,$XE,$N) = split //, $threes[$idx];
my $cc = "[^$T$H$R$E$N]";
for (@threedigit){
my $num = $_;
if ($num =~ m/$cc$N$E/){
my $O = (split //, $num)[0];
my $cc="[^$T$H$R$E$N$O]";
for (@threedigit){
if ($_ =~ /$cc{3}/){
my ($S,$I,$X) = split //, $_;
push @{$solution{'THREE'}}, $fives[$idx];
push @{$solution{'TEN'}}, $threes[$idx];
push @{$solution{'ONE'}}, $num;
push @{$solution{'SIX'}}, $_;
}
}
}
}
}
# write out solution and timings
for (keys %solution) {
print "$_:\t",join("\t",@{$solution{$_}}),"\n";
}
my @tim = times();
print "Elapsed time:\t",join "\t", @tim,"\n";
```