diff options
| author | Mohammad S Anwar <mohammad.anwar@yahoo.com> | 2021-07-10 12:04:21 +0100 |
|---|---|---|
| committer | Mohammad S Anwar <mohammad.anwar@yahoo.com> | 2021-07-10 12:04:21 +0100 |
| commit | 0d30b14ed649ce02f509dc8d61a9589a744f72ca (patch) | |
| tree | 7bfe9056f6b9604af6adb1acd29ffc366f9aed08 /challenge-120 | |
| parent | b80770db927ad7b91c1be64eba84c2a60a6b1700 (diff) | |
| download | perlweeklychallenge-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.txt | 1 | ||||
| -rw-r--r-- | challenge-120/laurent-rosenfeld/perl/ch-1.pl | 19 | ||||
| -rw-r--r-- | challenge-120/laurent-rosenfeld/perl/ch-2.pl | 20 | ||||
| -rw-r--r-- | challenge-120/laurent-rosenfeld/raku/ch-1.raku | 8 | ||||
| -rw-r--r-- | challenge-120/laurent-rosenfeld/raku/ch-2.raku | 13 |
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; +} |
