aboutsummaryrefslogtreecommitdiff
path: root/challenge-039/steven-wilson/perl5/ch-1.pl
blob: 829f877a4436a8ba4b6de2332f81890b5989b599 (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
#!/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";