My attempts to solve puzzles of Advent of Code
0
fork

Configure Feed

Select the types of activity you want to include in your feed.

Day 4

+1254 -26
+2 -1
.ghci
··· 1 1 :set -isrc 2 - :l src/AoC.hs 3 2 :set -Wall 4 3 :set -fno-warn-unused-binds 5 4 :set -fno-warn-unused-do-bind 6 5 :set -fno-warn-unused-imports 7 6 :set -fno-warn-type-defaults 8 7 :set -XOverloadedStrings 8 + :set -XNoImplicitPrelude 9 + :l src/AoC.hs
+3
AoC.cabal
··· 16 16 build-depends: base <5 && >=3 17 17 , papa >= 0.3.0 18 18 , text >= 1.2.0 19 + , time >= 1.9.2 19 20 , containers >= 0.6 20 21 , megaparsec >= 7.0.0 21 22 , parser-combinators >= 1.0.0 ··· 23 24 hs-source-dirs: src 24 25 25 26 exposed-modules: AoC 27 + AoC.Util.Parser 26 28 AoC.Y2018.Day1 27 29 AoC.Y2018.Day2 28 30 AoC.Y2018.Day3 31 + AoC.Y2018.Day4
+2 -2
AoC.nix
··· 1 1 { mkDerivation, base, containers, megaparsec, papa 2 - , parser-combinators, stdenv, text 2 + , parser-combinators, stdenv, text, time 3 3 }: 4 4 mkDerivation { 5 5 pname = "AoC"; 6 6 version = "0.1.0.0"; 7 7 src = ./.; 8 8 libraryHaskellDepends = [ 9 - base containers megaparsec papa parser-combinators text 9 + base containers megaparsec papa parser-combinators text time 10 10 ]; 11 11 license = stdenv.lib.licenses.bsd3; 12 12 }
+1045
data/input-d4-p1
··· 1 + [1518-10-03 00:47] falls asleep 2 + [1518-07-26 23:50] Guard #487 begins shift 3 + [1518-06-22 00:48] wakes up 4 + [1518-08-21 00:30] falls asleep 5 + [1518-11-21 00:55] wakes up 6 + [1518-05-30 00:06] falls asleep 7 + [1518-04-09 00:44] wakes up 8 + [1518-07-22 00:58] wakes up 9 + [1518-06-15 00:57] wakes up 10 + [1518-09-13 00:31] wakes up 11 + [1518-11-03 00:48] falls asleep 12 + [1518-03-09 00:02] Guard #1123 begins shift 13 + [1518-05-01 00:51] falls asleep 14 + [1518-06-21 00:19] falls asleep 15 + [1518-06-18 00:48] wakes up 16 + [1518-05-24 23:59] Guard #2971 begins shift 17 + [1518-09-27 00:45] falls asleep 18 + [1518-06-06 00:44] wakes up 19 + [1518-05-11 23:58] Guard #641 begins shift 20 + [1518-04-21 00:01] Guard #1889 begins shift 21 + [1518-08-30 00:27] falls asleep 22 + [1518-06-27 00:45] falls asleep 23 + [1518-06-15 00:00] Guard #1993 begins shift 24 + [1518-10-04 00:00] Guard #659 begins shift 25 + [1518-10-31 00:01] Guard #1993 begins shift 26 + [1518-04-19 00:04] Guard #2917 begins shift 27 + [1518-05-19 00:59] wakes up 28 + [1518-09-02 00:27] wakes up 29 + [1518-08-12 23:58] Guard #2833 begins shift 30 + [1518-09-28 00:24] wakes up 31 + [1518-08-10 00:56] wakes up 32 + [1518-03-07 00:57] wakes up 33 + [1518-07-31 00:35] falls asleep 34 + [1518-04-21 00:27] falls asleep 35 + [1518-06-26 23:51] Guard #1471 begins shift 36 + [1518-09-01 00:20] falls asleep 37 + [1518-09-05 00:28] falls asleep 38 + [1518-06-26 00:55] falls asleep 39 + [1518-06-11 00:52] wakes up 40 + [1518-03-15 00:57] wakes up 41 + [1518-09-18 00:27] falls asleep 42 + [1518-04-13 00:57] wakes up 43 + [1518-06-28 00:48] wakes up 44 + [1518-03-18 00:51] wakes up 45 + [1518-04-27 00:37] falls asleep 46 + [1518-04-24 00:35] falls asleep 47 + [1518-08-10 00:46] wakes up 48 + [1518-07-14 23:57] Guard #2161 begins shift 49 + [1518-11-14 00:47] wakes up 50 + [1518-08-27 00:13] falls asleep 51 + [1518-11-12 00:45] wakes up 52 + [1518-03-26 00:23] falls asleep 53 + [1518-04-21 00:31] wakes up 54 + [1518-11-09 23:58] Guard #373 begins shift 55 + [1518-05-05 00:50] wakes up 56 + [1518-03-15 00:56] falls asleep 57 + [1518-06-07 00:46] wakes up 58 + [1518-04-21 00:42] wakes up 59 + [1518-08-19 00:46] wakes up 60 + [1518-03-06 00:57] falls asleep 61 + [1518-06-30 00:38] wakes up 62 + [1518-08-26 00:37] falls asleep 63 + [1518-11-17 23:57] Guard #1489 begins shift 64 + [1518-06-11 00:00] Guard #487 begins shift 65 + [1518-09-26 00:59] wakes up 66 + [1518-03-25 00:35] falls asleep 67 + [1518-04-26 23:58] Guard #941 begins shift 68 + [1518-08-27 00:38] falls asleep 69 + [1518-05-18 00:53] wakes up 70 + [1518-06-20 00:28] wakes up 71 + [1518-05-05 00:45] falls asleep 72 + [1518-07-24 00:03] Guard #1811 begins shift 73 + [1518-04-12 00:30] wakes up 74 + [1518-08-02 00:48] wakes up 75 + [1518-07-11 00:31] falls asleep 76 + [1518-06-20 00:17] falls asleep 77 + [1518-04-11 00:32] falls asleep 78 + [1518-03-31 23:57] Guard #349 begins shift 79 + [1518-11-22 00:59] wakes up 80 + [1518-10-28 23:57] Guard #659 begins shift 81 + [1518-11-07 00:34] wakes up 82 + [1518-10-27 00:35] wakes up 83 + [1518-07-31 00:20] falls asleep 84 + [1518-10-11 00:14] falls asleep 85 + [1518-08-19 00:33] falls asleep 86 + [1518-03-05 00:04] Guard #2161 begins shift 87 + [1518-04-21 00:35] falls asleep 88 + [1518-10-13 00:42] falls asleep 89 + [1518-08-08 00:44] wakes up 90 + [1518-09-19 00:47] wakes up 91 + [1518-07-07 00:01] Guard #2441 begins shift 92 + [1518-03-24 00:39] wakes up 93 + [1518-10-20 23:59] Guard #349 begins shift 94 + [1518-10-07 00:52] falls asleep 95 + [1518-08-02 00:54] falls asleep 96 + [1518-09-30 00:22] falls asleep 97 + [1518-08-26 00:42] wakes up 98 + [1518-04-26 00:04] falls asleep 99 + [1518-09-28 00:14] falls asleep 100 + [1518-10-23 00:34] falls asleep 101 + [1518-08-16 00:29] falls asleep 102 + [1518-04-15 00:39] falls asleep 103 + [1518-08-29 00:37] falls asleep 104 + [1518-08-14 00:33] falls asleep 105 + [1518-08-15 00:46] wakes up 106 + [1518-03-07 00:36] wakes up 107 + [1518-10-27 00:48] falls asleep 108 + [1518-05-17 00:06] falls asleep 109 + [1518-04-13 00:03] falls asleep 110 + [1518-10-22 00:43] wakes up 111 + [1518-05-15 00:02] falls asleep 112 + [1518-09-29 00:36] falls asleep 113 + [1518-03-17 00:01] Guard #1889 begins shift 114 + [1518-04-07 00:14] falls asleep 115 + [1518-05-13 00:58] wakes up 116 + [1518-11-17 00:49] falls asleep 117 + [1518-03-28 00:43] falls asleep 118 + [1518-04-15 00:02] Guard #659 begins shift 119 + [1518-09-14 00:04] Guard #2179 begins shift 120 + [1518-08-15 23:58] Guard #2179 begins shift 121 + [1518-05-02 00:04] Guard #2917 begins shift 122 + [1518-10-07 00:48] falls asleep 123 + [1518-07-12 00:49] falls asleep 124 + [1518-07-07 00:19] falls asleep 125 + [1518-04-08 00:31] wakes up 126 + [1518-04-01 00:47] wakes up 127 + [1518-06-09 00:31] falls asleep 128 + [1518-10-24 23:57] Guard #2833 begins shift 129 + [1518-08-25 00:51] falls asleep 130 + [1518-09-19 23:56] Guard #941 begins shift 131 + [1518-03-06 23:59] Guard #2833 begins shift 132 + [1518-04-03 00:13] falls asleep 133 + [1518-06-04 00:01] Guard #3533 begins shift 134 + [1518-10-17 00:40] wakes up 135 + [1518-03-06 00:58] wakes up 136 + [1518-08-31 00:30] wakes up 137 + [1518-07-06 00:39] wakes up 138 + [1518-05-26 00:45] wakes up 139 + [1518-11-08 23:57] Guard #487 begins shift 140 + [1518-06-15 00:15] falls asleep 141 + [1518-09-12 00:28] falls asleep 142 + [1518-08-01 00:09] falls asleep 143 + [1518-03-10 00:49] wakes up 144 + [1518-06-24 00:54] wakes up 145 + [1518-06-06 00:21] wakes up 146 + [1518-10-18 00:34] wakes up 147 + [1518-03-27 00:01] Guard #1489 begins shift 148 + [1518-05-07 00:51] wakes up 149 + [1518-10-14 00:46] wakes up 150 + [1518-05-20 00:27] wakes up 151 + [1518-03-21 00:03] falls asleep 152 + [1518-04-17 00:53] falls asleep 153 + [1518-09-30 00:59] wakes up 154 + [1518-07-23 00:55] wakes up 155 + [1518-03-22 23:58] Guard #349 begins shift 156 + [1518-09-22 00:32] falls asleep 157 + [1518-05-14 23:54] Guard #1489 begins shift 158 + [1518-04-03 00:44] falls asleep 159 + [1518-04-18 00:20] falls asleep 160 + [1518-09-22 00:59] wakes up 161 + [1518-05-18 00:35] falls asleep 162 + [1518-06-18 23:59] Guard #2441 begins shift 163 + [1518-07-13 00:54] wakes up 164 + [1518-09-21 00:35] wakes up 165 + [1518-04-07 00:38] falls asleep 166 + [1518-11-03 00:59] wakes up 167 + [1518-05-02 00:21] falls asleep 168 + [1518-07-02 23:59] Guard #2161 begins shift 169 + [1518-03-20 00:34] falls asleep 170 + [1518-04-07 00:32] wakes up 171 + [1518-03-07 00:33] falls asleep 172 + [1518-05-13 00:56] falls asleep 173 + [1518-08-20 00:27] falls asleep 174 + [1518-06-12 00:33] falls asleep 175 + [1518-04-27 00:23] wakes up 176 + [1518-10-05 23:54] Guard #2833 begins shift 177 + [1518-07-22 00:02] Guard #2161 begins shift 178 + [1518-03-29 00:49] wakes up 179 + [1518-11-19 00:04] Guard #2161 begins shift 180 + [1518-04-29 00:56] wakes up 181 + [1518-06-18 00:14] falls asleep 182 + [1518-11-21 00:00] Guard #2161 begins shift 183 + [1518-05-16 00:09] falls asleep 184 + [1518-09-16 00:00] Guard #1993 begins shift 185 + [1518-10-14 00:09] falls asleep 186 + [1518-04-14 00:32] falls asleep 187 + [1518-04-30 00:11] falls asleep 188 + [1518-10-15 00:13] falls asleep 189 + [1518-11-12 00:03] falls asleep 190 + [1518-08-01 00:51] falls asleep 191 + [1518-05-08 00:58] wakes up 192 + [1518-08-20 00:39] wakes up 193 + [1518-11-07 00:56] wakes up 194 + [1518-10-02 23:57] Guard #1471 begins shift 195 + [1518-10-06 00:27] wakes up 196 + [1518-06-08 00:04] Guard #349 begins shift 197 + [1518-07-20 23:52] Guard #1993 begins shift 198 + [1518-09-04 23:56] Guard #2467 begins shift 199 + [1518-08-05 23:56] Guard #2441 begins shift 200 + [1518-08-30 00:48] wakes up 201 + [1518-06-08 00:39] falls asleep 202 + [1518-03-27 00:55] falls asleep 203 + [1518-03-11 23:56] Guard #659 begins shift 204 + [1518-08-29 23:50] Guard #2179 begins shift 205 + [1518-09-17 00:54] wakes up 206 + [1518-09-06 00:34] falls asleep 207 + [1518-03-25 00:56] wakes up 208 + [1518-06-05 23:48] Guard #1993 begins shift 209 + [1518-10-10 00:56] wakes up 210 + [1518-03-09 00:37] wakes up 211 + [1518-03-06 00:51] wakes up 212 + [1518-11-04 00:22] falls asleep 213 + [1518-09-02 00:11] falls asleep 214 + [1518-05-22 00:59] wakes up 215 + [1518-03-18 00:49] falls asleep 216 + [1518-05-06 00:41] falls asleep 217 + [1518-04-26 00:52] wakes up 218 + [1518-06-28 00:54] falls asleep 219 + [1518-08-17 00:57] wakes up 220 + [1518-08-22 23:49] Guard #1889 begins shift 221 + [1518-07-14 00:52] wakes up 222 + [1518-09-09 23:57] Guard #1993 begins shift 223 + [1518-08-24 00:55] wakes up 224 + [1518-07-13 00:18] wakes up 225 + [1518-09-26 00:29] falls asleep 226 + [1518-03-05 00:57] wakes up 227 + [1518-03-05 00:22] falls asleep 228 + [1518-08-17 00:48] wakes up 229 + [1518-08-03 00:25] wakes up 230 + [1518-08-29 00:34] wakes up 231 + [1518-05-28 00:04] falls asleep 232 + [1518-08-26 23:59] Guard #373 begins shift 233 + [1518-07-16 00:43] wakes up 234 + [1518-07-08 00:07] falls asleep 235 + [1518-10-12 23:58] Guard #3259 begins shift 236 + [1518-06-05 00:45] wakes up 237 + [1518-03-13 00:43] wakes up 238 + [1518-08-05 00:21] falls asleep 239 + [1518-10-03 00:56] wakes up 240 + [1518-07-15 23:56] Guard #1489 begins shift 241 + [1518-11-11 00:00] Guard #659 begins shift 242 + [1518-06-23 00:05] falls asleep 243 + [1518-03-28 00:57] wakes up 244 + [1518-04-14 00:00] Guard #1489 begins shift 245 + [1518-06-11 23:57] Guard #2467 begins shift 246 + [1518-04-28 00:32] wakes up 247 + [1518-07-17 00:35] wakes up 248 + [1518-10-14 00:37] falls asleep 249 + [1518-09-07 00:37] wakes up 250 + [1518-08-15 00:02] Guard #349 begins shift 251 + [1518-07-07 00:41] wakes up 252 + [1518-04-13 00:35] falls asleep 253 + [1518-09-18 00:04] Guard #349 begins shift 254 + [1518-09-04 00:56] wakes up 255 + [1518-08-16 23:59] Guard #1489 begins shift 256 + [1518-07-09 23:56] Guard #373 begins shift 257 + [1518-04-01 00:46] falls asleep 258 + [1518-11-06 00:46] wakes up 259 + [1518-10-23 23:58] Guard #1993 begins shift 260 + [1518-09-06 00:59] wakes up 261 + [1518-06-17 00:16] falls asleep 262 + [1518-06-21 23:50] Guard #2971 begins shift 263 + [1518-10-13 00:24] falls asleep 264 + [1518-06-25 00:25] falls asleep 265 + [1518-11-13 00:16] falls asleep 266 + [1518-09-29 00:55] wakes up 267 + [1518-05-23 00:43] wakes up 268 + [1518-05-13 00:38] wakes up 269 + [1518-11-16 00:33] falls asleep 270 + [1518-09-09 00:55] wakes up 271 + [1518-09-30 00:04] falls asleep 272 + [1518-03-30 00:44] falls asleep 273 + [1518-06-16 00:21] falls asleep 274 + [1518-10-06 23:56] Guard #2917 begins shift 275 + [1518-03-13 00:02] Guard #2833 begins shift 276 + [1518-09-10 23:53] Guard #1889 begins shift 277 + [1518-09-05 00:53] wakes up 278 + [1518-09-09 00:33] falls asleep 279 + [1518-10-02 00:40] wakes up 280 + [1518-11-06 00:52] wakes up 281 + [1518-11-02 00:55] wakes up 282 + [1518-07-29 00:44] wakes up 283 + [1518-10-24 00:29] falls asleep 284 + [1518-05-04 23:57] Guard #2179 begins shift 285 + [1518-05-29 00:33] falls asleep 286 + [1518-09-11 00:02] falls asleep 287 + [1518-11-11 00:12] falls asleep 288 + [1518-09-01 23:57] Guard #2917 begins shift 289 + [1518-07-29 00:01] Guard #1471 begins shift 290 + [1518-07-15 00:14] falls asleep 291 + [1518-03-27 00:35] wakes up 292 + [1518-03-24 00:04] Guard #2467 begins shift 293 + [1518-04-19 00:29] falls asleep 294 + [1518-10-29 00:21] wakes up 295 + [1518-04-19 00:32] wakes up 296 + [1518-06-19 00:44] wakes up 297 + [1518-09-27 00:57] wakes up 298 + [1518-11-08 00:17] wakes up 299 + [1518-07-06 00:11] falls asleep 300 + [1518-07-04 00:01] falls asleep 301 + [1518-04-23 23:57] Guard #3259 begins shift 302 + [1518-09-18 00:57] wakes up 303 + [1518-08-03 00:52] falls asleep 304 + [1518-11-01 00:04] Guard #2441 begins shift 305 + [1518-08-07 23:47] Guard #659 begins shift 306 + [1518-05-12 00:08] falls asleep 307 + [1518-11-16 00:03] falls asleep 308 + [1518-05-17 00:54] falls asleep 309 + [1518-08-12 00:23] falls asleep 310 + [1518-07-02 00:16] falls asleep 311 + [1518-04-09 00:10] falls asleep 312 + [1518-07-19 00:22] falls asleep 313 + [1518-08-23 00:45] wakes up 314 + [1518-05-10 00:00] Guard #2467 begins shift 315 + [1518-10-11 23:56] Guard #2179 begins shift 316 + [1518-05-07 23:57] Guard #2833 begins shift 317 + [1518-08-30 00:10] wakes up 318 + [1518-06-11 00:47] falls asleep 319 + [1518-08-10 00:55] falls asleep 320 + [1518-03-23 00:49] wakes up 321 + [1518-03-22 00:58] wakes up 322 + [1518-10-07 00:49] wakes up 323 + [1518-04-22 00:00] Guard #2467 begins shift 324 + [1518-08-23 00:37] falls asleep 325 + [1518-04-10 00:03] falls asleep 326 + [1518-10-07 00:57] wakes up 327 + [1518-05-04 00:53] wakes up 328 + [1518-03-12 00:28] wakes up 329 + [1518-03-23 00:38] wakes up 330 + [1518-08-04 00:04] Guard #487 begins shift 331 + [1518-08-19 23:58] Guard #1993 begins shift 332 + [1518-11-07 00:47] wakes up 333 + [1518-05-18 00:25] wakes up 334 + [1518-09-04 00:31] falls asleep 335 + [1518-07-01 00:22] wakes up 336 + [1518-05-22 23:47] Guard #1471 begins shift 337 + [1518-09-13 00:35] falls asleep 338 + [1518-06-08 00:13] falls asleep 339 + [1518-09-03 00:51] wakes up 340 + [1518-04-22 00:21] falls asleep 341 + [1518-05-10 00:22] falls asleep 342 + [1518-08-02 00:14] wakes up 343 + [1518-06-01 00:57] wakes up 344 + [1518-11-16 00:59] wakes up 345 + [1518-11-08 00:07] falls asleep 346 + [1518-06-30 00:19] falls asleep 347 + [1518-11-20 00:46] falls asleep 348 + [1518-05-20 00:53] wakes up 349 + [1518-06-29 00:38] wakes up 350 + [1518-03-13 00:27] falls asleep 351 + [1518-09-04 00:00] Guard #641 begins shift 352 + [1518-07-05 23:59] Guard #2441 begins shift 353 + [1518-04-20 00:35] wakes up 354 + [1518-09-03 00:03] Guard #349 begins shift 355 + [1518-08-16 00:36] wakes up 356 + [1518-10-29 00:54] wakes up 357 + [1518-10-05 00:04] Guard #641 begins shift 358 + [1518-08-21 00:46] wakes up 359 + [1518-07-19 23:59] Guard #2179 begins shift 360 + [1518-05-01 00:45] wakes up 361 + [1518-07-23 00:00] Guard #3259 begins shift 362 + [1518-11-15 00:58] wakes up 363 + [1518-11-15 00:49] falls asleep 364 + [1518-07-04 00:43] wakes up 365 + [1518-04-28 00:15] falls asleep 366 + [1518-06-28 00:28] falls asleep 367 + [1518-08-04 00:44] wakes up 368 + [1518-07-04 00:34] wakes up 369 + [1518-10-13 00:55] wakes up 370 + [1518-10-22 00:46] falls asleep 371 + [1518-10-04 00:15] falls asleep 372 + [1518-09-19 00:28] falls asleep 373 + [1518-06-01 00:02] Guard #641 begins shift 374 + [1518-11-16 00:54] falls asleep 375 + [1518-05-01 00:32] falls asleep 376 + [1518-06-13 00:20] falls asleep 377 + [1518-05-29 00:41] wakes up 378 + [1518-05-06 00:56] wakes up 379 + [1518-03-21 23:58] Guard #1123 begins shift 380 + [1518-04-11 00:00] Guard #2971 begins shift 381 + [1518-05-21 00:01] Guard #2833 begins shift 382 + [1518-09-12 00:04] Guard #2441 begins shift 383 + [1518-06-11 00:28] falls asleep 384 + [1518-05-21 00:59] wakes up 385 + [1518-07-14 00:03] falls asleep 386 + [1518-04-13 00:06] wakes up 387 + [1518-08-25 00:53] wakes up 388 + [1518-05-10 00:54] wakes up 389 + [1518-03-04 00:00] Guard #659 begins shift 390 + [1518-05-27 00:34] wakes up 391 + [1518-04-12 23:51] Guard #1123 begins shift 392 + [1518-04-16 00:55] wakes up 393 + [1518-05-26 00:25] falls asleep 394 + [1518-10-02 00:13] wakes up 395 + [1518-04-23 00:37] wakes up 396 + [1518-07-14 00:19] wakes up 397 + [1518-03-30 00:27] falls asleep 398 + [1518-03-20 23:52] Guard #641 begins shift 399 + [1518-07-25 00:58] wakes up 400 + [1518-06-01 00:52] wakes up 401 + [1518-03-22 00:49] falls asleep 402 + [1518-08-31 00:04] falls asleep 403 + [1518-08-23 00:29] wakes up 404 + [1518-05-24 00:49] falls asleep 405 + [1518-07-04 00:53] falls asleep 406 + [1518-04-06 23:58] Guard #3259 begins shift 407 + [1518-07-09 00:55] wakes up 408 + [1518-10-19 00:01] Guard #2971 begins shift 409 + [1518-06-19 00:27] wakes up 410 + [1518-06-10 00:33] falls asleep 411 + [1518-08-03 00:14] falls asleep 412 + [1518-10-21 00:20] falls asleep 413 + [1518-06-27 00:00] falls asleep 414 + [1518-06-26 00:03] Guard #349 begins shift 415 + [1518-11-15 00:01] Guard #659 begins shift 416 + [1518-08-11 00:00] Guard #3533 begins shift 417 + [1518-08-19 00:03] falls asleep 418 + [1518-07-20 00:52] wakes up 419 + [1518-06-16 00:47] falls asleep 420 + [1518-07-08 00:12] wakes up 421 + [1518-07-29 00:13] falls asleep 422 + [1518-08-17 00:31] falls asleep 423 + [1518-08-30 00:00] falls asleep 424 + [1518-10-16 00:23] falls asleep 425 + [1518-04-22 23:58] Guard #2179 begins shift 426 + [1518-08-18 00:24] wakes up 427 + [1518-08-07 00:56] wakes up 428 + [1518-08-18 00:20] falls asleep 429 + [1518-11-02 00:04] Guard #2161 begins shift 430 + [1518-03-19 00:21] falls asleep 431 + [1518-05-22 00:23] falls asleep 432 + [1518-07-28 00:03] Guard #1811 begins shift 433 + [1518-05-02 23:59] Guard #659 begins shift 434 + [1518-03-28 00:51] wakes up 435 + [1518-03-08 00:48] falls asleep 436 + [1518-04-27 00:19] falls asleep 437 + [1518-10-31 00:31] falls asleep 438 + [1518-11-22 00:15] falls asleep 439 + [1518-09-23 00:00] Guard #1993 begins shift 440 + [1518-10-01 00:00] Guard #659 begins shift 441 + [1518-06-05 00:44] falls asleep 442 + [1518-04-11 00:49] falls asleep 443 + [1518-08-01 00:55] wakes up 444 + [1518-08-29 00:02] falls asleep 445 + [1518-04-18 00:55] wakes up 446 + [1518-09-08 00:10] falls asleep 447 + [1518-08-24 00:32] falls asleep 448 + [1518-06-25 00:51] wakes up 449 + [1518-05-31 00:03] falls asleep 450 + [1518-09-07 00:04] Guard #1123 begins shift 451 + [1518-05-16 00:04] Guard #2161 begins shift 452 + [1518-10-12 00:24] wakes up 453 + [1518-08-12 00:10] falls asleep 454 + [1518-10-09 00:10] falls asleep 455 + [1518-10-17 00:02] falls asleep 456 + [1518-09-25 00:37] falls asleep 457 + [1518-09-14 00:07] falls asleep 458 + [1518-06-03 00:45] wakes up 459 + [1518-10-11 00:47] wakes up 460 + [1518-09-21 00:40] falls asleep 461 + [1518-03-04 00:39] falls asleep 462 + [1518-03-25 00:36] wakes up 463 + [1518-10-05 00:45] wakes up 464 + [1518-03-04 00:47] wakes up 465 + [1518-09-08 23:56] Guard #2833 begins shift 466 + [1518-03-16 00:02] Guard #2273 begins shift 467 + [1518-04-11 00:40] wakes up 468 + [1518-10-26 00:55] wakes up 469 + [1518-06-19 00:13] falls asleep 470 + [1518-10-23 00:10] wakes up 471 + [1518-08-27 00:27] wakes up 472 + [1518-07-03 00:55] falls asleep 473 + [1518-09-06 00:31] wakes up 474 + [1518-05-17 00:43] wakes up 475 + [1518-04-24 00:56] falls asleep 476 + [1518-05-24 00:32] wakes up 477 + [1518-10-20 00:28] falls asleep 478 + [1518-03-25 00:53] falls asleep 479 + [1518-06-06 00:01] falls asleep 480 + [1518-05-03 00:34] falls asleep 481 + [1518-10-20 00:55] falls asleep 482 + [1518-09-21 23:59] Guard #641 begins shift 483 + [1518-07-11 00:32] wakes up 484 + [1518-07-27 00:40] falls asleep 485 + [1518-09-24 00:03] Guard #3533 begins shift 486 + [1518-10-14 23:56] Guard #373 begins shift 487 + [1518-10-20 00:56] wakes up 488 + [1518-08-01 23:57] Guard #2441 begins shift 489 + [1518-10-17 00:49] wakes up 490 + [1518-10-14 00:02] Guard #2833 begins shift 491 + [1518-09-26 00:00] Guard #349 begins shift 492 + [1518-06-16 00:54] wakes up 493 + [1518-08-21 23:56] Guard #2273 begins shift 494 + [1518-07-17 00:01] falls asleep 495 + [1518-08-24 00:45] wakes up 496 + [1518-03-22 00:52] wakes up 497 + [1518-09-20 00:47] falls asleep 498 + [1518-07-30 00:59] wakes up 499 + [1518-10-19 00:52] wakes up 500 + [1518-05-22 00:57] falls asleep 501 + [1518-05-25 00:25] falls asleep 502 + [1518-06-29 00:09] falls asleep 503 + [1518-03-29 00:21] falls asleep 504 + [1518-07-27 00:33] wakes up 505 + [1518-05-16 00:40] falls asleep 506 + [1518-04-10 00:59] wakes up 507 + [1518-05-08 23:47] Guard #349 begins shift 508 + [1518-04-10 00:50] falls asleep 509 + [1518-04-12 00:16] falls asleep 510 + [1518-07-25 00:51] wakes up 511 + [1518-03-15 00:53] wakes up 512 + [1518-06-09 23:57] Guard #2971 begins shift 513 + [1518-09-23 00:06] falls asleep 514 + [1518-10-30 00:07] falls asleep 515 + [1518-03-17 00:47] wakes up 516 + [1518-07-13 00:31] falls asleep 517 + [1518-11-08 00:50] wakes up 518 + [1518-11-06 00:40] falls asleep 519 + [1518-10-15 00:48] wakes up 520 + [1518-03-20 00:03] Guard #1811 begins shift 521 + [1518-05-23 00:01] falls asleep 522 + [1518-05-11 00:31] falls asleep 523 + [1518-10-21 23:59] Guard #2833 begins shift 524 + [1518-08-09 00:15] falls asleep 525 + [1518-08-28 00:03] falls asleep 526 + [1518-09-16 00:48] wakes up 527 + [1518-07-26 00:31] wakes up 528 + [1518-05-31 00:32] falls asleep 529 + [1518-09-04 00:45] wakes up 530 + [1518-07-26 00:14] falls asleep 531 + [1518-11-19 00:13] wakes up 532 + [1518-09-30 00:50] wakes up 533 + [1518-08-19 00:06] wakes up 534 + [1518-06-06 00:28] falls asleep 535 + [1518-05-22 00:52] wakes up 536 + [1518-04-02 00:53] wakes up 537 + [1518-06-11 00:29] wakes up 538 + [1518-07-14 00:23] falls asleep 539 + [1518-05-23 00:48] wakes up 540 + [1518-06-24 00:03] Guard #2179 begins shift 541 + [1518-06-27 00:50] wakes up 542 + [1518-08-17 00:41] falls asleep 543 + [1518-06-21 00:23] wakes up 544 + [1518-07-23 00:27] falls asleep 545 + [1518-09-08 00:00] Guard #1471 begins shift 546 + [1518-06-10 00:41] wakes up 547 + [1518-08-30 23:50] Guard #659 begins shift 548 + [1518-06-17 00:01] Guard #2441 begins shift 549 + [1518-09-29 00:03] Guard #2971 begins shift 550 + [1518-04-13 00:16] falls asleep 551 + [1518-06-07 00:07] falls asleep 552 + [1518-04-25 00:43] falls asleep 553 + [1518-11-09 00:57] wakes up 554 + [1518-07-27 00:02] falls asleep 555 + [1518-04-20 00:58] wakes up 556 + [1518-11-07 00:44] falls asleep 557 + [1518-05-31 00:16] wakes up 558 + [1518-04-22 00:41] falls asleep 559 + [1518-06-14 00:00] Guard #1471 begins shift 560 + [1518-09-21 00:26] falls asleep 561 + [1518-09-06 00:26] falls asleep 562 + [1518-07-28 00:13] falls asleep 563 + [1518-05-10 00:57] falls asleep 564 + [1518-11-06 00:24] falls asleep 565 + [1518-05-20 00:31] falls asleep 566 + [1518-10-27 00:20] falls asleep 567 + [1518-03-31 00:42] wakes up 568 + [1518-05-09 00:44] wakes up 569 + [1518-03-27 00:30] falls asleep 570 + [1518-05-12 23:56] Guard #1489 begins shift 571 + [1518-03-10 00:00] Guard #1471 begins shift 572 + [1518-10-14 00:18] wakes up 573 + [1518-08-14 00:53] wakes up 574 + [1518-10-26 00:04] Guard #2833 begins shift 575 + [1518-11-08 00:23] falls asleep 576 + [1518-04-16 23:59] Guard #1471 begins shift 577 + [1518-03-25 00:08] falls asleep 578 + [1518-09-28 00:31] falls asleep 579 + [1518-08-27 00:49] falls asleep 580 + [1518-09-21 00:52] falls asleep 581 + [1518-10-10 00:46] falls asleep 582 + [1518-10-17 00:14] wakes up 583 + [1518-10-12 00:14] falls asleep 584 + [1518-08-10 00:20] falls asleep 585 + [1518-06-13 00:01] Guard #2917 begins shift 586 + [1518-11-23 00:19] falls asleep 587 + [1518-05-23 00:03] wakes up 588 + [1518-11-16 00:36] wakes up 589 + [1518-04-24 00:58] wakes up 590 + [1518-06-17 00:43] wakes up 591 + [1518-04-22 00:48] wakes up 592 + [1518-11-04 00:51] wakes up 593 + [1518-06-09 00:03] falls asleep 594 + [1518-08-13 00:38] falls asleep 595 + [1518-05-23 00:29] falls asleep 596 + [1518-07-03 23:48] Guard #2441 begins shift 597 + [1518-07-27 00:52] wakes up 598 + [1518-04-04 00:27] falls asleep 599 + [1518-07-31 00:29] wakes up 600 + [1518-06-02 00:39] wakes up 601 + [1518-10-19 23:58] Guard #1993 begins shift 602 + [1518-04-15 00:40] wakes up 603 + [1518-06-26 00:56] wakes up 604 + [1518-04-19 00:50] falls asleep 605 + [1518-09-08 00:50] wakes up 606 + [1518-11-10 00:22] falls asleep 607 + [1518-05-09 00:05] falls asleep 608 + [1518-05-19 00:03] Guard #2917 begins shift 609 + [1518-08-02 23:57] Guard #2161 begins shift 610 + [1518-09-30 00:17] wakes up 611 + [1518-10-06 00:02] falls asleep 612 + [1518-08-06 00:11] falls asleep 613 + [1518-07-10 00:48] wakes up 614 + [1518-04-17 23:56] Guard #641 begins shift 615 + [1518-10-22 00:07] falls asleep 616 + [1518-04-09 23:51] Guard #659 begins shift 617 + [1518-06-01 00:51] falls asleep 618 + [1518-06-02 00:44] falls asleep 619 + [1518-07-09 00:32] falls asleep 620 + [1518-08-02 00:58] wakes up 621 + [1518-04-27 23:58] Guard #1489 begins shift 622 + [1518-07-08 00:00] Guard #2917 begins shift 623 + [1518-06-29 00:01] Guard #1489 begins shift 624 + [1518-05-31 00:52] wakes up 625 + [1518-05-30 00:38] wakes up 626 + [1518-05-03 00:53] wakes up 627 + [1518-08-27 23:52] Guard #2467 begins shift 628 + [1518-03-19 00:49] falls asleep 629 + [1518-09-16 23:50] Guard #941 begins shift 630 + [1518-06-23 00:22] falls asleep 631 + [1518-07-23 00:47] wakes up 632 + [1518-11-21 00:51] falls asleep 633 + [1518-11-11 23:47] Guard #659 begins shift 634 + [1518-09-20 00:56] wakes up 635 + [1518-07-15 00:40] wakes up 636 + [1518-05-21 23:59] Guard #2467 begins shift 637 + [1518-10-08 23:58] Guard #2917 begins shift 638 + [1518-03-24 00:19] falls asleep 639 + [1518-04-10 00:55] falls asleep 640 + [1518-10-17 00:43] falls asleep 641 + [1518-03-21 00:49] wakes up 642 + [1518-11-23 00:31] wakes up 643 + [1518-03-26 00:58] wakes up 644 + [1518-06-08 00:34] wakes up 645 + [1518-04-14 00:53] wakes up 646 + [1518-03-17 00:43] falls asleep 647 + [1518-03-28 00:55] falls asleep 648 + [1518-03-19 00:50] wakes up 649 + [1518-08-17 00:52] falls asleep 650 + [1518-05-02 00:46] wakes up 651 + [1518-05-23 23:58] Guard #1993 begins shift 652 + [1518-04-15 00:45] falls asleep 653 + [1518-07-18 23:57] Guard #2441 begins shift 654 + [1518-08-04 00:51] wakes up 655 + [1518-09-20 23:56] Guard #1993 begins shift 656 + [1518-09-05 23:56] Guard #1811 begins shift 657 + [1518-06-05 00:01] Guard #2467 begins shift 658 + [1518-11-23 00:02] Guard #349 begins shift 659 + [1518-07-16 23:47] Guard #1123 begins shift 660 + [1518-05-29 23:57] Guard #1489 begins shift 661 + [1518-08-04 00:39] falls asleep 662 + [1518-03-22 00:57] falls asleep 663 + [1518-09-19 00:58] wakes up 664 + [1518-05-08 00:19] falls asleep 665 + [1518-11-03 00:57] falls asleep 666 + [1518-04-12 00:02] Guard #2917 begins shift 667 + [1518-03-25 00:01] Guard #3259 begins shift 668 + [1518-06-17 23:59] Guard #1993 begins shift 669 + [1518-08-08 00:38] wakes up 670 + [1518-04-15 00:57] wakes up 671 + [1518-04-20 00:02] Guard #1471 begins shift 672 + [1518-10-27 23:56] Guard #2161 begins shift 673 + [1518-03-15 00:01] falls asleep 674 + [1518-09-28 00:00] Guard #659 begins shift 675 + [1518-06-26 00:51] wakes up 676 + [1518-10-01 00:57] wakes up 677 + [1518-09-17 00:04] falls asleep 678 + [1518-04-20 00:41] falls asleep 679 + [1518-11-05 23:56] Guard #487 begins shift 680 + [1518-05-11 00:28] wakes up 681 + [1518-08-13 00:45] wakes up 682 + [1518-09-21 00:53] wakes up 683 + [1518-04-01 00:42] wakes up 684 + [1518-03-09 00:29] falls asleep 685 + [1518-09-19 00:57] falls asleep 686 + [1518-07-17 00:59] wakes up 687 + [1518-03-18 00:03] Guard #3259 begins shift 688 + [1518-07-25 23:57] Guard #1993 begins shift 689 + [1518-08-08 00:59] wakes up 690 + [1518-03-31 00:04] Guard #3259 begins shift 691 + [1518-11-02 00:14] falls asleep 692 + [1518-08-17 00:36] wakes up 693 + [1518-05-26 23:51] Guard #373 begins shift 694 + [1518-06-07 00:01] Guard #1489 begins shift 695 + [1518-05-16 00:44] wakes up 696 + [1518-10-01 00:10] falls asleep 697 + [1518-03-10 00:22] falls asleep 698 + [1518-11-17 00:32] falls asleep 699 + [1518-11-08 00:02] Guard #2971 begins shift 700 + [1518-09-12 00:38] wakes up 701 + [1518-09-10 00:43] falls asleep 702 + [1518-04-03 00:59] wakes up 703 + [1518-08-06 23:50] Guard #1489 begins shift 704 + [1518-07-01 00:02] falls asleep 705 + [1518-11-21 23:56] Guard #2917 begins shift 706 + [1518-03-18 00:56] falls asleep 707 + [1518-08-12 00:12] wakes up 708 + [1518-08-17 23:59] Guard #2179 begins shift 709 + [1518-04-04 00:51] wakes up 710 + [1518-10-23 00:59] wakes up 711 + [1518-11-07 00:25] falls asleep 712 + [1518-04-08 00:10] falls asleep 713 + [1518-05-27 23:47] Guard #3259 begins shift 714 + [1518-07-13 23:47] Guard #487 begins shift 715 + [1518-07-20 00:32] falls asleep 716 + [1518-04-25 23:47] Guard #1489 begins shift 717 + [1518-04-11 00:54] wakes up 718 + [1518-06-20 00:00] Guard #2441 begins shift 719 + [1518-11-07 00:51] falls asleep 720 + [1518-08-09 00:47] wakes up 721 + [1518-04-27 00:57] falls asleep 722 + [1518-08-24 00:50] falls asleep 723 + [1518-06-22 00:01] falls asleep 724 + [1518-11-10 00:41] wakes up 725 + [1518-07-17 23:57] Guard #3259 begins shift 726 + [1518-08-31 23:59] Guard #2917 begins shift 727 + [1518-07-15 00:43] falls asleep 728 + [1518-07-05 00:23] falls asleep 729 + [1518-07-13 00:09] falls asleep 730 + [1518-10-03 00:13] wakes up 731 + [1518-05-21 00:57] falls asleep 732 + [1518-10-10 23:58] Guard #2441 begins shift 733 + [1518-10-22 00:52] wakes up 734 + [1518-03-29 00:01] Guard #2917 begins shift 735 + [1518-10-18 00:29] falls asleep 736 + [1518-10-21 00:26] wakes up 737 + [1518-03-27 23:47] Guard #1471 begins shift 738 + [1518-08-25 00:31] falls asleep 739 + [1518-08-15 00:36] falls asleep 740 + [1518-11-05 00:35] wakes up 741 + [1518-06-30 00:01] Guard #373 begins shift 742 + [1518-08-03 00:56] wakes up 743 + [1518-08-25 00:48] wakes up 744 + [1518-10-17 00:36] falls asleep 745 + [1518-10-27 00:04] Guard #349 begins shift 746 + [1518-05-19 00:25] falls asleep 747 + [1518-09-13 00:39] wakes up 748 + [1518-03-25 00:12] wakes up 749 + [1518-04-24 23:56] Guard #1811 begins shift 750 + [1518-06-22 23:50] Guard #487 begins shift 751 + [1518-04-16 00:03] Guard #2161 begins shift 752 + [1518-04-05 00:41] wakes up 753 + [1518-06-03 00:26] falls asleep 754 + [1518-04-20 00:12] falls asleep 755 + [1518-06-14 00:56] wakes up 756 + [1518-05-15 00:13] wakes up 757 + [1518-06-08 00:51] wakes up 758 + [1518-04-18 00:28] wakes up 759 + [1518-03-11 00:51] wakes up 760 + [1518-10-28 00:53] wakes up 761 + [1518-09-01 00:59] wakes up 762 + [1518-05-07 00:00] Guard #641 begins shift 763 + [1518-10-20 00:39] wakes up 764 + [1518-03-24 00:55] wakes up 765 + [1518-04-02 00:33] falls asleep 766 + [1518-11-15 00:18] falls asleep 767 + [1518-08-27 00:52] wakes up 768 + [1518-06-19 00:40] falls asleep 769 + [1518-10-05 00:50] falls asleep 770 + [1518-10-15 23:56] Guard #1489 begins shift 771 + [1518-07-10 00:23] falls asleep 772 + [1518-04-06 00:04] Guard #1381 begins shift 773 + [1518-08-07 00:00] falls asleep 774 + [1518-07-12 00:53] wakes up 775 + [1518-11-15 00:38] wakes up 776 + [1518-07-13 00:00] Guard #1123 begins shift 777 + [1518-04-30 00:13] wakes up 778 + [1518-07-04 00:38] falls asleep 779 + [1518-05-24 00:53] wakes up 780 + [1518-05-10 23:56] Guard #1489 begins shift 781 + [1518-10-24 00:31] wakes up 782 + [1518-09-11 00:58] wakes up 783 + [1518-10-01 23:57] Guard #1489 begins shift 784 + [1518-08-21 00:01] falls asleep 785 + [1518-07-30 00:21] falls asleep 786 + [1518-05-24 00:19] falls asleep 787 + [1518-09-30 00:57] falls asleep 788 + [1518-03-10 23:59] Guard #2161 begins shift 789 + [1518-05-20 00:26] falls asleep 790 + [1518-03-12 00:14] falls asleep 791 + [1518-11-09 00:16] falls asleep 792 + [1518-05-27 00:02] falls asleep 793 + [1518-05-14 00:01] falls asleep 794 + [1518-05-13 00:33] falls asleep 795 + [1518-04-01 00:21] falls asleep 796 + [1518-04-10 00:39] wakes up 797 + [1518-08-04 00:50] falls asleep 798 + [1518-04-22 00:38] wakes up 799 + [1518-07-25 00:56] falls asleep 800 + [1518-07-08 23:58] Guard #349 begins shift 801 + [1518-07-05 00:49] wakes up 802 + [1518-03-08 00:56] wakes up 803 + [1518-08-04 23:56] Guard #1471 begins shift 804 + [1518-08-29 00:58] wakes up 805 + [1518-10-04 00:44] wakes up 806 + [1518-07-01 00:42] wakes up 807 + [1518-05-12 00:52] wakes up 808 + [1518-07-25 00:40] falls asleep 809 + [1518-09-25 00:50] wakes up 810 + [1518-06-25 00:00] Guard #1489 begins shift 811 + [1518-04-27 00:51] wakes up 812 + [1518-04-18 00:52] falls asleep 813 + [1518-05-30 23:50] Guard #1489 begins shift 814 + [1518-04-17 00:59] wakes up 815 + [1518-09-18 00:55] falls asleep 816 + [1518-04-03 00:01] Guard #659 begins shift 817 + [1518-04-13 00:19] wakes up 818 + [1518-05-13 23:52] Guard #349 begins shift 819 + [1518-11-16 00:22] wakes up 820 + [1518-06-30 23:50] Guard #1889 begins shift 821 + [1518-11-17 00:51] wakes up 822 + [1518-07-23 00:53] falls asleep 823 + [1518-09-28 00:32] wakes up 824 + [1518-07-31 00:02] Guard #1993 begins shift 825 + [1518-04-04 23:56] Guard #2179 begins shift 826 + [1518-06-09 00:25] wakes up 827 + [1518-04-19 00:52] wakes up 828 + [1518-06-13 00:49] wakes up 829 + [1518-07-17 00:42] falls asleep 830 + [1518-04-23 00:32] falls asleep 831 + [1518-05-11 00:46] wakes up 832 + [1518-05-11 00:16] falls asleep 833 + [1518-08-20 23:50] Guard #1889 begins shift 834 + [1518-08-01 00:46] wakes up 835 + [1518-03-18 00:59] wakes up 836 + [1518-05-05 23:56] Guard #641 begins shift 837 + [1518-09-10 00:57] wakes up 838 + [1518-09-13 00:16] falls asleep 839 + [1518-05-04 00:02] Guard #1811 begins shift 840 + [1518-08-27 00:43] wakes up 841 + [1518-03-18 23:59] Guard #2179 begins shift 842 + [1518-07-24 23:57] Guard #373 begins shift 843 + [1518-05-14 00:47] wakes up 844 + [1518-11-15 23:48] Guard #2917 begins shift 845 + [1518-06-23 00:15] wakes up 846 + [1518-09-29 23:50] Guard #2971 begins shift 847 + [1518-08-08 00:04] falls asleep 848 + [1518-10-30 00:49] wakes up 849 + [1518-10-19 00:40] falls asleep 850 + [1518-10-26 00:36] falls asleep 851 + [1518-05-01 00:59] wakes up 852 + [1518-08-21 00:21] wakes up 853 + [1518-06-01 00:56] falls asleep 854 + [1518-11-13 23:53] Guard #2917 begins shift 855 + [1518-10-07 00:36] wakes up 856 + [1518-11-16 23:56] Guard #1471 begins shift 857 + [1518-11-01 00:26] falls asleep 858 + [1518-05-25 00:55] wakes up 859 + [1518-10-02 00:12] falls asleep 860 + [1518-07-10 00:55] falls asleep 861 + [1518-07-10 23:57] Guard #1889 begins shift 862 + [1518-10-25 00:46] wakes up 863 + [1518-08-01 00:00] Guard #1811 begins shift 864 + [1518-09-14 00:42] wakes up 865 + [1518-05-17 00:58] wakes up 866 + [1518-10-28 00:52] falls asleep 867 + [1518-07-01 00:30] falls asleep 868 + [1518-03-14 00:43] falls asleep 869 + [1518-07-21 00:02] falls asleep 870 + [1518-04-07 00:45] wakes up 871 + [1518-05-20 00:02] Guard #1993 begins shift 872 + [1518-04-05 00:28] falls asleep 873 + [1518-11-02 23:58] Guard #3259 begins shift 874 + [1518-04-14 00:50] falls asleep 875 + [1518-07-22 00:37] falls asleep 876 + [1518-10-27 00:53] wakes up 877 + [1518-04-30 00:02] Guard #2179 begins shift 878 + [1518-03-23 00:43] falls asleep 879 + [1518-09-04 00:52] falls asleep 880 + [1518-09-07 00:09] falls asleep 881 + [1518-08-18 23:50] Guard #2179 begins shift 882 + [1518-10-02 00:24] falls asleep 883 + [1518-11-19 00:12] falls asleep 884 + [1518-03-23 00:21] falls asleep 885 + [1518-06-21 00:01] Guard #2917 begins shift 886 + [1518-04-28 23:54] Guard #2441 begins shift 887 + [1518-09-21 00:45] wakes up 888 + [1518-10-18 00:04] Guard #1489 begins shift 889 + [1518-09-23 00:47] wakes up 890 + [1518-09-16 00:33] falls asleep 891 + [1518-08-08 00:57] falls asleep 892 + [1518-10-23 00:08] falls asleep 893 + [1518-09-18 23:59] Guard #2441 begins shift 894 + [1518-03-20 00:54] wakes up 895 + [1518-10-09 00:57] wakes up 896 + [1518-08-12 00:00] Guard #2917 begins shift 897 + [1518-09-13 00:02] Guard #1489 begins shift 898 + [1518-10-13 00:25] wakes up 899 + [1518-11-06 23:58] Guard #373 begins shift 900 + [1518-04-08 00:03] Guard #641 begins shift 901 + [1518-11-13 00:49] wakes up 902 + [1518-07-31 00:53] wakes up 903 + [1518-08-23 23:58] Guard #1471 begins shift 904 + [1518-07-03 00:56] wakes up 905 + [1518-03-28 00:00] falls asleep 906 + [1518-03-07 00:39] falls asleep 907 + [1518-08-28 00:40] wakes up 908 + [1518-04-29 00:03] falls asleep 909 + [1518-04-01 23:56] Guard #1489 begins shift 910 + [1518-06-02 00:00] Guard #659 begins shift 911 + [1518-10-05 00:55] wakes up 912 + [1518-10-29 00:48] falls asleep 913 + [1518-06-12 00:59] wakes up 914 + [1518-07-02 00:26] wakes up 915 + [1518-03-14 00:47] wakes up 916 + [1518-04-03 23:59] Guard #349 begins shift 917 + [1518-07-12 00:04] Guard #941 begins shift 918 + [1518-03-26 00:04] Guard #1123 begins shift 919 + [1518-06-02 00:59] wakes up 920 + [1518-07-04 00:54] wakes up 921 + [1518-03-19 00:34] wakes up 922 + [1518-10-10 00:01] Guard #941 begins shift 923 + [1518-08-05 00:53] wakes up 924 + [1518-06-08 23:53] Guard #373 begins shift 925 + [1518-03-28 00:29] wakes up 926 + [1518-10-22 23:58] Guard #1471 begins shift 927 + [1518-11-14 00:03] falls asleep 928 + [1518-10-25 00:32] falls asleep 929 + [1518-06-24 00:32] falls asleep 930 + [1518-06-23 00:47] wakes up 931 + [1518-04-16 00:16] falls asleep 932 + [1518-04-03 00:21] wakes up 933 + [1518-10-08 00:00] Guard #2273 begins shift 934 + [1518-09-27 00:01] Guard #1811 begins shift 935 + [1518-08-25 00:02] Guard #2833 begins shift 936 + [1518-07-21 00:53] wakes up 937 + [1518-07-05 00:02] Guard #2971 begins shift 938 + [1518-07-28 00:58] wakes up 939 + [1518-07-03 00:51] wakes up 940 + [1518-03-14 00:02] Guard #2833 begins shift 941 + [1518-10-15 00:19] wakes up 942 + [1518-08-20 00:57] wakes up 943 + [1518-05-23 00:47] falls asleep 944 + [1518-11-05 00:10] falls asleep 945 + [1518-03-31 00:58] wakes up 946 + [1518-05-26 00:00] Guard #1811 begins shift 947 + [1518-04-27 00:58] wakes up 948 + [1518-07-24 00:57] wakes up 949 + [1518-03-30 00:39] wakes up 950 + [1518-08-13 23:58] Guard #1889 begins shift 951 + [1518-04-10 00:52] wakes up 952 + [1518-10-31 00:59] wakes up 953 + [1518-10-03 00:11] falls asleep 954 + [1518-10-15 00:29] falls asleep 955 + [1518-08-20 00:54] falls asleep 956 + [1518-09-28 00:50] wakes up 957 + [1518-10-26 00:42] wakes up 958 + [1518-09-25 00:00] Guard #487 begins shift 959 + [1518-07-22 00:47] falls asleep 960 + [1518-06-14 00:54] falls asleep 961 + [1518-08-08 00:43] falls asleep 962 + [1518-08-25 23:56] Guard #487 begins shift 963 + [1518-07-01 23:59] Guard #2917 begins shift 964 + [1518-06-16 00:01] Guard #1811 begins shift 965 + [1518-03-14 23:46] Guard #1993 begins shift 966 + [1518-03-31 00:14] falls asleep 967 + [1518-03-06 00:30] falls asleep 968 + [1518-09-14 23:57] Guard #2273 begins shift 969 + [1518-06-09 00:34] wakes up 970 + [1518-07-03 00:16] falls asleep 971 + [1518-06-16 00:43] wakes up 972 + [1518-08-23 00:04] falls asleep 973 + [1518-10-22 00:42] falls asleep 974 + [1518-05-28 00:41] wakes up 975 + [1518-08-09 23:57] Guard #941 begins shift 976 + [1518-11-17 00:38] wakes up 977 + [1518-03-24 00:51] falls asleep 978 + [1518-07-15 00:54] wakes up 979 + [1518-09-18 00:50] wakes up 980 + [1518-10-05 00:25] falls asleep 981 + [1518-07-18 00:12] falls asleep 982 + [1518-11-01 00:30] wakes up 983 + [1518-05-07 00:42] falls asleep 984 + [1518-09-03 00:24] falls asleep 985 + [1518-11-20 00:56] wakes up 986 + [1518-11-11 00:54] wakes up 987 + [1518-03-11 00:42] falls asleep 988 + [1518-05-04 00:32] falls asleep 989 + [1518-06-26 00:47] falls asleep 990 + [1518-10-29 00:13] falls asleep 991 + [1518-11-04 00:03] Guard #2917 begins shift 992 + [1518-05-18 00:12] falls asleep 993 + [1518-08-02 00:46] falls asleep 994 + [1518-09-21 00:57] falls asleep 995 + [1518-06-28 00:57] wakes up 996 + [1518-03-27 00:57] wakes up 997 + [1518-06-28 00:02] Guard #487 begins shift 998 + [1518-03-07 23:57] Guard #941 begins shift 999 + [1518-04-09 00:03] Guard #2179 begins shift 1000 + [1518-06-27 00:26] wakes up 1001 + [1518-08-12 00:59] wakes up 1002 + [1518-07-22 00:38] wakes up 1003 + [1518-08-06 00:34] wakes up 1004 + [1518-03-30 00:53] wakes up 1005 + [1518-11-05 00:00] Guard #2971 begins shift 1006 + [1518-11-06 00:30] wakes up 1007 + [1518-03-24 00:08] falls asleep 1008 + [1518-08-09 00:02] Guard #2161 begins shift 1009 + [1518-04-30 23:56] Guard #2161 begins shift 1010 + [1518-09-28 00:42] falls asleep 1011 + [1518-04-24 00:42] wakes up 1012 + [1518-10-26 00:46] falls asleep 1013 + [1518-11-18 00:14] falls asleep 1014 + [1518-10-16 23:46] Guard #1123 begins shift 1015 + [1518-09-21 00:59] wakes up 1016 + [1518-07-10 00:59] wakes up 1017 + [1518-04-25 00:46] wakes up 1018 + [1518-06-03 00:02] Guard #1811 begins shift 1019 + [1518-07-18 00:55] wakes up 1020 + [1518-11-03 00:54] wakes up 1021 + [1518-10-07 00:07] falls asleep 1022 + [1518-07-29 23:56] Guard #3259 begins shift 1023 + [1518-03-31 00:51] falls asleep 1024 + [1518-07-19 00:26] wakes up 1025 + [1518-05-18 00:00] Guard #1123 begins shift 1026 + [1518-10-29 23:58] Guard #659 begins shift 1027 + [1518-10-16 00:35] wakes up 1028 + [1518-03-05 23:58] Guard #2917 begins shift 1029 + [1518-03-29 23:57] Guard #1471 begins shift 1030 + [1518-05-16 00:22] wakes up 1031 + [1518-05-28 23:58] Guard #487 begins shift 1032 + [1518-10-22 00:34] wakes up 1033 + [1518-03-24 00:11] wakes up 1034 + [1518-11-18 00:50] wakes up 1035 + [1518-08-02 00:07] falls asleep 1036 + [1518-11-13 00:04] Guard #1993 begins shift 1037 + [1518-05-17 00:00] Guard #2467 begins shift 1038 + [1518-11-20 00:02] Guard #2467 begins shift 1039 + [1518-04-14 00:37] wakes up 1040 + [1518-07-16 00:17] falls asleep 1041 + [1518-07-24 00:38] falls asleep 1042 + [1518-08-28 23:50] Guard #1889 begins shift 1043 + [1518-11-06 00:49] falls asleep 1044 + [1518-06-02 00:11] falls asleep 1045 + [1518-05-10 00:59] wakes up
+2 -1
src/AoC.hs
··· 2 2 3 3 import AoC.Y2018.Day1 as X 4 4 import AoC.Y2018.Day2 as X 5 - import AoC.Y2018.Day3 as X 5 + import AoC.Y2018.Day3 as X 6 + import AoC.Y2018.Day4 as X
+40
src/AoC/Util/Parser.hs
··· 1 + -- | Parsing stuff 2 + 3 + module AoC.Util.Parser where 4 + 5 + import Papa 6 + import qualified Text.Megaparsec as P 7 + import qualified Text.Megaparsec.Char as P 8 + import qualified Text.Megaparsec.Char.Lexer as L 9 + import Data.Time.LocalTime (LocalTime) 10 + import Data.Time.Format (parseTimeM, defaultTimeLocale) 11 + 12 + type Parser = P.Parsec Void String 13 + 14 + sc :: Parser () 15 + sc = L.space P.space1 P.empty P.empty 16 + 17 + lexeme :: Parser a -> Parser a 18 + lexeme = L.lexeme sc 19 + 20 + symbol :: String -> Parser String 21 + symbol = L.symbol sc 22 + 23 + integer :: Parser Integer 24 + integer = lexeme L.decimal 25 + 26 + datetime :: Parser (Maybe LocalTime) 27 + datetime = do 28 + _ <- P.count 1 $ P.char '[' 29 + y <- L.decimal 30 + _ <- P.count 1 $ P.char '-' 31 + m <- L.decimal 32 + _ <- P.count 1 $ P.char '-' 33 + d <- L.decimal 34 + _ <- P.count 1 P.space1 35 + h <- L.decimal 36 + _ <- P.count 1 $ P.char ':' 37 + k <- L.decimal :: Parser Integer 38 + _ <- P.count 1 $ P.char ']' 39 + let dt = show y <> "-" <> show m <> "-" <> show d <> " " <> show h <> ":" <> show k 40 + return $ parseTimeM True defaultTimeLocale "%Y-%-m-%-d %k:%-M" dt
+23
src/AoC/Util/Util.hs
··· 1 + {-# LANGUAGE TupleSections #-} 2 + 3 + module AoC.Util.Util where 4 + 5 + import Papa 6 + import Data.Time.LocalTime 7 + import qualified Data.Map as M 8 + import Data.Time.Calendar 9 + 10 + minute :: LocalTime -> Integer 11 + minute = fromIntegral . todMin . localTimeOfDay 12 + 13 + freq :: [Integer] -> M.Map Integer Integer 14 + freq = M.fromListWith (+) . (<$>) (,1) 15 + 16 + bogusTime :: LocalTime 17 + bogusTime = LocalTime (fromGregorian 1500 1 1) midnight 18 + 19 + timeSansMaybe :: Maybe LocalTime -> LocalTime 20 + timeSansMaybe = fromMaybe bogusTime 21 + 22 + invertMap :: (Ord a , Ord b) => M.Map a b -> M.Map b [a] 23 + invertMap = M.fromListWith (++) . M.foldMapWithKey (\ k a -> [(a, [k])])
+6 -22
src/AoC/Y2018/Day3.hs
··· 6 6 import qualified Data.Text as T (unpack) 7 7 import qualified Data.Text.IO as T (readFile) 8 8 import qualified Data.Map.Strict as C 9 - import qualified Control.Monad.Combinators as P 10 - import qualified Text.Megaparsec as P 11 - import qualified Text.Megaparsec.Char as P 12 - import qualified Text.Megaparsec.Char.Lexer as L 9 + 10 + import AoC.Util.Parser 11 + import qualified Text.Megaparsec as P(someTill,parse,endBy1) 12 + import qualified Text.Megaparsec.Char as P(char,eol) 13 + import qualified Text.Megaparsec.Char.Lexer as L(decimal) 13 14 14 15 newtype CellID = CellID (Integer,Integer) deriving (Eq, Ord, Show) 15 16 ··· 24 25 } deriving Show 25 26 makeLenses ''ClaimEntry 26 27 27 - -- | Parser stuff 28 - 29 - type Parser = P.Parsec Void String 30 - 31 - sc :: Parser () 32 - sc = L.space P.space1 P.empty P.empty 33 - 34 - lexeme :: Parser a -> Parser a 35 - lexeme = L.lexeme sc 36 - 37 - symbol :: String -> Parser String 38 - symbol = L.symbol sc 39 - 40 - integer :: Parser Integer 41 - integer = lexeme L.decimal 42 - 43 28 headPartial :: [Integer] -> Integer 44 29 headPartial [x] = x 45 30 headPartial _ = 0 ··· 65 50 parseClaimsInput :: FilePath -> IO [ClaimEntry] 66 51 parseClaimsInput f = parseClaimsInput' claimParser . T.unpack <$> T.readFile f 67 52 68 - -- | Parser stuff complete 69 53 70 54 claimLoc :: ClaimEntry -> [(CellID, ClaimID)] 71 55 claimLoc c = let cs :: [(Integer, Integer)] ··· 95 79 return $ 96 80 case xs of 97 81 [x] -> Just x 98 - _ -> Nothing 82 + _ -> Nothing
+131
src/AoC/Y2018/Day4.hs
··· 1 + {-# LANGUAGE TemplateHaskell #-} 2 + 3 + module AoC.Y2018.Day4 where 4 + 5 + import Prelude (enumFromTo) 6 + import Papa 7 + import qualified Data.Map.Strict as M 8 + import qualified Data.Text.IO as T (readFile) 9 + import qualified Data.Text as T (unpack) 10 + import AoC.Util.Parser 11 + import AoC.Util.Util 12 + import Data.Time.LocalTime 13 + import qualified Text.Megaparsec as P 14 + import qualified Text.Megaparsec.Char as P 15 + import qualified Control.Monad.Combinators as PC() 16 + 17 + 18 + type Guard = Integer 19 + type NapMinutes = [Integer] 20 + type NapDuration = Sum Integer 21 + type NapTimeFreq = [(Integer, [Integer])] -- TODO: maybe an IntMap 22 + 23 + type NapEvent = (Guard, NapMinutes, NapDuration) -- TODO: to a datatype 24 + type NapEvent' = (Guard, (NapTimeFreq, NapDuration)) -- TODO: maybe a map 25 + 26 + data Record = AtWork Guard LocalTime 27 + | Awake LocalTime 28 + | Asleep LocalTime 29 + deriving (Show) 30 + 31 + makePrisms ''Record 32 + 33 + dateParser :: Parser (Maybe LocalTime) 34 + dateParser = (lexeme . P.try) datetime 35 + 36 + atWorkParser :: Parser Record 37 + atWorkParser = dateParser >>= \t -> do 38 + symbol "Guard" 39 + P.char '#' 40 + i <- integer 41 + symbol "begins" 42 + P.string "shift" 43 + P.eol 44 + return $ AtWork i (timeSansMaybe t) 45 + 46 + awakeParser :: Parser Record 47 + awakeParser = dateParser >>= \t -> do 48 + symbol "wakes" 49 + P.string "up" 50 + P.eol 51 + return $ Awake (timeSansMaybe t) 52 + 53 + asleepParser :: Parser Record 54 + asleepParser = dateParser >>= \t -> do 55 + symbol "falls" 56 + P.string "asleep" 57 + P.eol 58 + return $ Asleep (timeSansMaybe t) 59 + 60 + recParser :: Parser [Record] 61 + recParser = P.some $ 62 + P.try atWorkParser 63 + <|> P.try asleepParser 64 + <|> P.try awakeParser 65 + 66 + parseRecords' :: FilePath -> IO [Record] 67 + parseRecords' f = g . P.parse recParser "" . T.unpack <$> T.readFile f 68 + where 69 + sortFn :: Record -> LocalTime 70 + sortFn (AtWork _ t) = t 71 + sortFn (Asleep t) = t 72 + sortFn (Awake t) = t 73 + g e = case e of 74 + Left _ -> [] 75 + Right xs -> sortOn sortFn xs 76 + 77 + processRecords :: [Record] -> [NapEvent] 78 + processRecords = foldl' g [] 79 + where 80 + calcNapMins :: LocalTime -> [Integer] -> [Integer] 81 + calcNapMins _ [] = [] 82 + calcNapMins t (x : xs) = [x .. (minute t - 1)] ++ xs 83 + 84 + napDuration :: Sum Integer -> [Integer] -> Sum Integer 85 + napDuration t xs = fromMaybe 0 $ (\a -> subtract a <$> t) <$> firstOf traverse xs 86 + 87 + g :: [NapEvent] -> Record -> [NapEvent] 88 + g m (AtWork gid _) = (gid, [], mempty) : m 89 + g m (Asleep t) = m & ix 0 %~ (_2 %~ (minute t :)) 90 + g m (Awake t) = m & ix 0 -- only do the following for the head element, if present 91 + %~ 92 + (\i -> 93 + i & _3 -- update 3rd element of the tuple i.e. sum 94 + <>~ napDuration (pure $ minute t) (i ^. _2)) 95 + 96 + . (_2 %~ calcNapMins t) -- update 2nd element of the tuple i.e. array 97 + 98 + groupRecords :: [NapEvent] -> [NapEvent'] 99 + groupRecords = M.toList 100 + . M.map 101 + ( _1 %~ 102 + (M.toDescList 103 + . invertMap 104 + . freq) 105 + ) 106 + . M.fromListWith (\(b,c) (d,e) -> (b ++ d, c + e)) 107 + . over mapped (\(a,b,c) -> (a, (b,c))) 108 + . toListOf (folded.folded) 109 + . groupBy ((==) `on` fst) 110 + . sortBy (comparing fst) 111 + 112 + mkResult :: Traversable t => t NapEvent' -> Maybe (Guard, Integer) 113 + mkResult = liftA2 (\ma mb -> do a <- ma; b <- mb; pure (a,b)) 114 + (preview (traverse . _1)) 115 + (preview (traverse . _2 . _1 . ix 0 . _2 . ix 0)) 116 + 117 + mostAsleep :: [NapEvent'] -> Maybe (Guard, Integer) 118 + mostAsleep = mkResult . sortBy (comparing (Down . snd . snd)) 119 + 120 + mostFreqAsleep :: [NapEvent'] -> Maybe (Guard, Integer) 121 + mostFreqAsleep = mkResult 122 + . maximumByOf traverse (compare `on` (\a -> a ^? _2 . _1 . traverse . _1)) 123 + 124 + puzzleBootStrap :: ([NapEvent'] -> Maybe (Guard, Integer)) -> FilePath -> IO (Maybe Integer) 125 + puzzleBootStrap f p = fmap (uncurry (*)) . f . groupRecords . processRecords <$> parseRecords' p 126 + 127 + day4Puzzle1 :: FilePath -> IO (Maybe Integer) 128 + day4Puzzle1 = puzzleBootStrap mostAsleep 129 + 130 + day4Puzzle2 :: FilePath -> IO (Maybe Integer) 131 + day4Puzzle2 = puzzleBootStrap mostFreqAsleep