diff options
| author | arnesom <arne@bbop.org> | 2021-07-11 20:02:42 +0200 |
|---|---|---|
| committer | arnesom <arne@bbop.org> | 2021-07-11 20:02:42 +0200 |
| commit | 02aa014f4aa47f8dd2d52ad4a3808fd8cca22371 (patch) | |
| tree | d5733ec3a3131ab91fd3da6aedc035701b5c7488 /challenge-120 | |
| parent | 53d7723f49c5d0f6f74947c77e062d38398a4649 (diff) | |
| download | perlweeklychallenge-club-02aa014f4aa47f8dd2d52ad4a3808fd8cca22371.tar.gz perlweeklychallenge-club-02aa014f4aa47f8dd2d52ad4a3808fd8cca22371.tar.bz2 perlweeklychallenge-club-02aa014f4aa47f8dd2d52ad4a3808fd8cca22371.zip | |
Arne Sommer
Diffstat (limited to 'challenge-120')
| -rw-r--r-- | challenge-120/arne-sommer/blog.txt | 1 | ||||
| -rwxr-xr-x | challenge-120/arne-sommer/perl/ch-1.pl | 32 | ||||
| -rwxr-xr-x | challenge-120/arne-sommer/perl/ch-2.pl | 34 | ||||
| -rwxr-xr-x | challenge-120/arne-sommer/perl/clock-angle-perl | 34 | ||||
| -rwxr-xr-x | challenge-120/arne-sommer/perl/swap-bits-perl | 32 | ||||
| -rwxr-xr-x | challenge-120/arne-sommer/raku/ch-1.raku | 14 | ||||
| -rwxr-xr-x | challenge-120/arne-sommer/raku/ch-2.raku | 30 | ||||
| -rwxr-xr-x | challenge-120/arne-sommer/raku/clock-angle | 30 | ||||
| -rwxr-xr-x | challenge-120/arne-sommer/raku/swap-bits | 14 |
9 files changed, 221 insertions, 0 deletions
diff --git a/challenge-120/arne-sommer/blog.txt b/challenge-120/arne-sommer/blog.txt new file mode 100644 index 0000000000..94f91646a4 --- /dev/null +++ b/challenge-120/arne-sommer/blog.txt @@ -0,0 +1 @@ +https://raku-musings.com/even-clock.html diff --git a/challenge-120/arne-sommer/perl/ch-1.pl b/challenge-120/arne-sommer/perl/ch-1.pl new file mode 100755 index 0000000000..e5c9d1e3e0 --- /dev/null +++ b/challenge-120/arne-sommer/perl/ch-1.pl @@ -0,0 +1,32 @@ +#! /usr/bin/env perl + +use strict; +use warnings; +use feature 'say'; +use Getopt::Long; + +my $verbose = 0; + +GetOptions("verbose" => \$verbose); + +my $N = $ARGV[0] // ""; + +die "Please specify an integer in the range 1..255" if $N !~ /^[1-9]\d*$/ || $N > 255; + +my $binary = sprintf('%08b', $N); +my $swapped = substr($binary, 1, 1) . + substr($binary, 0, 1) . + substr($binary, 3, 1) . + substr($binary, 2, 1) . + substr($binary, 5, 1) . + substr($binary, 4, 1) . + substr($binary, 7, 1) . + substr($binary, 6, 1); + +if ($verbose) +{ + say ": Binary: $binary"; + say ": Swapped: $swapped (binary)"; +} + +say oct("0b" . $swapped); diff --git a/challenge-120/arne-sommer/perl/ch-2.pl b/challenge-120/arne-sommer/perl/ch-2.pl new file mode 100755 index 0000000000..7d6175701a --- /dev/null +++ b/challenge-120/arne-sommer/perl/ch-2.pl @@ -0,0 +1,34 @@ +#! /usr/bin/env perl + +use strict; +use warnings; +use feature 'say'; +use Getopt::Long; + +my $verbose = 0; + +GetOptions("verbose" => \$verbose); + +my $T = $ARGV[0] // ""; + +die "Please specify a HH:MM value" unless $T =~ /^[01]\d\:[0-5]\d$/; + +my ($hour, $min) = split(":", $T); + +die "Hours 00-12 only" if $hour > 12; + +$hour -= 12 if $hour >= 12; + +my $degrees_h = 360 / 12 * $hour + $min / 2; +my $degrees_m = 360 / 60 * $min; + +if ($verbose) +{ + say ": Degree H: $degrees_h"; + say ": Degree M: $degrees_m"; + +} + +my $diff = abs($degrees_h - $degrees_m); + +say "$diff degree";
\ No newline at end of file diff --git a/challenge-120/arne-sommer/perl/clock-angle-perl b/challenge-120/arne-sommer/perl/clock-angle-perl new file mode 100755 index 0000000000..7d6175701a --- /dev/null +++ b/challenge-120/arne-sommer/perl/clock-angle-perl @@ -0,0 +1,34 @@ +#! /usr/bin/env perl + +use strict; +use warnings; +use feature 'say'; +use Getopt::Long; + +my $verbose = 0; + +GetOptions("verbose" => \$verbose); + +my $T = $ARGV[0] // ""; + +die "Please specify a HH:MM value" unless $T =~ /^[01]\d\:[0-5]\d$/; + +my ($hour, $min) = split(":", $T); + +die "Hours 00-12 only" if $hour > 12; + +$hour -= 12 if $hour >= 12; + +my $degrees_h = 360 / 12 * $hour + $min / 2; +my $degrees_m = 360 / 60 * $min; + +if ($verbose) +{ + say ": Degree H: $degrees_h"; + say ": Degree M: $degrees_m"; + +} + +my $diff = abs($degrees_h - $degrees_m); + +say "$diff degree";
\ No newline at end of file diff --git a/challenge-120/arne-sommer/perl/swap-bits-perl b/challenge-120/arne-sommer/perl/swap-bits-perl new file mode 100755 index 0000000000..e5c9d1e3e0 --- /dev/null +++ b/challenge-120/arne-sommer/perl/swap-bits-perl @@ -0,0 +1,32 @@ +#! /usr/bin/env perl + +use strict; +use warnings; +use feature 'say'; +use Getopt::Long; + +my $verbose = 0; + +GetOptions("verbose" => \$verbose); + +my $N = $ARGV[0] // ""; + +die "Please specify an integer in the range 1..255" if $N !~ /^[1-9]\d*$/ || $N > 255; + +my $binary = sprintf('%08b', $N); +my $swapped = substr($binary, 1, 1) . + substr($binary, 0, 1) . + substr($binary, 3, 1) . + substr($binary, 2, 1) . + substr($binary, 5, 1) . + substr($binary, 4, 1) . + substr($binary, 7, 1) . + substr($binary, 6, 1); + +if ($verbose) +{ + say ": Binary: $binary"; + say ": Swapped: $swapped (binary)"; +} + +say oct("0b" . $swapped); diff --git a/challenge-120/arne-sommer/raku/ch-1.raku b/challenge-120/arne-sommer/raku/ch-1.raku new file mode 100755 index 0000000000..69d2d5058f --- /dev/null +++ b/challenge-120/arne-sommer/raku/ch-1.raku @@ -0,0 +1,14 @@ +#! /usr/bin/env raku + +unit sub MAIN (Int $N where $N > 0 && $N <= 255, :v(:$verbose)); + +my $binary = $N.fmt('%08b'); +my $swapped = $binary.comb(2)>>.flip.join; + +if $verbose +{ + say ": Binary: $binary"; + say ": Swapped: $swapped (binary)"; +} + +say $swapped.parse-base(2); diff --git a/challenge-120/arne-sommer/raku/ch-2.raku b/challenge-120/arne-sommer/raku/ch-2.raku new file mode 100755 index 0000000000..3d8b12fa82 --- /dev/null +++ b/challenge-120/arne-sommer/raku/ch-2.raku @@ -0,0 +1,30 @@ +#! /usr/bin/env raku + +unit sub MAIN (Str $T, :v(:$verbose)); + +grammar HHMM +{ + token TOP { <HH> \: <MM> } + token HH { <[01]> <[0..9]> <?{ $/.Int <= 12 }> } + token MM { <[0..5]> <[0..9]> } +} + +my $m = HHMM.parse($T) // die "Illegal HH:MM value"; + +my $hour = $m<HH>; +my $min = $m<MM>; + +$hour -= 12 if $hour >= 12; + +my $degrees_h = 360 / 12 * $hour + $min / 2; +my $degrees_m = 360 / 60 * $min; + +if $verbose +{ + say ": Hours: $hour - Degrees: $degrees_h"; + say ": minutes: $min - Degrees: $degrees_m"; +} + +my $diff = abs($degrees_h - $degrees_m); + +say "$diff degree"; diff --git a/challenge-120/arne-sommer/raku/clock-angle b/challenge-120/arne-sommer/raku/clock-angle new file mode 100755 index 0000000000..3d8b12fa82 --- /dev/null +++ b/challenge-120/arne-sommer/raku/clock-angle @@ -0,0 +1,30 @@ +#! /usr/bin/env raku + +unit sub MAIN (Str $T, :v(:$verbose)); + +grammar HHMM +{ + token TOP { <HH> \: <MM> } + token HH { <[01]> <[0..9]> <?{ $/.Int <= 12 }> } + token MM { <[0..5]> <[0..9]> } +} + +my $m = HHMM.parse($T) // die "Illegal HH:MM value"; + +my $hour = $m<HH>; +my $min = $m<MM>; + +$hour -= 12 if $hour >= 12; + +my $degrees_h = 360 / 12 * $hour + $min / 2; +my $degrees_m = 360 / 60 * $min; + +if $verbose +{ + say ": Hours: $hour - Degrees: $degrees_h"; + say ": minutes: $min - Degrees: $degrees_m"; +} + +my $diff = abs($degrees_h - $degrees_m); + +say "$diff degree"; diff --git a/challenge-120/arne-sommer/raku/swap-bits b/challenge-120/arne-sommer/raku/swap-bits new file mode 100755 index 0000000000..69d2d5058f --- /dev/null +++ b/challenge-120/arne-sommer/raku/swap-bits @@ -0,0 +1,14 @@ +#! /usr/bin/env raku + +unit sub MAIN (Int $N where $N > 0 && $N <= 255, :v(:$verbose)); + +my $binary = $N.fmt('%08b'); +my $swapped = $binary.comb(2)>>.flip.join; + +if $verbose +{ + say ": Binary: $binary"; + say ": Swapped: $swapped (binary)"; +} + +say $swapped.parse-base(2); |
