Thanks to visit codestin.com
Credit goes to github.com

Skip to content

Commit e7691af

Browse files
committed
Adding day 4
1 parent 93a730f commit e7691af

File tree

5 files changed

+1196
-0
lines changed

5 files changed

+1196
-0
lines changed

python3/day_4/__init__.py

Whitespace-only changes.

python3/day_4/day_4_part_1.py

Lines changed: 41 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,41 @@
1+
from collections import defaultdict
2+
from operator import itemgetter
3+
4+
def get_answer(input_text: str) -> int:
5+
sorted_input = sorted(input_text.splitlines())
6+
current_guard_id = 0
7+
guard_asleep_total = defaultdict(int)
8+
guard_minute_sleep = {}
9+
sleeping_minute = 0
10+
for log in sorted_input:
11+
parts = log.split()
12+
minute = int(parts[1][3:-1])
13+
if parts[2] == 'Guard':
14+
current_guard_id = int(parts[3][1:])
15+
elif parts[2] == 'falls':
16+
sleeping_minute = minute
17+
elif parts[2] == 'wakes':
18+
sleeping_time = minute - sleeping_minute
19+
guard_asleep_total[current_guard_id] += sleeping_time
20+
if current_guard_id not in guard_minute_sleep:
21+
guard_minute_sleep[current_guard_id] = defaultdict(int)
22+
for x in range(sleeping_time):
23+
guard_minute_sleep[current_guard_id][sleeping_minute + x] += 1
24+
print(guard_asleep_total)
25+
print(guard_minute_sleep)
26+
27+
sorted_guard_asleep_total = sorted(guard_asleep_total.items(), key=itemgetter(1), reverse=True)
28+
most_sleepy_guard = sorted_guard_asleep_total[0][0]
29+
sorted_guard_minute_sleep = sorted(guard_minute_sleep[most_sleepy_guard].items(), key=itemgetter(1), reverse=True)
30+
max_minute = sorted_guard_minute_sleep[0][0]
31+
return most_sleepy_guard * max_minute
32+
33+
34+
def main():
35+
with open('input.txt') as input_file:
36+
input_text = input_file.read().rstrip('\n')
37+
print(get_answer(input_text))
38+
39+
40+
if __name__ == '__main__':
41+
main()

python3/day_4/day_4_part_2.py

Lines changed: 41 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,41 @@
1+
from collections import defaultdict
2+
from operator import itemgetter
3+
4+
def get_answer(input_text: str) -> int:
5+
sorted_input = sorted(input_text.splitlines())
6+
current_guard_id = 0
7+
guard_asleep_total = defaultdict(int)
8+
guard_minute_sleep = {}
9+
guard_max_minutes = defaultdict(int)
10+
sleeping_minute = 0
11+
for log in sorted_input:
12+
parts = log.split()
13+
minute = int(parts[1][3:-1])
14+
if parts[2] == 'Guard':
15+
current_guard_id = int(parts[3][1:])
16+
elif parts[2] == 'falls':
17+
sleeping_minute = minute
18+
elif parts[2] == 'wakes':
19+
sleeping_time = minute - sleeping_minute
20+
guard_asleep_total[current_guard_id] += sleeping_time
21+
if current_guard_id not in guard_minute_sleep:
22+
guard_minute_sleep[current_guard_id] = defaultdict(int)
23+
for x in range(sleeping_time):
24+
guard_minute_sleep[current_guard_id][sleeping_minute + x] += 1
25+
guard_max_minutes[current_guard_id] = max(guard_max_minutes[current_guard_id], guard_minute_sleep[current_guard_id][sleeping_minute + x])
26+
27+
sorted_guard_asleep_max_minutes = sorted(guard_max_minutes.items(), key=itemgetter(1), reverse=True)
28+
most_sleepy_guard = sorted_guard_asleep_max_minutes[0][0]
29+
sorted_guard_minute_sleep = sorted(guard_minute_sleep[most_sleepy_guard].items(), key=itemgetter(1), reverse=True)
30+
max_minute = sorted_guard_minute_sleep[0][0]
31+
return most_sleepy_guard * max_minute
32+
33+
34+
def main():
35+
with open('input.txt') as input_file:
36+
input_text = input_file.read().rstrip('\n')
37+
print(get_answer(input_text))
38+
39+
40+
if __name__ == '__main__':
41+
main()

0 commit comments

Comments
 (0)