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
|
#!/usr/bin/env perl
# Author: Steven Wilson
# Date: 2019-12-16
# Week: 039
# TASK #1
# A guest house had a policy that the light remain ON as long as the at
# least one guest is in the house. There is guest book which tracks all
# guest in/out time. Write a script to find out how long in minutes the
# light were ON.
# Guest Book
# 1) Alex IN: 09:10 OUT: 09:45
# 2) Arnold IN: 09:15 OUT: 09:33
# 3) Bob IN: 09:22 OUT: 09:55
# 4) Charlie IN: 09:25 OUT: 10:05
# 5) Steve IN: 09:33 OUT: 10:01
# 6) Roger IN: 09:44 OUT: 10:12
# 7) David IN: 09:57 OUT: 10:23
# 8) Neil IN: 10:01 OUT: 10:19
# 9) Chris IN: 10:10 OUT: 11:00
# Answer: Lights were on for 111 minutes
use strict;
use warnings;
use feature qw/ say /;
my %guestbook = (
"Alex" => [ "09:10", "09:45" ],
"Arnold" => [ "09:15", "09:33" ],
"Bob" => [ "09:22", "09:55" ],
"Charlie" => [ "09:25", "10:05" ],
"Steve" => [ "09:33", "10:01" ],
"Roger" => [ "09:44", "10:12" ],
"David" => [ "09:57", "10:23" ],
"Neil" => [ "10:01", "10:19" ],
"Chris" => [ "10:10", "11:00" ],
);
my %light;
for my $guest ( keys %guestbook ) {
my ( $s_hour, $s_minute ) = split ":", $guestbook{$guest}[0];
my ( $f_hour, $f_minute ) = split ":", $guestbook{$guest}[1];
while (
sprintf( "%.2d:%.2d", $s_hour, $s_minute ) ne
sprintf( "%.2d:%.2d", $f_hour, $f_minute ) )
{
$light{sprintf( "%.2d:%.2d", $s_hour, $s_minute )} = 1;
if ( $s_minute == 59 ) {
$s_minute = 0;
$s_hour++;
}
else {
$s_minute++;
}
}
$light{sprintf( "%.2d:%.2d", $f_hour, $f_minute )} = 1;
}
say "Lights were on for ", scalar keys %light, " minutes";
|