From 01abcc4707c7ec90cca53911b106dca663a44bde Mon Sep 17 00:00:00 2001 From: Alexander Pankoff Date: Mon, 13 Dec 2021 19:34:06 +0100 Subject: Add solution for challenge 143 part 1 --- challenge-143/alexander-pankoff/perl/ch-1.pl | 7 +++++++ 1 file changed, 7 insertions(+) create mode 100755 challenge-143/alexander-pankoff/perl/ch-1.pl diff --git a/challenge-143/alexander-pankoff/perl/ch-1.pl b/challenge-143/alexander-pankoff/perl/ch-1.pl new file mode 100755 index 0000000000..5e18a29391 --- /dev/null +++ b/challenge-143/alexander-pankoff/perl/ch-1.pl @@ -0,0 +1,7 @@ +#!/usr/bin/env perl +use strict; +use warnings; + +my $expr = $ARGV[0]; +die "invalid expr\n" unless $expr && $expr =~ m/^[\s\d\.\+\-\*\*\(\)]*$/; +print eval($expr) . "\n"; -- cgit From 50e1d3c36fa027ad2aa3ef5f1b3d07c878778d0d Mon Sep 17 00:00:00 2001 From: Alexander Pankoff Date: Mon, 13 Dec 2021 19:34:16 +0100 Subject: Add solution for challenge 143 part 2 --- challenge-143/alexander-pankoff/perl/ch-2.pl | 61 ++++++++++++++++++++++++++++ 1 file changed, 61 insertions(+) create mode 100755 challenge-143/alexander-pankoff/perl/ch-2.pl diff --git a/challenge-143/alexander-pankoff/perl/ch-2.pl b/challenge-143/alexander-pankoff/perl/ch-2.pl new file mode 100755 index 0000000000..8eba88cc93 --- /dev/null +++ b/challenge-143/alexander-pankoff/perl/ch-2.pl @@ -0,0 +1,61 @@ +#!/usr/bin/env perl +use strict; +use warnings; +use feature qw'say signatures'; +no warnings qw'experimental::signatures'; + +use List::Util qw'first'; + +use constant DEBUG => $ENV{DEBUG} // 0; + +run() unless caller(); + +sub run() { + my $stealthy = stealthy( $ARGV[0] ); + say $stealthy ? 1 : 0; + explain($stealthy) if DEBUG; +} + +sub stealthy($n) { + my @divisors = find_divisors_pairs($n); + my @pairs = pairs(@divisors); + + my $stealthy = first { + my ( $a, $b, $c, $d ) = flatten($_); + $a * $b == $c * $d && $a + $b == $c + $d + 1; + } + @pairs; + + return $stealthy; +} + +sub explain($stealthy) { + say "Not stealthy" && return if !$stealthy; + my ( $a, $b, $c, $d ) = flatten($stealthy); + say +"Since $a (a) * $b (b) = $c (c) * $d (d) and $a (a) + $b (b) = $c (c) + $d (d) + 1"; +} + +sub pairs(@xs ) { + my @out; + for my $i ( 0 .. $#xs - 1 ) { + push @out, map { [ $xs[$i], $xs[$_] ] } ( $i + 1 .. $#xs ); + } + return @out; +} + +sub flatten($xs) { + map { @$_ } @$xs; +} + +sub find_divisors_pairs($x) { + my @out; + my $max = sqrt($x); + for my $i ( 1 .. $max ) { + if ( $x % $i == 0 ) { + push @out, [ $i, $x / $i ]; + } + } + + return @out; +} -- cgit From ff1256a60687a9903b39c0887e3c64115748b90d Mon Sep 17 00:00:00 2001 From: Alexander Pankoff Date: Tue, 14 Dec 2021 10:48:48 +0100 Subject: Fix formatting --- challenge-143/alexander-pankoff/perl/ch-2.pl | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/challenge-143/alexander-pankoff/perl/ch-2.pl b/challenge-143/alexander-pankoff/perl/ch-2.pl index 8eba88cc93..a952866cde 100755 --- a/challenge-143/alexander-pankoff/perl/ch-2.pl +++ b/challenge-143/alexander-pankoff/perl/ch-2.pl @@ -36,7 +36,7 @@ sub explain($stealthy) { "Since $a (a) * $b (b) = $c (c) * $d (d) and $a (a) + $b (b) = $c (c) + $d (d) + 1"; } -sub pairs(@xs ) { +sub pairs(@xs) { my @out; for my $i ( 0 .. $#xs - 1 ) { push @out, map { [ $xs[$i], $xs[$_] ] } ( $i + 1 .. $#xs ); -- cgit From 7172edadbb0b471cdc3570098fe3f9e3160699e6 Mon Sep 17 00:00:00 2001 From: Alexander Pankoff Date: Tue, 14 Dec 2021 10:49:21 +0100 Subject: Remove duplicate char from match group --- challenge-143/alexander-pankoff/perl/ch-1.pl | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/challenge-143/alexander-pankoff/perl/ch-1.pl b/challenge-143/alexander-pankoff/perl/ch-1.pl index 5e18a29391..fcb9c8edbc 100755 --- a/challenge-143/alexander-pankoff/perl/ch-1.pl +++ b/challenge-143/alexander-pankoff/perl/ch-1.pl @@ -3,5 +3,5 @@ use strict; use warnings; my $expr = $ARGV[0]; -die "invalid expr\n" unless $expr && $expr =~ m/^[\s\d\.\+\-\*\*\(\)]*$/; +die "invalid expr\n" unless $expr && $expr =~ m/^[\s\d\.\+\-\*\(\)]*$/; print eval($expr) . "\n"; -- cgit