From ddc2ed0754e6cac1a7faf53bdec0bcb6b7a382e4 Mon Sep 17 00:00:00 2001 From: Dave Jacoby Date: Mon, 1 Mar 2021 17:43:57 -0500 Subject: Challenge Accepted! --- challenge-102/dave-jacoby/blog.txt | 1 + challenge-102/dave-jacoby/perl/ch-1.pl | 44 ++++++++++++++++++++++++++++++++++ challenge-102/dave-jacoby/perl/ch-2.pl | 26 ++++++++++++++++++++ 3 files changed, 71 insertions(+) create mode 100644 challenge-102/dave-jacoby/blog.txt create mode 100644 challenge-102/dave-jacoby/perl/ch-1.pl create mode 100644 challenge-102/dave-jacoby/perl/ch-2.pl (limited to 'challenge-102') diff --git a/challenge-102/dave-jacoby/blog.txt b/challenge-102/dave-jacoby/blog.txt new file mode 100644 index 0000000000..0461943e8b --- /dev/null +++ b/challenge-102/dave-jacoby/blog.txt @@ -0,0 +1 @@ +https://jacoby.github.io/2021/03/01/rare-numbers-and-hash-perl-challenge-102.html \ No newline at end of file diff --git a/challenge-102/dave-jacoby/perl/ch-1.pl b/challenge-102/dave-jacoby/perl/ch-1.pl new file mode 100644 index 0000000000..05d5ddad07 --- /dev/null +++ b/challenge-102/dave-jacoby/perl/ch-1.pl @@ -0,0 +1,44 @@ +#!/usr/bin/env perl + +use strict; +use warnings; +use feature qw{ postderef say signatures state }; +no warnings qw{ experimental }; + +use Carp; + +my $i = shift @ARGV; +$i //= 2; +croak 'non-positive integer' if $i < 1; +croak 'not an integer' if $i =~ /\D/; + +say join "\n\t", "RARE NUMBERS: $i", rare_numbers($i), ''; + +# a number r is "rare" when: +# - r1 is that number reversed +# - sqrt(r+r1) is an integer +# - sqrt(r-r1) is an integer +sub rare_numbers ( $i ) { + my @output; + + # given i == 5, + # low is 10000, the smallest five-digit number + # high is 99999, the highest five-digit number + my $low = join '', map { $_ == 1 ? 1 : 0 } 1 .. $i; + my $high = 9 x $i; + + for my $r ( $low .. $high ) { + my $r1 = reverse $r; + next if $r - $r1 < 0; # early block for thing that break sqrt + + my $s1 = sqrt( $r + $r1 ); + next if $s1 =~ /\D/; # test if integer + + my $s2 = sqrt( $r - $r1 ); + next if $s2 =~ /\D/; # test if integer + + + push @output, $r; + } + return @output; +} diff --git a/challenge-102/dave-jacoby/perl/ch-2.pl b/challenge-102/dave-jacoby/perl/ch-2.pl new file mode 100644 index 0000000000..630c256e61 --- /dev/null +++ b/challenge-102/dave-jacoby/perl/ch-2.pl @@ -0,0 +1,26 @@ +#!/usr/bin/env perl + +use strict; +use warnings; +use feature qw{ postderef say signatures state }; +no warnings qw{ experimental }; + +use Carp; + +my $i = shift @ARGV; +$i //= 2; +croak 'non-positive integer' if $i < 1; +croak 'not an integer' if $i =~ /\D/; + +say join "\t", $i, hash_count($i); + +sub hash_count( $i ) { + my $output = ''; + my $j = $i; + while ( $j > 0 ) { + $output = '#' . $output; + $output = $j . $output if length $output < $i; + $j = $i - length $output; + } + return $output; +} -- cgit