1
+ file_object = open ("input_day_4.txt" , "r" )
2
+ entries = file_object .readlines ()
3
+ file_object .close ()
4
+
5
+ #We need to put the entries in time order
6
+ entries_list = []
7
+ for entry in entries :
8
+ entries_list .append (entry )
9
+ entries_list .sort ()
10
+
11
+ current_guard_id = 0
12
+ time_fell_asleep = 0
13
+ guard_sleep_amounts = {}
14
+ current_sleepiest_guard = 0
15
+ current_longest_time_slept = 0
16
+ for entry in entries_list :
17
+ split_entry = entry .strip ().replace ('[' , "" ).split (']' )
18
+ #Case for "Guard #1871 begins shift"
19
+ if split_entry [1 ][1 ] == "G" :
20
+ current_guard_id = split_entry [1 ].split ()[1 ][1 :]
21
+ #Case for falls asleep
22
+ elif split_entry [1 ].strip () == "falls asleep" :
23
+ time_fell_asleep = int (split_entry [0 ][- 2 :])
24
+ #Case for wakes up
25
+ else :
26
+ time_slept = (int (split_entry [0 ][- 2 :]) - time_fell_asleep )
27
+ if current_guard_id in guard_sleep_amounts .keys ():
28
+ guard_sleep_amounts [current_guard_id ] += time_slept
29
+ else :
30
+ guard_sleep_amounts [current_guard_id ] = time_slept
31
+ #If adding this interval makes this guard the sleepiest so far, update
32
+ if guard_sleep_amounts [current_guard_id ] > current_longest_time_slept :
33
+ current_longest_time_slept = guard_sleep_amounts [current_guard_id ]
34
+ current_sleepiest_guard = current_guard_id
35
+
36
+ sleepiest_guard = current_sleepiest_guard
37
+ print ("sleepiest guard" , current_sleepiest_guard )
38
+
39
+ #Find the minute this guard slept the most
40
+ times_guard_slept_during_this_minute = [0 ] * 60
41
+
42
+ current_guard_id = 0
43
+ time_fell_asleep = 0
44
+ for entry in entries_list :
45
+ split_entry = entry .strip ().replace ('[' , "" ).split (']' )
46
+ #Case for "Guard #1871 begins shift"
47
+ if split_entry [1 ][1 ] == "G" :
48
+ current_guard_id = split_entry [1 ].split ()[1 ][1 :]
49
+ #Case for falls asleep
50
+ elif split_entry [1 ].strip () == "falls asleep" :
51
+ time_fell_asleep = int (split_entry [0 ][- 2 :])
52
+ #Case for wakes up
53
+ else :
54
+ if current_guard_id == sleepiest_guard :
55
+ for i in range (time_fell_asleep , int (split_entry [0 ][- 2 :])):
56
+ times_guard_slept_during_this_minute [i ] += 1
57
+
58
+ sleepiest_minute = times_guard_slept_during_this_minute .index (max (times_guard_slept_during_this_minute ))
59
+ print ("sleepiest minute" , sleepiest_minute )
60
+ print ("answer" , int (sleepiest_guard ) * sleepiest_minute )
0 commit comments