From 0323c8193223144fc99960c51b1640bc4203b8d9 Mon Sep 17 00:00:00 2001 From: user-person <60802990+user-person@users.noreply.github.com> Date: Fri, 14 Feb 2020 20:19:25 -0500 Subject: Create ch-2.pl --- challenge-047/user-person/perl/ch-2.pl | 43 ++++++++++++++++++++++++++++++++++ 1 file changed, 43 insertions(+) create mode 100644 challenge-047/user-person/perl/ch-2.pl diff --git a/challenge-047/user-person/perl/ch-2.pl b/challenge-047/user-person/perl/ch-2.pl new file mode 100644 index 0000000000..1e9d4c4f65 --- /dev/null +++ b/challenge-047/user-person/perl/ch-2.pl @@ -0,0 +1,43 @@ +#!/usr/bin/env perl + +########################################################################### +# script name: ch-2.pl # +# # +# https://perlweeklychallenge.org/blog/perl-weekly-challenge-047/ # +# # +# Write a script to print first 20 Gapful Numbers greater than or equal # +# to 100. # +# # +# https://oeis.org/A108343 # +# # +# numbers that are divisible by the number formed by their first and last # +# digit. # +# # +########################################################################### + +use strict; +use warnings; + +my $QUANTITY = 20; +my ($first, $last); +my $count = 0; + +sub firstDigit { + my $number = $_[0]; + while ($number >= 10) { + $number /= 10; + } + return $number; +} + +for (my $i = 100; $count < $QUANTITY ; ++$i) { + + $first = firstDigit $i; + $last = $i % 10; + + if ( $i % $first == 0 && ($last == 0 || $i % $last == 0 )) { + print "$i "; + ++$count; + } +} +print "\n"; -- cgit From 0d3ddf429f7399382871890bf9d314ac6b7293a9 Mon Sep 17 00:00:00 2001 From: user-person <60802990+user-person@users.noreply.github.com> Date: Fri, 14 Feb 2020 20:22:36 -0500 Subject: Create ch-1.pl --- challenge-047/user-person/perl/ch-1.pl | 50 ++++++++++++++++++++++++++++++++++ 1 file changed, 50 insertions(+) create mode 100644 challenge-047/user-person/perl/ch-1.pl diff --git a/challenge-047/user-person/perl/ch-1.pl b/challenge-047/user-person/perl/ch-1.pl new file mode 100644 index 0000000000..6dc09d1bfb --- /dev/null +++ b/challenge-047/user-person/perl/ch-1.pl @@ -0,0 +1,50 @@ +#!/usr/bin/env perl + +########################################################################### +# script name: ch-1.pl # +# # +# https://perlweeklychallenge.org/blog/perl-weekly-challenge-047/ # +# # +# Write a script that accepts two roman numbers and operation. It should # +# then perform the operation on the give roman numbers and print the # +# result. # +# # +# e.g. # +# ch-1.pl V + VI # +# # +# output: # +# XI # +# # +########################################################################### + +use strict; +use warnings; + +use FindBin; +use Roman; + +my $argString = uc "@ARGV"; +my $script = $FindBin::Script; + +die "$FindBin::Script requires arguments.\n" if scalar @ARGV == 0; + +print STDERR "[Arabic number detected in input]\n" if $argString =~ m{\d+}; + +$argString =~ s{(\s*[-+*/%]\s*)}{ $1 }g; +$argString =~ s{([MDCLXVI]+)}{arabic $1}ge; + +my $result = eval $argString; + +my $oldResult = $result; +$result = int $result; +my $decimal = $oldResult - $result; +print STDERR "Calculation result had a decimal $decimal that was truncated.\n" if $decimal; + +if ( $result == 0) { + print "N (no formal zero)\n"; # https://en.wikipedia.org/wiki/Roman_numerals#Zero +} elsif ($result > 3_999) { + die "Calculation result $result , exceeds MMMCMXCIX (3,999) the maximum value of the Roman number format.\n"; +} else { + $result = Roman(int $result); + print "$result\n"; +} -- cgit From 670c56673d2dce8d02ff657470376046d50b66a4 Mon Sep 17 00:00:00 2001 From: user-person <60802990+user-person@users.noreply.github.com> Date: Sat, 15 Feb 2020 23:36:53 -0500 Subject: Create README --- challenge-047/user-person/perl/README | 1 + 1 file changed, 1 insertion(+) create mode 100644 challenge-047/user-person/perl/README diff --git a/challenge-047/user-person/perl/README b/challenge-047/user-person/perl/README new file mode 100644 index 0000000000..e5caa9ba0d --- /dev/null +++ b/challenge-047/user-person/perl/README @@ -0,0 +1 @@ +Solutions by User Person -- cgit From fa58921bcc3aee58395f15fbf3776f75a2589e68 Mon Sep 17 00:00:00 2001 From: user-person <60802990+user-person@users.noreply.github.com> Date: Sat, 15 Feb 2020 23:37:22 -0500 Subject: Update README --- challenge-047/user-person/perl/README | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/challenge-047/user-person/perl/README b/challenge-047/user-person/perl/README index e5caa9ba0d..75ac375d49 100644 --- a/challenge-047/user-person/perl/README +++ b/challenge-047/user-person/perl/README @@ -1 +1 @@ -Solutions by User Person +solutions by User Person -- cgit From ca0bcb9dc1b66cbb1fefa71b8e647614f640bfb4 Mon Sep 17 00:00:00 2001 From: user-person <60802990+user-person@users.noreply.github.com> Date: Sun, 16 Feb 2020 04:26:01 -0500 Subject: Update ch-2.pl --- challenge-047/user-person/perl/ch-2.pl | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/challenge-047/user-person/perl/ch-2.pl b/challenge-047/user-person/perl/ch-2.pl index 1e9d4c4f65..a501321878 100644 --- a/challenge-047/user-person/perl/ch-2.pl +++ b/challenge-047/user-person/perl/ch-2.pl @@ -27,17 +27,22 @@ sub firstDigit { while ($number >= 10) { $number /= 10; } - return $number; + return int($number); } for (my $i = 100; $count < $QUANTITY ; ++$i) { $first = firstDigit $i; $last = $i % 10; + my $formedBy = ($first * 10) + $last; - if ( $i % $first == 0 && ($last == 0 || $i % $last == 0 )) { + if ( $i % $formedBy == 0 ) { print "$i "; ++$count; } } print "\n"; + +__END__ +output: + 100 105 108 110 120 121 130 132 135 140 143 150 154 160 165 170 176 180 187 190 -- cgit From f56f5718190175a80081bde5966a92ec27f649ee Mon Sep 17 00:00:00 2001 From: user-person <60802990+user-person@users.noreply.github.com> Date: Sun, 16 Feb 2020 04:40:27 -0500 Subject: Update ch-1.pl --- challenge-047/user-person/perl/ch-1.pl | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/challenge-047/user-person/perl/ch-1.pl b/challenge-047/user-person/perl/ch-1.pl index 6dc09d1bfb..ec2e27b494 100644 --- a/challenge-047/user-person/perl/ch-1.pl +++ b/challenge-047/user-person/perl/ch-1.pl @@ -43,7 +43,9 @@ print STDERR "Calculation result had a decimal $decimal that was truncated.\n" i if ( $result == 0) { print "N (no formal zero)\n"; # https://en.wikipedia.org/wiki/Roman_numerals#Zero } elsif ($result > 3_999) { - die "Calculation result $result , exceeds MMMCMXCIX (3,999) the maximum value of the Roman number format.\n"; + die "Calculation result $result exceeds MMMCMXCIX (3,999) the maximum value of the Roman number format.\n"; +} elsif ($result < 0) { + die "Calculation result $result is negative. Roman numbers are positive integers.\n"; } else { $result = Roman(int $result); print "$result\n"; -- cgit