aboutsummaryrefslogtreecommitdiff
path: root/challenge-120
diff options
context:
space:
mode:
authorarnesom <arne@bbop.org>2021-07-11 20:02:42 +0200
committerarnesom <arne@bbop.org>2021-07-11 20:02:42 +0200
commit02aa014f4aa47f8dd2d52ad4a3808fd8cca22371 (patch)
treed5733ec3a3131ab91fd3da6aedc035701b5c7488 /challenge-120
parent53d7723f49c5d0f6f74947c77e062d38398a4649 (diff)
downloadperlweeklychallenge-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.txt1
-rwxr-xr-xchallenge-120/arne-sommer/perl/ch-1.pl32
-rwxr-xr-xchallenge-120/arne-sommer/perl/ch-2.pl34
-rwxr-xr-xchallenge-120/arne-sommer/perl/clock-angle-perl34
-rwxr-xr-xchallenge-120/arne-sommer/perl/swap-bits-perl32
-rwxr-xr-xchallenge-120/arne-sommer/raku/ch-1.raku14
-rwxr-xr-xchallenge-120/arne-sommer/raku/ch-2.raku30
-rwxr-xr-xchallenge-120/arne-sommer/raku/clock-angle30
-rwxr-xr-xchallenge-120/arne-sommer/raku/swap-bits14
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);