Example #1
0
def test_find_sleepiest_guard_example():
    log_lines = \
        (parse_log_line(l)
            for l in LOG_LINES_EXAMPLE.splitlines()
            if l.strip())
    schedule = compile_schedule(log_lines)
    guard_id = find_sleepiest_guard(schedule)

    assert guard_id == 10
Example #2
0
def test_find_sleepiest_minute_examples(guard_id, expected):
    log_lines = \
        (parse_log_line(l)
            for l in LOG_LINES_EXAMPLE.splitlines()
            if l.strip())
    schedule = compile_schedule(log_lines)
    sleep_schedule = schedule[guard_id]
    minute, _ = find_sleepiest_minute(sleep_schedule)

    assert minute == expected
Example #3
0
def test_find_sleepiest_guard_minute_puzzle_input():
    log_lines = \
        (parse_log_line(l)
            for l in puzzle_input.splitlines()
            if l.strip())
    schedule = compile_schedule(log_lines)

    guard_id = find_sleepiest_guard(schedule)
    sleep_schedule = schedule[guard_id]

    minute, _ = find_sleepiest_minute(sleep_schedule)
    result = guard_id * minute

    assert result == 65489
Example #4
0
def test_find_sleepiest_minute_guard_puzzle_input():
    @dataclass
    class Best:
        guard_id: int
        minute: int
        occurences: int

    log_lines = \
        (parse_log_line(l)
            for l in puzzle_input.splitlines()
            if l.strip())
    schedule = compile_schedule(log_lines)

    best = Best(0, 0, 0)
    for guard_id, sleep_schedule in schedule.items():
        minute, occurences = find_sleepiest_minute(sleep_schedule)
        if occurences > best.occurences:
            best = Best(guard_id, minute, occurences)

    result = best.guard_id * best.minute

    assert result == 3852
Example #5
0
def test_compile_schedule_example():
    log_lines = \
        (parse_log_line(l)
            for l in LOG_LINES_EXAMPLE.splitlines()
            if l.strip())
    schedule = compile_schedule(log_lines)

    expected_10 = defaultdict(
        date, {
            date(1518, 11, 1): {
                5,
                6,
                7,
                8,
                9,
                10,
                11,
                12,
                13,
                14,
                15,
                16,
                17,
                18,
                19,
                20,
                21,
                22,
                23,
                24,
                30,
                31,
                32,
                33,
                34,
                35,
                36,
                37,
                38,
                39,
                40,
                41,
                42,
                43,
                44,
                45,
                46,
                47,
                48,
                49,
                50,
                51,
                52,
                53,
                54,
            },
            date(1518, 11, 3): {
                24,
                25,
                26,
                27,
                28,
            },
        })

    expected_99 = defaultdict(
        date, {
            date(1518, 11, 2): {
                40,
                41,
                42,
                43,
                44,
                45,
                46,
                47,
                48,
                49,
            },
            date(1518, 11, 4): {
                36,
                37,
                38,
                39,
                40,
                41,
                42,
                43,
                44,
                45,
            },
            date(1518, 11, 5): {
                45,
                46,
                47,
                48,
                49,
                50,
                51,
                52,
                53,
                54,
            },
        })

    assert schedule[10] == expected_10
    assert schedule[99] == expected_99
Example #6
0
def test_parse_log_line_examples(line, expected):
    parsed = parse_log_line(line)

    assert parsed == expected