aboutsummaryrefslogtreecommitdiff
path: root/challenge-120/colin-crain/perl/ch-2.pl
blob: 1e9e247bdfd913a67933475f049f8840f6e67b51 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
#!/Users/colincrain/perl5/perlbrew/perls/perl-5.32.0/bin/perl
#
#       what-angle-we-at.pl
#
#       Clock Angle
#         Submitted by: Mohammad S Anwar
#         You are given time $T in the format hh:mm.
# 
#         Write a script to find the smaller angle formed by the hands of an
#         analog clock at a given time.
# 
#         HINT: A analog clock is divided up into 12 sectors. One sector
#         represents 30 degree (360/12 = 30).
# 
#         Example
#         Input: $T = '03:10'
#         Output: 35 degree
# 
#         The distance between the 2 and the 3 on the clock is 30 degree.
#         For the 10 minutes i.e. 1/6 of an hour that have passed.
#         The hour hand has also moved 1/6 of the distance between the 3 and the
#         4, which adds 5 degree (1/6 of 30).
#         The total measure of the angle is 35 degree.
# 
#         Input: $T = '04:00'
#         Output: 120 degree

#         method:
#             Rolex wristwatches are known for their "sweep" second hand
#             movement; that is to say the hand does not move incrementally,
#             once a second, from one pip to the next, but rather is seen to
#             move in a continuous flow around the dial. This action is
#             remarkably difficult to achieve in a mechanical movement where the
#             fundamental timekeeping period is based on an oscillating
#             vibration, such as a pendulum. In fact it is ultimately
#             illusionary, based on a rapidly moving pendulum buffered by
#             springs to appear more fluid.
# 
#             With the introduction of inexpensive, accurate electric motors
#             much of the panache of the sweep hand has gone away, and the Rolex
#             has had to rely more on its rugged good looks and maybe the notion that
#             it's body is machined from a giant block of gold. But I digress.
#             In a pendulum-driven clock movement the action is commonly
#             designed to move with a two-second period: one across, and one
#             back. This can be precisely tuned by adjusting the length of the
#             pendulum arm, and forms the basis of all the timekeeping: each
#             half-swing is one tick, 60 of these comprise a minute, and three
#             thouand six hundred to an hour.
# 
#             It's not hard to make a clock with a sweep minute hand, where the
#             hand makes one revolution per hour in as many increments as the
#             pendulum allows. But this is not always advantagous: in a clock
#             without a second hand, such as one would find in a clock-tower,
#             having the minute hand fall between marks leads to ambiguity in
#             reading. One person may see 43 minutes past the hour, another 42.
#             It is often more desirable to have an intenal mechanism rachet
#             along counting pendulum swings on a gear, and only once a
#             revolution have a pin engage a mechanism and move the minute hand
#             one place. In this way the clock hand stays at 42 until the moment
#             arrives, when in moves all at onece to 43 and remains for another
#             minute until it moves again.
# 
#             On the other, other hand, no mechanical clock does this for the hour
#             hand. We go about our day and normally deal with time in a finer
#             granularity than the hour, and hence knowing that it's somewhere
#             between 1 and 2 is useful information in itself to know.
# 
#             So ignoring the second hand, in just the hours and minutes of many 
#             common clocks we have
#             two modes of moving the hand: continuous and discrete. With
#             respect to an angle swept from midnight or noon, the minute hand
#             will have moved six degrees every minute, always. As without 
#             further information we have no
#             idea how many seconds have elapsed since the last minute tick
#             we cannot improve on this
#             calculation even if we wanted to.
# 
#             For the hours, back to one of our previous other hands,
#             the hand moves a set amount for
#             each hour, but also takes a submovement between the pips based on
#             dividing the interval between two hour points into 60 minutes. The
#             final sweep amount for the hand at any given time will be the sum
#             of the two partial motions. 
            
            
            
            
#
#       © 2021 colin crain
## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ##



use warnings;
use strict;
use utf8;
use feature ":5.26";
use feature qw(signatures);
no warnings 'experimental::signatures';


my $timestr = shift // qw ( 9:49);

my ($h, $m) = $timestr =~ /(\d?\d):(\d\d)/;
$h %= 12;
my $mdeg = $m * 6;
my $hdeg = $h * 30 + $m * 0.5;
my $ang = abs( $hdeg - $mdeg );
$ang = 360 - $ang if $ang > 180;

say "time: $timestr";
say "$ang degrees";