aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDave Jacoby <jacoby.david@gmail.com>2021-07-05 17:42:23 -0400
committerDave Jacoby <jacoby.david@gmail.com>2021-07-05 17:42:23 -0400
commitb59f8f4008bb8ec491a9e89f097f04ce54aed4c0 (patch)
treeebcc86a05a14b153d30b63cc1034d34a46a0dfd3
parent39253b822e4bfe790553c560fd7c377f92f6246c (diff)
downloadperlweeklychallenge-club-b59f8f4008bb8ec491a9e89f097f04ce54aed4c0.tar.gz
perlweeklychallenge-club-b59f8f4008bb8ec491a9e89f097f04ce54aed4c0.tar.bz2
perlweeklychallenge-club-b59f8f4008bb8ec491a9e89f097f04ce54aed4c0.zip
My Work Here Is Done...
-rw-r--r--challenge-120/dave-jacoby/blog.txt1
-rw-r--r--challenge-120/dave-jacoby/perl/ch-1.pl18
-rw-r--r--challenge-120/dave-jacoby/perl/ch-2.pl48
3 files changed, 67 insertions, 0 deletions
diff --git a/challenge-120/dave-jacoby/blog.txt b/challenge-120/dave-jacoby/blog.txt
new file mode 100644
index 0000000000..0f29f7f2da
--- /dev/null
+++ b/challenge-120/dave-jacoby/blog.txt
@@ -0,0 +1 @@
+https://jacoby.github.io/2021/07/05/its-about-time-weekly-challenge-120.html
diff --git a/challenge-120/dave-jacoby/perl/ch-1.pl b/challenge-120/dave-jacoby/perl/ch-1.pl
new file mode 100644
index 0000000000..8e21ea4327
--- /dev/null
+++ b/challenge-120/dave-jacoby/perl/ch-1.pl
@@ -0,0 +1,18 @@
+#!/usr/bin/env perl
+
+use feature qw{say state signatures};
+use strict;
+use warnings;
+use utf8;
+no warnings qw{ experimental };
+
+for my $n ( 18, 101 ) {
+ say join "\t", '', $n, swap_bits($n);
+}
+
+sub swap_bits ($n) {
+ my $b = sprintf '%08b', $n;
+ my $r = join '', map { scalar reverse($_) } ( $b =~ /../g );
+ my $s = oct( '0b' . $r );
+ return $s;
+}
diff --git a/challenge-120/dave-jacoby/perl/ch-2.pl b/challenge-120/dave-jacoby/perl/ch-2.pl
new file mode 100644
index 0000000000..43b342f01c
--- /dev/null
+++ b/challenge-120/dave-jacoby/perl/ch-2.pl
@@ -0,0 +1,48 @@
+#!/usr/bin/env perl
+
+use strict;
+use warnings;
+use feature qw{ postderef say signatures state };
+no warnings qw{ experimental };
+
+my @times = qw{ 3:10 4:00 4:20 6:00 11:59 12:00 3:21 };
+@times = map { "11:$_" } 20 .. 65;
+
+for my $time (@times) {
+ $time = fix_time($time);
+ my $angle = clock_angle($time);
+ say join "\t", '', $time, $angle;
+}
+
+sub fix_time ($time) {
+ my ( $hour, $minute ) = split /:/, $time;
+ $hour += 1 if $minute >= 60;
+ $minute = sprintf '%02d', $minute % 60;
+ $hour = $hour % 12;
+ $hour = $hour ? $hour : 12;
+ return join ':', $hour, $minute;
+}
+
+sub clock_angle ($time) {
+ my ( $hour, $minute ) = split /:/, $time;
+ my $minute_angle = minute_angle($minute);
+ my $hour_angle = hour_angle( $hour, $minute );
+ my ( $min, $max ) = sort $minute_angle, $hour_angle;
+ my $angle = $max - $min;
+ if ( $angle > 180 ) {
+ $angle = abs $min - $max;
+ }
+ if ( $angle > 180 ) {
+ $angle = 360 - $angle;
+ }
+ return $angle;
+}
+
+sub hour_angle ( $hour, $minute ) {
+ $hour++ if $minute > 60;
+ return ( ( $hour % 12 ) * 30 ) + ( ( $minute % 60 ) / 2 );
+}
+
+sub minute_angle ($minute) {
+ return 6 * ( $minute % 60 );
+}