diff options
| author | Simon Proctor <simon.proctor@zoopla.co.uk> | 2020-07-21 08:59:45 +0100 |
|---|---|---|
| committer | Simon Proctor <simon.proctor@zoopla.co.uk> | 2020-07-21 08:59:45 +0100 |
| commit | 00dddf1071853ee82cb8a3751d6db2d1711f7514 (patch) | |
| tree | 39734250c4ba7316ab34ba887e00c49bc49cef3e /challenge-069 | |
| parent | d483d9c1808a03602a1fe2b1fd4569b0f53888cc (diff) | |
| parent | d96c3b3776fbb99ff873a07312075e0d34ea77c1 (diff) | |
| download | perlweeklychallenge-club-00dddf1071853ee82cb8a3751d6db2d1711f7514.tar.gz perlweeklychallenge-club-00dddf1071853ee82cb8a3751d6db2d1711f7514.tar.bz2 perlweeklychallenge-club-00dddf1071853ee82cb8a3751d6db2d1711f7514.zip | |
Merge remote-tracking branch 'upstream/master'
Diffstat (limited to 'challenge-069')
111 files changed, 18836 insertions, 56 deletions
diff --git a/challenge-069/arne-sommer/blog.txt b/challenge-069/arne-sommer/blog.txt new file mode 100644 index 0000000000..1ac799d84a --- /dev/null +++ b/challenge-069/arne-sommer/blog.txt @@ -0,0 +1 @@ +https://raku-musings.com/binary-strobe.html diff --git a/challenge-069/arne-sommer/perl/01-string-perl b/challenge-069/arne-sommer/perl/01-string-perl new file mode 100755 index 0000000000..4c3134abc1 --- /dev/null +++ b/challenge-069/arne-sommer/perl/01-string-perl @@ -0,0 +1,23 @@ +#! /usr/bin/env perl + +use strict; +use warnings; +use feature 'say'; +use feature 'signatures'; + +no warnings "experimental::signatures"; + +my $limit = $ARGV[0] // 30; + +sub switch ($string) +{ + return join("", map { $_ eq "1" ? 0 : 1 } split("", $string)); +} + +my $prev = ""; + +for my $counter (0 .. $limit) +{ + say "S" . $counter++ . " = \"$prev\""; + $prev = $prev . "0" . switch(reverse($prev)); +} diff --git a/challenge-069/arne-sommer/perl/ch-1.pl b/challenge-069/arne-sommer/perl/ch-1.pl new file mode 100755 index 0000000000..4666b711a9 --- /dev/null +++ b/challenge-069/arne-sommer/perl/ch-1.pl @@ -0,0 +1,45 @@ +#! /usr/bin/env perl + +use strict; +use warnings; +use feature 'say'; +use feature 'signatures'; +use List::Util qw(all any); + +no warnings "experimental::signatures"; + +my $verbose; +my $calculator; + +while (@ARGV && substr($ARGV[0],0,2) eq "--") +{ + my $arg = shift(@ARGV); + if ($arg eq "--calculator") { $calculator++ } + elsif ($arg eq "--verbose" ) { $verbose++ } +} + +my $A = shift(@ARGV) // die 'Please specify $A and $B'; +my $B = shift(@ARGV) // die 'Please specify $A and $B'; + +die "$A: Not a positive integer" unless $A =~ /^\d+$/; +die "$B: Not a positive integer" unless $B =~ /^\d+$/; + +die "$A: Out of range" unless $A >= 1 && $A <= 10 ** 15; +die "$B: Out of range" unless $B >= $A && $B <= 10 ** 15; + +my %strobo = $calculator + ? ( 0 => 0, 1 => 1, 2 => 5, 5 => 2, 6 => 9, 8 => 8, 9 => 6 ) + : ( 0 => 0, 1 => 1, 6 => 9, 8 => 8, 9 => 6 ); + +sub is_strobogrammatic ($number) +{ + # return 0 unless all { split("", $number) eq any {} keys %strobo }; + + my $strobo = join("", map { $strobo{$_} // return 0 } split("", reverse($number)) ); + + say ": $number -> $strobo" if $verbose; + + return $strobo eq $number; +} + +say join(", ", grep { is_strobogrammatic($_) } ($A .. $B)); diff --git a/challenge-069/arne-sommer/perl/ch-2.pl b/challenge-069/arne-sommer/perl/ch-2.pl new file mode 100755 index 0000000000..4c3134abc1 --- /dev/null +++ b/challenge-069/arne-sommer/perl/ch-2.pl @@ -0,0 +1,23 @@ +#! /usr/bin/env perl + +use strict; +use warnings; +use feature 'say'; +use feature 'signatures'; + +no warnings "experimental::signatures"; + +my $limit = $ARGV[0] // 30; + +sub switch ($string) +{ + return join("", map { $_ eq "1" ? 0 : 1 } split("", $string)); +} + +my $prev = ""; + +for my $counter (0 .. $limit) +{ + say "S" . $counter++ . " = \"$prev\""; + $prev = $prev . "0" . switch(reverse($prev)); +} diff --git a/challenge-069/arne-sommer/perl/strobonum-perl b/challenge-069/arne-sommer/perl/strobonum-perl new file mode 100755 index 0000000000..4666b711a9 --- /dev/null +++ b/challenge-069/arne-sommer/perl/strobonum-perl @@ -0,0 +1,45 @@ +#! /usr/bin/env perl + +use strict; |
