From b59f8f4008bb8ec491a9e89f097f04ce54aed4c0 Mon Sep 17 00:00:00 2001 From: Dave Jacoby Date: Mon, 5 Jul 2021 17:42:23 -0400 Subject: My Work Here Is Done... --- challenge-120/dave-jacoby/blog.txt | 1 + challenge-120/dave-jacoby/perl/ch-1.pl | 18 +++++++++++++ challenge-120/dave-jacoby/perl/ch-2.pl | 48 ++++++++++++++++++++++++++++++++++ 3 files changed, 67 insertions(+) create mode 100644 challenge-120/dave-jacoby/blog.txt create mode 100644 challenge-120/dave-jacoby/perl/ch-1.pl create mode 100644 challenge-120/dave-jacoby/perl/ch-2.pl 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 ); +} -- cgit