aboutsummaryrefslogtreecommitdiff
path: root/challenge-120
diff options
context:
space:
mode:
authorMohammad S Anwar <mohammad.anwar@yahoo.com>2021-07-10 12:04:21 +0100
committerMohammad S Anwar <mohammad.anwar@yahoo.com>2021-07-10 12:04:21 +0100
commit0d30b14ed649ce02f509dc8d61a9589a744f72ca (patch)
tree7bfe9056f6b9604af6adb1acd29ffc366f9aed08 /challenge-120
parentb80770db927ad7b91c1be64eba84c2a60a6b1700 (diff)
downloadperlweeklychallenge-club-0d30b14ed649ce02f509dc8d61a9589a744f72ca.tar.gz
perlweeklychallenge-club-0d30b14ed649ce02f509dc8d61a9589a744f72ca.tar.bz2
perlweeklychallenge-club-0d30b14ed649ce02f509dc8d61a9589a744f72ca.zip
- Added solutions by Laurent Rosenfeld
Diffstat (limited to 'challenge-120')
-rw-r--r--challenge-120/laurent-rosenfeld/blog.txt1
-rw-r--r--challenge-120/laurent-rosenfeld/perl/ch-1.pl19
-rw-r--r--challenge-120/laurent-rosenfeld/perl/ch-2.pl20
-rw-r--r--challenge-120/laurent-rosenfeld/raku/ch-1.raku8
-rw-r--r--challenge-120/laurent-rosenfeld/raku/ch-2.raku13
5 files changed, 61 insertions, 0 deletions
diff --git a/challenge-120/laurent-rosenfeld/blog.txt b/challenge-120/laurent-rosenfeld/blog.txt
new file mode 100644
index 0000000000..5aa682a5dd
--- /dev/null
+++ b/challenge-120/laurent-rosenfeld/blog.txt
@@ -0,0 +1 @@
+http://blogs.perl.org/users/laurent_r/2021/07/perl-weekly-challenge-120-swap-oddeven-bits-and-clock-angle.html
diff --git a/challenge-120/laurent-rosenfeld/perl/ch-1.pl b/challenge-120/laurent-rosenfeld/perl/ch-1.pl
new file mode 100644
index 0000000000..f678c356ed
--- /dev/null
+++ b/challenge-120/laurent-rosenfeld/perl/ch-1.pl
@@ -0,0 +1,19 @@
+#!/usr/bin/perl
+use strict;
+use warnings;
+use feature qw/say/;
+
+sub bin2dec {
+ my $bin = shift;
+ my $sum = 0;
+ for my $i (split //, $bin) {
+ $sum = $sum * 2 + $i;
+ }
+ return $sum;
+}
+
+for my $test (101, 154, 33, 18) {
+ my $b2 = sprintf "%08b", $test;
+ $b2 =~ s/(\d)(\d)/$2$1/g;
+ say "$test: ", bin2dec $b2;;
+}
diff --git a/challenge-120/laurent-rosenfeld/perl/ch-2.pl b/challenge-120/laurent-rosenfeld/perl/ch-2.pl
new file mode 100644
index 0000000000..4bd1551a2d
--- /dev/null
+++ b/challenge-120/laurent-rosenfeld/perl/ch-2.pl
@@ -0,0 +1,20 @@
+use strict;
+use warnings;
+use feature "say";
+
+sub find_angle {
+ my $time = shift;
+ my ($h, $m) = split /:/, $time;
+ # angles counted in deg clockwise from the 0/12 position
+ my $m_angle = $m * 6; # or: $m * 360/60
+ # for the short hand:
+ # 1 hr = 360 / 12 = 30 degrees
+ # 1 min = #m_angle / (360 / 30) = #m_angle /12
+ my $h_angle = ($h * 30 + $m_angle / 12) % 360;
+ my $hands_angle = abs($h_angle - $m_angle);
+ return $hands_angle <= 180 ? $hands_angle : 360 - $hands_angle;
+}
+
+for my $t (qw / 03:10 04:00 07:00 15:10 18:00 /) {
+ say "$t: ", find_angle $t;
+}
diff --git a/challenge-120/laurent-rosenfeld/raku/ch-1.raku b/challenge-120/laurent-rosenfeld/raku/ch-1.raku
new file mode 100644
index 0000000000..2cad43a7ad
--- /dev/null
+++ b/challenge-120/laurent-rosenfeld/raku/ch-1.raku
@@ -0,0 +1,8 @@
+use v6;
+
+sub swap-bits (UInt $n where * <=255) {
+ my $bin = $n.fmt("%08b");
+ $bin ~~ s:g/(\d)(\d)/$1$0/;
+ return $bin.parse-base: 2;
+}
+say "$_ : ", swap-bits $_ for 101, 154, 33, 18;
diff --git a/challenge-120/laurent-rosenfeld/raku/ch-2.raku b/challenge-120/laurent-rosenfeld/raku/ch-2.raku
new file mode 100644
index 0000000000..52961a9468
--- /dev/null
+++ b/challenge-120/laurent-rosenfeld/raku/ch-2.raku
@@ -0,0 +1,13 @@
+use v6;
+
+sub find-angle (Str $t) {
+ my ($h, $m) = split /\:/, $t;
+ # We compute angles in degrees from 0h00 and clockwise
+ my $m-angle = $m * 6; # or: $m * 360/60
+ my $h-angle = ($h * 360/12 + $m-angle / 12) % 360;
+ my $angle = abs ($m-angle - $h-angle);
+ return $angle <= 180 ?? $angle !! 360 - $angle;
+}
+for <03:10 04:00 07:00 15:10 20:44> -> $test {
+ say "$test: ", find-angle $test;
+}