2020 Day 08, fix typo in test of 07
This commit is contained in:
parent
97125d8b50
commit
ab66e38e47
@ -27,5 +27,5 @@ def test():
|
||||
rules, amount = parseRules(input)
|
||||
assert part2(rules, amount) == 126
|
||||
|
||||
if __name__ == "__name__":
|
||||
if __name__ == "__main__":
|
||||
test()
|
95
2020/08/README.md
Normal file
95
2020/08/README.md
Normal file
@ -0,0 +1,95 @@
|
||||
# 2020 Day 1: Handheld Halting
|
||||
Copyright (c) Eric Wastl
|
||||
#### [Direct Link](https://adventofcode.com/2020/day/8)
|
||||
|
||||
## Part 1
|
||||
|
||||
Your flight to the major airline hub reaches cruising altitude without incident. While you consider checking the in-flight menu for one of those drinks that come with a little umbrella, you are interrupted by the kid sitting next to you.
|
||||
|
||||
Their [handheld game console](https://en.wikipedia.org/wiki/Handheld_game_console) won't turn on! They ask if you can take a look.
|
||||
|
||||
You narrow the problem down to a strange **infinite loop** in the boot code (your puzzle input) of the device. You should be able to fix it, but first you need to be able to run the code in isolation.
|
||||
|
||||
The boot code is represented as a text file with one **instruction** per line of text. Each instruction consists of an **operation** (`acc`, `jmp`, or `nop`) and an **argument** (a signed number like `+4` or `-20`).
|
||||
|
||||
- `acc` increases or decreases a single global value called the **accumulator** by the value given in the argument. For example, `acc +7` would increase the accumulator by 7. The accumulator starts at `0`. After an `acc` instruction, the instruction immediately below it is executed next.
|
||||
- `jmp` **jumps** to a new instruction relative to itself. The next instruction to execute is found using the argument as an **offset** from the `jmp` instruction; for example, `jmp +2` would skip the next instruction, `jmp +1` would continue to the instruction immediately below it, and `jmp -20` would cause the instruction 20 lines above to be executed next.
|
||||
- `nop` stands for **No OPeration** - it does nothing. The instruction immediately below it is executed next.
|
||||
|
||||
For example, consider the following program:
|
||||
|
||||
```
|
||||
nop +0
|
||||
acc +1
|
||||
jmp +4
|
||||
acc +3
|
||||
jmp -3
|
||||
acc -99
|
||||
acc +1
|
||||
jmp -4
|
||||
acc +6
|
||||
```
|
||||
|
||||
These instructions are visited in this order:
|
||||
|
||||
```
|
||||
nop +0 | 1
|
||||
acc +1 | 2, 8(!)
|
||||
jmp +4 | 3
|
||||
acc +3 | 6
|
||||
jmp -3 | 7
|
||||
acc -99 |
|
||||
acc +1 | 4
|
||||
jmp -4 | 5
|
||||
acc +6 |
|
||||
```
|
||||
|
||||
First, the `nop +0` does nothing. Then, the accumulator is increased from 0 to 1 (`acc +1`) and `jmp +4` sets the next instruction to the other `acc +1` near the bottom. After it increases the accumulator from 1 to 2, `jmp -4` executes, setting the next instruction to the only `acc +3`. It sets the accumulator to 5, and `jmp -3` causes the program to continue back at the first `acc +1`.
|
||||
|
||||
This is an **infinite loop**: with this sequence of jumps, the program will run forever. The moment the program tries to run any instruction a second time, you know it will never terminate.
|
||||
|
||||
Immediately **before** the program would run an instruction a second time, the value in the accumulator is **`5`**.
|
||||
|
||||
Run your copy of the boot code. Immediately before any instruction is executed a second time, **what value is in the accumulator?**
|
||||
|
||||
## Part 2
|
||||
|
||||
After some careful analysis, you believe that **exactly one instruction is corrupted**.
|
||||
|
||||
Somewhere in the program, **either** a `jmp` is supposed to be a `nop`, **or** a `nop` is supposed to be a `jmp`. (No `acc` instructions were harmed in the corruption of this boot code.)
|
||||
|
||||
The program is supposed to terminate by **attempting to execute an instruction immediately after the last instruction** in the file. By changing exactly one `jmp` or `nop`, you can repair the boot code and make it terminate correctly.
|
||||
|
||||
For example, consider the same program from above:
|
||||
|
||||
```
|
||||
nop +0
|
||||
acc +1
|
||||
jmp +4
|
||||
acc +3
|
||||
jmp -3
|
||||
acc -99
|
||||
acc +1
|
||||
jmp -4
|
||||
acc +6
|
||||
```
|
||||
|
||||
If you change the first instruction from `nop +0` to `jmp +0`, it would create a single-instruction infinite loop, never leaving that instruction. If you change almost any of the `jmp` instructions, the program will still eventually find another `jmp` instruction and loop forever.
|
||||
|
||||
However, if you change the second-to-last instruction (from `jmp -4` to `nop -4`), the program terminates! The instructions are visited in this order:
|
||||
|
||||
```
|
||||
nop +0 | 1
|
||||
acc +1 | 2
|
||||
jmp +4 | 3
|
||||
acc +3 |
|
||||
jmp -3 |
|
||||
acc -99 |
|
||||
acc +1 | 4
|
||||
nop -4 | 5
|
||||
acc +6 | 6
|
||||
```
|
||||
|
||||
After the last instruction (`acc +6`), the program terminates by attempting to run the instruction below the last instruction in the file. With this change, after the program terminates, the accumulator contains the value **`8`** (`acc +1`, `acc +1`, `acc +6`).
|
||||
|
||||
Fix the program so that it terminates normally by changing exactly one `jmp` (to `nop`) or `nop` (to `jmp`). **What is the value of the accumulator after the program terminates?**
|
52
2020/08/code.py
Normal file
52
2020/08/code.py
Normal file
@ -0,0 +1,52 @@
|
||||
# SPDX-License-Identifier: MIT
|
||||
# Copyright (c) 2020 Akumatic
|
||||
#
|
||||
#https://adventofcode.com/2020/day/8
|
||||
|
||||
def readFile() -> list:
|
||||
with open(f"{__file__.rstrip('code.py')}input.txt", "r") as f:
|
||||
return [line.split() for line in f.read().strip().split("\n")]
|
||||
|
||||
def run(instructions: list) -> tuple:
|
||||
accumulator = 0
|
||||
pointer = 0
|
||||
visited = []
|
||||
size = len(instructions)
|
||||
while pointer not in visited and pointer != size:
|
||||
visited.append(pointer)
|
||||
if instructions[pointer][0] == "acc":
|
||||
accumulator += int(instructions[pointer][1])
|
||||
pointer += 1
|
||||
elif instructions[pointer][0] == "jmp":
|
||||
pointer += int(instructions[pointer][1])
|
||||
else: # instructions[pointer][0] == "nop":
|
||||
pointer += 1
|
||||
return pointer, accumulator
|
||||
|
||||
def part1(instructions: list) -> int:
|
||||
return run(instructions)[1]
|
||||
|
||||
def part2(instructions: list) -> int:
|
||||
size = len(instructions)
|
||||
for i in range(size):
|
||||
if instructions[i][0] == "jmp":
|
||||
instructions[i][0] = "nop"
|
||||
pointer, accumulator = run(instructions)
|
||||
instructions[i][0] = "jmp"
|
||||
|
||||
elif instructions[i][0] == "nop":
|
||||
instructions[i][0] = "jmp"
|
||||
pointer, accumulator = run(instructions)
|
||||
instructions[i][0] = "nop"
|
||||
|
||||
else: # instructions[i][0] == "acc"
|
||||
continue
|
||||
|
||||
if pointer == size:
|
||||
return accumulator
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
instructions = readFile()
|
||||
print(f"Part 1: {part1(instructions)}")
|
||||
print(f"Part 2: {part2(instructions)}")
|
611
2020/08/input.txt
Normal file
611
2020/08/input.txt
Normal file
@ -0,0 +1,611 @@
|
||||
acc +22
|
||||
acc +42
|
||||
nop +456
|
||||
jmp +5
|
||||
acc +31
|
||||
acc +49
|
||||
acc +10
|
||||
jmp +519
|
||||
nop +390
|
||||
jmp +418
|
||||
nop +29
|
||||
acc -4
|
||||
jmp +156
|
||||
jmp +85
|
||||
acc +5
|
||||
acc +26
|
||||
jmp +497
|
||||
acc -6
|
||||
acc -18
|
||||
acc +20
|
||||
acc +4
|
||||
jmp -8
|
||||
jmp +372
|
||||
jmp +371
|
||||
jmp -1
|
||||
jmp +1
|
||||
nop +378
|
||||
acc +18
|
||||
jmp +388
|
||||
jmp +1
|
||||
acc +29
|
||||
acc +37
|
||||
jmp +1
|
||||
jmp +425
|
||||
acc +19
|
||||
acc +13
|
||||
jmp +477
|
||||
acc +7
|
||||
jmp +469
|
||||
nop +495
|
||||
nop +141
|
||||
acc +22
|
||||
jmp +517
|
||||
jmp +125
|
||||
nop +30
|
||||
acc +37
|
||||
acc +23
|
||||
nop +238
|
||||
jmp +110
|
||||
jmp +411
|
||||
acc +2
|
||||
acc -19
|
||||
acc -19
|
||||
jmp +296
|
||||
acc +0
|
||||
acc +14
|
||||
acc +20
|
||||
jmp +75
|
||||
nop +88
|
||||
acc -16
|
||||
acc +40
|
||||
acc +27
|
||||
jmp +131
|
||||
acc +33
|
||||
nop +252
|
||||
acc +5
|
||||
acc +0
|
||||
jmp +101
|
||||
nop +219
|
||||
acc +50
|
||||
acc +40
|
||||
jmp +49
|
||||
nop +74
|
||||
jmp +327
|
||||
acc +47
|
||||
jmp +206
|
||||
acc -15
|
||||
jmp +449
|
||||
acc -17
|
||||
acc -13
|
||||
acc +46
|
||||
jmp +417
|
||||
jmp +160
|
||||
acc -7
|
||||
acc -11
|
||||
acc +16
|
||||
acc +14
|
||||
jmp -37
|
||||
acc -12
|
||||
acc +15
|
||||
acc -14
|
||||
nop +110
|
||||
jmp +1
|
||||
acc -4
|
||||
nop +287
|
||||
nop -82
|
||||
jmp +30
|
||||
jmp +490
|
||||
acc +34
|
||||
jmp +305
|
||||
nop +90
|
||||
jmp +1
|
||||
nop -4
|
||||
nop -95
|
||||
jmp -46
|
||||
acc +26
|
||||
acc +13
|
||||
acc +47
|
||||
jmp +350
|
||||
acc +11
|
||||
jmp -102
|
||||
acc -2
|
||||
jmp +489
|
||||
acc +28
|
||||
acc +24
|
||||
nop +486
|
||||
jmp +485
|
||||
nop +170
|
||||
jmp +66
|
||||
jmp +411
|
||||
acc +30
|
||||
acc +48
|
||||
acc +48
|
||||
jmp -6
|
||||
acc +11
|
||||
jmp -51
|
||||
jmp +1
|
||||
jmp -10
|
||||
nop +411
|
||||
acc -17
|
||||
acc +32
|
||||
jmp +9
|
||||
jmp +398
|
||||
nop +82
|
||||
jmp +6
|
||||
acc +45
|
||||
acc +34
|
||||
jmp -44
|
||||
acc -13
|
||||
jmp -122
|
||||
acc +25
|
||||
nop +286
|
||||
acc +5
|
||||
jmp +144
|
||||
acc +0
|
||||
jmp -122
|
||||
acc -11
|
||||
acc -6
|
||||
jmp -123
|
||||
acc +16
|
||||
acc +1
|
||||
jmp -58
|
||||
nop +242
|
||||
acc -11
|
||||
jmp +257
|
||||
nop +231
|
||||
acc +46
|
||||
jmp +301
|
||||
acc -6
|
||||
acc +20
|
||||
acc -7
|
||||
jmp +365
|
||||
acc +32
|
||||
acc +0
|
||||
jmp -66
|
||||
jmp +110
|
||||
acc -18
|
||||
jmp +118
|
||||
acc +33
|
||||
nop -125
|
||||
acc +49
|
||||
acc +36
|
||||
jmp +188
|
||||
acc +9
|
||||
acc -11
|
||||
jmp +100
|
||||
acc +35
|
||||
jmp +55
|
||||
acc +38
|
||||
acc -1
|
||||
jmp +312
|
||||
jmp +157
|
||||
acc +17
|
||||
jmp +177
|
||||
nop -126
|
||||
acc +30
|
||||
acc -3
|
||||
jmp +211
|
||||
acc -3
|
||||
jmp -164
|
||||
jmp -112
|
||||
acc +50
|
||||
jmp +268
|
||||
nop +290
|
||||
acc -8
|
||||
acc +35
|
||||
jmp -44
|
||||
acc -6
|
||||
acc +11
|
||||
nop +327
|
||||
jmp +155
|
||||
acc +10
|
||||
acc +35
|
||||
nop +233
|
||||
jmp +330
|
||||
acc +31
|
||||
acc +8
|
||||
jmp +124
|
||||
acc -5
|
||||
jmp +300
|
||||
nop +171
|
||||
nop +4
|
||||
acc +19
|
||||
acc +41
|
||||
jmp -156
|
||||
nop +179
|
||||
acc +12
|
||||
jmp +160
|
||||
jmp -92
|
||||
acc -11
|
||||
acc -10
|
||||
jmp +95
|
||||
nop +94
|
||||
acc -8
|
||||
jmp -199
|
||||
acc +16
|
||||
acc +30
|
||||
nop +73
|
||||
acc +36
|
||||
jmp -53
|
||||
jmp +1
|
||||
jmp -6
|
||||
nop +369
|
||||
acc +29
|
||||
acc +47
|
||||
jmp +32
|
||||
acc +35
|
||||
jmp -61
|
||||
acc +41
|
||||
jmp +352
|
||||
acc -1
|
||||
jmp +75
|
||||
acc -10
|
||||
acc +28
|
||||
acc -15
|
||||
jmp -187
|
||||
acc +6
|
||||
jmp +1
|
||||
nop +112
|
||||
jmp +273
|
||||
nop +186
|
||||
acc +11
|
||||
acc +40
|
||||
jmp +128
|
||||
acc +17
|
||||
acc +23
|
||||
acc -8
|
||||
nop +277
|
||||
jmp +42
|
||||
acc +11
|
||||
nop -237
|
||||
acc +36
|
||||
acc +32
|
||||
jmp +287
|
||||
acc +16
|
||||
acc -19
|
||||
jmp +115
|
||||
acc -6
|
||||
acc +16
|
||||
nop -2
|
||||
acc +23
|
||||
jmp -160
|
||||
acc -10
|
||||
acc -10
|
||||
jmp +26
|
||||
acc -7
|
||||
jmp -95
|
||||
nop -160
|
||||
acc -2
|
||||
acc +44
|
||||
jmp -236
|
||||
jmp -198
|
||||
jmp +1
|
||||
acc +1
|
||||
jmp -9
|
||||
jmp -95
|
||||
jmp +273
|
||||
acc -19
|
||||
jmp -46
|
||||
acc +12
|
||||
acc +2
|
||||
jmp -145
|
||||
acc -14
|
||||
acc +3
|
||||
acc +3
|
||||
jmp +250
|
||||
acc +4
|
||||
acc +40
|
||||
jmp +1
|
||||
jmp +17
|
||||
acc +6
|
||||
acc +47
|
||||
jmp -77
|
||||
nop -192
|
||||
acc +11
|
||||
jmp +296
|
||||
acc -14
|
||||
jmp +64
|
||||
acc +35
|
||||
jmp +134
|
||||
acc -8
|
||||
nop +228
|
||||
acc +24
|
||||
acc +15
|
||||
jmp -64
|
||||
jmp -241
|
||||
acc +19
|
||||
acc +22
|
||||
acc +49
|
||||
nop -193
|
||||
jmp +219
|
||||
acc -1
|
||||
acc -11
|
||||
nop +211
|
||||
acc +0
|
||||
jmp -106
|
||||
nop +101
|
||||
jmp -222
|
||||
acc +20
|
||||
acc +45
|
||||
jmp +70
|
||||
acc +19
|
||||
acc +21
|
||||
jmp -23
|
||||
acc +8
|
||||
nop +92
|
||||
acc +47
|
||||
jmp -144
|
||||
acc +0
|
||||
acc -1
|
||||
jmp -81
|
||||
acc +23
|
||||
jmp -274
|
||||
acc +14
|
||||
acc +26
|
||||
acc +9
|
||||
jmp +79
|
||||
acc +22
|
||||
jmp -331
|
||||
acc -10
|
||||
jmp -311
|
||||
acc +16
|
||||
acc +30
|
||||
acc -8
|
||||
jmp +176
|
||||
acc -19
|
||||
acc +43
|
||||
jmp -222
|
||||
nop -116
|
||||
jmp +18
|
||||
acc +26
|
||||
acc +23
|
||||
acc +6
|
||||
jmp -162
|
||||
acc +34
|
||||
jmp +95
|
||||
acc +27
|
||||
acc +40
|
||||
acc +9
|
||||
jmp -77
|
||||
jmp +137
|
||||
acc -13
|
||||
acc +21
|
||||
acc +17
|
||||
acc -5
|
||||
jmp +91
|
||||
jmp -95
|
||||
acc +18
|
||||
acc -1
|
||||
jmp +70
|
||||
jmp -355
|
||||
nop -166
|
||||
acc -19
|
||||
acc +16
|
||||
jmp -146
|
||||
jmp -135
|
||||
jmp +57
|
||||
acc +45
|
||||
jmp -62
|
||||
acc -14
|
||||
jmp -382
|
||||
nop -172
|
||||
acc +45
|
||||
jmp -77
|
||||
acc +13
|
||||
jmp +65
|
||||
acc -4
|
||||
jmp +112
|
||||
jmp +107
|
||||
jmp +26
|
||||
jmp -326
|
||||
acc +25
|
||||
jmp +1
|
||||
jmp +179
|
||||
acc +33
|
||||
acc +2
|
||||
jmp -222
|
||||
nop +36
|
||||
acc +25
|
||||
nop -244
|
||||
jmp -376
|
||||
jmp -203
|
||||
acc +26
|
||||
nop +109
|
||||
acc +38
|
||||
jmp +135
|
||||
acc +7
|
||||
acc +40
|
||||
acc -18
|
||||
jmp -113
|
||||
nop -294
|
||||
acc +0
|
||||
acc +40
|
||||
nop -265
|
||||
jmp +81
|
||||
jmp -99
|
||||
jmp +32
|
||||
acc -17
|
||||
acc +25
|
||||
acc -12
|
||||
acc +26
|
||||
jmp -125
|
||||
acc -3
|
||||
acc -7
|
||||
acc +25
|
||||
jmp -410
|
||||
acc +47
|
||||
acc +36
|
||||
jmp +35
|
||||
acc +2
|
||||
acc +18
|
||||
acc -3
|
||||
jmp -38
|
||||
acc +29
|
||||
acc +49
|
||||
jmp -299
|
||||
acc -4
|
||||
nop -422
|
||||
jmp +50
|
||||
acc +11
|
||||
acc +2
|
||||
acc +49
|
||||
jmp -233
|
||||
acc +12
|
||||
acc +43
|
||||
acc -19
|
||||
acc +11
|
||||
jmp -264
|
||||
jmp +124
|
||||
jmp -361
|
||||
acc +35
|
||||
jmp -118
|
||||
acc +23
|
||||
acc -16
|
||||
acc -14
|
||||
jmp -22
|
||||
jmp -135
|
||||
jmp -309
|
||||
acc +6
|
||||
jmp -44
|
||||
acc -12
|
||||
acc +0
|
||||
jmp -23
|
||||
acc +29
|
||||
acc -8
|
||||
acc +18
|
||||
acc +35
|
||||
jmp -111
|
||||
acc +22
|
||||
acc +23
|
||||
acc +0
|
||||
acc -8
|
||||
jmp -55
|
||||
acc +14
|
||||
jmp +1
|
||||
acc +44
|
||||
acc +17
|
||||
jmp -272
|
||||
acc +39
|
||||
nop +37
|
||||
acc -19
|
||||
jmp -323
|
||||
acc +24
|
||||
acc +28
|
||||
acc +29
|
||||
acc +37
|
||||
jmp +110
|
||||
jmp -386
|
||||
nop -352
|
||||
acc +23
|
||||
acc +38
|
||||
jmp -369
|
||||
acc -5
|
||||
acc -14
|
||||
jmp +83
|
||||
jmp +17
|
||||
jmp -151
|
||||
jmp -118
|
||||
jmp -104
|
||||
jmp -341
|
||||
acc +32
|
||||
acc +43
|
||||
jmp -52
|
||||
acc -4
|
||||
acc +42
|
||||
acc +5
|
||||
jmp -116
|
||||
acc +13
|
||||
jmp +1
|
||||
nop -361
|
||||
acc +41
|
||||
jmp -386
|
||||
jmp -241
|
||||
nop -449
|
||||
acc +46
|
||||
jmp -176
|
||||
acc +6
|
||||
jmp +60
|
||||
jmp +1
|
||||
jmp -3
|
||||
jmp -62
|
||||
acc -14
|
||||
acc +17
|
||||
jmp -340
|
||||
acc +31
|
||||
acc -13
|
||||
acc +7
|
||||
jmp -54
|
||||
jmp -80
|
||||
acc +14
|
||||
acc +49
|
||||
acc +34
|
||||
jmp +24
|
||||
acc +11
|
||||
jmp -158
|
||||
acc -13
|
||||
jmp -261
|
||||
acc +33
|
||||
nop -171
|
||||
jmp -106
|
||||
acc +0
|
||||
acc +9
|
||||
acc +16
|
||||
acc +34
|
||||
jmp +18
|
||||
acc -2
|
||||
acc +47
|
||||
acc +39
|
||||
jmp -232
|
||||
acc +23
|
||||
nop -229
|
||||
acc +30
|
||||
acc +32
|
||||
jmp -147
|
||||
acc -8
|
||||
jmp -460
|
||||
jmp -498
|
||||
nop -218
|
||||
acc +31
|
||||
acc +44
|
||||
acc +30
|
||||
jmp -105
|
||||
acc +8
|
||||
acc -19
|
||||
acc +45
|
||||
nop -49
|
||||
jmp -140
|
||||
nop -43
|
||||
acc +42
|
||||
jmp +1
|
||||
acc -14
|
||||
jmp -42
|
||||
jmp -389
|
||||
acc +39
|
||||
acc +26
|
||||
acc +38
|
||||
jmp -77
|
||||
acc +48
|
||||
jmp -83
|
||||
acc +5
|
||||
jmp -81
|
||||
nop -242
|
||||
acc +35
|
||||
acc +0
|
||||
acc +19
|
||||
jmp -430
|
||||
acc +11
|
||||
nop -226
|
||||
acc +13
|
||||
acc +23
|
||||
jmp -575
|
||||
acc +44
|
||||
acc +50
|
||||
nop -303
|
||||
jmp -112
|
||||
jmp -305
|
||||
acc +23
|
||||
acc -11
|
||||
nop -376
|
||||
acc +50
|
||||
jmp +1
|
2
2020/08/solution.txt
Normal file
2
2020/08/solution.txt
Normal file
@ -0,0 +1,2 @@
|
||||
Part 1: 1782
|
||||
Part 2: 797
|
13
2020/08/test_code.py
Normal file
13
2020/08/test_code.py
Normal file
@ -0,0 +1,13 @@
|
||||
# SPDX-License-Identifier: MIT
|
||||
# Copyright (c) 2020 Akumatic
|
||||
|
||||
from code import part1, part2
|
||||
|
||||
def test():
|
||||
instructions = [["nop", "+0"], ["acc", "+1"], ["jmp", "+4"],
|
||||
["acc", "+3"], ["jmp", "-3"], ["acc", "-99"], ["acc", "+1"], ["jmp", "-4"], ["acc", "+6"]]
|
||||
assert(part1(instructions) == 5)
|
||||
assert part2(instructions) == 8
|
||||
|
||||
if __name__ == "__main__":
|
||||
test()
|
@ -18,7 +18,7 @@ Collect stars by solving puzzles. Two puzzles will be made available on each day
|
||||
| 01 | :white_check_mark: | :white_check_mark: || 02 | :white_check_mark: | :white_check_mark: |
|
||||
| 03 | :white_check_mark: | :white_check_mark: || 04 | :white_check_mark: | :white_check_mark: |
|
||||
| 05 | :white_check_mark: | :white_check_mark: || 06 | :white_check_mark: | :white_check_mark: |
|
||||
| 07 | :white_check_mark: | :white_check_mark: || 08 | | |
|
||||
| 07 | :white_check_mark: | :white_check_mark: || 08 | :white_check_mark: | :white_check_mark: |
|
||||
| 09 | | || 10 | | |
|
||||
| 11 | | || 12 | | |
|
||||
| 13 | | || 14 | | |
|
||||
|
Loading…
x
Reference in New Issue
Block a user