aboutsummaryrefslogtreecommitdiff
path: root/challenge-206/spadacciniweb/python/ch-1.py
blob: ca0893c5cc34ebe223436505b47685548d285ce4 (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
# Task 1: Shortest Time
# Submitted by: Mohammad S Anwar
# 
# You are given a list of time points, at least 2, in the 24-hour clock format HH:MM.
# Write a script to find out the shortest time in minutes between any two time points.
#
# Example 1
# Input: @time = ("00:00", "23:55", "20:00")
# Output: 5
# 
# Since the difference between "00:00" and "23:55" is the shortest (5 minutes).
# 
# Example 2
# Input: @array = ("01:01", "00:50", "00:57")
# Output: 4
# 
# Example 3
# Input: @array = ("10:10", "09:30", "09:00", "09:55")
# Output: 15

import re
import sys
from itertools import combinations

def get_minutes(t):
    return 60 * int(t[0:2]) + int(t[3:5])

def get_diff_minutes(m1, m2):
    res = abs(m1-m2)

    if (res >= 720):        # 12h * 60 = minutes
        return 1440 - res   # 24h * 60 = minutes
    return res

if __name__ == "__main__":
    input = sys.argv[1:]
    if (len(input) < 2
        or
        len(list(filter(lambda x: re.search(r'\d\d:\d\d', x), input))) != len(input)
        or
        len(list(filter(lambda x: x > '24:00', input))) != 0 ):
        sys.exit("Input error")

    minutes = [get_minutes(x) for x in input]
    comb = combinations(range(len(input)), 2)
    h_minutes = {
        'val': None,
        'pair': None
    }

    for pair in list(comb):
        diff_minutes = get_diff_minutes(minutes[pair[0]], minutes[pair[1]])
        if h_minutes['val'] == None or h_minutes['val'] > diff_minutes:
            h_minutes['val'] = diff_minutes
            h_minutes['pair'] = pair
    
    print(h_minutes['val'])
    print("Since the difference between \"{:s}\" and \"{:s}\" is the shortest ({:d} minutes).".format(input[ h_minutes['pair'][0] ], input[ h_minutes['pair'][1] ], h_minutes['val'] ))