aboutsummaryrefslogtreecommitdiffstats
path: root/src/04
diff options
context:
space:
mode:
authorLouis Burda <quent.burda@gmail.com>2023-04-07 17:18:18 -0400
committerLouis Burda <quent.burda@gmail.com>2023-04-07 17:19:39 -0400
commit87ab487d59fa85dbe2afa55cc841b02805ae42ca (patch)
treecd90ab715e1b5b5803674045dbafd6d51d27ac90 /src/04
parent1bcc82c5bfbde87edd03c01ffdf9ee5934681592 (diff)
downloadaoc2018-python-87ab487d59fa85dbe2afa55cc841b02805ae42ca.tar.gz
aoc2018-python-87ab487d59fa85dbe2afa55cc841b02805ae42ca.zip
Reorder days into src
Diffstat (limited to 'src/04')
-rw-r--r--src/04/input986
-rw-r--r--src/04/part176
-rw-r--r--src/04/part220
-rw-r--r--src/04/solve.py92
4 files changed, 1174 insertions, 0 deletions
diff --git a/src/04/input b/src/04/input
new file mode 100644
index 0000000..c92ca08
--- /dev/null
+++ b/src/04/input
@@ -0,0 +1,986 @@
+[1518-08-29 00:24] falls asleep
+[1518-08-06 00:20] falls asleep
+[1518-03-12 00:21] falls asleep
+[1518-06-17 00:45] wakes up
+[1518-06-27 00:46] falls asleep
+[1518-09-07 00:36] falls asleep
+[1518-07-22 00:23] wakes up
+[1518-05-18 00:35] falls asleep
+[1518-09-27 00:40] wakes up
+[1518-04-10 23:52] Guard #3559 begins shift
+[1518-03-16 00:44] wakes up
+[1518-05-16 00:23] wakes up
+[1518-06-18 00:00] Guard #1499 begins shift
+[1518-11-21 00:48] wakes up
+[1518-05-19 00:29] falls asleep
+[1518-03-20 23:58] Guard #73 begins shift
+[1518-09-28 00:18] falls asleep
+[1518-10-21 00:00] Guard #983 begins shift
+[1518-05-19 00:57] wakes up
+[1518-10-08 00:47] wakes up
+[1518-05-04 00:19] falls asleep
+[1518-07-30 00:30] falls asleep
+[1518-05-04 00:22] wakes up
+[1518-10-01 00:20] wakes up
+[1518-03-24 23:47] Guard #2411 begins shift
+[1518-06-19 00:00] Guard #1499 begins shift
+[1518-09-15 00:38] falls asleep
+[1518-07-26 00:50] falls asleep
+[1518-06-13 00:00] Guard #3499 begins shift
+[1518-08-30 00:03] Guard #983 begins shift
+[1518-04-18 00:44] wakes up
+[1518-07-09 00:53] falls asleep
+[1518-06-09 00:02] falls asleep
+[1518-10-09 23:56] Guard #3559 begins shift
+[1518-04-15 23:46] Guard #313 begins shift
+[1518-10-06 00:03] Guard #3499 begins shift
+[1518-10-27 23:59] Guard #2617 begins shift
+[1518-10-21 00:33] wakes up
+[1518-03-23 00:47] falls asleep
+[1518-07-21 00:31] wakes up
+[1518-06-05 00:21] falls asleep
+[1518-03-11 00:54] wakes up
+[1518-05-06 00:11] wakes up
+[1518-04-09 00:39] wakes up
+[1518-06-10 00:00] Guard #919 begins shift
+[1518-11-10 00:57] falls asleep
+[1518-09-27 00:27] falls asleep
+[1518-07-29 00:53] falls asleep
+[1518-07-26 00:38] falls asleep
+[1518-08-05 00:01] falls asleep
+[1518-06-07 00:59] wakes up
+[1518-11-22 00:39] falls asleep
+[1518-11-17 00:58] wakes up
+[1518-11-04 00:22] falls asleep
+[1518-09-10 00:34] wakes up
+[1518-04-11 00:25] wakes up
+[1518-04-14 23:58] Guard #3203 begins shift
+[1518-06-22 00:22] falls asleep
+[1518-04-07 00:48] falls asleep
+[1518-11-15 00:57] wakes up
+[1518-05-24 23:56] Guard #983 begins shift
+[1518-07-29 00:59] wakes up
+[1518-11-15 00:05] falls asleep
+[1518-11-22 00:02] Guard #3499 begins shift
+[1518-11-01 00:46] wakes up
+[1518-08-31 00:01] Guard #2411 begins shift
+[1518-06-30 00:39] falls asleep
+[1518-04-29 00:24] wakes up
+[1518-04-12 23:54] Guard #2099 begins shift
+[1518-05-04 00:48] falls asleep
+[1518-09-25 00:49] falls asleep
+[1518-09-21 00:28] falls asleep
+[1518-04-25 00:44] falls asleep
+[1518-04-13 00:43] falls asleep
+[1518-08-24 00:16] falls asleep
+[1518-07-02 00:43] wakes up
+[1518-04-26 00:00] Guard #241 begins shift
+[1518-06-26 00:29] falls asleep
+[1518-04-17 00:47] wakes up
+[1518-11-23 00:28] falls asleep
+[1518-10-04 00:53] wakes up
+[1518-11-20 00:46] falls asleep
+[1518-06-28 00:37] wakes up
+[1518-09-12 00:21] falls asleep
+[1518-04-20 23:54] Guard #73 begins shift
+[1518-03-21 23:57] Guard #1811 begins shift
+[1518-07-04 00:48] wakes up
+[1518-09-25 00:34] wakes up
+[1518-04-13 00:35] wakes up
+[1518-08-29 00:02] Guard #2657 begins shift
+[1518-03-30 00:03] Guard #1811 begins shift
+[1518-11-16 00:22] falls asleep
+[1518-08-16 00:29] falls asleep
+[1518-08-07 00:27] falls asleep
+[1518-03-26 23:57] Guard #1091 begins shift
+[1518-09-13 00:21] falls asleep
+[1518-11-12 00:42] wakes up
+[1518-05-14 00:01] Guard #1291 begins shift
+[1518-03-21 00:39] falls asleep
+[1518-04-23 00:22] falls asleep
+[1518-09-19 00:05] falls asleep
+[1518-04-02 00:42] falls asleep
+[1518-04-27 00:39] wakes up
+[1518-03-24 00:02] Guard #1033 begins shift
+[1518-03-16 00:59] wakes up
+[1518-05-11 23:50] Guard #3109 begins shift
+[1518-04-18 00:06] falls asleep
+[1518-08-31 00:33] wakes up
+[1518-09-18 23:48] Guard #3559 begins shift
+[1518-04-21 00:30] wakes up
+[1518-10-07 00:44] wakes up
+[1518-09-30 00:57] falls asleep
+[1518-10-08 00:56] wakes up
+[1518-06-19 00:37] wakes up
+[1518-10-22 00:33] falls asleep
+[1518-10-20 00:52] falls asleep
+[1518-11-13 00:27] wakes up
+[1518-07-05 00:11] falls asleep
+[1518-08-17 00:48] wakes up
+[1518-07-25 00:45] wakes up
+[1518-05-01 23:59] Guard #3109 begins shift
+[1518-07-31 00:10] falls asleep
+[1518-05-26 00:54] falls asleep
+[1518-08-10 23:57] Guard #3203 begins shift
+[1518-06-26 00:06] falls asleep
+[1518-09-24 00:12] falls asleep
+[1518-04-11 00:01] falls asleep
+[1518-06-01 00:02] Guard #2657 begins shift
+[1518-06-30 23:49] Guard #241 begins shift
+[1518-10-29 00:49] wakes up
+[1518-06-12 00:44] wakes up
+[1518-04-16 00:01] falls asleep
+[1518-10-13 00:55] wakes up
+[1518-05-21 00:28] falls asleep
+[1518-06-21 00:17] falls asleep
+[1518-06-05 00:47] falls asleep
+[1518-05-10 00:19] falls asleep
+[1518-09-05 00:04] falls asleep
+[1518-04-23 00:12] falls asleep
+[1518-07-16 00:56] wakes up
+[1518-07-26 00:00] Guard #3499 begins shift
+[1518-08-27 00:47] falls asleep
+[1518-09-24 00:32] falls asleep
+[1518-09-15 00:03] Guard #313 begins shift
+[1518-11-21 00:04] Guard #3499 begins shift
+[1518-07-11 00:49] wakes up
+[1518-06-27 00:35] falls asleep
+[1518-07-17 00:59] wakes up
+[1518-05-13 00:10] falls asleep
+[1518-09-28 00:04] Guard #3559 begins shift
+[1518-10-03 00:00] Guard #313 begins shift
+[1518-06-15 00:27] falls asleep
+[1518-09-24 00:59] wakes up
+[1518-10-29 23:50] Guard #983 begins shift
+[1518-06-17 00:48] falls asleep
+[1518-09-24 00:01] Guard #241 begins shift
+[1518-05-28 23:56] Guard #2657 begins shift
+[1518-04-17 00:00] Guard #1291 begins shift
+[1518-05-29 00:34] wakes up
+[1518-03-16 00:48] falls asleep
+[1518-05-25 00:59] wakes up
+[1518-04-11 00:42] falls asleep
+[1518-06-02 23:59] Guard #241 begins shift
+[1518-04-13 00:00] falls asleep
+[1518-07-22 00:35] falls asleep
+[1518-09-19 23:56] Guard #3109 begins shift
+[1518-08-05 23:52] Guard #3449 begins shift
+[1518-08-25 00:18] wakes up
+[1518-07-14 23:57] Guard #2617 begins shift
+[1518-05-08 00:19] falls asleep
+[1518-10-11 00:02] Guard #2657 begins shift
+[1518-03-21 00:22] falls asleep
+[1518-06-23 00:10] falls asleep
+[1518-05-28 00:41] falls asleep
+[1518-09-01 00:02] Guard #3109 begins shift
+[1518-09-13 00:43] wakes up
+[1518-05-19 00:16] wakes up
+[1518-10-03 00:59] wakes up
+[1518-05-04 00:59] wakes up
+[1518-06-15 00:53] falls asleep
+[1518-07-16 00:09] falls asleep
+[1518-08-11 00:48] falls asleep
+[1518-08-15 00:00] Guard #823 begins shift
+[1518-07-31 00:44] wakes up
+[1518-04-28 23:51] Guard #73 begins shift
+[1518-04-21 00:46] falls asleep
+[1518-09-21 00:42] wakes up
+[1518-05-27 00:26] falls asleep
+[1518-08-23 00:04] Guard #3203 begins shift
+[1518-07-13 00:01] falls asleep
+[1518-08-14 00:01] falls asleep
+[1518-07-10 00:50] wakes up
+[1518-11-05 00:37] wakes up
+[1518-08-12 00:58] wakes up
+[1518-03-11 00:33] falls asleep
+[1518-09-20 00:32] falls asleep
+[1518-09-03 00:56] wakes up
+[1518-03-21 00:40] wakes up
+[1518-07-03 00:22] falls asleep
+[1518-08-16 23:46] Guard #313 begins shift
+[1518-10-31 00:00] Guard #919 begins shift
+[1518-08-11 00:32] wakes up
+[1518-08-25 23:58] Guard #1033 begins shift
+[1518-09-01 23:57] Guard #2617 begins shift
+[1518-06-17 00:53] wakes up
+[1518-10-18 00:42] falls asleep
+[1518-07-11 00:14] falls asleep
+[1518-03-13 00:27] falls asleep
+[1518-10-28 00:58] wakes up
+[1518-07-31 00:01] Guard #3499 begins shift
+[1518-04-22 00:49] wakes up
+[1518-10-17 00:42] wakes up
+[1518-03-14 00:02] Guard #1033 begins shift
+[1518-08-09 00:38] falls asleep
+[1518-04-26 23:58] Guard #3109 begins shift
+[1518-05-09 00:34] falls asleep
+[1518-11-09 23:57] Guard #2099 begins shift
+[1518-05-22 00:28] falls asleep
+[1518-08-08 00:28] wakes up
+[1518-11-23 00:42] wakes up
+[1518-09-16 00:19] falls asleep
+[1518-04-08 00:12] falls asleep
+[1518-10-03 00:47] wakes up
+[1518-04-10 00:22] falls asleep
+[1518-07-30 00:37] wakes up
+[1518-11-16 00:47] wakes up
+[1518-08-12 00:13] falls asleep
+[1518-08-04 00:33] falls asleep
+[1518-09-24 00:14] wakes up
+[1518-09-13 00:56] wakes up
+[1518-10-10 00:25] falls asleep
+[1518-04-14 00:01] Guard #3559 begins shift
+[1518-06-25 23:59] Guard #241 begins shift
+[1518-07-19 00:02] falls asleep
+[1518-03-15 00:01] Guard #1033 begins shift
+[1518-09-18 00:15] falls asleep
+[1518-11-09 00:35] falls asleep
+[1518-08-22 00:11] falls asleep
+[1518-10-07 23:59] Guard #2411 begins shift
+[1518-08-02 23:59] Guard #3361 begins shift
+[1518-06-26 00:53] wakes up
+[1518-04-01 00:16] falls asleep
+[1518-11-08 23:58] Guard #2617 begins shift
+[1518-09-02 00:57] wakes up
+[1518-07-06 00:46] falls asleep
+[1518-07-21 00:17] falls asleep
+[1518-05-01 00:58] wakes up
+[1518-06-21 00:23] wakes up
+[1518-07-01 00:47] wakes up
+[1518-09-07 00:41] wakes up
+[1518-05-05 00:34] wakes up
+[1518-04-02 00:01] Guard #2099 begins shift
+[1518-07-03 00:19] wakes up
+[1518-06-01 00:39] falls asleep
+[1518-04-06 00:08] falls asleep
+[1518-08-24 00:01] Guard #2657 begins shift
+[1518-07-01 23:51] Guard #3109 begins shift
+[1518-08-13 00:04] Guard #2099 begins shift
+[1518-08-09 00:34] wakes up
+[1518-05-31 00:40] wakes up
+[1518-06-26 00:45] falls asleep
+[1518-06-26 23:59] Guard #983 begins shift
+[1518-07-01 00:36] wakes up
+[1518-03-24 00:26] falls asleep
+[1518-04-19 00:55] falls asleep
+[1518-04-06 00:09] wakes up
+[1518-10-15 00:24] falls asleep
+[1518-04-30 00:47] falls asleep
+[1518-05-08 00:08] falls asleep
+[1518-09-24 00:56] falls asleep
+[1518-04-24 00:04] Guard #3361 begins shift
+[1518-07-06 00:59] wakes up
+[1518-06-24 00:28] wakes up
+[1518-08-11 00:19] falls asleep
+[1518-04-19 23:58] Guard #1291 begins shift
+[1518-03-18 00:32] wakes up
+[1518-10-23 00:04] falls asleep
+[1518-10-19 00:04] Guard #3203 begins shift
+[1518-04-05 00:31] wakes up
+[1518-03-13 00:04] Guard #3449 begins shift
+[1518-06-15 00:22] wakes up
+[1518-03-26 00:10] falls asleep
+[1518-07-07 00:34] wakes up
+[1518-04-27 00:24] falls asleep
+[1518-04-30 00:49] wakes up
+[1518-04-17 00:18] falls asleep
+[1518-09-11 00:20] falls asleep
+[1518-05-07 00:56] wakes up
+[1518-05-23 00:24] wakes up
+[1518-03-28 00:44] wakes up
+[1518-08-10 00:12] falls asleep
+[1518-06-12 00:13] falls asleep
+[1518-09-23 00:58] wakes up
+[1518-08-29 00:59] wakes up
+[1518-09-04 00:33] falls asleep
+[1518-05-29 00:09] falls asleep
+[1518-04-25 00:00] Guard #3203 begins shift
+[1518-07-30 00:55] wakes up
+[1518-10-31 23:57] Guard #983 begins shift
+[1518-11-05 00:29] falls asleep
+[1518-06-06 00:12] falls asleep
+[1518-03-18 00:29] falls asleep
+[1518-08-30 00:58] wakes up
+[1518-11-08 00:13] wakes up
+[1518-08-08 00:11] falls asleep
+[1518-07-12 23:50] Guard #2099 begins shift
+[1518-03-15 00:56] wakes up
+[1518-06-07 00:39] falls asleep
+[1518-11-02 00:29] wakes up
+[1518-06-13 00:43] wakes up
+[1518-07-21 23:47] Guard #2099 begins shift
+[1518-10-12 00:38] wakes up
+[1518-08-23 00:36] falls asleep
+[1518-08-04 23:53] Guard #1091 begins shift
+[1518-06-29 00:51] wakes up
+[1518-03-28 00:10] falls asleep
+[1518-10-20 00:23] falls asleep
+[1518-11-12 00:04] Guard #2411 begins shift
+[1518-04-17 00:59] wakes up
+[1518-10-07 00:32] falls asleep
+[1518-09-06 00:39] wakes up
+[1518-03-27 00:34] falls asleep
+[1518-05-27 00:53] wakes up
+[1518-10-05 00:15] falls asleep
+[1518-10-02 00:15] falls asleep
+[1518-07-12 00:37] wakes up
+[1518-07-16 23:57] Guard #983 begins shift
+[1518-09-03 00:20] falls asleep
+[1518-04-13 00:46] wakes up
+[1518-06-14 23:50] Guard #983 begins shift
+[1518-09-12 00:48] falls asleep
+[1518-09-11 23:57] Guard #73 begins shift
+[1518-07-26 00:51] wakes up
+[1518-09-01 00:45] falls asleep
+[1518-05-30 00:53] wakes up
+[1518-08-09 00:28] falls asleep
+[1518-10-03 00:29] falls asleep
+[1518-09-02 00:49] wakes up
+[1518-09-06 00:03] falls asleep
+[1518-03-18 23:49] Guard #3449 begins shift
+[1518-07-04 00:03] Guard #2411 begins shift
+[1518-08-01 00:21] falls asleep
+[1518-06-15 00:44] wakes up
+[1518-11-22 23:56] Guard #3499 begins shift
+[1518-06-14 00:08] falls asleep
+[1518-08-01 00:03] Guard #1291 begins shift
+[1518-05-26 00:56] wakes up
+[1518-07-17 23:47] Guard #1091 begins shift
+[1518-11-02 00:03] Guard #3559 begins shift
+[1518-04-07 00:51] wakes up
+[1518-06-03 00:56] wakes up
+[1518-10-15 00:40] wakes up
+[1518-07-29 00:40] falls asleep
+[1518-06-25 00:18] falls asleep
+[1518-08-06 00:51] falls asleep
+[1518-05-23 00:11] falls asleep
+[1518-09-10 23:59] Guard #2411 begins shift
+[1518-08-23 00:59] wakes up
+[1518-03-15 00:29] falls asleep
+[1518-06-25 00:00] Guard #3499 begins shift
+[1518-06-02 00:38] wakes up
+[1518-07-25 00:29] falls asleep
+[1518-04-19 00:49] wakes up
+[1518-04-01 00:46] wakes up
+[1518-11-10 23:49] Guard #241 begins shift
+[1518-06-06 00:24] wakes up
+[1518-07-04 00:22] falls asleep
+[1518-05-28 00:54] wakes up
+[1518-07-25 00:57] wakes up
+[1518-03-30 00:54] falls asleep
+[1518-11-10 00:58] wakes up
+[1518-06-15 00:58] wakes up
+[1518-03-25 23:58] Guard #1033 begins shift
+[1518-08-10 00:00] Guard #3109 begins shift
+[1518-11-05 23:48] Guard #73 begins shift
+[1518-10-25 00:08] falls asleep
+[1518-08-25 00:35] falls asleep
+[1518-04-25 00:52] wakes up
+[1518-04-05 23:57] Guard #2617 begins shift
+[1518-09-20 00:55] falls asleep
+[1518-08-11 00:52] wakes up
+[1518-05-09 00:49] wakes up
+[1518-08-02 00:38] wakes up
+[1518-07-07 23:57] Guard #983 begins shift
+[1518-09-29 00:42] wakes up
+[1518-05-31 00:50] falls asleep
+[1518-08-04 00:57] falls asleep
+[1518-08-20 00:42] wakes up
+[1518-10-28 00:57] falls asleep
+[1518-11-20 00:54] wakes up
+[1518-10-08 00:13] falls asleep
+[1518-09-30 00:58] wakes up
+[1518-07-18 23:53] Guard #3499 begins shift
+[1518-03-15 23:50] Guard #1811 begins shift
+[1518-07-23 00:33] falls asleep
+[1518-08-26 00:35] wakes up
+[1518-11-07 00:17] falls asleep
+[1518-07-20 00:30] wakes up
+[1518-10-13 23:52] Guard #2657 begins shift
+[1518-05-21 00:31] wakes up
+[1518-11-01 00:21] falls asleep
+[1518-10-24 00:26] falls asleep
+[1518-04-28 00:02] Guard #1811 begins shift
+[1518-08-02 00:18] falls asleep
+[1518-10-26 00:09] falls asleep
+[1518-06-26 00:21] wakes up
+[1518-11-17 00:48] falls asleep
+[1518-08-28 00:45] falls asleep
+[1518-09-08 00:26] wakes up
+[1518-09-30 00:00] Guard #3499 begins shift
+[1518-09-25 00:00] Guard #1091 begins shift
+[1518-09-17 00:03] Guard #313 begins shift
+[1518-05-11 00:10] falls asleep
+[1518-11-18 00:32] wakes up
+[1518-06-08 00:48] wakes up
+[1518-08-06 00:00] falls asleep
+[1518-09-23 00:06] falls asleep
+[1518-05-25 00:29] falls asleep
+[1518-08-31 00:22] falls asleep
+[1518-07-11 00:55] falls asleep
+[1518-11-10 00:50] falls asleep
+[1518-04-28 00:33] falls asleep
+[1518-11-13 00:05] falls asleep
+[1518-07-25 00:49] falls asleep
+[1518-04-07 00:14] falls asleep
+[1518-09-05 23:50] Guard #3559 begins shift
+[1518-03-31 23:58] Guard #3203 begins shift
+[1518-07-24 00:03] Guard #823 begins shift
+[1518-06-07 00:34] wakes up
+[1518-05-15 00:19] falls asleep
+[1518-04-09 00:05] falls asleep
+[1518-07-30 00:06] falls asleep
+[1518-10-17 00:01] Guard #3203 begins shift
+[1518-06-19 00:45] falls asleep
+[1518-05-16 00:20] falls asleep
+[1518-08-22 00:33] wakes up
+[1518-06-08 00:14] falls asleep
+[1518-11-10 00:35] wakes up
+[1518-08-19 00:50] wakes up
+[1518-03-28 00:03] Guard #241 begins shift
+[1518-07-23 00:04] Guard #2617 begins shift
+[1518-06-13 00:26] falls asleep
+[1518-05-08 23:56] Guard #2099 begins shift
+[1518-03-22 23:50] Guard #3361 begins shift
+[1518-08-21 23:58] Guard #313 begins shift
+[1518-05-18 00:40] wakes up
+[1518-04-29 00:01] falls asleep
+[1518-08-08 00:54] wakes up
+[1518-11-01 00:53] falls asleep
+[1518-10-06 00:36] falls asleep
+[1518-03-19 00:19] wakes up
+[1518-05-28 00:11] falls asleep
+[1518-04-03 00:04] Guard #313 begins shift
+[1518-11-02 23:59] Guard #73 begins shift
+[1518-03-24 00:42] wakes up
+[1518-05-31 00:33] falls asleep
+[1518-05-17 00:23] wakes up
+[1518-08-08 00:41] falls asleep
+[1518-09-22 00:08] falls asleep
+[1518-11-01 00:31] wakes up
+[1518-11-06 00:22] wakes up
+[1518-04-08 23:51] Guard #3559 begins shift
+[1518-11-11 00:39] wakes up
+[1518-08-01 23:56] Guard #1033 begins shift
+[1518-05-05 23:58] Guard #3499 begins shift
+[1518-10-11 23:58] Guard #2099 begins shift
+[1518-06-08 00:54] wakes up
+[1518-05-23 00:21] falls asleep
+[1518-04-04 00:22] falls asleep
+[1518-05-26 00:02] Guard #919 begins shift
+[1518-04-14 00:51] wakes up
+[1518-07-20 00:13] falls asleep
+[1518-07-07 00:02] Guard #2099 begins shift
+[1518-10-18 00:15] falls asleep
+[1518-09-09 23:58] Guard #241 begins shift
+[1518-07-31 00:41] falls asleep
+[1518-05-26 00:46] wakes up
+[1518-11-09 00:39] wakes up
+[1518-09-02 00:27] falls asleep
+[1518-10-31 00:49] falls asleep
+[1518-06-30 00:56] falls asleep
+[1518-08-07 00:55] wakes up
+[1518-06-06 23:59] Guard #3499 begins shift
+[1518-03-24 00:58] wakes up
+[1518-06-11 00:02] Guard #919 begins shift
+[1518-06-11 00:14] falls asleep
+[1518-07-17 00:41] wakes up
+[1518-05-27 00:00] Guard #3499 begins shift
+[1518-11-19 00:02] Guard #3109 begins shift
+[1518-09-17 00:21] falls asleep
+[1518-11-03 00:53] falls asleep
+[1518-03-24 00:51] falls asleep
+[1518-04-30 00:02] Guard #1499 begins shift
+[1518-07-22 00:01] falls asleep
+[1518-03-25 00:00] falls asleep
+[1518-06-05 00:43] wakes up
+[1518-06-05 00:56] falls asleep
+[1518-08-24 00:35] wakes up
+[1518-06-22 00:02] Guard #2411 begins shift
+[1518-09-22 23:59] Guard #2657 begins shift
+[1518-06-14 00:48] wakes up
+[1518-07-09 00:00] Guard #3361 begins shift
+[1518-10-20 00:53] wakes up
+[1518-05-03 23:56] Guard #3559 begins shift
+[1518-10-09 00:10] falls asleep
+[1518-08-25 00:31] wakes up
+[1518-06-10 00:57] wakes up
+[1518-07-05 23:58] Guard #3361 begins shift
+[1518-04-05 00:26] falls asleep
+[1518-10-07 00:00] Guard #1811 begins shift
+[1518-05-16 00:58] wakes up
+[1518-08-25 00:11] falls asleep
+[1518-04-24 00:58] wakes up
+[1518-03-12 00:29] wakes up
+[1518-05-07 00:35] wakes up
+[1518-08-14 00:39] wakes up
+[1518-08-16 00:36] wakes up
+[1518-07-10 00:22] falls asleep
+[1518-10-31 00:09] falls asleep
+[1518-04-08 00:03] Guard #2411 begins shift
+[1518-10-01 00:05] falls asleep
+[1518-10-15 00:46] falls asleep
+[1518-09-09 00:30] wakes up
+[1518-03-14 00:50] wakes up
+[1518-08-17 00:02] falls asleep
+[1518-08-03 00:59] wakes up
+[1518-03-26 00:56] wakes up
+[1518-10-28 00:08] falls asleep
+[1518-07-23 00:52] wakes up
+[1518-05-15 00:49] wakes up
+[1518-10-21 00:15] falls asleep
+[1518-06-17 00:00] Guard #983 begins shift
+[1518-05-07 00:52] falls asleep
+[1518-08-31 00:58] wakes up
+[1518-07-04 23:59] Guard #2099 begins shift
+[1518-04-09 00:46] wakes up
+[1518-06-03 00:36] falls asleep
+[1518-05-06 00:06] falls asleep
+[1518-04-07 00:01] Guard #1291 begins shift
+[1518-06-17 00:15] falls asleep
+[1518-09-24 00:53] wakes up
+[1518-09-13 00:01] Guard #2099 begins shift
+[1518-07-14 00:04] Guard #2579 begins shift
+[1518-06-28 00:20] falls asleep
+[1518-06-27 00:58] wakes up
+[1518-05-02 00:19] falls asleep
+[1518-04-19 00:44] falls asleep
+[1518-08-09 00:45] wakes up
+[1518-04-27 00:44] wakes up
+[1518-07-15 00:53] wakes up
+[1518-10-06 00:55] wakes up
+[1518-09-08 00:25] falls asleep
+[1518-06-03 00:55] falls asleep
+[1518-05-28 00:43] wakes up
+[1518-07-11 00:04] Guard #3559 begins shift
+[1518-07-09 23:59] Guard #3499 begins shift
+[1518-09-18 00:57] wakes up
+[1518-11-14 00:01] falls asleep
+[1518-10-08 23:58] Guard #1811 begins shift
+[1518-04-12 00:50] wakes up
+[1518-04-08 00:28] wakes up
+[1518-04-10 00:59] wakes up
+[1518-10-29 00:16] falls asleep
+[1518-11-07 00:29] wakes up
+[1518-08-13 23:50] Guard #2099 begins shift
+[1518-10-10 00:49] wakes up
+[1518-06-02 00:09] falls asleep
+[1518-03-25 00:30] wakes up
+[1518-09-04 23:46] Guard #2657 begins shift
+[1518-03-30 23:58] Guard #1867 begins shift
+[1518-05-03 00:04] falls asleep
+[1518-11-19 00:50] falls asleep
+[1518-07-08 00:37] wakes up
+[1518-07-16 00:20] wakes up
+[1518-08-27 00:31] falls asleep
+[1518-04-15 00:23] wakes up
+[1518-08-05 00:27] wakes up
+[1518-07-05 00:13] wakes up
+[1518-08-06 00:42] wakes up
+[1518-05-28 00:03] Guard #3449 begins shift
+[1518-04-14 00:13] falls asleep
+[1518-10-16 00:45] falls asleep
+[1518-07-29 00:00] Guard #1811 begins shift
+[1518-05-24 00:57] wakes up
+[1518-06-01 00:48] wakes up
+[1518-09-12 00:29] wakes up
+[1518-04-06 00:15] falls asleep
+[1518-06-06 00:03] Guard #2657 begins shift
+[1518-07-28 00:41] wakes up
+[1518-09-30 00:39] falls asleep
+[1518-06-30 00:59] wakes up
+[1518-09-01 00:51] wakes up
+[1518-08-04 00:59] wakes up
+[1518-03-22 00:46] falls asleep
+[1518-05-13 00:00] Guard #1499 begins shift
+[1518-07-08 00:36] falls asleep
+[1518-04-09 00:45] falls asleep
+[1518-05-01 00:01] Guard #1499 begins shift
+[1518-09-22 00:03] Guard #3559 begins shift
+[1518-05-12 00:54] wakes up
+[1518-11-04 00:57] wakes up
+[1518-04-21 00:00] falls asleep
+[1518-11-19 23:56] Guard #2617 begins shift
+[1518-07-16 00:42] falls asleep
+[1518-04-10 00:00] Guard #1811 begins shift
+[1518-11-10 00:34] falls asleep
+[1518-08-18 00:01] Guard #241 begins shift
+[1518-08-04 00:45] wakes up
+[1518-11-21 00:36] falls asleep
+[1518-06-07 00:15] falls asleep
+[1518-10-28 00:36] wakes up
+[1518-07-15 23:57] Guard #2657 begins shift
+[1518-06-29 00:46] falls asleep
+[1518-03-17 00:54] wakes up
+[1518-08-22 00:12] wakes up
+[1518-11-20 00:26] wakes up
+[1518-10-02 00:23] wakes up
+[1518-07-26 00:43] wakes up
+[1518-04-23 00:57] wakes up
+[1518-04-22 23:57] Guard #2099 begins shift
+[1518-03-21 00:46] falls asleep
+[1518-04-04 00:30] wakes up
+[1518-04-20 00:45] wakes up
+[1518-08-31 00:47] falls asleep
+[1518-09-16 00:34] wakes up
+[1518-10-05 00:03] Guard #3499 begins shift
+[1518-04-11 23:57] Guard #3499 begins shift
+[1518-08-29 00:29] wakes up
+[1518-10-13 00:43] falls asleep
+[1518-07-12 00:29] falls asleep
+[1518-05-08 00:55] wakes up
+[1518-03-29 00:01] Guard #2579 begins shift
+[1518-10-31 00:56] wakes up
+[1518-11-17 00:49] wakes up
+[1518-06-03 23:46] Guard #313 begins shift
+[1518-05-02 00:48] wakes up
+[1518-05-17 23:58] Guard #3499 begins shift
+[1518-03-27 00:30] wakes up
+[1518-09-21 00:02] Guard #2099 begins shift
+[1518-05-22 00:30] wakes up
+[1518-10-04 00:40] wakes up
+[1518-03-23 00:49] wakes up
+[1518-08-16 00:00] Guard #3361 begins shift
+[1518-10-09 00:59] wakes up
+[1518-03-30 00:48] wakes up
+[1518-11-13 23:49] Guard #1811 begins shift
+[1518-06-28 23:59] Guard #2657 begins shift
+[1518-04-22 00:11] falls asleep
+[1518-05-17 00:15] falls asleep
+[1518-09-28 23:56] Guard #1811 begins shift
+[1518-07-15 00:59] wakes up
+[1518-09-26 23:59] Guard #3109 begins shift
+[1518-03-14 00:56] falls asleep
+[1518-08-06 00:11] wakes up
+[1518-03-23 00:28] wakes up
+[1518-11-07 23:52] Guard #3559 begins shift
+[1518-10-14 00:44] wakes up
+[1518-04-16 00:59] wakes up
+[1518-07-20 00:00] Guard #241 begins shift
+[1518-09-20 00:58] wakes up
+[1518-05-01 00:49] falls asleep
+[1518-05-15 00:03] Guard #241 begins shift
+[1518-10-24 00:29] wakes up
+[1518-10-03 23:59] Guard #2657 begins shift
+[1518-10-24 00:47] wakes up
+[1518-03-23 00:00] falls asleep
+[1518-10-11 00:41] wakes up
+[1518-08-28 00:03] Guard #983 begins shift
+[1518-10-04 00:49] falls asleep
+[1518-09-05 00:51] wakes up
+[1518-04-03 00:58] wakes up
+[1518-05-24 00:17] falls asleep
+[1518-06-16 00:56] wakes up
+[1518-06-20 23:57] Guard #3361 begins shift
+[1518-06-27 00:37] wakes up
+[1518-04-11 00:53] wakes up
+[1518-03-24 00:41] falls asleep
+[1518-04-05 00:01] Guard #2099 begins shift
+[1518-06-14 00:00] Guard #3499 begins shift
+[1518-03-27 00:44] wakes up
+[1518-11-07 00:01] Guard #73 begins shift
+[1518-09-25 00:55] wakes up
+[1518-04-24 00:34] falls asleep
+[1518-06-15 00:03] falls asleep
+[1518-08-25 00:22] falls asleep
+[1518-04-20 00:28] falls asleep
+[1518-10-30 00:05] falls asleep
+[1518-10-19 00:21] falls asleep
+[1518-10-03 00:39] falls asleep
+[1518-07-01 00:05] falls asleep
+[1518-06-30 00:52] wakes up
+[1518-04-26 00:40] wakes up
+[1518-10-20 00:04] Guard #3203 begins shift
+[1518-03-19 00:04] falls asleep
+[1518-04-07 00:40] wakes up
+[1518-05-05 00:55] wakes up
+[1518-05-22 00:04] Guard #313 begins shift
+[1518-06-08 23:47] Guard #241 begins shift
+[1518-08-17 00:28] wakes up
+[1518-06-17 00:25] wakes up
+[1518-03-12 00:35] falls asleep
+[1518-07-30 00:04] Guard #3109 begins shift
+[1518-03-14 00:57] wakes up
+[1518-07-11 00:56] wakes up
+[1518-04-21 23:56] Guard #1811 begins shift
+[1518-08-27 00:36] wakes up
+[1518-06-09 00:53] wakes up
+[1518-08-08 00:04] Guard #241 begins shift
+[1518-03-22 00:58] wakes up
+[1518-04-19 00:58] wakes up
+[1518-04-18 00:00] Guard #1091 begins shift
+[1518-09-28 00:48] wakes up
+[1518-08-01 00:52] wakes up
+[1518-03-19 00:29] falls asleep
+[1518-04-04 00:02] Guard #983 begins shift
+[1518-09-22 00:19] wakes up
+[1518-06-15 23:59] Guard #1499 begins shift
+[1518-05-10 00:29] wakes up
+[1518-06-18 00:28] falls asleep
+[1518-03-20 00:59] wakes up
+[1518-08-26 00:15] falls asleep
+[1518-10-24 00:01] Guard #3109 begins shift
+[1518-07-15 00:57] falls asleep
+[1518-06-05 00:59] wakes up
+[1518-11-02 00:14] falls asleep
+[1518-05-26 00:11] wakes up
+[1518-11-04 23:56] Guard #3499 begins shift
+[1518-10-08 00:53] falls asleep
+[1518-09-25 00:25] falls asleep
+[1518-09-25 23:56] Guard #3361 begins shift
+[1518-06-24 00:04] Guard #1033 begins shift
+[1518-05-07 00:04] Guard #1091 begins shift
+[1518-08-18 00:29] falls asleep
+[1518-09-13 00:47] falls asleep
+[1518-04-02 00:53] wakes up
+[1518-11-08 00:51] wakes up
+[1518-09-02 23:56] Guard #3203 begins shift
+[1518-08-06 00:55] wakes up
+[1518-10-01 23:58] Guard #2411 begins shift
+[1518-06-29 23:59] Guard #1811 begins shift
+[1518-05-07 00:48] wakes up
+[1518-11-12 00:37] falls asleep
+[1518-10-16 00:00] Guard #2657 begins shift
+[1518-07-07 00:29] falls asleep
+[1518-07-17 00:45] falls asleep
+[1518-11-01 00:57] wakes up
+[1518-10-26 00:02] Guard #1291 begins shift
+[1518-11-06 00:04] falls asleep
+[1518-09-29 00:22] falls asleep
+[1518-08-20 00:03] Guard #3499 begins shift
+[1518-07-03 00:47] wakes up
+[1518-05-01 00:25] wakes up
+[1518-08-10 00:49] wakes up
+[1518-03-13 00:55] wakes up
+[1518-08-13 00:59] wakes up
+[1518-06-08 00:53] falls asleep
+[1518-07-17 00:06] falls asleep
+[1518-06-25 00:41] wakes up
+[1518-10-31 00:11] wakes up
+[1518-05-05 00:32] falls asleep
+[1518-06-23 00:40] wakes up
+[1518-05-13 00:33] wakes up
+[1518-04-17 00:53] falls asleep
+[1518-05-01 00:09] falls asleep
+[1518-03-14 00:22] falls asleep
+[1518-10-27 00:01] Guard #1291 begins shift
+[1518-06-04 00:01] falls asleep
+[1518-10-16 00:50] wakes up
+[1518-07-08 00:45] falls asleep
+[1518-04-12 00:37] falls asleep
+[1518-10-18 00:38] wakes up
+[1518-09-14 00:10] falls asleep
+[1518-07-01 00:40] falls asleep
+[1518-11-08 00:20] falls asleep
+[1518-03-30 00:59] wakes up
+[1518-06-12 00:00] Guard #3499 begins shift
+[1518-08-27 00:00] Guard #1291 begins shift
+[1518-03-20 00:37] falls asleep
+[1518-09-30 00:44] wakes up
+[1518-09-20 00:43] wakes up
+[1518-10-27 00:08] falls asleep
+[1518-09-09 00:02] Guard #1091 begins shift
+[1518-08-13 00:21] falls asleep
+[1518-04-21 00:49] wakes up
+[1518-11-16 23:56] Guard #919 begins shift
+[1518-07-22 00:47] wakes up
+[1518-10-03 00:50] falls asleep
+[1518-09-26 00:50] wakes up
+[1518-06-08 00:02] Guard #1811 begins shift
+[1518-05-22 23:59] Guard #2617 begins shift
+[1518-07-31 00:34] wakes up
+[1518-10-22 23:52] Guard #313 begins shift
+[1518-08-03 00:49] falls asleep
+[1518-10-24 00:43] falls asleep
+[1518-05-08 00:01] Guard #1033 begins shift
+[1518-10-19 00:48] wakes up
+[1518-10-13 00:04] Guard #1091 begins shift
+[1518-07-18 00:18] wakes up
+[1518-10-20 00:36] wakes up
+[1518-10-04 00:33] falls asleep
+[1518-05-08 00:11] wakes up
+[1518-05-19 00:04] falls asleep
+[1518-04-06 00:55] wakes up
+[1518-08-10 00:38] wakes up
+[1518-06-10 00:34] falls asleep
+[1518-07-15 00:38] falls asleep
+[1518-08-18 00:35] wakes up
+[1518-03-27 00:18] falls asleep
+[1518-08-10 00:45] falls asleep
+[1518-07-30 00:22] wakes up
+[1518-06-22 23:59] Guard #2657 begins shift
+[1518-07-11 23:57] Guard #2617 begins shift
+[1518-10-15 00:47] wakes up
+[1518-08-25 00:02] Guard #1291 begins shift
+[1518-06-24 00:12] falls asleep
+[1518-03-16 23:57] Guard #2657 begins shift
+[1518-10-18 00:02] Guard #2657 begins shift
+[1518-05-11 00:58] wakes up
+[1518-03-30 00:37] falls asleep
+[1518-08-21 00:53] wakes up
+[1518-07-09 00:57] wakes up
+[1518-08-07 00:00] Guard #1499 begins shift
+[1518-09-02 00:56] falls asleep
+[1518-10-14 23:56] Guard #2099 begins shift
+[1518-09-19 00:48] wakes up
+[1518-05-30 00:04] Guard #1499 begins shift
+[1518-11-11 00:04] falls asleep
+[1518-03-21 00:57] wakes up
+[1518-05-20 23:57] Guard #1811 begins shift
+[1518-10-23 00:08] wakes up
+[1518-07-02 23:57] Guard #1811 begins shift
+[1518-10-28 23:58] Guard #241 begins shift
+[1518-05-12 00:05] falls asleep
+[1518-11-18 00:26] falls asleep
+[1518-03-21 00:27] wakes up
+[1518-07-29 00:50] wakes up
+[1518-10-24 23:56] Guard #2657 begins shift
+[1518-05-14 00:37] wakes up
+[1518-08-04 00:00] Guard #1033 begins shift
+[1518-06-20 00:52] wakes up
+[1518-05-10 00:00] Guard #73 begins shift
+[1518-08-19 00:02] Guard #1033 begins shift
+[1518-03-16 00:03] falls asleep
+[1518-03-12 00:03] Guard #2657 begins shift
+[1518-06-22 00:48] wakes up
+[1518-08-22 00:31] falls asleep
+[1518-05-11 00:02] Guard #1811 begins shift
+[1518-03-19 23:58] Guard #241 begins shift
+[1518-04-10 00:53] falls asleep
+[1518-10-21 23:57] Guard #919 begins shift
+[1518-06-28 00:04] Guard #2657 begins shift
+[1518-11-17 00:56] falls asleep
+[1518-07-09 00:45] wakes up
+[1518-06-11 00:44] wakes up
+[1518-04-10 00:48] wakes up
+[1518-11-01 00:37] falls asleep
+[1518-05-20 00:36] falls asleep
+[1518-05-23 23:56] Guard #1811 begins shift
+[1518-04-18 23:56] Guard #3109 begins shift
+[1518-05-31 00:02] Guard #2657 begins shift
+[1518-05-17 00:00] Guard #241 begins shift
+[1518-05-28 00:52] falls asleep
+[1518-10-30 00:07] wakes up
+[1518-08-30 00:26] falls asleep
+[1518-03-17 23:57] Guard #241 begins shift
+[1518-07-19 00:43] wakes up
+[1518-08-09 00:03] Guard #3109 begins shift
+[1518-09-11 00:41] wakes up
+[1518-07-27 23:50] Guard #2099 begins shift
+[1518-10-17 00:26] falls asleep
+[1518-05-30 00:14] falls asleep
+[1518-10-12 00:26] falls asleep
+[1518-06-16 00:44] falls asleep
+[1518-05-20 00:02] Guard #1033 begins shift
+[1518-06-16 00:24] falls asleep
+[1518-06-19 23:57] Guard #2411 begins shift
+[1518-10-27 00:53] wakes up
+[1518-06-10 00:53] falls asleep
+[1518-05-05 00:43] falls asleep
+[1518-09-04 00:03] Guard #2099 begins shift
+[1518-05-23 00:14] wakes up
+[1518-09-08 00:04] Guard #1291 begins shift
+[1518-05-03 00:52] wakes up
+[1518-07-25 00:03] Guard #1033 begins shift
+[1518-07-08 00:59] wakes up
+[1518-10-25 00:54] wakes up
+[1518-11-08 00:00] falls asleep
+[1518-06-20 00:47] falls asleep
+[1518-05-08 00:49] wakes up
+[1518-11-15 23:59] Guard #3109 begins shift
+[1518-06-18 00:55] wakes up
+[1518-03-11 00:04] Guard #1499 begins shift
+[1518-08-29 00:44] falls asleep
+[1518-05-16 00:28] falls asleep
+[1518-11-03 23:56] Guard #1291 begins shift
+[1518-04-26 00:18] falls asleep
+[1518-07-21 00:00] Guard #919 begins shift
+[1518-08-21 00:04] falls asleep
+[1518-10-14 00:05] falls asleep
+[1518-06-19 00:57] wakes up
+[1518-08-27 00:54] wakes up
+[1518-09-13 23:56] Guard #1499 begins shift
+[1518-08-20 23:48] Guard #3559 begins shift
+[1518-09-30 23:50] Guard #313 begins shift
+[1518-08-20 00:37] falls asleep
+[1518-07-18 00:03] falls asleep
+[1518-04-23 00:17] wakes up
+[1518-05-14 00:17] falls asleep
+[1518-06-20 00:27] falls asleep
+[1518-06-01 23:59] Guard #241 begins shift
+[1518-06-05 00:52] wakes up
+[1518-06-26 00:37] wakes up
+[1518-05-28 00:14] wakes up
+[1518-11-12 23:49] Guard #3449 begins shift
+[1518-11-10 00:53] wakes up
+[1518-06-05 00:00] Guard #983 begins shift
+[1518-10-26 00:45] wakes up
+[1518-11-03 00:55] wakes up
+[1518-09-10 00:31] falls asleep
+[1518-05-31 00:56] wakes up
+[1518-11-14 00:31] wakes up
+[1518-06-20 00:43] wakes up
+[1518-06-09 00:45] falls asleep
+[1518-10-18 00:48] wakes up
+[1518-07-30 00:43] falls asleep
+[1518-08-12 00:04] Guard #2657 begins shift
+[1518-09-15 00:59] wakes up
+[1518-05-07 00:16] falls asleep
+[1518-09-14 00:56] wakes up
+[1518-08-25 00:45] wakes up
+[1518-04-07 00:55] falls asleep
+[1518-07-13 00:32] wakes up
+[1518-03-24 00:28] wakes up
+[1518-11-22 00:40] wakes up
+[1518-09-12 00:59] wakes up
+[1518-03-12 00:47] wakes up
+[1518-09-17 23:59] Guard #1291 begins shift
+[1518-05-26 00:40] falls asleep
+[1518-04-07 00:57] wakes up
+[1518-03-17 00:48] falls asleep
+[1518-09-10 00:56] wakes up
+[1518-06-16 00:29] wakes up
+[1518-09-04 00:41] wakes up
+[1518-05-02 23:53] Guard #241 begins shift
+[1518-08-17 00:43] falls asleep
+[1518-09-17 00:59] wakes up
+[1518-09-07 00:01] Guard #3499 begins shift
+[1518-10-11 00:29] falls asleep
+[1518-05-18 23:53] Guard #3109 begins shift
+[1518-07-02 00:00] falls asleep
+[1518-04-03 00:06] falls asleep
+[1518-05-04 23:58] Guard #2657 begins shift
+[1518-06-03 00:48] wakes up
+[1518-06-10 00:48] wakes up
+[1518-09-09 00:06] falls asleep
+[1518-06-04 00:32] wakes up
+[1518-08-19 00:32] falls asleep
+[1518-06-17 00:31] falls asleep
+[1518-11-17 23:59] Guard #1811 begins shift
+[1518-04-27 00:43] falls asleep
+[1518-05-26 00:06] falls asleep
+[1518-07-03 00:07] falls asleep
+[1518-05-16 00:00] Guard #983 begins shift
+[1518-07-26 23:57] Guard #1867 begins shift
+[1518-10-22 00:36] wakes up
+[1518-09-10 00:39] falls asleep
+[1518-05-20 00:59] wakes up
+[1518-09-26 00:20] falls asleep
+[1518-05-07 00:38] falls asleep
+[1518-10-05 00:53] wakes up
+[1518-07-05 00:39] falls asleep
+[1518-11-20 00:09] falls asleep
+[1518-03-19 00:34] wakes up
+[1518-11-14 23:47] Guard #1291 begins shift
+[1518-06-19 00:14] falls asleep
+[1518-09-15 23:58] Guard #2617 begins shift
+[1518-08-28 00:46] wakes up
+[1518-07-28 00:04] falls asleep
+[1518-11-19 00:57] wakes up
+[1518-04-15 00:17] falls asleep
+[1518-05-08 00:52] falls asleep
+[1518-10-03 00:32] wakes up
+[1518-07-05 00:51] wakes up
+[1518-06-09 00:16] wakes up
+[1518-04-28 00:43] wakes up
+[1518-07-09 00:38] falls asleep
diff --git a/src/04/part1 b/src/04/part1
new file mode 100644
index 0000000..f304657
--- /dev/null
+++ b/src/04/part1
@@ -0,0 +1,76 @@
+--- Day 4: Repose Record ---
+
+You've sneaked into another supply closet - this time, it's across from the prototype suit
+manufacturing lab. You need to sneak inside and fix the issues with the suit, but there's a guard
+stationed outside the lab, so this is as close as you can safely get.
+
+As you search the closet for anything that might help, you discover that you're not the first person
+to want to sneak in. Covering the walls, someone has spent an hour starting every midnight for the
+past few months secretly observing this guard post! They've been writing down the ID of
+the one guard on duty that night - the Elves seem to have decided that one guard was enough for the
+overnight shift - as well as when they fall asleep or wake up while at their post (your puzzle
+input).
+
+For example, consider the following records, which have already been organized into chronological
+order:
+
+[1518-11-01 00:00] Guard #10 begins shift
+[1518-11-01 00:05] falls asleep
+[1518-11-01 00:25] wakes up
+[1518-11-01 00:30] falls asleep
+[1518-11-01 00:55] wakes up
+[1518-11-01 23:58] Guard #99 begins shift
+[1518-11-02 00:40] falls asleep
+[1518-11-02 00:50] wakes up
+[1518-11-03 00:05] Guard #10 begins shift
+[1518-11-03 00:24] falls asleep
+[1518-11-03 00:29] wakes up
+[1518-11-04 00:02] Guard #99 begins shift
+[1518-11-04 00:36] falls asleep
+[1518-11-04 00:46] wakes up
+[1518-11-05 00:03] Guard #99 begins shift
+[1518-11-05 00:45] falls asleep
+[1518-11-05 00:55] wakes up
+
+Timestamps are written using year-month-day hour:minute format. The guard falling asleep or waking
+up is always the one whose shift most recently started. Because all asleep/awake times are during
+the midnight hour (00:00 - 00:59), only the minute portion (00 - 59) is relevant for those events.
+
+Visually, these records show that the guards are asleep at these times:
+
+Date ID Minute
+ 000000000011111111112222222222333333333344444444445555555555
+ 012345678901234567890123456789012345678901234567890123456789
+11-01 #10 .....####################.....#########################.....
+11-02 #99 ........................................##########..........
+11-03 #10 ........................#####...............................
+11-04 #99 ....................................##########..............
+11-05 #99 .............................................##########.....
+
+The columns are Date, which shows the month-day portion of the relevant day; ID, which shows the
+guard on duty that day; and Minute, which shows the minutes during which the guard was asleep within
+the midnight hour. (The Minute column's header shows the minute's ten's digit in the first row and
+the one's digit in the second row.) Awake is shown as ., and asleep is shown as #.
+
+Note that guards count as asleep on the minute they fall asleep, and they count as awake on the
+minute they wake up. For example, because Guard #10 wakes up at 00:25 on 1518-11-01, minute 25 is
+marked as awake.
+
+If you can figure out the guard most likely to be asleep at a specific time, you might be able to
+trick that guard into working tonight so you can have the best chance of sneaking in. You have two
+strategies for choosing the best guard/minute combination.
+
+Strategy 1: Find the guard that has the most minutes asleep. What minute does that guard spend
+asleep the most?
+
+In the example above, Guard #10 spent the most minutes asleep, a total of 50 minutes (20+25+5),
+while Guard #99 only slept for a total of 30 minutes (10+10+10). Guard #10 was asleep most during
+minute 24 (on two days, whereas any other minute the guard was asleep was only seen on one day).
+
+While this example listed the entries in chronological order, your entries are in the order you
+found them. You'll need to organize them before they can be analyzed.
+
+What is the ID of the guard you chose multiplied by the minute you chose? (In the above example, the
+answer would be 10 * 24 = 240.)
+
+
diff --git a/src/04/part2 b/src/04/part2
new file mode 100644
index 0000000..1f6a3ed
--- /dev/null
+++ b/src/04/part2
@@ -0,0 +1,20 @@
+--- Part Two ---
+
+An Elf just remembered one more important detail: the two adjacent matching digits are not part of a
+larger group of matching digits.
+
+Given this additional criterion, but still ignoring the range rule, the following are now true:
+
+
+ - 112233 meets these criteria because the digits never decrease and all repeated digits are exactly
+two digits long.
+
+ - 123444 no longer meets the criteria (the repeated 44 is part of a larger group of 444).
+
+ - 111122 meets the criteria (even though 1 is repeated more than twice, it still contains a double
+22).
+
+
+How many different passwords within the range given in your puzzle input meet all of the criteria?
+
+
diff --git a/src/04/solve.py b/src/04/solve.py
new file mode 100644
index 0000000..0783b9b
--- /dev/null
+++ b/src/04/solve.py
@@ -0,0 +1,92 @@
+import sys
+sys.path.append("../common")
+import aoc
+
+data = aoc.data.split("\n")
+
+def parse_entry(l):
+ split = l.split(" ")
+ date = " ".join(split[:2])
+ time = int(split[1].split(":")[1].replace("]",""))
+ if split[2] == "Guard":
+ awake = None
+ id = int(split[3].replace("#",""))
+ else:
+ id = 0
+ awake = (True if split[2] == "wakes" else False)
+ return time, id, awake, date
+
+class guard:
+ def __init__(self, _id):
+ self.shifts = list()
+ self.id = _id
+ self.awake = None
+
+def gen_shiftmap():
+ shiftdata = [parse_entry(l) for l in data]
+ shiftdata = sorted(shiftdata, key=lambda x: x[3]) # sort by date
+
+ shiftmap = dict()
+ ltime = shiftdata[0][0]
+ cgid = shiftdata[0][1]
+ for i in range(len(shiftdata)):
+ entry = shiftdata[i]
+ ctime = entry[0]
+ gid = entry[1]
+ cawake = entry[2]
+
+ if gid != 0:
+ if gid not in shiftmap:
+ shiftmap[gid] = guard(gid)
+ cgid = gid
+ else:
+ g = shiftmap[cgid]
+ if cawake:
+ if not g.awake:
+ shiftmap[cgid].shifts.append((ltime, ctime - ltime))
+ else:
+ ltime = ctime
+ g.awake = cawake
+
+ return shiftmap
+
+def solve1(args):
+ shiftmap = gen_shiftmap()
+
+ maxsleep = None
+ mg = None
+ for g in shiftmap.values():
+ minslept = 0
+ for t in g.shifts:
+ minslept += t[1]
+ if not maxsleep or minslept > maxsleep:
+ maxsleep = minslept
+ mg = g
+
+
+ timel = [0 for x in range(60)]
+
+ for t in mg.shifts:
+ for i in range(t[0], t[0] + t[1]):
+ timel[(i-1)%60] += 1
+
+ minute = timel.index(max(timel))+1
+
+ return minute * mg.id
+
+def solve2(args):
+ shiftmap = gen_shiftmap()
+ timetables = dict()
+
+ for g in shiftmap.values():
+ timetables[g.id] = [0 for x in range(60)]
+ for t in g.shifts:
+ for i in range(t[0], t[0] + t[1]):
+ timetables[g.id][i] += 1
+
+ mgid, mmin = max(((gid, i) for gid in timetables for i in range(60)),
+ key = lambda x: timetables[x[0]][x[1]])
+
+ return mgid * mmin
+
+aoc.run(solve1, solve2, sols=[87681, 136461])