Initial commit
This commit is contained in:
commit
f242d2b0df
420 changed files with 62521 additions and 0 deletions
4
2020/.gitignore
vendored
Normal file
4
2020/.gitignore
vendored
Normal file
|
@ -0,0 +1,4 @@
|
|||
*\~
|
||||
compiled/
|
||||
a.out
|
||||
.gdb_history
|
34
2020/README.org
Normal file
34
2020/README.org
Normal file
|
@ -0,0 +1,34 @@
|
|||
* Advent of Code 2020
|
||||
|
||||
My answers for [[https://adventofcode.com/2020][Advent of Code 2020]].
|
||||
|
||||
| Day | [[https://racket-lang.org/][Racket]] | C | [[https://www.dyalog.com/][APL]] |
|
||||
|-------------+--------+-----+-----|
|
||||
| Day 1 | 2 | 2 | 2 |
|
||||
| Day 2 | 2 | 2 | 2 |
|
||||
| Day 3 | 2 | 2 | 2 |
|
||||
| Day 4 | 2 | | |
|
||||
| Day 5 | 2 | 2 | 2 |
|
||||
| Day 6 | 2 | 2 | 2 |
|
||||
| Day 7 | 2 | | 2 |
|
||||
| Day 8 | 2 | 2 | |
|
||||
| Day 9 | 2 | 2 | 2 |
|
||||
| Day 10 | 2 | 2 | 2 |
|
||||
| Day 11 | 2 | | 1 |
|
||||
| Day 12 | 2 | 2 | |
|
||||
| Day 13 | 2 | 2 | 2 |
|
||||
| Day 14 | 2 | 2 | |
|
||||
| Day 15 | 2 | 2 | |
|
||||
| Day 16 | 2 | | |
|
||||
| Day 17 | 2 | 2 | |
|
||||
| Day 18 | 2 | | 1 |
|
||||
| Day 19 | 2 | | |
|
||||
| Day 20 | 2 | | |
|
||||
| Day 21 | 2 | | |
|
||||
| Day 22 | 2 | | |
|
||||
| Day 23 | 2 | 2 | |
|
||||
| Day 24 | 2 | | |
|
||||
| Day 25 | 2 | 2 | |
|
||||
|-------------+--------+-----+-----|
|
||||
| *Total (%)* | 100 | 60. | 40. |
|
||||
#+TBLFM: @>$2..$4=50*vmean(@I..@II);ENn3
|
49
2020/day01/day01.c
Normal file
49
2020/day01/day01.c
Normal file
|
@ -0,0 +1,49 @@
|
|||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
|
||||
int main(int argc, char *argv[]) {
|
||||
if (argc < 2) {
|
||||
printf("Usage: %s <input file>\n", argv[0]);
|
||||
return 0;
|
||||
}
|
||||
|
||||
FILE *fp = fopen(argv[1], "r");
|
||||
if (fp == NULL) {
|
||||
printf("Could not open file %s\n", argv[1]);
|
||||
return 1;
|
||||
}
|
||||
|
||||
int input[1024] = {0};
|
||||
int d;
|
||||
int n = 0;
|
||||
while (fscanf(fp, "%d\n", &d) == 1) {
|
||||
input[n] = d;
|
||||
n++;
|
||||
}
|
||||
fclose(fp);
|
||||
|
||||
int res = -1;
|
||||
for (int i = 0; i < n && res == -1; ++i) {
|
||||
for (int j = 0; j < n && res == -1; ++j) {
|
||||
if (input[i] + input[j] == 2020) {
|
||||
res = input[i] * input[j];
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
printf("%d\n", res);
|
||||
|
||||
res = -1;
|
||||
for (int i = 0; i < n && res == -1; ++i) {
|
||||
for (int j = 0; j < n && res == -1; ++j) {
|
||||
for (int k = 0; k < n && res == -1; ++k) {
|
||||
if (input[i] + input[j] + input[k] == 2020) {
|
||||
res = input[i] * input[j] * input[k];
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
printf("%d\n", res);
|
||||
|
||||
return 0;
|
||||
}
|
6
2020/day01/day01.dyalog
Normal file
6
2020/day01/day01.dyalog
Normal file
|
@ -0,0 +1,6 @@
|
|||
⎕io←0
|
||||
x←⍎¨⊃⎕nget'input'1
|
||||
⍝ Part 1
|
||||
×/x[⊃⍸2020=x∘.+x]
|
||||
⍝ Part 2
|
||||
×/x[⊃⍸2020=⊃∘.+/3⍴⊂x]
|
37
2020/day01/day01.rkt
Normal file
37
2020/day01/day01.rkt
Normal file
|
@ -0,0 +1,37 @@
|
|||
#lang racket
|
||||
|
||||
(module+ test
|
||||
(require rackunit))
|
||||
|
||||
(module+ main
|
||||
(displayln "Day 1"))
|
||||
|
||||
(define (read-input filename)
|
||||
(map string->number (file->lines filename)))
|
||||
|
||||
(define (part1 filename)
|
||||
(define expenses (read-input filename))
|
||||
(for*/last ([a (in-list expenses)]
|
||||
[b (in-list expenses)]
|
||||
#:final (= 2020 (+ a b)))
|
||||
(* a b)))
|
||||
|
||||
(module+ test
|
||||
(check-eq? (part1 "test") 514579))
|
||||
|
||||
(module+ main
|
||||
(displayln (part1 "input")))
|
||||
|
||||
(define (part2 filename)
|
||||
(define expenses (read-input filename))
|
||||
(for*/last ([a (in-list expenses)]
|
||||
[b (in-list expenses)]
|
||||
[c (in-list expenses)]
|
||||
#:final (= 2020 (+ a b c)))
|
||||
(* a b c)))
|
||||
|
||||
(module+ test
|
||||
(check-eq? (part2 "test") 241861950))
|
||||
|
||||
(module+ main
|
||||
(displayln (part2 "input")))
|
200
2020/day01/input
Normal file
200
2020/day01/input
Normal file
|
@ -0,0 +1,200 @@
|
|||
1688
|
||||
1463
|
||||
1461
|
||||
1842
|
||||
1441
|
||||
1838
|
||||
1583
|
||||
1891
|
||||
1876
|
||||
1551
|
||||
1506
|
||||
2005
|
||||
1989
|
||||
1417
|
||||
1784
|
||||
1975
|
||||
1428
|
||||
1485
|
||||
1597
|
||||
1871
|
||||
105
|
||||
788
|
||||
1971
|
||||
1892
|
||||
1854
|
||||
1466
|
||||
1584
|
||||
1565
|
||||
1400
|
||||
1640
|
||||
1780
|
||||
1774
|
||||
360
|
||||
1421
|
||||
1368
|
||||
1771
|
||||
1666
|
||||
1707
|
||||
1627
|
||||
1449
|
||||
1677
|
||||
1504
|
||||
1721
|
||||
1994
|
||||
1959
|
||||
1862
|
||||
1768
|
||||
1986
|
||||
1904
|
||||
1382
|
||||
1969
|
||||
1852
|
||||
1917
|
||||
1966
|
||||
1742
|
||||
1371
|
||||
1405
|
||||
1995
|
||||
1906
|
||||
1694
|
||||
1735
|
||||
1422
|
||||
1719
|
||||
1978
|
||||
1641
|
||||
1761
|
||||
1567
|
||||
1974
|
||||
1495
|
||||
1973
|
||||
1958
|
||||
1599
|
||||
1770
|
||||
1600
|
||||
1465
|
||||
1865
|
||||
1479
|
||||
1687
|
||||
1390
|
||||
1802
|
||||
2008
|
||||
645
|
||||
1435
|
||||
1589
|
||||
1949
|
||||
1909
|
||||
1526
|
||||
1667
|
||||
1831
|
||||
1864
|
||||
1713
|
||||
1718
|
||||
1232
|
||||
1868
|
||||
1884
|
||||
1825
|
||||
1999
|
||||
1590
|
||||
1759
|
||||
1391
|
||||
1757
|
||||
323
|
||||
1612
|
||||
1637
|
||||
1727
|
||||
1783
|
||||
1643
|
||||
1442
|
||||
1452
|
||||
675
|
||||
1812
|
||||
1604
|
||||
1518
|
||||
1894
|
||||
1933
|
||||
1801
|
||||
1914
|
||||
912
|
||||
1576
|
||||
1961
|
||||
1970
|
||||
1446
|
||||
1985
|
||||
1988
|
||||
1563
|
||||
1826
|
||||
1409
|
||||
1503
|
||||
1539
|
||||
1832
|
||||
1698
|
||||
1990
|
||||
1689
|
||||
1532
|
||||
765
|
||||
1546
|
||||
1384
|
||||
1519
|
||||
1615
|
||||
1556
|
||||
1754
|
||||
1983
|
||||
1394
|
||||
1763
|
||||
1823
|
||||
1788
|
||||
1407
|
||||
1946
|
||||
1751
|
||||
1837
|
||||
1680
|
||||
1929
|
||||
1814
|
||||
1948
|
||||
1919
|
||||
1953
|
||||
55
|
||||
1731
|
||||
1516
|
||||
1895
|
||||
1795
|
||||
1890
|
||||
1881
|
||||
1799
|
||||
1536
|
||||
1396
|
||||
1942
|
||||
1798
|
||||
1767
|
||||
1745
|
||||
1883
|
||||
2004
|
||||
1550
|
||||
1916
|
||||
1650
|
||||
1749
|
||||
1991
|
||||
1789
|
||||
1740
|
||||
1490
|
||||
1873
|
||||
1003
|
||||
1699
|
||||
1669
|
||||
1781
|
||||
2000
|
||||
1728
|
||||
1877
|
||||
1733
|
||||
1588
|
||||
1168
|
||||
1828
|
||||
1848
|
||||
1963
|
||||
1928
|
||||
1920
|
||||
1493
|
||||
1968
|
||||
1564
|
||||
1572
|
6
2020/day01/test
Normal file
6
2020/day01/test
Normal file
|
@ -0,0 +1,6 @@
|
|||
1721
|
||||
979
|
||||
366
|
||||
299
|
||||
675
|
||||
1456
|
45
2020/day02/day02.c
Normal file
45
2020/day02/day02.c
Normal file
|
@ -0,0 +1,45 @@
|
|||
#include <stdbool.h>
|
||||
#include <stdio.h>
|
||||
|
||||
bool is_valid_part1(int lower, int upper, char key, char *pass) {
|
||||
int count = 0;
|
||||
for (char *c = pass; *c != 0; ++c) {
|
||||
if (*c == key) {
|
||||
count++;
|
||||
}
|
||||
}
|
||||
return (count >= lower) && (count <= upper);
|
||||
}
|
||||
|
||||
bool is_valid_part2(int pos1, int pos2, char key, char *pass) {
|
||||
return (pass[pos1 - 1] == key) ^ (pass[pos2 - 1] == key);
|
||||
}
|
||||
|
||||
int main(int argc, char *argv[]) {
|
||||
if (argc < 2) {
|
||||
printf("Usage: %s <input file>\n", argv[0]);
|
||||
return 0;
|
||||
}
|
||||
FILE *input = fopen(argv[1], "r");
|
||||
|
||||
int lower, upper;
|
||||
char key;
|
||||
char pass[256];
|
||||
|
||||
int count1 = 0;
|
||||
int count2 = 0;
|
||||
|
||||
while (fscanf(input, "%d-%d %c: %s", &lower, &upper, &key, pass) == 4) {
|
||||
if (is_valid_part1(lower, upper, key, pass)) {
|
||||
count1++;
|
||||
}
|
||||
if (is_valid_part2(lower, upper, key, pass)) {
|
||||
count2++;
|
||||
}
|
||||
}
|
||||
|
||||
printf("Part 1: %d\n", count1);
|
||||
printf("Part 2: %d\n", count2);
|
||||
|
||||
return 0;
|
||||
}
|
3
2020/day02/day02.dyalog
Normal file
3
2020/day02/day02.dyalog
Normal file
|
@ -0,0 +1,3 @@
|
|||
p←↑¨{⍵⊆⍨~⍵∊':- '}¨⊃⎕NGET'input'1
|
||||
+/{((⍎1⌷⍵),1+⍎2⌷⍵)(1=⍸)+/(⊃3⌷⍵)⍷4⌷⍵}¨p ⍝ Part 1
|
||||
+/{≠/(⊃3⌷⍵)=(4⌷⍵)[⍎¨↓(⊂1 2)⌷⍵]}¨p ⍝ Part 2
|
61
2020/day02/day02.rkt
Normal file
61
2020/day02/day02.rkt
Normal file
|
@ -0,0 +1,61 @@
|
|||
#lang racket
|
||||
|
||||
(module+ test
|
||||
(require rackunit))
|
||||
|
||||
(module+ main
|
||||
(displayln "Day 2"))
|
||||
|
||||
(struct policy
|
||||
(lower upper char)
|
||||
#:transparent)
|
||||
|
||||
(define (parse-line str)
|
||||
(define lst (string-split str #px"(\\s+|:\\s+|-)"))
|
||||
(values (policy (string->number (first lst))
|
||||
(string->number (second lst))
|
||||
(car (string->list (third lst))))
|
||||
(last lst)))
|
||||
|
||||
(define (read-input filename)
|
||||
(with-input-from-file filename
|
||||
(lambda ()
|
||||
(for/lists (policies passwords)
|
||||
([line (in-lines)])
|
||||
(parse-line line)))))
|
||||
|
||||
(define (valid? pol pass)
|
||||
(define cnt (count (λ (x) (equal? x (policy-char pol)))
|
||||
(string->list pass)))
|
||||
(and (<= (policy-lower pol) cnt)
|
||||
(>= (policy-upper pol) cnt)))
|
||||
|
||||
(define (part1 filename)
|
||||
(define-values (policies passwords) (read-input filename))
|
||||
(for/sum ([pol policies]
|
||||
[pass passwords]
|
||||
#:when (valid? pol pass))
|
||||
1))
|
||||
|
||||
(module+ test
|
||||
(check-equal? (part1 "test") 2))
|
||||
|
||||
(module+ main
|
||||
(displayln (part1 "input")))
|
||||
|
||||
(define (new-valid? pol pass)
|
||||
(xor (equal? (string-ref pass (sub1 (policy-lower pol))) (policy-char pol))
|
||||
(equal? (string-ref pass (sub1 (policy-upper pol))) (policy-char pol))))
|
||||
|
||||
(define (part2 filename)
|
||||
(define-values (policies passwords) (read-input filename))
|
||||
(for/sum ([pol policies]
|
||||
[pass passwords]
|
||||
#:when (new-valid? pol pass))
|
||||
1))
|
||||
|
||||
(module+ test
|
||||
(check-equal? (part2 "test") 1))
|
||||
|
||||
(module+ main
|
||||
(displayln (part2 "input")))
|
1000
2020/day02/input
Normal file
1000
2020/day02/input
Normal file
File diff suppressed because it is too large
Load diff
3
2020/day02/test
Normal file
3
2020/day02/test
Normal file
|
@ -0,0 +1,3 @@
|
|||
1-3 a: abcde
|
||||
1-3 b: cdefg
|
||||
2-9 c: ccccccccc
|
79
2020/day03/day03.c
Normal file
79
2020/day03/day03.c
Normal file
|
@ -0,0 +1,79 @@
|
|||
#include <stdbool.h>
|
||||
#include <stdio.h>
|
||||
|
||||
int count_lines(FILE *fp) {
|
||||
int count = 0;
|
||||
|
||||
for (char c = getc(fp); c != EOF; c = getc(fp)) {
|
||||
if (c == '\n') {
|
||||
count++;
|
||||
}
|
||||
}
|
||||
return count;
|
||||
}
|
||||
|
||||
int line_length(FILE *fp) {
|
||||
int count = 0;
|
||||
|
||||
for (char c = getc(fp); c != '\n'; c = getc(fp)) {
|
||||
count++;
|
||||
}
|
||||
|
||||
return count;
|
||||
}
|
||||
|
||||
int count_trees(int n, int m, int grid[n][m], int down_offset, int right_offset) {
|
||||
int count = 0;
|
||||
|
||||
for (int i = 0; i < n / down_offset; ++i) {
|
||||
count += grid[i * down_offset][i * right_offset % m];
|
||||
}
|
||||
|
||||
return count;
|
||||
}
|
||||
|
||||
int main(int argc, char *argv[])
|
||||
{
|
||||
if (argc < 2) {
|
||||
printf("Usage: %s <input file>\n", argv[0]);
|
||||
return 0;
|
||||
}
|
||||
|
||||
FILE *fp = fopen(argv[1], "r");
|
||||
if (fp == NULL) {
|
||||
printf("Could not open file %s\n", argv[1]);
|
||||
return 1;
|
||||
}
|
||||
|
||||
int n = count_lines(fp);
|
||||
rewind(fp);
|
||||
int m = line_length(fp);
|
||||
rewind(fp);
|
||||
|
||||
printf("Grid size: %d×%d\n", n, m);
|
||||
|
||||
int grid[n][m];
|
||||
char c;
|
||||
for (int i = 0; i < n; ++i) {
|
||||
for (int j = 0; j < m; ++j) {
|
||||
c = getc(fp);
|
||||
if (c == '\n' || c == EOF) {
|
||||
c = getc(fp);
|
||||
}
|
||||
grid[i][j] = (c == '#');
|
||||
}
|
||||
}
|
||||
fclose(fp);
|
||||
|
||||
printf("%d\n", count_trees(n, m, grid, 1, 3));
|
||||
|
||||
int total = 1;
|
||||
int down_offsets[] = {1, 1, 1, 1, 2};
|
||||
int right_offsets[] = {1, 3, 5, 7, 1};
|
||||
for (int i = 0; i < 5; ++i) {
|
||||
total *= count_trees(n, m, grid, down_offsets[i], right_offsets[i]);
|
||||
}
|
||||
printf("%d\n", total);
|
||||
|
||||
return 0;
|
||||
}
|
5
2020/day03/day03.dyalog
Normal file
5
2020/day03/day03.dyalog
Normal file
|
@ -0,0 +1,5 @@
|
|||
⎕io←0
|
||||
p←'#'=↑⊃⎕NGET'input'1
|
||||
f←{+/p[↓⍉↑(⍴p)|⍵×2⍴⊂⍳⌈(⊃⍴p)÷⊃⍵]}
|
||||
f 1 3 ⍝ Part 1
|
||||
×/f¨(1 1)(1 3)(1 5)(1 7)(2 1) ⍝ Part 2
|
52
2020/day03/day03.rkt
Normal file
52
2020/day03/day03.rkt
Normal file
|
@ -0,0 +1,52 @@
|
|||
#lang racket
|
||||
|
||||
(module+ test
|
||||
(require rackunit))
|
||||
|
||||
(module+ main
|
||||
(displayln "Day 3"))
|
||||
|
||||
(define (parse-line str)
|
||||
(list->vector
|
||||
(map (λ (c) (if (equal? c #\#) 1 0)) (string->list str))))
|
||||
|
||||
(define (read-input filename)
|
||||
(with-input-from-file filename
|
||||
(lambda ()
|
||||
(for/vector ([line (in-lines)])
|
||||
(parse-line line)))))
|
||||
|
||||
(define (traj grid down right)
|
||||
(define height (vector-length grid))
|
||||
(define width (vector-length (vector-ref grid 0)))
|
||||
(for/list ([line (in-vector grid 0 #f down)]
|
||||
[j (in-range 0 (* width height right) right)])
|
||||
(vector-ref line (remainder j width))))
|
||||
|
||||
(define (part1 filename)
|
||||
(define grid (read-input filename))
|
||||
(apply + (traj grid 1 3)))
|
||||
|
||||
(module+ test
|
||||
(check-equal? (part1 "test") 7))
|
||||
|
||||
(module+ main
|
||||
(displayln (part1 "input")))
|
||||
|
||||
(define slopes
|
||||
'((1 1)
|
||||
(1 3)
|
||||
(1 5)
|
||||
(1 7)
|
||||
(2 1)))
|
||||
|
||||
(define (part2 filename)
|
||||
(define grid (read-input filename))
|
||||
(for/product ([slope slopes])
|
||||
(apply + (traj grid (car slope) (cadr slope)))))
|
||||
|
||||
(module+ test
|
||||
(check-equal? (part2 "test") 336))
|
||||
|
||||
(module+ main
|
||||
(displayln (part2 "input")))
|
323
2020/day03/input
Normal file
323
2020/day03/input
Normal file
|
@ -0,0 +1,323 @@
|
|||
...........#..............##...
|
||||
...#....................#......
|
||||
.....####...........#.#..#.#...
|
||||
....##.#.......................
|
||||
.......#.##......#.###.........
|
||||
.#.....#.......##.......#.....#
|
||||
...........##....##.#....#.....
|
||||
......#.........#....#.........
|
||||
..###....#.........#....#.#....
|
||||
....#....#.#..#..#.........#.#.
|
||||
..........................#...#
|
||||
.##...........#...#.#.......#..
|
||||
#....##...#.#....#.............
|
||||
....#..##......##..#.#....#....
|
||||
#..........#.............#..#.#
|
||||
...#.####.....#..#.#.#..#...#..
|
||||
..........#......#........#..#.
|
||||
............#.....#..#..#....#.
|
||||
.................#...#.........
|
||||
..#...#...................#....
|
||||
..............##...#...........
|
||||
..........................#..#.
|
||||
#...#...#............#...#.....
|
||||
.................#..##.......#.
|
||||
............#....#.............
|
||||
.#......#.#...#....#...#.......
|
||||
.....#.....##..##.....#.......#
|
||||
.#..#..##...............#..#...
|
||||
#...#...##............#........
|
||||
.......#....#.......#..........
|
||||
...............................
|
||||
#................#...#.........
|
||||
...#...#..#..#.............##.#
|
||||
......#........#..............#
|
||||
...#.....##.#...#...#..........
|
||||
.........#..#........##.#...##.
|
||||
#.........##..#.......#........
|
||||
........##.#.#.................
|
||||
.#....#............###....#....
|
||||
...#.##....#.....##..#..#....#.
|
||||
....#..#........##..#...#..##..
|
||||
..........#............#.......
|
||||
.........#........##....#..##..
|
||||
#....#.........#.#.......#..#..
|
||||
...#....#......##.#............
|
||||
........#..#...............#...
|
||||
..............#.....#........#.
|
||||
......#..#.#........#..#..#.##.
|
||||
..#........###....#.#..........
|
||||
...#..#...#.#....##..#........#
|
||||
........#..#..............#....
|
||||
#.####.................#....##.
|
||||
.#................#............
|
||||
....#....#....#................
|
||||
#......#........##....#...#....
|
||||
......#..##..#..###...#.#.#....
|
||||
.#..........##.................
|
||||
...#...#....#...#.....#.....#..
|
||||
............#......##.........#
|
||||
..............##...............
|
||||
##....#....#...#...#....#..###.
|
||||
...................#.......##..
|
||||
#.....##........#....#.........
|
||||
...#.......#...........#.......
|
||||
...............##..............
|
||||
##.......#......#.....#........
|
||||
#....#..#..##..#.......#..#..#.
|
||||
.....#.............#.......#...
|
||||
......#..#........#.......#.#..
|
||||
..#...#...........#.##.........
|
||||
..#................####.#..#...
|
||||
......##....#.........#........
|
||||
..#..#.......#...##....#......#
|
||||
#.#..........#..............#.#
|
||||
.#.#..............#.##...#.....
|
||||
................#.....#.#......
|
||||
##.........#.........#.....#...
|
||||
....#.#.....................#..
|
||||
..#..#..#........#.......#.....
|
||||
.....#..#.#....#....#.....#....
|
||||
..####....#.#.........#........
|
||||
#..##...##..#.#............#..#
|
||||
.#........#..##.#.....#......##
|
||||
.##.##.....##....#.#...........
|
||||
....#..#.#..##............#.#..
|
||||
........#.#...#....#.........#.
|
||||
.....#.#.#.....#....#.....##...
|
||||
#...#..#....##..#..............
|
||||
..#...#....#...##..#.......#...
|
||||
.#....##.......................
|
||||
.........#............##.#..#..
|
||||
....#................#...#.#...
|
||||
...................#..#...#....
|
||||
#..#...................#.......
|
||||
..##..............#..........##
|
||||
...#.##......#.............#...
|
||||
.........#.#.........#.........
|
||||
...###......#.................#
|
||||
..........#....##..............
|
||||
.##..#....#.........#.#........
|
||||
.........#.......#.......#.#...
|
||||
#........#............#......#.
|
||||
....................#..........
|
||||
.......#...##..........#...#...
|
||||
....#.#.......#.#...##..#.#....
|
||||
...#..........#..............#.
|
||||
........##..............#......
|
||||
......#...##......#....##......
|
||||
....#.....#.#.##..............#
|
||||
...#...........#.#.............
|
||||
...........#......#.#..........
|
||||
...#.#......#......#...#...#...
|
||||
..#.......................#....
|
||||
...#...#..#..................#.
|
||||
##.....#.....#..#..#.....#...#.
|
||||
.#..#.......##.#.#.............
|
||||
......##.......##............#.
|
||||
.......#..#..#.......#....#.#..
|
||||
......#.....##..##...#........#
|
||||
.....#........#.##..........#..
|
||||
#....##............#........#..
|
||||
.....#..#...#............#...#.
|
||||
##.#....#........#.............
|
||||
.##...............##......#.#..
|
||||
###..#..#.......#.#..........#.
|
||||
.....#...........#...##........
|
||||
..#.#.#.........#.....#....#...
|
||||
.....#....##.......#..#.#......
|
||||
......#.....#...#..#...##..#...
|
||||
.....#....#................#...
|
||||
......#....#.#...##......##.#.#
|
||||
.....###.............#.........
|
||||
.................#......#####..
|
||||
.#.......#..........#.#....##..
|
||||
..#..#.......#.....#..#......##
|
||||
..........#.#.##.......##....#.
|
||||
##...#...##.##......#..###.....
|
||||
..#..#..#......#....#..........
|
||||
..#...#....#......#....#....#.#
|
||||
.#...#........#.....#......#..#
|
||||
#.........#......#.##.##.......
|
||||
#.##..#.............#.....#....
|
||||
....#.......#..#..##...##......
|
||||
...#.............#.#......#....
|
||||
#.....#..........##...##.....#.
|
||||
...............#........#....#.
|
||||
#.....#...#..#.............##..
|
||||
.#....##.#.......#.#..........#
|
||||
....#....#.#.....#....#......#.
|
||||
......#......#.................
|
||||
.#.#..#.#.#...#...#..#.##.#..##
|
||||
.............#.....#...........
|
||||
............#...#..#..#.....#..
|
||||
.#..........#.......#....#.....
|
||||
......#..###.#...#.............
|
||||
......#..........#.............
|
||||
....#.................#..#.#.#.
|
||||
...##.##.#....##.##............
|
||||
####......#........###......#..
|
||||
..#.......#.#..#.##............
|
||||
.....#.....#.#.......#.....#...
|
||||
.....#..........#.#............
|
||||
#.....#.............#......##..
|
||||
......##..........##....#......
|
||||
.#..............#..........#...
|
||||
......#..#...#........#..#....#
|
||||
.#......#.......#..#...........
|
||||
..#..#....#.#.......#....##..#.
|
||||
........#.#................#...
|
||||
#.......#.##.#......#...#.....#
|
||||
..#...#.#.....##...............
|
||||
..........#.....##.............
|
||||
.......#............#........#.
|
||||
...#............#......#......#
|
||||
.#..#.......#...#...#..#..#....
|
||||
#....#.#...#......#...#......#.
|
||||
.#.......#..#.#...........#....
|
||||
...##.#...#.......#..........#.
|
||||
.....#..............#..#...#...
|
||||
...........................#...
|
||||
.............#.....#...........
|
||||
....#.#..#..#...#..#...........
|
||||
.....#.#.#..#.#....#.#.#.......
|
||||
.......#..............#.....##.
|
||||
........#..#..#.#..#...#.#.....
|
||||
.....#.#...#.#.#.....#..#...#..
|
||||
.....#....#.......#......#.#...
|
||||
.#.#...........#........#......
|
||||
.##..##......#......#......#.#.
|
||||
.....#.###.#.......##.#..#.....
|
||||
#.......##..#.........#....#...
|
||||
.#.............#.........#.#.#.
|
||||
..........#..#..#....#....#....
|
||||
#....#...........##..#.....#..#
|
||||
......#....#...###..#...#......
|
||||
.....#....#........#....#..#...
|
||||
...##..............#.##...#....
|
||||
.#............#........##......
|
||||
..##........#.#...........#...#
|
||||
..#.#...##...#..#..........##..
|
||||
.................#.......#.....
|
||||
......#.....#............#.....
|
||||
.#.....#.........#.#..#.#......
|
||||
.............#.#.#..#.......#.#
|
||||
#......#.....#..##...#.......#.
|
||||
.......#.#..#...#.........#....
|
||||
...#..##...#.........#.#....#..
|
||||
........................#..#...
|
||||
....##..##................#....
|
||||
.......#..#.......#........##..
|
||||
.....#....#.##....#............
|
||||
.#....#............#.....#...#.
|
||||
..##.....#......#......#.#....#
|
||||
...#...........#...##....#.....
|
||||
......#.##.#..##...##.#.#..##..
|
||||
.......##....#......#....#.#...
|
||||
.....####..#............#..##..
|
||||
......##..##..##.........#...#.
|
||||
.#.#...............#.........#.
|
||||
......#......#...........#.....
|
||||
.....#.......##.....#..#.......
|
||||
.....##..#..#....#.#.......#...
|
||||
...........###.###.##..#.#..#..
|
||||
.#...............##.........#..
|
||||
......##..........#..#.....##.#
|
||||
.............#....#....#..##...
|
||||
.#..............#........#.....
|
||||
.#..#.........................#
|
||||
.##..............#..........#..
|
||||
..#..#.#.#.#......#............
|
||||
....#...#.#.#....#........#..#.
|
||||
.....#........#....#.....#.....
|
||||
.#...#.#......#..#........#.##.
|
||||
.......#.....#................#
|
||||
.#.#........................#..
|
||||
............#..#.......#.......
|
||||
....##.#........#...#.#.#.#.#..
|
||||
.....#.......##................
|
||||
...##...#....#.....#.#.........
|
||||
#...#..............#.......#...
|
||||
...#.#.#.#..##....##...........
|
||||
.....##...#....#.....#.........
|
||||
#......#.....#....#............
|
||||
....#..###....#.##.......#...#.
|
||||
..................##.#......#..
|
||||
.....##..............##.#....#.
|
||||
.........#...#........#..#....#
|
||||
.##..#.........#....#..##...#..
|
||||
#.#.##................#.##.....
|
||||
..#.#....#.#.......#....#......
|
||||
..#.#.##.#.......#.............
|
||||
..#....#.#..##.#..........#.#..
|
||||
#.....#.....#.....#.........#..
|
||||
#.......##.....#....##.....#...
|
||||
..#...#.........##.#..##.......
|
||||
..#.#.........#.......#........
|
||||
#.....#.....##.#.#..#...#..#.##
|
||||
.........................#.##..
|
||||
..#.#..#..#..#........#......#.
|
||||
..#..............#.............
|
||||
.....#.......##.##.....#.......
|
||||
....#...#...............#..#...
|
||||
....#......#.#........##.#..#.#
|
||||
....................#..#.......
|
||||
.....#.......#......#.##.......
|
||||
#.......##..........#.....#....
|
||||
.#.......#....#.#......#.......
|
||||
......#...#...............#.##.
|
||||
....##.#.....#.............#.##
|
||||
#..#................##...#.....
|
||||
....###......#.#.........#..#..
|
||||
...#...#......#...##....#...#.#
|
||||
..#...#.#.##.#.................
|
||||
.....##......#..#.#....#.......
|
||||
##.......#......#.#..#.#.......
|
||||
.#.#.#.........#...#.#..#......
|
||||
#...#.#........#....#.#.....#..
|
||||
....#.......##....#......##....
|
||||
.....#..........#......#....#..
|
||||
#...#....#...#.....#.#.........
|
||||
...#..##.....##....#.....#.#...
|
||||
..................#.....##.....
|
||||
.....#............#............
|
||||
...#.....#..#........#.#..##...
|
||||
.......#.#.....................
|
||||
......#...#.......#..#...#..#..
|
||||
.#..#...#.....##.....#.#.#....#
|
||||
....##...#.#............#..#..#
|
||||
...........#............#..#...
|
||||
.......#.....#................#
|
||||
..#......#.#.......#.#.........
|
||||
.....#..#.#.##.................
|
||||
.....#..#......................
|
||||
...#....#...#..#.#..#....#.....
|
||||
.#............#.....#..........
|
||||
#.##..#..#.......#......#.....#
|
||||
.#.........#....#....#.........
|
||||
...#.#.#........#.#....#...#...
|
||||
#........#..#..#..........#..#.
|
||||
.....#..#.....##......##..##.#.
|
||||
..............#.......#..#..#..
|
||||
....#........#.##.#...#........
|
||||
..#.#..#....#........##.....##.
|
||||
...##.....#...#.......#.#....#.
|
||||
#.....#..##.##.#...##.......#..
|
||||
.....#........#.#.#....#.......
|
||||
.#................#####..#.#...
|
||||
..........##..#..###....#......
|
||||
.....#.......#..........#..#...
|
||||
..#....#....................#..
|
||||
#.....#..#.....#...##.#.....#.#
|
||||
...#..##............#.....#....
|
||||
##.#..#.......##...............
|
||||
........##...#.#.....#......#..
|
||||
........#...#..................
|
||||
#......#................#.#....
|
||||
...........#...#..#.........#..
|
||||
...#.##..#.##..................
|
||||
.....#......###......#..#......
|
||||
..#.#.....#...#..#.##........#.
|
||||
....#..........#.#.....#.......
|
||||
..#..........#..........#.#....
|
||||
..#.##.......#......#..........
|
11
2020/day03/test
Normal file
11
2020/day03/test
Normal file
|
@ -0,0 +1,11 @@
|
|||
..##.......
|
||||
#...#...#..
|
||||
.#....#..#.
|
||||
..#.#...#.#
|
||||
.#...##..#.
|
||||
..#.##.....
|
||||
.#.#.#....#
|
||||
.#........#
|
||||
#.##...#...
|
||||
#...##....#
|
||||
.#..#...#.#
|
99
2020/day04/day04.rkt
Normal file
99
2020/day04/day04.rkt
Normal file
|
@ -0,0 +1,99 @@
|
|||
#lang racket
|
||||
|
||||
(module+ test
|
||||
(require rackunit))
|
||||
|
||||
(module+ main
|
||||
(displayln "Day 4"))
|
||||
|
||||
(define (parse-passport str)
|
||||
(define fields (string-split str #px"\\s+"))
|
||||
(for/hash ([f fields])
|
||||
(apply values (string-split f ":"))))
|
||||
|
||||
(define (read-input filename)
|
||||
(define passports-str (string-split (file->string filename) "\n\n"))
|
||||
(map parse-passport passports-str))
|
||||
|
||||
(define (valid? passport)
|
||||
(for/and ([key '("byr" "iyr" "eyr" "hgt" "hcl" "ecl" "pid")])
|
||||
(hash-has-key? passport key)))
|
||||
|
||||
(define (part1 filename)
|
||||
(define passports (read-input filename))
|
||||
(length (filter valid? passports)))
|
||||
|
||||
(module+ test
|
||||
(check-equal? (part1 "test") 2))
|
||||
|
||||
(module+ main
|
||||
(displayln (part1 "input")))
|
||||
|
||||
(define (byr-valid? v)
|
||||
(<= 1920 (string->number v) 2002))
|
||||
|
||||
(module+ test
|
||||
(check-pred byr-valid? "2002")
|
||||
(check-pred (negate byr-valid?) "2003"))
|
||||
|
||||
(define (iyr-valid? v)
|
||||
(<= 2010 (string->number v) 2020))
|
||||
|
||||
(define (eyr-valid? v)
|
||||
(<= 2020 (string->number v) 2030))
|
||||
|
||||
(define (hgt-valid? v)
|
||||
(cond
|
||||
[(string-suffix? v "cm") (<= 150 (string->number (string-trim v "cm")) 193)]
|
||||
[(string-suffix? v "in") (<= 59 (string->number (string-trim v "in")) 76)]
|
||||
[else #f]))
|
||||
|
||||
(module+ test
|
||||
(check-pred hgt-valid? "60in")
|
||||
(check-pred hgt-valid? "190cm")
|
||||
(check-pred (negate hgt-valid?) "190in")
|
||||
(check-pred (negate hgt-valid?) "190"))
|
||||
|
||||
(define (hcl-valid? v)
|
||||
(regexp-match-exact? #px"#[0-9a-f]{6}" v))
|
||||
|
||||
(module+ test
|
||||
(check-pred hcl-valid? "#123abc")
|
||||
(check-pred (negate hcl-valid?) "#123abz")
|
||||
(check-pred (negate hcl-valid?) "123abc"))
|
||||
|
||||
(define (ecl-valid? v)
|
||||
(member v '("amb" "blu" "brn" "gry" "grn" "hzl" "oth")))
|
||||
|
||||
(module+ test
|
||||
(check-pred ecl-valid? "brn")
|
||||
(check-pred (negate ecl-valid?) "wat"))
|
||||
|
||||
(define (pid-valid? v)
|
||||
(regexp-match-exact? #px"[0-9]{9}" v))
|
||||
|
||||
(module+ test
|
||||
(check-pred pid-valid? "000000001")
|
||||
(check-pred (negate pid-valid?) "0123456789"))
|
||||
|
||||
(define (strict-valid? passport)
|
||||
(and (for/and ([key '("byr" "iyr" "eyr" "hgt" "hcl" "ecl" "pid")])
|
||||
(hash-has-key? passport key))
|
||||
(byr-valid? (hash-ref passport "byr"))
|
||||
(iyr-valid? (hash-ref passport "iyr"))
|
||||
(eyr-valid? (hash-ref passport "eyr"))
|
||||
(hgt-valid? (hash-ref passport "hgt"))
|
||||
(hcl-valid? (hash-ref passport "hcl"))
|
||||
(ecl-valid? (hash-ref passport "ecl"))
|
||||
(pid-valid? (hash-ref passport "pid"))))
|
||||
|
||||
(define (part2 filename)
|
||||
(define passports (read-input filename))
|
||||
(length (filter strict-valid? passports)))
|
||||
|
||||
(module+ test
|
||||
(check-equal? (part2 "valid") 4)
|
||||
(check-equal? (part2 "invalid") 0))
|
||||
|
||||
(module+ main
|
||||
(displayln (part2 "input")))
|
1069
2020/day04/input
Normal file
1069
2020/day04/input
Normal file
File diff suppressed because it is too large
Load diff
13
2020/day04/invalid
Normal file
13
2020/day04/invalid
Normal file
|
@ -0,0 +1,13 @@
|
|||
eyr:1972 cid:100
|
||||
hcl:#18171d ecl:amb hgt:170 pid:186cm iyr:2018 byr:1926
|
||||
|
||||
iyr:2019
|
||||
hcl:#602927 eyr:1967 hgt:170cm
|
||||
ecl:grn pid:012533040 byr:1946
|
||||
|
||||
hcl:dab227 iyr:2012
|
||||
ecl:brn hgt:182cm pid:021572410 eyr:2020 byr:1992 cid:277
|
||||
|
||||
hgt:59cm ecl:zzz
|
||||
eyr:2038 hcl:74454a iyr:2023
|
||||
pid:3556412378 byr:2007
|
13
2020/day04/test
Normal file
13
2020/day04/test
Normal file
|
@ -0,0 +1,13 @@
|
|||
ecl:gry pid:860033327 eyr:2020 hcl:#fffffd
|
||||
byr:1937 iyr:2017 cid:147 hgt:183cm
|
||||
|
||||
iyr:2013 ecl:amb cid:350 eyr:2023 pid:028048884
|
||||
hcl:#cfa07d byr:1929
|
||||
|
||||
hcl:#ae17e1 iyr:2013
|
||||
eyr:2024
|
||||
ecl:brn pid:760753108 byr:1931
|
||||
hgt:179cm
|
||||
|
||||
hcl:#cfa07d eyr:2025 pid:166559648
|
||||
iyr:2011 ecl:brn hgt:59in
|
12
2020/day04/valid
Normal file
12
2020/day04/valid
Normal file
|
@ -0,0 +1,12 @@
|
|||
pid:087499704 hgt:74in ecl:grn iyr:2012 eyr:2030 byr:1980
|
||||
hcl:#623a2f
|
||||
|
||||
eyr:2029 ecl:blu cid:129 byr:1989
|
||||
iyr:2014 pid:896056539 hcl:#a97842 hgt:165cm
|
||||
|
||||
hcl:#888785
|
||||
hgt:164cm byr:2001 iyr:2015 cid:88
|
||||
pid:545766238 ecl:hzl
|
||||
eyr:2022
|
||||
|
||||
iyr:2010 hgt:158cm hcl:#b6652a ecl:blu byr:1944 eyr:2021 pid:093154719
|
60
2020/day05/day05.c
Normal file
60
2020/day05/day05.c
Normal file
|
@ -0,0 +1,60 @@
|
|||
#include <stdio.h>
|
||||
#include <limits.h>
|
||||
#include <stdbool.h>
|
||||
|
||||
unsigned int bin_to_int(char *buf, int size) {
|
||||
unsigned int r = 0;
|
||||
for (int i = 0; i < size; ++i) {
|
||||
r = r << 1;
|
||||
if (buf[i] == 'B' || buf[i] == 'R') {
|
||||
r++;
|
||||
}
|
||||
}
|
||||
return r;
|
||||
}
|
||||
|
||||
int main(int argc, char *argv[])
|
||||
{
|
||||
if (argc < 2) {
|
||||
printf("Usage: %s <input file>\n", argv[0]);
|
||||
return 0;
|
||||
}
|
||||
|
||||
FILE *fp = fopen(argv[1], "r");
|
||||
if (fp == NULL) {
|
||||
printf("Could not open file %s\n", argv[1]);
|
||||
return 1;
|
||||
}
|
||||
|
||||
char buf[12];
|
||||
size_t i = 0;
|
||||
unsigned int ids[1024];
|
||||
unsigned int min_id = UINT_MAX;
|
||||
unsigned int max_id = 0;
|
||||
while (fgets(buf, sizeof(buf), fp) != NULL) {
|
||||
ids[i] = bin_to_int(buf, 10);
|
||||
if (min_id > ids[i]) {
|
||||
min_id = ids[i];
|
||||
}
|
||||
if (max_id < ids[i]) {
|
||||
max_id = ids[i];
|
||||
}
|
||||
i++;
|
||||
}
|
||||
printf("%u\n", max_id);
|
||||
|
||||
fclose(fp);
|
||||
|
||||
for (int id = min_id; id < max_id; ++id) {
|
||||
bool present = false;
|
||||
for (int j = 0; j < i; ++j) {
|
||||
present = present || (id == ids[j]);
|
||||
}
|
||||
if (!present) {
|
||||
printf("%u\n", id);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
4
2020/day05/day05.dyalog
Normal file
4
2020/day05/day05.dyalog
Normal file
|
@ -0,0 +1,4 @@
|
|||
⎕IO←0
|
||||
p←{2⊥⍵∊'BR'}¨⊃⎕NGET'input'1
|
||||
⌈/p ⍝ Part 1
|
||||
⊢/(⍳⌈/p)~p ⍝ Part 2
|
38
2020/day05/day05.rkt
Normal file
38
2020/day05/day05.rkt
Normal file
|
@ -0,0 +1,38 @@
|
|||
#lang racket
|
||||
|
||||
(module+ test
|
||||
(require rackunit))
|
||||
|
||||
(module+ main
|
||||
(displayln "Day 5"))
|
||||
|
||||
(define (seat-id str)
|
||||
(define binary-str (list->string
|
||||
(for/list ([c (in-string str)])
|
||||
(if (or (equal? c #\B) (equal? c #\R))
|
||||
#\1
|
||||
#\0))))
|
||||
(string->number binary-str 2))
|
||||
|
||||
(define (read-input filename)
|
||||
(define seats (file->lines filename))
|
||||
(map seat-id seats))
|
||||
|
||||
(module+ test
|
||||
(for ([seat '("FBFBBFFRLR" "BFFFBBFRRR" "FFFBBBFRRR" "BBFFBBFRLL")]
|
||||
[expected-id '(357 567 119 820)])
|
||||
(check-equal? (seat-id seat) expected-id)))
|
||||
|
||||
(define (part1 filename)
|
||||
(apply max (read-input filename)))
|
||||
|
||||
(module+ main
|
||||
(displayln (part1 "input")))
|
||||
|
||||
(define (part2 filename)
|
||||
(define ids (read-input filename))
|
||||
(define id-range (range (apply min ids) (apply max ids)))
|
||||
(set-first (set-subtract (list->set id-range) (list->set ids))))
|
||||
|
||||
(module+ main
|
||||
(displayln (part2 "input")))
|
965
2020/day05/input
Normal file
965
2020/day05/input
Normal file
|
@ -0,0 +1,965 @@
|
|||
FBFBBBFRLR
|
||||
FBBFBBBLLR
|
||||
FFFFFBBRRL
|
||||
BBBFFFBRRL
|
||||
BFFBFBFLRL
|
||||
FBFFBFFLLR
|
||||
FBFBBBBRLR
|
||||
FBFBFBFRLL
|
||||
BFFBFFBRLR
|
||||
FBBFFFBLRR
|
||||
FBFBBBFRRR
|
||||
BFFBBFBRLR
|
||||
BFFBFBFRRL
|
||||
FFFFBBBLRL
|
||||
FBBFBFFRLL
|
||||
BBFBBFBRLR
|
||||
BFFFFBBLLR
|
||||
FBFFFFFRRR
|
||||
BFBFFBFLRR
|
||||
BBFBFFBLLL
|
||||
BFBFFFFLLR
|
||||
FBBFBBBRLL
|
||||
BBBBFFFRRL
|
||||
FFBBBFFRLR
|
||||
FFFBFFFRRL
|
||||
FFFBBBBLRL
|
||||
BFBBFBFRRL
|
||||
BFFBBFBLLL
|
||||
FBFBBFFLRL
|
||||
BFFBBBBLRL
|
||||
FFBBBFFLRL
|
||||
FFBFBFFRRL
|
||||
BBBFBFBRLR
|
||||
FBFBBBBRLL
|
||||
FBBBFBBRRR
|
||||
FBFBFBFLLL
|
||||
BBFFFFFLLR
|
||||
FBFFFBBLRR
|
||||
FFBFFFBLRR
|
||||
BBBFBFFRLR
|
||||
FFFFFFBRRL
|
||||
BFBBFFFRRR
|
||||
FBFFBFBRRR
|
||||
BFFFBBFLRL
|
||||
BBFBFFFRRR
|
||||
BBFFFBBLRL
|
||||
FFBBFFFLLL
|
||||
FFFFFBBRLR
|
||||
BFBFFFFRRL
|
||||
FFBBFBBLRR
|
||||
BFBBFBBLLR
|
||||
FFBBBBFRRL
|
||||
BBBFFFFLRL
|
||||
BFBFFBFLRL
|
||||
BFFFFBBLRL
|
||||
BBBFBBBRLL
|
||||
BFBBFBBLRR
|
||||
BFBFFBBRRL
|
||||
BBFBFFFLLL
|
||||
FFFFBFFRRL
|
||||
FFFFBBBRRR
|
||||
FBBFBBFLRL
|
||||
FBFFBFBRLR
|
||||
FBFFBBBLLL
|
||||
FBFBBBFLLR
|
||||
FBBFBFBRLL
|
||||
BBBFBFFLLL
|
||||
BBFFFFFLRL
|
||||
FFBFBFBRLL
|
||||
FBBBFFBLRL
|
||||
FBFBFFBLRL
|
||||
FFFBBFBRLR
|
||||
FBFBBFBLLR
|
||||
FBFFBBBRLL
|
||||
BBFBBFBLLL
|
||||
FBBBBFFRLL
|
||||
FBBBBBBLRR
|
||||
FFFFFBFLRR
|
||||
BFFBFBBLRR
|
||||
FBFFBFFLRR
|
||||
BBFFFFBLRL
|
||||
BBFFBFFLLR
|
||||
FFFBBBBLRR
|
||||
FBFBBBFRRL
|
||||
FBBFFFBLRL
|
||||
BBFBBFFRRL
|
||||
FFBBBFBRLR
|
||||
BBBFBFBRRR
|
||||
FBFFBFFRRR
|
||||
FFBFFBFRLR
|
||||
BFBBFFBLLL
|
||||
FFBBBFFRRL
|
||||
FFFBFFFRLL
|
||||
BBFFFBFLLR
|
||||
BFFFFFBRLL
|
||||
FFBFBBBRLL
|
||||
FFFBFBFLLL
|
||||
FBBFBBBLRR
|
||||
BFBFBFBRLL
|
||||
FFBBBBBLLL
|
||||
FFBFFFBRRR
|
||||
BBFBBFFRLL
|
||||
BFFFFFFLRL
|
||||
FBFFBFFRLR
|
||||
BFFBBBFLRR
|
||||
FFFBBFFRLR
|
||||
FBFFFFBLLL
|
||||
BBFFBBBRRR
|
||||
FFBFBFBLLR
|
||||
FBBFFBBLLR
|
||||
BBFBBFBLLR
|
||||
BBFBBFBLRL
|
||||
BBBFFBFRRL
|
||||
FBFFBBBLRL
|
||||
BFBFBFFLLR
|
||||
BFFFFFBRLR
|
||||
FBFBFFBLLR
|
||||
BFFFBFBRLL
|
||||
FBFFFFBRRR
|
||||
BFBBFBBRRL
|
||||
FBFFFBBLRL
|
||||
BFBBBBFLRL
|
||||
BBBBFFBLRL
|
||||
FFBFFBBLRL
|
||||
FFFBFFBRLR
|
||||
FBFBFFBRLR
|
||||
FBFBFBBRRR
|
||||
BFFBFBBLRL
|
||||
FBBBFBBRLR
|
||||
BFBBBFFLLL
|
||||
BFBFBBBLLR
|
||||
BBBFBBBRRR
|
||||
FFBFFFFRLR
|
||||
BBFFFBBRRR
|
||||
BBBFBBFRRL
|
||||
FFBFFBBLLL
|
||||
BBFFBFFLRR
|
||||
BBFFBFBRRL
|
||||
BBFBBBFLRR
|
||||
FBFFBFBLRL
|
||||
BFBFFFFLLL
|
||||
FFBBBFBRRR
|
||||
BBBFBBBLLL
|
||||
FBFBBFBLRL
|
||||
BBBFFFBRLL
|
||||
BFFFBBFRRL
|
||||
BBBBFFFLLR
|
||||
BBBFBFFRLL
|
||||
FFBBFBFLRR
|
||||
FBBFBFBRRR
|
||||
FBBFBBFLRR
|
||||
BBFFFBFRRL
|
||||
FBFFFBBRLL
|
||||
BBFFFFFRLR
|
||||
FBBFBBFRRL
|
||||
FBFFFBBLLL
|
||||
BFBFBBFLLL
|
||||
BFFBFFBRLL
|
||||
FFFFBBBRLR
|
||||
BBFBBBBRLR
|
||||
BFBFFFBLRR
|
||||
BFBFFFBRLL
|
||||
FBFBBBBLLR
|
||||
BFFFBFFRRR
|
||||
FFBBBFFLLR
|
||||
BFBFFFBLLL
|
||||
FFBBFFBRLR
|
||||
FBBFBBBRRL
|
||||
BBFBFFBLRR
|
||||
FBBFBBBRRR
|
||||
FFFBBFBRRL
|
||||
BFBFBFBLLR
|
||||
BBFBFFBLRL
|
||||
BBBFBFBRRL
|
||||
BFFBFBFLLR
|
||||
BFBFBBBLRR
|
||||
FBFFFBFRLL
|
||||
BFFBFFFRRL
|
||||
FBFBFFFRRR
|
||||
BFFBFFFRLL
|
||||
FFBBFFBLLL
|
||||
BBBBFFFRLR
|
||||
BBBFFBFLLR
|
||||
BFBFBFBRRL
|
||||
BBFBBBBLLR
|
||||
BFFBBFFRLR
|
||||
FFFFBBBRRL
|
||||
BFFFBBFRLR
|
||||
FFBBFBBLLL
|
||||
BBBFFFBLLR
|
||||
BBFBBBFLLL
|
||||
FFFFFBFLLR
|
||||
BBBFBBFLRL
|
||||
FFFFFBFLLL
|
||||
BBFBFFFLLR
|
||||
BFBBFBFLRL
|
||||
BFBFBBFRRL
|
||||
BBBFBFFRRL
|
||||
BFFFBBFRLL
|
||||
FFFFBFBLRL
|
||||
BFBBBBBLRR
|
||||
FFFBFFBLRL
|
||||
FFFBBBBRLL
|
||||
BBBFBFBLLR
|
||||
BBBBFFBLLR
|
||||
BFFFBBBLLR
|
||||
BBFFFBBLLR
|
||||
BBFFBBBLRR
|
||||
FBBFBFBLLR
|
||||
BBBFFFFRLL
|
||||
FBBFBFBRRL
|
||||
FFBFBFFRLR
|
||||
BFFFFBFLLL
|
||||
BBFBBBBLLL
|
||||
FBFBBBBLRR
|
||||
BBBBFFFRLL
|
||||
BFBBFBBRRR
|
||||
FFFFBBBLLL
|
||||
BBFFBFBRLL
|
||||
FBBFFBFLRL
|
||||
FFBBBFFRLL
|
||||
FFFBBBFRLR
|
||||
FFBBFBFLRL
|
||||
BBFBFBFLLR
|
||||
BFFFFFBLRR
|
||||
FBFBBBFRLL
|
||||
FBFFFFFLLR
|
||||
FBFBFFBLLL
|
||||
BFFBFBFRLR
|
||||
FFBFBFFLLL
|
||||
FFFFFBBLLR
|
||||
BBBBFFBRRR
|
||||
FBFBFBFLLR
|
||||
BBFFFBFRLR
|
||||
BBFFBFBLRR
|
||||
BFFBBFFLRR
|
||||
BFFFFBFLLR
|
||||
FBBFBFBLRL
|
||||
BFFFFBFLRL
|
||||
BBFFFFFLRR
|
||||
BBBFFFFRRR
|
||||
FFBBBFFLRR
|
||||
BFFFBFBLRL
|
||||
BBFBFBBLRR
|
||||
BBFBFFBRLR
|
||||
FFFBFBFLRR
|
||||
FBFFFFFRLL
|
||||
BBFBBBFRLR
|
||||
BBFFBBFRRL
|
||||
BFBFFBBRLR
|
||||
FFBFFFBLLR
|
||||
BFBFFFBRLR
|
||||
BBBBFFBRLR
|
||||
BFBFFBFLLR
|
||||
BBFFBBFLLR
|
||||
FBFFFFBLLR
|
||||
FFFBBFBLRR
|
||||
FFBBFFBRRR
|
||||
FBBBFBFLRL
|
||||
FBFBFBFLRR
|
||||
BFFFBFBRRL
|
||||
FBFFFFBRRL
|
||||
FBFFFBBRLR
|
||||
FBBFFBBRRL
|
||||
FBBFBFFLRL
|
||||
BFBFBBFRLL
|
||||
FBBBBFFRLR
|
||||
FFBFFFFRRL
|
||||
BFBFBBBRRR
|
||||
BFFBBBFRRR
|
||||
BBFFFFFLLL
|
||||
BFBBBBFLRR
|
||||
FBBBBBFRRL
|
||||
BBFBFBFRRL
|
||||
BFFBFFFRLR
|
||||
FBFFFBFRRR
|
||||
FFBBBBBLLR
|
||||
FBFFFBFRLR
|
||||
BFBFBFBRLR
|
||||
FFFBBBFRRR
|
||||
FBBBFFBRLL
|
||||
BBFBFBBLRL
|
||||
FFFBFBBLLL
|
||||
BFBFBFFLLL
|
||||
FFFBFFFLLL
|
||||
FBBBFBBRRL
|
||||
FBFFFBFLRL
|
||||
FBFFBFBRLL
|
||||
BBFFBBFRLL
|
||||
BFFFBFFRLL
|
||||
FFBBFBFRRR
|
||||
BBBFFBBRRL
|
||||
BBFBFBBRLR
|
||||
FFBBFFFLRR
|
||||
FFBBBBFLLR
|
||||
FFBFFBFLLR
|
||||
FBBFBBFRLL
|
||||
FBFBBFFLRR
|
||||
BBBFFFFRRL
|
||||
FFFFFBBLRR
|
||||
BFBFBFFRLR
|
||||
FFBBBBFRRR
|
||||
FFBBFFFLLR
|
||||
FFBBBBBLRR
|
||||
FBBBBFBRRR
|
||||
FBFFFBBRRR
|
||||
BFFBFFBRRR
|
||||
BFBFBBFLRR
|
||||
FBFBBBBRRL
|
||||
FBBBBFBRLR
|
||||
BFFBBFBLLR
|
||||
FBBBFBBLLL
|
||||
FFBBBBBRLL
|
||||
FBBBBBBRLL
|
||||
FFFBFBBLLR
|
||||
BFFFFFBRRL
|
||||
BFFBFBBRRL
|
||||
FBBBFFBLRR
|
||||
FFFBFFFLRR
|
||||
FFBBBBFRLR
|
||||
BFFBFFFLLL
|
||||
FBFFBFFRLL
|
||||
BFBFBFFRLL
|
||||
FBBFBBBRLR
|
||||
FBFFBBFRLL
|
||||
FFBFFFBRLR
|
||||
BFBBFBFLRR
|
||||
BFBBBBFRRL
|
||||
FBFBFBBRLL
|
||||
BFBBBFBLRL
|
||||
FFBBFFBLRR
|
||||
BBFFBBBRLR
|
||||
FBBBFBBLRL
|
||||
BBBBFBFLRL
|
||||
BBBFBBFRRR
|
||||
FFFBBFBLRL
|
||||
BFBFFBBLLR
|
||||
BBBFFFBLRL
|
||||
BBFFFFBLRR
|
||||
FFBBBBFLLL
|
||||
FBFFFBFLLL
|
||||
FFBBFBBRRL
|
||||
BFFBBBBLRR
|
||||
FBBFFBBRLR
|
||||
BFBBFBFRLL
|
||||
FFBBBBBLRL
|
||||
FBFBFFFRLR
|
||||
BFBBBFBRRR
|
||||
BFBBBFBRLL
|
||||
BBFBBBFRRR
|
||||
BFFBBFBRRR
|
||||
BBFFBBBRLL
|
||||
FFBFFBBRLR
|
||||
FFFFBBBRLL
|
||||
FFBBBFBLRL
|
||||
FFFBFBFRLL
|
||||
BFBFBBFRRR
|
||||
FBBFFFFRLL
|
||||
BBBBFBFLLL
|
||||
FBFBFFBRRR
|
||||
BFFFBBBRRR
|
||||
FFFBBFBLLL
|
||||
BBBFBBBRRL
|
||||
FBFFBFBLLR
|
||||
FBBBBBFRLL
|
||||
FBBFBFFLLL
|
||||
BFBFFFBRRR
|
||||
FBFBFBBLRL
|
||||
FBFBBBBLLL
|
||||
FFBFFFBRLL
|
||||
BFFFBFBRLR
|
||||
BFBFBBBRLL
|
||||
FFBFBBFLLL
|
||||
BBBBFFFRRR
|
||||
FFFBFBFRRR
|
||||
FFBBFFFRLL
|
||||
BFBBBBBLLR
|
||||
FBBBBFFLRL
|
||||
BFBFBBFLRL
|
||||
BFFBBBFLRL
|
||||
BBFFBFBRLR
|
||||
BBBFFBFLLL
|
||||
FBFFBFFRRL
|
||||
FFFBBBBRLR
|
||||
BBFBFFFLRR
|
||||
FBBBBBBRLR
|
||||
BBFFBBBLLL
|
||||
BBFBBFFLLL
|
||||
FBBFFBFRLR
|
||||
FFFFBFBLRR
|
||||
FFFBBFFRRR
|
||||
FBFBFBFLRL
|
||||
BBFFBBFRRR
|
||||
FFFFBFBRRR
|
||||
FFBFBBBLRR
|
||||
FBFFFBBRRL
|
||||
BFFBBFBRLL
|
||||
FFBFBFFLRR
|
||||
FFBBFBBLLR
|
||||
FBBBBBBLLR
|
||||
FFFBBBFLLL
|
||||
FFBBFFBLRL
|
||||
BBFFFBBRLR
|
||||
FFFFBFFRLR
|
||||
BBFBFFBLLR
|
||||
FFFBFBBLRR
|
||||
BBFFFFBRLR
|
||||
FBFBFFFRRL
|
||||
FBBBFBFLLL
|
||||
FFFBBBFRLL
|
||||
FFFBFBBRLL
|
||||
FFBFFBBLLR
|
||||
BFFFBBBLRR
|
||||
FFFBBFBLLR
|
||||
FFBFBBFLRL
|
||||
BFFBFBFLLL
|
||||
BFFFBBFLRR
|
||||
FBFFFBBLLR
|
||||
FBBFFBBLLL
|
||||
FFBBFFFLRL
|
||||
BBBFFBFLRL
|
||||
FBBFFFFLLL
|
||||
BFFBBFFLLR
|
||||
BBBFFFFLLL
|
||||
FBFFBBFRRR
|
||||
BFBBBBBRRR
|
||||
FBFFFFFLRL
|
||||
FFBFFBBRRL
|
||||
FBFBBFFRLL
|
||||
FFBFBBFRLR
|
||||
BBBFFBBLLL
|
||||
FFFBBBFLRL
|
||||
BBFFFBBRRL
|
||||
BFFFFFBLLR
|
||||
FBBBFFBLLR
|
||||
BBFBBFFLRR
|
||||
FBFBBFBLLL
|
||||
BFBBFBFRLR
|
||||
BFBBFFBRRL
|
||||
BBFFFBBLRR
|
||||
FBBFFBFLRR
|
||||
FFFBFFBRRR
|
||||
FBFBBBBLRL
|
||||
BBFFBBBLLR
|
||||
FFBFFFBLRL
|
||||
FBBBFFFLRR
|
||||
BBBBFFBRLL
|
||||
BFFBBBFLLR
|
||||
BFBBBBFRLL
|
||||
BFFBFFBRRL
|
||||
BFFFFBBRLR
|
||||
FFBFFFBLLL
|
||||
FBBFFBFRLL
|
||||
BFFBBBBRLR
|
||||
BFFBFBBLLL
|
||||
BBBFFBFRLR
|
||||
BBFBBFBRLL
|
||||
FFFFBBFRRL
|
||||
FFBFBFBLRR
|
||||
BFFBBBBLLR
|
||||
BFFFFBFRRL
|
||||
FBBBBFBLRL
|
||||
BBBFFBBLRR
|
||||
FBBBBFBLLL
|
||||
FFFBFBBLRL
|
||||
FFBFBBFRRR
|
||||
BFBBFFBRLR
|
||||
BBFFBBFLRR
|
||||
FBBBFBFRLR
|
||||
FBBFBFBLLL
|
||||
BFFFBBFRRR
|
||||
BFFFFBFRLR
|
||||
FFBFFBFRRR
|
||||
FFFFBBFRLR
|
||||
FBBFFFBLLL
|
||||
FBFFBBFLRR
|
||||
BFFFFFFRLL
|
||||
BFBBBFFLRR
|
||||
FBFFBFBLRR
|
||||
FBFBBFFRRR
|
||||
FFFBBBBRRL
|
||||
BFFFBFFLLR
|
||||
FBBBBFFLLR
|
||||
BFFFFFFRRR
|
||||
FFBFFFFLRR
|
||||
FBBFFFFRRL
|
||||
FBBFFFFRLR
|
||||
BBFFBBBLRL
|
||||
FBFFBBBRRR
|
||||
BFFFBBBRRL
|
||||
BFFFBBBLLL
|
||||
BFFFFBBRLL
|
||||
BFFFFFFLRR
|
||||
FBFBFBFRLR
|
||||
FFFBFFFRRR
|
||||
FFFFBBFLLL
|
||||
BBBFBFBLRR
|
||||
BBBFBBFLRR
|
||||
BBFBFBBLLL
|
||||
FFFBBBFLRR
|
||||
FBBFFFBRLL
|
||||
BFFBFFFLRR
|
||||
BFBFBBBRRL
|
||||
BFFBBBBRRR
|
||||
FBFFBBBLRR
|
||||
BFFFBBFLLL
|
||||
BBBFBFBLRL
|
||||
BFFFBFBLLR
|
||||
BBBFBFFLLR
|
||||
FFBFFBBLRR
|
||||
FBBFBFFLRR
|
||||
BBBFFBFRRR
|
||||
BFBBFFFLRL
|
||||
FFBBBFBLLR
|
||||
FBBBBFFRRR
|
||||
BFBBBBBRLR
|
||||
BBFFBFBLLR
|
||||
BFFBFBBRLR
|
||||
BFFBFFFLLR
|
||||
BFFBBBBRRL
|
||||
BBFBFBFLRL
|
||||
BFFBBBFLLL
|
||||
BBBFFBFLRR
|
||||
FBFFFFFLRR
|
||||
BFBFBFBRRR
|
||||
BBBFFBFRLL
|
||||
BFFFBBFLLR
|
||||
BBBFBBFRLR
|
||||
FFFFBBFLRR
|
||||
FBBBFBFRRL
|
||||
FFFBFFBRRL
|
||||
FFBFFBBRRR
|
||||
BFBBBBBLLL
|
||||
FFBFFBFRLL
|
||||
BFBFFFBLLR
|
||||
BFFBBFBLRL
|
||||
BBFBBFFLRL
|
||||
FFFBFBFRRL
|
||||
BFFBBBBRLL
|
||||
FBFBFFBRRL
|
||||
FFFFFBFRLR
|
||||
FBBBBFBRLL
|
||||
FFFFBFFLLL
|
||||
FBFBFBBRLR
|
||||
FBFFFFBRLR
|
||||
BFBBFFBLRR
|
||||
BFBBBFFRLL
|
||||
BBFBBFFLLR
|
||||
FBFBBBFLRR
|
||||
FFFFBFFRLL
|
||||
BFBBFFBRRR
|
||||
BBBFFFFLLR
|
||||
BBFFFBBLLL
|
||||
BFFFFFFRRL
|
||||
BFBBFFBRLL
|
||||
FFBFFFBRRL
|
||||
FBFBBFBRLL
|
||||
BFBBBFBLRR
|
||||
BBFBFBFLRR
|
||||
BBBFBBFLLL
|
||||
FBFBFFFLRR
|
||||
BBBBFFBLRR
|
||||
FFFBBFFLRR
|
||||
BFFFBFBLLL
|
||||
FFFFBFFLRL
|
||||
FFBBFBBRLR
|
||||
FFFBFBFRLR
|
||||
BFFBFBFRLL
|
||||
BBBFFFBLLL
|
||||
BBFBBFBRRR
|
||||
BFBFBBBLLL
|
||||
BFFBFFBLLR
|
||||
BFBBFBBLRL
|
||||
BBFBFFBRLL
|
||||
FBFBBFFLLR
|
||||
BFFFFFBLLL
|
||||
FBFFFFFRRL
|
||||
FFFFFFBRRR
|
||||
BBBFFFFRLR
|
||||
FBFFFBFRRL
|
||||
BFBFFBBRLL
|
||||
BBFBFFBRRR
|
||||
FFBFBBBLRL
|
||||
FFFBFFBLRR
|
||||
FFFBBBFRRL
|
||||
BFFBBFBRRL
|
||||
BFBFFFBLRL
|
||||
FBBFFBBRLL
|
||||
FFBBBBBRRL
|
||||
FBBBBFBLRR
|
||||
BBFBFBBRRL
|
||||
FBBBFFBRLR
|
||||
FFBBFBBRLL
|
||||
FFFBBBFLLR
|
||||
BFBBFFFLRR
|
||||
FBBBFFFLRL
|
||||
BFBFFFBRRL
|
||||
FFFFBBBLRR
|
||||
FFFBFFBRLL
|
||||
BFBBFBBRLR
|
||||
FFFFFBBLLL
|
||||
BFBBBFFRLR
|
||||
BFBFFFFLRR
|
||||
BFBBFFFLLR
|
||||
FFFFBFFLRR
|
||||
FFBFBFBLLL
|
||||
BFBFBBFRLR
|
||||
FBFFFBFLLR
|
||||
FFBBFFBLLR
|
||||
FBFBBBBRRR
|
||||
FBBBBBBLLL
|
||||
FFBFBBBRRR
|
||||
FBFFBBFRLR
|
||||
BFFFBFFLRL
|
||||
FFBFBFFRLL
|
||||
FBFFFFBLRR
|
||||
BFBFFFFRLR
|
||||
FBBBBBBRRL
|
||||
BFBFBFBLRR
|
||||
FFBFBBFLLR
|
||||
FFFBBFFLLL
|
||||
FFFBBFFLLR
|
||||
FBBBFBBLLR
|
||||
BFBBBFBLLL
|
||||
BFBFFBFRLL
|
||||
BFBBFFFRRL
|
||||
BFBBFFBLLR
|
||||
FBBFFBFRRL
|
||||
BBFBBBBRRR
|
||||
FBBBFFBRRR
|
||||
BFFBBBFRLR
|
||||
BBFBBBBRRL
|
||||
FBBBFBFLLR
|
||||
BFBFFFFRLL
|
||||
FBBFFFBLLR
|
||||
BBBBFFFLRL
|
||||
BFFBFBFLRR
|
||||
FBFFBFBRRL
|
||||
BFBBBFFLRL
|
||||
BBFFBFFRLL
|
||||
BFBFBBBLRL
|
||||
BBFFFBFLRR
|
||||
BBFBFFFRRL
|
||||
BFFBFBBLLR
|
||||
FFFFBFBRLR
|
||||
FFBBBBFLRR
|
||||
FBBBBBFLLL
|
||||
BFBBFBFLLL
|
||||
FBBBBFBLLR
|
||||
FBFBFFFLLL
|
||||
BBFFFBFLLL
|
||||
BBFBBBBLRL
|
||||
FFFFFBBLRL
|
||||
FFBFBBBLLR
|
||||
FFFBFFFLLR
|
||||
BFBFBFBLRL
|
||||
FFBFFBFLRL
|
||||
FBFFBBFLRL
|
||||
FFBFBBFRRL
|
||||
BFFBFFBLRR
|
||||
BFFBBFFRLL
|
||||
FFBFBFBRRL
|
||||
FBFBFBBLRR
|
||||
FBFBFBBLLL
|
||||
FFFFBBFRLL
|
||||
FBBBFFFRLR
|
||||
FBFBBFBRLR
|
||||
FBFFBBFLLL
|
||||
BBFBBBFRLL
|
||||
FBBBBBFLLR
|
||||
FBBFFBBRRR
|
||||
BFFBBBFRRL
|
||||
BBFFBFFRRR
|
||||
FFBFBBBLLL
|
||||
FBBBBFFLLL
|
||||
BBBBFBFLLR
|
||||
FBBFBFFRRL
|
||||
BBFBFBFRLR
|
||||
FFFFBFFRRR
|
||||
BFBFBFBLLL
|
||||
BBFBBBBLRR
|
||||
BBFFBFBLLL
|
||||
BFBFBFFLRL
|
||||
FFBFFFFLLR
|
||||
FFFBBFFRLL
|
||||
BBBBFFBRRL
|
||||
BBFBBFBRRL
|
||||
BBBFBFFLRL
|
||||
BFFFBBBRLR
|
||||
FBFBBBFLRL
|
||||
FFBBBFBLRR
|
||||
BFBFFFFRRR
|
||||
BBBFFFBLRR
|
||||
FFBFFFFRLL
|
||||
BFBFFBFRRR
|
||||
BFBBBFFRRL
|
||||
FFFFFBFRLL
|
||||
BBBFFBBLLR
|
||||
BBBFFFFLRR
|
||||
BFFBBFFRRL
|
||||
FFBFBFFLLR
|
||||
FBBBBFBRRL
|
||||
FBFBFBBRRL
|
||||
BBFFFFBRLL
|
||||
FFBFBBBRLR
|
||||
FBFBBFFLLL
|
||||
FFBBBBBRLR
|
||||
BFBBBBBRRL
|
||||
BBBFBFFRRR
|
||||
FFFBBFBRLL
|
||||
BFBBFFFLLL
|
||||
FFFFBFBRLL
|
||||
BBFFBBFLRL
|
||||
FFFBFBBRRL
|
||||
BBFBFBBRLL
|
||||
BFBFBBBRLR
|
||||
FFFFBBBLLR
|
||||
BFBBBBBRLL
|
||||
FBBFBFFRRR
|
||||
FBFFFBFLRR
|
||||
FBBBFFFLLL
|
||||
FFBFBFBRLR
|
||||
FFFBFFBLLL
|
||||
FFBBFBFLLL
|
||||
BFBBBFBLLR
|
||||
FFFFBFBRRL
|
||||
FFFBFFBLLR
|
||||
BBFFBBFRLR
|
||||
BFFFFFBRRR
|
||||
BFBBFFFRLR
|
||||
FFFFFBBRLL
|
||||
BBBFFBBRLL
|
||||
BFFBFBBRRR
|
||||
BFBFBFFRRL
|
||||
FBBFFFBRRL
|
||||
FFFBBFFLRL
|
||||
FBBFFBFLLL
|
||||
FBBFFFFLLR
|
||||
BBFBBFBLRR
|
||||
BBBFBBBRLR
|
||||
FFFFBFFLLR
|
||||
BFFBBFFLRL
|
||||
BBFBBBFRRL
|
||||
BBFFFFFRRL
|
||||
BFBFFBBLRR
|
||||
FFBBFFFRRL
|
||||
BBFBFBFRLL
|
||||
BFFBFFFRRR
|
||||
BBFBFFFRLR
|
||||
BFFBFBBRLL
|
||||
BFFFFBBRRR
|
||||
BFBFFBFLLL
|
||||
FFFFFBFLRL
|
||||
FBBFBBBLRL
|
||||
BFBBBFBRLR
|
||||
BFFFFFFLLL
|
||||
FFFBFFFRLR
|
||||
BFBBBFFRRR
|
||||
FBBFFBBLRL
|
||||
BBFFFFBRRL
|
||||
BFFFFBBRRL
|
||||
BBBFFFBRRR
|
||||
BFBBFBBRLL
|
||||
FBBFFBFLLR
|
||||
FFBBFBBRRR
|
||||
BBFFBFBLRL
|
||||
FFBFBFBRRR
|
||||
BFBBFFBLRL
|
||||
BFFBBFFLLL
|
||||
FFFBBBBLLR
|
||||
FFBFBBFRLL
|
||||
FBBBFFBLLL
|
||||
BFBFBFFLRR
|
||||
BFBBFFFRLL
|
||||
FFBFBBBRRL
|
||||
FFBBFBFRRL
|
||||
FBFBBFBRRL
|
||||
BFFBBBBLLL
|
||||
BFBFFBBRRR
|
||||
BBFBBBFLRL
|
||||
BFBFFBFRRL
|
||||
BFFBFFBLLL
|
||||
FFBFFBFRRL
|
||||
BBBFFFBRLR
|
||||
FBBFFFBRRR
|
||||
FFFBFFFLRL
|
||||
FFFFBFBLLL
|
||||
BBBBFFBLLL
|
||||
BBFFFFBLLL
|
||||
BBBFBBBLRL
|
||||
FBFBFBBLLR
|
||||
BFBFFFFLRL
|
||||
BFFFFFFRLR
|
||||
FFFFFFBRLR
|
||||
BFFFFFBLRL
|
||||
BBBBFFFLRR
|
||||
FBBFBFBRLR
|
||||
BFBBBBFLLR
|
||||
FBBBBBFLRL
|
||||
FFBFFFFRRR
|
||||
FBFFBBFLLR
|
||||
BBBBFFFLLL
|
||||
FBBFFFFLRR
|
||||
BBFBBFFRRR
|
||||
BFBBBBFRRR
|
||||
FBBBFFBRRL
|
||||
BBFFFFBLLR
|
||||
BBFFFFFRRR
|
||||
BBFBFFFLRL
|
||||
BFFFBFFLRR
|
||||
BBBFBFFLRR
|
||||
FFFBBFFRRL
|
||||
FFFBFBFLRL
|
||||
BFBFFBBLLL
|
||||
FFBBFBBLRL
|
||||
FBFFFFBLRL
|
||||
FFFFBBFLLR
|
||||
BFFBBFBLRR
|
||||
BFBBBFBRRL
|
||||
BBFFFBFLRL
|
||||
FFBBBBFRLL
|
||||
BFFFBFBRRR
|
||||
FBBFBFFRLR
|
||||
FBFFFFFLLL
|
||||
BBFFBFFRLR
|
||||
FBBBBFFRRL
|
||||
BFFFBBBRLL
|
||||
BBBFFBBRLR
|
||||
FBFFBBFRRL
|
||||
BBFBBBFLLR
|
||||
FFBFFBFLLL
|
||||
FBBFFFBRLR
|
||||
BBFBBBBRLL
|
||||
FBFBBBFLLL
|
||||
FBBBBFFLRR
|
||||
FBBBFBFRLL
|
||||
FFFBBFBRRR
|
||||
BBFBFBFLLL
|
||||
BFBBBBFRLR
|
||||
BBFBFFFRLL
|
||||
FBBFBFFLLR
|
||||
FFBBBFBRLL
|
||||
FBBBFBFRRR
|
||||
FBFBFBFRRR
|
||||
FBBBFFFLLR
|
||||
BBFFFBFRLL
|
||||
BBFFBBFLLL
|
||||
FFFBFBFLLR
|
||||
FFBBFBFLLR
|
||||
FBBFBBBLLL
|
||||
FBBFBBFRLR
|
||||
BFFFFFFLLR
|
||||
FBFBBFBLRR
|
||||
BBFFBFFLRL
|
||||
BFFFFBFRLL
|
||||
FBBBBBBLRL
|
||||
FFFFFBFRRR
|
||||
FBFFBBBRLR
|
||||
FBBFFFFLRL
|
||||
BBFFBFFLLL
|
||||
FFBBFFFRRR
|
||||
FFFFBBFLRL
|
||||
BBFBFBBLLR
|
||||
FBFBFFBLRR
|
||||
FBBBFFFRRL
|
||||
BFBFFBFRLR
|
||||
BFBFBFFRRR
|
||||
FBBBFBBLRR
|
||||
BBFFBFBRRR
|
||||
FFFFFBBRRR
|
||||
BBFBFBBRRR
|
||||
BFBBFBBLLL
|
||||
FFBFFBBRLL
|
||||
FBFFBFFLLL
|
||||
FFBBFBFRLR
|
||||
BBBFBBFLLR
|
||||
FBBFBFBLRR
|
||||
FFFBBBBLLL
|
||||
BBFFFFBRRR
|
||||
FBFFBBBLLR
|
||||
FBFBFBFRRL
|
||||
BBBFFBBLRL
|
||||
BBFBFFBRRL
|
||||
FBBFFBFRRR
|
||||
FBBBBBFRLR
|
||||
BFFFFBFLRR
|
||||
FBBFBBFLLL
|
||||
BFFFBFFRRL
|
||||
BBBFFBBRRR
|
||||
BBBFBFBLLL
|
||||
BFFFBFBLRR
|
||||
FBBBFFFRLL
|
||||
FBFFFFBRLL
|
||||
FBBFFBBLRR
|
||||
FFBFFBFLRR
|
||||
FBBBFFFRRR
|
||||
BFFBFBFRRR
|
||||
BBFFBFFRRL
|
||||
FFBFFFFLLL
|
||||
BFFFBBBLRL
|
||||
FBFBFFFRLL
|
||||
FBFBFFBRLL
|
||||
BBBFBBBLLR
|
||||
FFBFBFFRRR
|
||||
FBFBBFFRLR
|
||||
BBBFBFBRLL
|
||||
BFBBBFFLLR
|
||||
BBFBFBFRRR
|
||||
FBFBBFFRRL
|
||||
FFBBBFFLLL
|
||||
BBFFFBBRLL
|
||||
FBBBFBFLRR
|
||||
FBFFBFBLLL
|
||||
FFBFBFBLRL
|
||||
FFFBFBBRRR
|
||||
FBBBBBFRRR
|
||||
BFFFBFFLLL
|
||||
FFBBBBBRRR
|
||||
FFFFFBFRRL
|
||||
FBBBFBBRLL
|
||||
FBBFBBFLLR
|
||||
FBBFFFFRRR
|
||||
FFBBBFBRRL
|
||||
BFFBFFFLRL
|
||||
BFFFFBFRRR
|
||||
BFFFFBBLLL
|
||||
FBBBBBFLRR
|
||||
BFFBBFFRRR
|
||||
BFBFBBFLLR
|
||||
FFBBBFFRRR
|
||||
FFBBFFBRRL
|
||||
BFBFFBBLRL
|
||||
BFFBFFBLRL
|
||||
FFBBBBFLRL
|
||||
FFBBFFBRLL
|
||||
FBFFBFFLRL
|
||||
FFBBBFBLLL
|
||||
BBFBBFFRLR
|
||||
BBBFBBBLRR
|
||||
FFFBBBBRRR
|
||||
BFFFFBBLRR
|
||||
FFBFFFFLRL
|
||||
BFBBBBBLRL
|
||||
BBBFBBFRLL
|
||||
FBFFFFFRLR
|
||||
BBFFFFFRLL
|
||||
FBFBFFFLRL
|
||||
FFFBFBBRLR
|
||||
FBBFBBFRRR
|
||||
FBFBBFBRRR
|
||||
BBFFFBFRRR
|
||||
FFFFBBFRRR
|
||||
FFFFBFBLLR
|
||||
BFBBFBFLLR
|
||||
BBFFBBBRRL
|
||||
FFBBFBFRLL
|
||||
FBFBFFFLLR
|
||||
BFFBBBFRLL
|
||||
FBBBBBBRRR
|
||||
FBFFBBBRRL
|
||||
FFBFBBFLRR
|
||||
BFFFBFFRLR
|
||||
BFBBBBFLLL
|
||||
FFBBFFFRLR
|
||||
FFBFBFFLRL
|
58
2020/day06/day06.c
Normal file
58
2020/day06/day06.c
Normal file
|
@ -0,0 +1,58 @@
|
|||
#include <stdbool.h>
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
|
||||
int main(int argc, char *argv[]) {
|
||||
if (argc < 2) {
|
||||
printf("Usage: %s <input file>\n", argv[0]);
|
||||
return 0;
|
||||
}
|
||||
|
||||
FILE *fp = fopen(argv[1], "r");
|
||||
if (fp == NULL) {
|
||||
printf("Could not open file %s\n", argv[1]);
|
||||
return 1;
|
||||
}
|
||||
|
||||
bool flag_newline = false;
|
||||
unsigned int answer_count = 0;
|
||||
unsigned int counts[26] = {0};
|
||||
unsigned int part1 = 0;
|
||||
unsigned int part2 = 0;
|
||||
for (char c = getc(fp); c != EOF; c = getc(fp)) {
|
||||
if (c == '\n' && flag_newline) {
|
||||
for (int i = 0; i < 26; ++i) {
|
||||
if (counts[i] > 0) {
|
||||
part1++;
|
||||
}
|
||||
if (counts[i] == answer_count) {
|
||||
part2++;
|
||||
}
|
||||
counts[i] = 0;
|
||||
}
|
||||
flag_newline = false;
|
||||
answer_count = 0;
|
||||
} else if (c == '\n') {
|
||||
flag_newline = true;
|
||||
answer_count++;
|
||||
} else {
|
||||
counts[c - 'a']++;
|
||||
flag_newline = false;
|
||||
}
|
||||
}
|
||||
|
||||
for (int i = 0; i < 26; ++i) {
|
||||
if (counts[i] > 0) {
|
||||
part1++;
|
||||
}
|
||||
if (counts[i] == answer_count) {
|
||||
part2++;
|
||||
}
|
||||
}
|
||||
|
||||
printf("%u\n", part1);
|
||||
printf("%u\n", part2);
|
||||
|
||||
fclose(fp);
|
||||
return 0;
|
||||
}
|
4
2020/day06/day06.dyalog
Normal file
4
2020/day06/day06.dyalog
Normal file
|
@ -0,0 +1,4 @@
|
|||
p←⊃⎕NGET'input'1
|
||||
p←(~p∊⊂'')⊆p
|
||||
+/{≢⊃∪/⍵}¨p ⍝ Part 1
|
||||
+/{≢⊃∩/⍵}¨p ⍝ Part 2
|
37
2020/day06/day06.rkt
Normal file
37
2020/day06/day06.rkt
Normal file
|
@ -0,0 +1,37 @@
|
|||
#lang racket
|
||||
|
||||
(module+ test
|
||||
(require rackunit))
|
||||
|
||||
(module+ main
|
||||
(displayln "Day 6"))
|
||||
|
||||
(define (read-input filename)
|
||||
(string-split (file->string filename) "\n\n"))
|
||||
|
||||
(define (count-unique str)
|
||||
(set-count (set-remove (list->set (string->list str)) #\newline)))
|
||||
|
||||
(define (part1 filename)
|
||||
(apply + (map count-unique (read-input filename))))
|
||||
|
||||
(module+ test
|
||||
(check-equal? (part1 "test") 11))
|
||||
|
||||
(module+ main
|
||||
(displayln (part1 "input")))
|
||||
|
||||
(define (count-intersection str)
|
||||
(define answers (string-split str "\n"))
|
||||
(set-count
|
||||
(apply set-intersect
|
||||
(map (compose list->set string->list) answers))))
|
||||
|
||||
(define (part2 filename)
|
||||
(apply + (map count-intersection (read-input filename))))
|
||||
|
||||
(module+ test
|
||||
(check-equal? (part2 "test") 6))
|
||||
|
||||
(module+ main
|
||||
(displayln (part2 "input")))
|
2232
2020/day06/input
Normal file
2232
2020/day06/input
Normal file
File diff suppressed because it is too large
Load diff
15
2020/day06/test
Normal file
15
2020/day06/test
Normal file
|
@ -0,0 +1,15 @@
|
|||
abc
|
||||
|
||||
a
|
||||
b
|
||||
c
|
||||
|
||||
ab
|
||||
ac
|
||||
|
||||
a
|
||||
a
|
||||
a
|
||||
a
|
||||
|
||||
b
|
9
2020/day07/day07.dyalog
Normal file
9
2020/day07/day07.dyalog
Normal file
|
@ -0,0 +1,9 @@
|
|||
⎕IO←0
|
||||
p←'(^|\d )\w+ \w+ bag'⎕S'&'¨⊃⎕NGET'input'1
|
||||
bags←⊃¨p
|
||||
edges←1↓¨p
|
||||
adj←edges∘.{0⌈48-⍨⎕UCS⊃⊃(∨/¨(⊂⍵)⍷¨⍺)/⍺}bags
|
||||
gold←bags⍳⊂'shiny gold bag'
|
||||
¯1+⍴({∪⍵,⊃¨⍸1⌊adj[;⍵]}⍣≡)1⍴gold ⍝ Part 1
|
||||
inside←{⊃{∊1↓¨⍸adj[⍵;]}¨⊂⍵}
|
||||
¯1+⍴∊{(inside⍣⍵)1⍴gold}¨⍳100 ⍝ Part 2
|
52
2020/day07/day07.rkt
Normal file
52
2020/day07/day07.rkt
Normal file
|
@ -0,0 +1,52 @@
|
|||
#lang racket/base
|
||||
|
||||
(require racket/list
|
||||
racket/string
|
||||
graph)
|
||||
|
||||
(module+ test
|
||||
(require rackunit))
|
||||
|
||||
(module+ main
|
||||
(displayln "Day 7"))
|
||||
|
||||
(define (read-input filename)
|
||||
(with-input-from-file filename
|
||||
(lambda ()
|
||||
(weighted-graph/directed
|
||||
(append*
|
||||
(for/list ([line (in-lines)]
|
||||
#:unless (string-contains? line "contain no"))
|
||||
(define nodes (regexp-match* #px"\\w+\\s\\w+ bag" line))
|
||||
(define weights (map string->number (regexp-match* #px"\\d+" line)))
|
||||
(for/list ([node (cdr nodes)]
|
||||
[w weights])
|
||||
(list w (car nodes) node))))))))
|
||||
|
||||
(define (part1 filename)
|
||||
(define g (read-input filename))
|
||||
(define-values (dists preds) (bfs (transpose g) "shiny gold bag"))
|
||||
(for/sum ([(k v) dists]
|
||||
#:when (< 0 v +inf.0))
|
||||
1))
|
||||
|
||||
(module+ test
|
||||
(check-equal? (part1 "test") 4))
|
||||
|
||||
(module+ main
|
||||
(displayln (part1 "input")))
|
||||
|
||||
(define (count-bags g bag)
|
||||
(add1 (for/sum ([t (in-neighbors g bag)])
|
||||
(* (edge-weight g bag t) (count-bags g t)))))
|
||||
|
||||
(define (part2 filename)
|
||||
(define g (read-input filename))
|
||||
(sub1 (count-bags g "shiny gold bag")))
|
||||
|
||||
(module+ test
|
||||
(check-equal? (part2 "test") 32)
|
||||
(check-equal? (part2 "test2") 126))
|
||||
|
||||
(module+ main
|
||||
(displayln (part2 "input")))
|
594
2020/day07/input
Normal file
594
2020/day07/input
Normal file
|
@ -0,0 +1,594 @@
|
|||
mirrored gold bags contain 3 light teal bags.
|
||||
clear gold bags contain 5 light maroon bags, 4 pale tomato bags, 5 clear blue bags.
|
||||
dark olive bags contain 5 plaid black bags, 2 dim plum bags, 2 light cyan bags.
|
||||
bright white bags contain 2 pale violet bags, 5 mirrored orange bags, 3 faded beige bags.
|
||||
posh green bags contain 4 shiny gray bags.
|
||||
posh lime bags contain 3 muted lavender bags, 1 clear magenta bag, 5 muted orange bags, 3 mirrored cyan bags.
|
||||
striped turquoise bags contain 3 pale red bags, 4 wavy lime bags, 4 wavy aqua bags.
|
||||
pale fuchsia bags contain 1 striped purple bag.
|
||||
dark magenta bags contain 4 light indigo bags, 1 wavy lavender bag, 1 clear teal bag.
|
||||
drab teal bags contain 5 pale bronze bags.
|
||||
muted aqua bags contain 4 wavy bronze bags, 1 pale plum bag.
|
||||
vibrant brown bags contain 4 dull turquoise bags.
|
||||
vibrant green bags contain 5 dim violet bags, 2 dotted red bags, 2 dull indigo bags.
|
||||
wavy black bags contain 3 posh yellow bags, 5 wavy coral bags.
|
||||
light fuchsia bags contain 1 dull violet bag, 5 dim indigo bags, 4 plaid red bags, 5 dotted bronze bags.
|
||||
drab bronze bags contain 5 dim tan bags, 4 mirrored yellow bags, 5 dim indigo bags.
|
||||
plaid silver bags contain 4 pale orange bags.
|
||||
wavy red bags contain 3 muted chartreuse bags, 4 light silver bags.
|
||||
light aqua bags contain 4 dark cyan bags, 3 shiny aqua bags, 1 light olive bag, 3 wavy purple bags.
|
||||
wavy salmon bags contain 1 shiny blue bag, 2 bright green bags, 5 dark beige bags.
|
||||
vibrant indigo bags contain 4 drab lime bags, 5 plaid turquoise bags.
|
||||
striped violet bags contain 3 dim violet bags, 3 striped purple bags.
|
||||
dull salmon bags contain 5 vibrant turquoise bags, 5 muted black bags.
|
||||
dark lavender bags contain 5 pale gold bags, 5 pale silver bags.
|
||||
clear lavender bags contain 1 faded turquoise bag.
|
||||
striped crimson bags contain 2 dull turquoise bags, 1 dotted red bag, 5 striped yellow bags.
|
||||
posh chartreuse bags contain 2 wavy lavender bags, 2 striped black bags, 5 dim blue bags, 5 bright fuchsia bags.
|
||||
clear tomato bags contain 1 mirrored violet bag, 4 pale gold bags, 5 bright bronze bags.
|
||||
clear brown bags contain 3 plaid fuchsia bags.
|
||||
pale aqua bags contain 3 pale indigo bags, 1 dark lime bag, 4 dim magenta bags.
|
||||
bright maroon bags contain 4 wavy yellow bags, 4 bright tan bags, 2 posh indigo bags, 4 shiny white bags.
|
||||
wavy purple bags contain 1 faded beige bag, 2 drab salmon bags, 3 mirrored yellow bags.
|
||||
muted salmon bags contain 5 bright olive bags, 2 striped white bags, 3 dotted coral bags.
|
||||
dotted maroon bags contain 4 striped brown bags.
|
||||
wavy turquoise bags contain 1 dim indigo bag, 3 clear lavender bags.
|
||||
muted tomato bags contain 2 wavy turquoise bags, 4 pale crimson bags.
|
||||
faded teal bags contain 2 dotted yellow bags, 4 dull olive bags.
|
||||
dotted blue bags contain 4 striped plum bags, 4 striped cyan bags, 2 drab bronze bags.
|
||||
posh teal bags contain 2 vibrant purple bags, 4 plaid fuchsia bags, 2 light green bags, 3 light chartreuse bags.
|
||||
muted gold bags contain 1 muted green bag, 1 vibrant brown bag, 5 pale crimson bags.
|
||||
clear olive bags contain no other bags.
|
||||
dotted beige bags contain 4 posh beige bags, 2 pale silver bags.
|
||||
vibrant lavender bags contain 4 dark tomato bags, 5 dim black bags, 3 dim aqua bags.
|
||||
wavy maroon bags contain 1 drab turquoise bag, 1 shiny indigo bag.
|
||||
muted magenta bags contain 4 posh indigo bags, 4 faded brown bags.
|
||||
dull tomato bags contain 1 pale green bag, 1 plaid gold bag, 5 plaid yellow bags, 5 mirrored blue bags.
|
||||
mirrored black bags contain 5 drab crimson bags.
|
||||
dull green bags contain 4 shiny orange bags.
|
||||
dark cyan bags contain 3 pale gold bags.
|
||||
faded black bags contain 2 clear beige bags, 4 bright red bags, 1 striped black bag.
|
||||
wavy indigo bags contain 2 pale brown bags.
|
||||
dim white bags contain 3 clear violet bags, 3 vibrant indigo bags.
|
||||
muted green bags contain 1 bright white bag.
|
||||
posh coral bags contain 3 shiny purple bags, 2 light brown bags, 3 pale gray bags, 1 dull turquoise bag.
|
||||
dull white bags contain 5 bright plum bags, 5 light green bags, 3 plaid purple bags, 1 faded white bag.
|
||||
bright salmon bags contain 3 dull indigo bags, 3 muted plum bags, 3 muted bronze bags.
|
||||
dotted green bags contain 1 posh purple bag.
|
||||
posh salmon bags contain 1 shiny brown bag, 2 dark red bags, 3 drab gold bags.
|
||||
pale olive bags contain 4 shiny maroon bags, 3 shiny white bags, 2 dim lavender bags.
|
||||
dotted lime bags contain 4 mirrored plum bags, 2 dotted blue bags, 3 light salmon bags.
|
||||
dim blue bags contain 5 shiny lime bags, 5 wavy cyan bags, 3 dotted cyan bags, 5 vibrant turquoise bags.
|
||||
dim gold bags contain 3 wavy lavender bags, 4 dark silver bags, 4 striped green bags, 4 posh plum bags.
|
||||
drab lime bags contain 3 clear black bags.
|
||||
dim red bags contain 1 mirrored olive bag, 1 plaid violet bag.
|
||||
posh white bags contain 3 pale indigo bags, 1 pale black bag, 5 light green bags, 2 light maroon bags.
|
||||
dim brown bags contain 5 dotted black bags, 5 dotted red bags.
|
||||
drab gold bags contain 4 mirrored orange bags, 5 drab beige bags, 4 pale gold bags.
|
||||
shiny green bags contain 5 mirrored gray bags, 4 pale maroon bags, 1 striped coral bag.
|
||||
clear teal bags contain 3 vibrant crimson bags, 4 posh teal bags, 5 striped lime bags, 3 plaid green bags.
|
||||
wavy coral bags contain 3 drab beige bags, 2 drab magenta bags.
|
||||
plaid tan bags contain 4 faded yellow bags, 4 dull gray bags, 2 shiny lime bags.
|
||||
shiny blue bags contain 1 faded white bag, 5 dull turquoise bags.
|
||||
striped green bags contain 4 dull blue bags, 1 muted tan bag, 1 wavy lavender bag, 1 muted gray bag.
|
||||
wavy tan bags contain 4 wavy bronze bags, 2 pale plum bags, 2 plaid indigo bags, 2 light lavender bags.
|
||||
faded violet bags contain 5 dull turquoise bags, 4 bright orange bags, 5 drab lavender bags.
|
||||
striped magenta bags contain 5 dotted orange bags, 5 wavy red bags.
|
||||
drab beige bags contain 4 pale gold bags.
|
||||
shiny coral bags contain 3 mirrored bronze bags.
|
||||
faded indigo bags contain 5 clear violet bags, 5 vibrant fuchsia bags, 5 posh violet bags.
|
||||
muted maroon bags contain 4 wavy coral bags.
|
||||
pale violet bags contain 1 clear olive bag, 1 wavy fuchsia bag, 1 dull lime bag.
|
||||
wavy chartreuse bags contain 2 faded blue bags.
|
||||
faded purple bags contain 5 clear olive bags, 1 wavy orange bag, 2 posh beige bags, 1 mirrored salmon bag.
|
||||
dull fuchsia bags contain 2 dark tan bags.
|
||||
light gold bags contain 1 pale blue bag, 4 wavy cyan bags, 1 shiny chartreuse bag.
|
||||
bright tan bags contain 2 shiny brown bags, 4 drab gold bags.
|
||||
plaid fuchsia bags contain 4 shiny gold bags, 1 mirrored orange bag, 4 dark chartreuse bags, 1 faded tomato bag.
|
||||
striped indigo bags contain 4 clear brown bags, 3 wavy silver bags, 1 plaid teal bag, 3 pale maroon bags.
|
||||
drab salmon bags contain 1 wavy bronze bag, 2 pale violet bags, 5 plaid indigo bags.
|
||||
muted teal bags contain 1 wavy maroon bag, 2 pale purple bags, 4 clear blue bags, 2 bright salmon bags.
|
||||
clear violet bags contain 2 light chartreuse bags, 1 light silver bag, 4 dark brown bags.
|
||||
posh red bags contain 4 light lavender bags, 4 plaid brown bags.
|
||||
muted gray bags contain 1 pale olive bag.
|
||||
posh black bags contain 1 muted maroon bag.
|
||||
dotted silver bags contain 3 dull turquoise bags, 4 dotted black bags, 3 mirrored black bags.
|
||||
wavy olive bags contain 3 dotted coral bags, 5 dim silver bags.
|
||||
plaid olive bags contain 3 muted plum bags.
|
||||
dim lavender bags contain 2 pale gold bags, 5 mirrored turquoise bags, 1 dull lime bag, 1 dull beige bag.
|
||||
dark silver bags contain 4 light silver bags, 1 plaid fuchsia bag.
|
||||
shiny tomato bags contain 2 pale coral bags, 4 dim lavender bags, 1 dim purple bag, 3 wavy magenta bags.
|
||||
dull purple bags contain 1 shiny maroon bag.
|
||||
wavy orange bags contain 2 dim black bags, 1 wavy aqua bag, 4 dull turquoise bags, 3 wavy bronze bags.
|
||||
dim gray bags contain 2 faded bronze bags, 3 dull beige bags, 3 pale purple bags, 5 drab gold bags.
|
||||
muted yellow bags contain 4 wavy aqua bags.
|
||||
striped maroon bags contain 1 plaid plum bag, 5 dotted chartreuse bags, 3 dotted cyan bags, 2 bright plum bags.
|
||||
muted white bags contain 2 dark blue bags, 4 posh aqua bags, 5 mirrored violet bags, 5 posh lavender bags.
|
||||
wavy cyan bags contain 3 dim black bags, 2 striped lime bags.
|
||||
striped teal bags contain 2 bright blue bags, 1 vibrant black bag.
|
||||
posh olive bags contain 2 dim plum bags, 5 shiny turquoise bags, 1 vibrant tomato bag, 5 bright magenta bags.
|
||||
dotted crimson bags contain 2 clear gray bags.
|
||||
clear plum bags contain 4 vibrant teal bags.
|
||||
vibrant chartreuse bags contain 4 posh bronze bags, 5 light purple bags.
|
||||
vibrant teal bags contain 3 clear blue bags, 4 muted tan bags, 2 wavy fuchsia bags.
|
||||
striped beige bags contain 4 faded tomato bags.
|
||||
muted bronze bags contain 1 clear lavender bag, 4 mirrored gray bags.
|
||||
light lavender bags contain 2 plaid turquoise bags.
|
||||
dotted white bags contain 1 light yellow bag, 5 dull maroon bags, 5 posh brown bags, 2 clear olive bags.
|
||||
pale teal bags contain 4 dark aqua bags, 5 dull violet bags.
|
||||
wavy lime bags contain 2 drab red bags, 1 clear olive bag.
|
||||
vibrant black bags contain 3 dim tan bags.
|
||||
pale coral bags contain 5 dull gold bags.
|
||||
plaid maroon bags contain 2 light fuchsia bags.
|
||||
wavy aqua bags contain 5 dark coral bags, 5 mirrored orange bags, 3 muted aqua bags.
|
||||
bright blue bags contain 3 faded bronze bags, 1 bright red bag, 5 mirrored coral bags.
|
||||
wavy silver bags contain 1 posh olive bag, 1 shiny lime bag, 3 shiny beige bags.
|
||||
faded maroon bags contain 1 dull tan bag.
|
||||
light yellow bags contain 5 light lavender bags, 5 pale black bags, 1 plaid brown bag, 3 pale violet bags.
|
||||
wavy fuchsia bags contain no other bags.
|
||||
pale plum bags contain 4 light teal bags, 2 pale black bags, 1 pale green bag, 4 wavy bronze bags.
|
||||
drab white bags contain 3 dark tan bags, 5 muted orange bags, 5 dull violet bags, 1 mirrored fuchsia bag.
|
||||
pale salmon bags contain 5 faded violet bags, 1 clear cyan bag.
|
||||
clear crimson bags contain 4 pale lavender bags, 1 dull turquoise bag, 2 mirrored blue bags.
|
||||
posh gray bags contain 4 muted brown bags, 3 shiny teal bags.
|
||||
dark aqua bags contain 1 shiny maroon bag, 5 dim brown bags, 4 striped maroon bags, 5 dim blue bags.
|
||||
muted red bags contain 3 muted chartreuse bags, 4 wavy red bags, 1 drab tomato bag, 3 shiny yellow bags.
|
||||
mirrored purple bags contain 2 clear blue bags, 2 mirrored lavender bags, 1 pale gold bag, 3 bright silver bags.
|
||||
striped yellow bags contain 4 light silver bags, 2 dotted red bags, 3 mirrored black bags, 2 faded tomato bags.
|
||||
dotted teal bags contain 1 drab bronze bag, 3 muted red bags, 5 mirrored gray bags, 4 bright olive bags.
|
||||
clear turquoise bags contain 5 dim bronze bags, 3 faded silver bags, 1 dotted olive bag.
|
||||
dull lavender bags contain 5 clear olive bags, 1 mirrored orange bag.
|
||||
mirrored indigo bags contain 3 bright fuchsia bags, 3 dotted salmon bags.
|
||||
shiny salmon bags contain 2 bright turquoise bags, 1 light plum bag.
|
||||
plaid red bags contain 3 clear brown bags, 4 drab tomato bags, 2 plaid indigo bags.
|
||||
drab black bags contain 5 dull maroon bags, 2 dark silver bags, 5 bright red bags, 5 bright cyan bags.
|
||||
pale purple bags contain 5 light blue bags, 1 dull maroon bag.
|
||||
plaid crimson bags contain 2 dark turquoise bags, 5 mirrored bronze bags, 5 dull gold bags, 2 posh yellow bags.
|
||||
striped lime bags contain 2 wavy lime bags, 2 shiny teal bags.
|
||||
plaid yellow bags contain 5 muted chartreuse bags.
|
||||
dark violet bags contain 2 plaid fuchsia bags, 2 muted bronze bags, 3 posh green bags.
|
||||
bright red bags contain 4 faded plum bags, 3 dim lavender bags.
|
||||
striped purple bags contain 3 mirrored turquoise bags, 1 shiny yellow bag.
|
||||
shiny red bags contain 4 wavy coral bags, 3 vibrant salmon bags.
|
||||
striped cyan bags contain 2 dark yellow bags.
|
||||
posh magenta bags contain 3 vibrant indigo bags, 2 pale violet bags, 3 bright fuchsia bags, 1 shiny teal bag.
|
||||
drab cyan bags contain 3 plaid gold bags, 3 clear black bags, 5 striped green bags.
|
||||
dim chartreuse bags contain 2 wavy coral bags, 2 striped black bags, 4 dotted tomato bags, 1 muted maroon bag.
|
||||
faded beige bags contain 5 dim tomato bags, 3 plaid turquoise bags.
|
||||
mirrored teal bags contain 4 posh silver bags, 3 dotted brown bags.
|
||||
light turquoise bags contain 2 bright gray bags.
|
||||
drab fuchsia bags contain 4 shiny brown bags, 1 muted olive bag.
|
||||
mirrored bronze bags contain 3 dull turquoise bags, 3 mirrored turquoise bags, 2 drab red bags.
|
||||
shiny fuchsia bags contain 3 striped gray bags, 3 faded blue bags.
|
||||
dim beige bags contain 4 dark blue bags, 1 vibrant aqua bag, 2 shiny brown bags, 5 dull violet bags.
|
||||
drab gray bags contain 1 wavy maroon bag.
|
||||
drab orange bags contain 5 plaid brown bags, 1 vibrant yellow bag, 1 mirrored beige bag, 4 pale white bags.
|
||||
dull magenta bags contain 4 light purple bags, 3 dark brown bags.
|
||||
vibrant magenta bags contain 4 clear gray bags, 2 shiny aqua bags, 4 striped yellow bags, 3 shiny magenta bags.
|
||||
drab tomato bags contain 5 drab crimson bags, 2 dull gold bags, 4 light silver bags.
|
||||
wavy violet bags contain 3 faded plum bags.
|
||||
mirrored fuchsia bags contain 1 mirrored black bag.
|
||||
shiny white bags contain 4 light silver bags, 3 dotted fuchsia bags, 2 faded brown bags, 1 bright bronze bag.
|
||||
clear chartreuse bags contain 4 plaid cyan bags, 1 striped gold bag.
|
||||
muted turquoise bags contain 3 drab crimson bags, 3 drab olive bags.
|
||||
faded aqua bags contain 1 dotted teal bag.
|
||||
vibrant gold bags contain 2 light green bags, 1 dotted gold bag.
|
||||
drab plum bags contain 5 dim salmon bags, 3 dotted teal bags.
|
||||
dotted chartreuse bags contain 2 dull turquoise bags, 1 bright chartreuse bag, 4 faded tan bags, 1 mirrored lavender bag.
|
||||
dull silver bags contain 1 mirrored indigo bag.
|
||||
pale yellow bags contain 4 drab coral bags.
|
||||
clear black bags contain 3 dim coral bags.
|
||||
faded gold bags contain 3 faded chartreuse bags, 1 posh gray bag, 3 drab tomato bags.
|
||||
muted chartreuse bags contain 1 clear olive bag.
|
||||
shiny indigo bags contain 3 vibrant yellow bags, 2 plaid orange bags.
|
||||
dull indigo bags contain 5 bright fuchsia bags, 2 shiny yellow bags, 2 plaid indigo bags, 4 bright olive bags.
|
||||
faded silver bags contain 2 vibrant olive bags, 4 muted tomato bags.
|
||||
pale green bags contain 1 pale red bag, 5 dull lavender bags, 4 clear olive bags.
|
||||
dull violet bags contain 1 shiny black bag, 1 shiny fuchsia bag, 3 plaid indigo bags, 2 posh crimson bags.
|
||||
dotted lavender bags contain 2 striped lavender bags.
|
||||
clear orange bags contain 1 dotted cyan bag, 4 clear tomato bags.
|
||||
bright crimson bags contain 1 dull black bag, 2 dim tomato bags, 1 drab bronze bag, 4 wavy orange bags.
|
||||
dark orange bags contain 1 vibrant teal bag, 3 dull maroon bags, 4 light purple bags.
|
||||
bright teal bags contain 5 mirrored tomato bags, 4 dull lime bags, 4 shiny olive bags.
|
||||
vibrant beige bags contain 2 dark turquoise bags.
|
||||
dark yellow bags contain 5 dark orange bags, 4 pale red bags, 2 striped fuchsia bags, 5 faded turquoise bags.
|
||||
bright fuchsia bags contain 5 striped gray bags, 3 light teal bags, 5 mirrored orange bags.
|
||||
clear maroon bags contain 2 dotted yellow bags, 1 mirrored green bag, 4 dotted coral bags, 3 dull indigo bags.
|
||||
dim lime bags contain 3 dull fuchsia bags.
|
||||
striped olive bags contain 5 wavy fuchsia bags, 2 light purple bags.
|
||||
dull gray bags contain 4 dark beige bags, 1 mirrored white bag.
|
||||
dim orange bags contain 5 mirrored white bags.
|
||||
faded salmon bags contain 2 muted cyan bags.
|
||||
clear red bags contain 2 dim violet bags, 1 shiny purple bag, 3 faded salmon bags, 2 mirrored brown bags.
|
||||
plaid white bags contain 1 shiny aqua bag, 1 vibrant teal bag.
|
||||
shiny violet bags contain 3 striped lime bags, 5 mirrored chartreuse bags, 3 pale red bags, 1 muted orange bag.
|
||||
wavy green bags contain 2 dark tomato bags.
|
||||
pale lavender bags contain 3 pale orange bags.
|
||||
dark fuchsia bags contain 4 pale turquoise bags, 4 pale plum bags, 5 light purple bags, 3 dark beige bags.
|
||||
posh indigo bags contain 2 pale violet bags, 5 shiny coral bags, 1 faded chartreuse bag, 2 plaid indigo bags.
|
||||
light brown bags contain 1 posh black bag, 4 clear cyan bags.
|
||||
faded red bags contain 1 drab maroon bag.
|
||||
dark bronze bags contain 1 pale green bag, 4 shiny blue bags, 1 mirrored lime bag.
|
||||
pale orange bags contain 4 plaid violet bags, 5 dim silver bags, 1 dim cyan bag, 3 clear blue bags.
|
||||
dull brown bags contain 1 light tomato bag, 4 pale tomato bags.
|
||||
mirrored plum bags contain 1 shiny tan bag, 5 wavy brown bags.
|
||||
dull lime bags contain 4 mirrored orange bags.
|
||||
drab yellow bags contain 3 clear teal bags, 3 posh aqua bags, 4 posh fuchsia bags, 3 posh turquoise bags.
|
||||
bright cyan bags contain 5 muted lavender bags, 1 wavy purple bag.
|
||||
drab chartreuse bags contain 1 wavy tan bag.
|
||||
drab tan bags contain 5 drab bronze bags, 5 pale green bags, 1 wavy fuchsia bag.
|
||||
shiny tan bags contain 1 pale red bag, 5 clear aqua bags.
|
||||
dotted black bags contain 2 dim black bags.
|
||||
dull blue bags contain 3 clear blue bags, 5 bright gold bags, 4 pale tomato bags, 4 drab beige bags.
|
||||
light olive bags contain 2 mirrored salmon bags, 2 drab violet bags, 2 bright beige bags.
|
||||
mirrored magenta bags contain 4 drab tomato bags, 5 clear teal bags, 3 dark coral bags, 5 shiny white bags.
|
||||
bright silver bags contain 1 posh brown bag.
|
||||
vibrant blue bags contain 3 clear tan bags.
|
||||
dark indigo bags contain 3 dim aqua bags, 5 bright aqua bags.
|
||||
bright brown bags contain 3 muted purple bags, 1 muted blue bag, 1 light green bag, 1 dark red bag.
|
||||
dark salmon bags contain 3 dotted fuchsia bags, 2 dim tan bags.
|
||||
mirrored maroon bags contain 2 posh purple bags.
|
||||
faded crimson bags contain 1 posh white bag, 2 muted blue bags, 3 dark fuchsia bags, 3 light red bags.
|
||||
bright lavender bags contain 4 bright chartreuse bags, 5 muted purple bags, 4 dull aqua bags, 1 shiny blue bag.
|
||||
mirrored orange bags contain no other bags.
|
||||
wavy bronze bags contain no other bags.
|
||||
wavy yellow bags contain 2 mirrored yellow bags, 1 muted maroon bag, 2 striped purple bags, 4 pale silver bags.
|
||||
drab magenta bags contain 3 dim indigo bags, 2 wavy bronze bags, 5 shiny yellow bags.
|
||||
wavy blue bags contain 3 mirrored gold bags, 3 shiny lavender bags, 1 dim teal bag, 4 clear crimson bags.
|
||||
clear purple bags contain 2 dark beige bags.
|
||||
light cyan bags contain 1 dotted white bag, 5 muted yellow bags, 1 wavy lime bag.
|
||||
clear yellow bags contain 2 plaid olive bags, 1 muted red bag, 1 mirrored bronze bag, 5 striped violet bags.
|
||||
light plum bags contain 5 dotted fuchsia bags, 4 vibrant white bags, 5 muted red bags, 5 drab red bags.
|
||||
vibrant fuchsia bags contain 1 posh green bag.
|
||||
pale maroon bags contain 5 light purple bags, 5 shiny aqua bags, 3 clear teal bags, 2 clear green bags.
|
||||
dark teal bags contain 2 dark lavender bags, 4 striped black bags, 1 drab lime bag, 2 dim teal bags.
|
||||
clear fuchsia bags contain 2 shiny violet bags, 4 posh aqua bags, 4 bright red bags.
|
||||
dotted magenta bags contain 2 dull olive bags, 1 clear magenta bag, 5 light beige bags, 1 dark brown bag.
|
||||
muted black bags contain 2 clear blue bags, 2 muted red bags.
|
||||
dim magenta bags contain 4 plaid silver bags, 4 plaid olive bags.
|
||||
striped lavender bags contain 4 clear blue bags.
|
||||
dull beige bags contain no other bags.
|
||||
wavy lavender bags contain 2 shiny blue bags, 3 faded tomato bags, 5 dotted tan bags, 5 dull maroon bags.
|
||||
light maroon bags contain 5 dim violet bags, 3 wavy turquoise bags, 3 mirrored salmon bags.
|
||||
plaid green bags contain 1 dim teal bag, 5 pale brown bags, 2 striped chartreuse bags.
|
||||
shiny plum bags contain 1 posh lavender bag, 3 vibrant red bags, 5 dark maroon bags, 1 dotted bronze bag.
|
||||
plaid turquoise bags contain 4 light silver bags.
|
||||
dim cyan bags contain 1 shiny coral bag, 4 bright lime bags.
|
||||
shiny lime bags contain 3 wavy green bags, 5 posh white bags, 1 striped purple bag.
|
||||
dim maroon bags contain 1 muted crimson bag.
|
||||
dim aqua bags contain 1 dotted silver bag, 3 faded blue bags, 4 striped purple bags.
|
||||
muted blue bags contain 2 posh yellow bags, 3 bright tan bags, 1 vibrant salmon bag.
|
||||
vibrant olive bags contain 5 clear aqua bags.
|
||||
plaid black bags contain 3 striped orange bags.
|
||||
vibrant violet bags contain 2 pale gold bags.
|
||||
light bronze bags contain 1 shiny maroon bag, 3 light blue bags.
|
||||
pale magenta bags contain 5 pale tomato bags.
|
||||
vibrant yellow bags contain 4 striped gray bags, 4 dotted yellow bags, 1 wavy fuchsia bag, 3 wavy purple bags.
|
||||
shiny black bags contain 5 shiny yellow bags, 3 light purple bags, 1 pale olive bag, 1 clear blue bag.
|
||||
dim crimson bags contain 5 posh gray bags, 1 bright chartreuse bag.
|
||||
plaid salmon bags contain 2 wavy fuchsia bags, 1 posh olive bag, 2 dim tan bags.
|
||||
shiny cyan bags contain 5 light green bags, 1 clear olive bag, 5 pale olive bags.
|
||||
pale silver bags contain 3 mirrored orange bags, 1 light lavender bag, 2 faded tomato bags, 1 muted chartreuse bag.
|
||||
light red bags contain 4 shiny gray bags, 4 wavy salmon bags, 4 clear lime bags.
|
||||
dark turquoise bags contain 4 mirrored orange bags, 4 vibrant brown bags, 4 striped brown bags, 4 mirrored purple bags.
|
||||
dark gray bags contain 1 pale violet bag, 5 striped turquoise bags, 2 wavy red bags, 2 light bronze bags.
|
||||
pale gray bags contain 5 drab tan bags, 3 clear gray bags.
|
||||
striped gold bags contain 2 dotted beige bags.
|
||||
muted cyan bags contain 2 light bronze bags, 3 clear green bags.
|
||||
faded white bags contain 3 striped tomato bags, 4 shiny black bags, 2 drab tomato bags.
|
||||
clear lime bags contain 3 dotted fuchsia bags, 3 vibrant purple bags, 1 shiny bronze bag, 3 muted green bags.
|
||||
dull bronze bags contain 5 plaid turquoise bags, 4 dark crimson bags, 3 pale yellow bags, 3 posh chartreuse bags.
|
||||
mirrored cyan bags contain 4 clear olive bags, 2 vibrant purple bags, 4 dull olive bags.
|
||||
pale bronze bags contain 3 vibrant purple bags, 4 dotted silver bags, 2 mirrored black bags.
|
||||
pale blue bags contain 1 dark brown bag, 2 light brown bags, 2 drab lime bags.
|
||||
clear bronze bags contain 4 clear blue bags, 2 light chartreuse bags, 1 pale violet bag.
|
||||
clear aqua bags contain 2 clear cyan bags.
|
||||
plaid plum bags contain 3 faded plum bags.
|
||||
mirrored lime bags contain 4 posh brown bags.
|
||||
plaid lavender bags contain 1 bright beige bag, 5 bright lime bags, 4 faded aqua bags.
|
||||
drab crimson bags contain 2 shiny yellow bags, 1 posh brown bag.
|
||||
shiny beige bags contain 2 muted aqua bags, 1 vibrant purple bag, 4 pale black bags, 3 dark chartreuse bags.
|
||||
dim green bags contain 4 bright yellow bags, 1 shiny fuchsia bag, 1 wavy tomato bag, 4 shiny black bags.
|
||||
drab coral bags contain 5 dark coral bags.
|
||||
posh turquoise bags contain 1 dim violet bag, 2 faded turquoise bags.
|
||||
dotted plum bags contain 2 dull salmon bags, 5 light green bags, 3 pale red bags, 2 posh yellow bags.
|
||||
posh yellow bags contain 1 mirrored salmon bag, 1 drab tomato bag, 3 dark tomato bags, 2 dark chartreuse bags.
|
||||
faded orange bags contain 1 drab yellow bag.
|
||||
dull teal bags contain 2 plaid crimson bags, 5 shiny violet bags, 1 dull coral bag.
|
||||
faded brown bags contain 5 muted red bags.
|
||||
bright chartreuse bags contain 5 clear lime bags.
|
||||
mirrored tan bags contain 4 striped lavender bags, 4 light plum bags.
|
||||
clear indigo bags contain 5 plaid fuchsia bags, 2 plaid brown bags, 5 striped gray bags.
|
||||
light teal bags contain 1 dull beige bag, 1 mirrored turquoise bag, 1 mirrored orange bag, 5 wavy bronze bags.
|
||||
shiny gold bags contain 2 dark coral bags, 1 mirrored orange bag.
|
||||
striped white bags contain 5 dull fuchsia bags.
|
||||
wavy white bags contain 5 dull chartreuse bags, 5 wavy green bags.
|
||||
mirrored beige bags contain 4 bright white bags, 5 plaid magenta bags, 3 plaid crimson bags, 1 shiny teal bag.
|
||||
muted purple bags contain 5 pale black bags, 5 wavy aqua bags.
|
||||
vibrant crimson bags contain 5 dim bronze bags, 2 vibrant plum bags.
|
||||
striped aqua bags contain 3 plaid cyan bags, 3 light beige bags, 2 drab cyan bags.
|
||||
dull crimson bags contain 1 light white bag, 3 drab indigo bags, 1 clear fuchsia bag.
|
||||
clear magenta bags contain 4 light brown bags.
|
||||
posh maroon bags contain 1 faded plum bag, 3 light olive bags.
|
||||
bright violet bags contain 2 dotted bronze bags, 4 clear teal bags, 3 striped magenta bags, 3 muted indigo bags.
|
||||
faded coral bags contain 5 dark violet bags, 3 plaid teal bags.
|
||||
faded bronze bags contain 5 dotted fuchsia bags, 5 wavy bronze bags, 2 dotted purple bags, 5 dim black bags.
|
||||
light beige bags contain 2 shiny olive bags.
|
||||
mirrored white bags contain 1 dark indigo bag, 1 drab maroon bag, 3 shiny beige bags, 5 light blue bags.
|
||||
muted silver bags contain 4 wavy lime bags, 1 dark tomato bag, 1 bright fuchsia bag, 4 dotted olive bags.
|
||||
wavy gray bags contain 2 mirrored turquoise bags, 5 light lavender bags, 3 muted chartreuse bags.
|
||||
clear salmon bags contain 5 bright tomato bags, 2 wavy aqua bags.
|
||||
dull turquoise bags contain 1 pale tomato bag.
|
||||
shiny yellow bags contain 4 dull lime bags, 3 shiny maroon bags, 3 light silver bags.
|
||||
mirrored aqua bags contain 3 posh magenta bags, 4 drab tomato bags.
|
||||
dull orange bags contain 5 dim teal bags, 3 light olive bags, 2 light magenta bags, 2 plaid orange bags.
|
||||
plaid blue bags contain 3 pale purple bags, 1 shiny turquoise bag.
|
||||
dim olive bags contain 3 shiny tomato bags, 4 dim black bags, 1 light plum bag.
|
||||
dim fuchsia bags contain 1 dark chartreuse bag, 1 mirrored cyan bag, 3 plaid red bags.
|
||||
dark plum bags contain 1 light yellow bag, 1 mirrored lime bag, 2 bright salmon bags.
|
||||
faded tomato bags contain 2 muted chartreuse bags, 4 dark chartreuse bags.
|
||||
dotted aqua bags contain 2 dull lavender bags, 4 pale tomato bags.
|
||||
plaid lime bags contain 3 vibrant indigo bags, 1 muted red bag, 1 posh silver bag, 1 dim indigo bag.
|
||||
vibrant lime bags contain 5 drab turquoise bags, 2 vibrant chartreuse bags, 4 clear blue bags.
|
||||
posh brown bags contain 2 wavy red bags, 2 drab beige bags.
|
||||
bright beige bags contain 3 faded blue bags, 4 muted red bags, 5 mirrored lavender bags, 2 pale red bags.
|
||||
dotted yellow bags contain 5 striped gray bags, 3 pale gold bags, 2 clear olive bags, 5 mirrored yellow bags.
|
||||
dull gold bags contain 5 clear tomato bags, 5 drab beige bags, 4 bright silver bags, 4 drab crimson bags.
|
||||
dark maroon bags contain 2 wavy turquoise bags, 4 dark chartreuse bags.
|
||||
drab olive bags contain 4 faded bronze bags.
|
||||
posh plum bags contain 2 dull tan bags.
|
||||
light indigo bags contain 2 wavy yellow bags.
|
||||
vibrant tan bags contain 5 shiny teal bags.
|
||||
dim purple bags contain 5 light olive bags, 5 mirrored violet bags.
|
||||
vibrant gray bags contain 3 bright turquoise bags, 4 dim maroon bags, 4 vibrant chartreuse bags, 2 faded turquoise bags.
|
||||
pale tan bags contain 2 light salmon bags, 3 dotted silver bags, 5 clear lime bags, 1 shiny teal bag.
|
||||
dark tan bags contain 5 dim indigo bags, 3 shiny beige bags, 5 dim tan bags, 2 pale black bags.
|
||||
dotted tomato bags contain 3 shiny black bags, 3 pale crimson bags, 2 dim tan bags.
|
||||
posh violet bags contain 4 posh crimson bags, 1 muted fuchsia bag, 4 pale cyan bags, 3 mirrored gold bags.
|
||||
clear tan bags contain 2 bright tan bags, 5 faded beige bags.
|
||||
bright bronze bags contain no other bags.
|
||||
dotted brown bags contain 2 dotted black bags, 3 wavy coral bags.
|
||||
muted violet bags contain 3 faded magenta bags, 3 bright magenta bags.
|
||||
faded plum bags contain 2 dull lime bags, 4 dim coral bags, 5 shiny maroon bags, 3 pale red bags.
|
||||
dark lime bags contain 4 dim tomato bags.
|
||||
dull aqua bags contain 4 drab beige bags, 4 drab maroon bags.
|
||||
posh purple bags contain 2 vibrant purple bags, 5 shiny gold bags, 2 plaid turquoise bags.
|
||||
dull plum bags contain 5 dark brown bags, 4 muted black bags, 1 striped lavender bag.
|
||||
faded turquoise bags contain 3 shiny yellow bags, 4 faded plum bags, 5 pale violet bags, 4 dim lavender bags.
|
||||
striped bronze bags contain 1 muted bronze bag, 4 clear green bags, 4 shiny fuchsia bags, 5 pale red bags.
|
||||
mirrored blue bags contain 4 clear tomato bags, 5 shiny orange bags, 1 dull beige bag, 1 striped silver bag.
|
||||
shiny orange bags contain 2 light bronze bags, 4 dark tomato bags, 2 drab gold bags.
|
||||
shiny gray bags contain 1 dark maroon bag.
|
||||
drab red bags contain 5 wavy purple bags.
|
||||
posh fuchsia bags contain 3 mirrored chartreuse bags, 3 vibrant teal bags.
|
||||
light crimson bags contain 2 shiny aqua bags, 2 plaid chartreuse bags, 1 shiny gold bag, 1 wavy maroon bag.
|
||||
vibrant white bags contain 1 shiny brown bag, 5 light purple bags, 4 dull olive bags, 5 clear cyan bags.
|
||||
dark green bags contain 5 drab indigo bags, 1 striped coral bag.
|
||||
striped fuchsia bags contain 5 vibrant plum bags.
|
||||
bright turquoise bags contain 1 striped fuchsia bag, 3 posh purple bags, 5 dim aqua bags.
|
||||
striped tan bags contain 1 dotted cyan bag.
|
||||
shiny magenta bags contain 2 dark yellow bags, 1 faded silver bag, 4 muted orange bags, 3 bright fuchsia bags.
|
||||
dim violet bags contain 4 wavy bronze bags, 1 bright bronze bag.
|
||||
vibrant orange bags contain 2 faded chartreuse bags, 2 vibrant turquoise bags, 2 dull white bags.
|
||||
pale gold bags contain 5 light lavender bags, 4 mirrored orange bags, 4 muted chartreuse bags.
|
||||
pale red bags contain no other bags.
|
||||
plaid brown bags contain 3 mirrored orange bags.
|
||||
posh aqua bags contain 5 light blue bags, 1 dark indigo bag, 1 pale red bag, 2 vibrant turquoise bags.
|
||||
muted lime bags contain 1 dim chartreuse bag, 1 dotted olive bag, 4 pale violet bags, 3 muted fuchsia bags.
|
||||
dotted fuchsia bags contain 4 light teal bags, 1 muted chartreuse bag, 3 dark chartreuse bags, 4 dim lavender bags.
|
||||
dim turquoise bags contain 4 clear beige bags, 1 posh magenta bag, 3 faded brown bags.
|
||||
muted coral bags contain 4 dark salmon bags, 1 pale tomato bag, 2 shiny brown bags.
|
||||
dull chartreuse bags contain 3 shiny white bags, 4 shiny blue bags, 1 pale crimson bag.
|
||||
muted indigo bags contain 4 posh silver bags, 1 pale maroon bag, 1 dotted red bag, 1 drab coral bag.
|
||||
dim salmon bags contain 5 pale black bags, 3 dark salmon bags, 3 pale red bags, 5 dotted purple bags.
|
||||
dotted bronze bags contain 1 dim aqua bag, 2 mirrored maroon bags, 4 muted olive bags, 3 dull fuchsia bags.
|
||||
drab silver bags contain 2 dim coral bags, 3 dim salmon bags.
|
||||
striped salmon bags contain 2 dotted purple bags, 2 posh green bags, 3 plaid beige bags.
|
||||
mirrored tomato bags contain 5 faded tomato bags, 4 wavy red bags.
|
||||
dotted cyan bags contain 1 posh white bag, 3 striped lime bags, 4 dotted purple bags, 2 muted red bags.
|
||||
striped blue bags contain 4 dark silver bags, 4 pale silver bags.
|
||||
faded green bags contain 3 dotted violet bags, 3 pale turquoise bags.
|
||||
striped gray bags contain 2 pale tomato bags, 2 dark chartreuse bags, 5 muted red bags, 3 pale violet bags.
|
||||
pale lime bags contain 4 posh maroon bags, 2 drab plum bags, 3 drab coral bags.
|
||||
posh beige bags contain 4 wavy purple bags, 2 shiny gold bags, 1 dark tan bag.
|
||||
dotted tan bags contain 2 bright silver bags, 1 posh bronze bag, 2 dim coral bags, 2 dim tomato bags.
|
||||
shiny brown bags contain 4 dim violet bags, 5 bright silver bags.
|
||||
mirrored silver bags contain 1 striped blue bag, 2 shiny teal bags, 2 light coral bags, 1 dim beige bag.
|
||||
clear silver bags contain 4 mirrored fuchsia bags, 5 dull olive bags, 1 plaid crimson bag.
|
||||
dotted orange bags contain 1 mirrored turquoise bag, 3 wavy lime bags, 3 dotted yellow bags, 5 muted lavender bags.
|
||||
shiny purple bags contain 1 shiny beige bag, 3 plaid chartreuse bags.
|
||||
drab brown bags contain 2 dull indigo bags, 3 mirrored cyan bags, 1 dim crimson bag.
|
||||
vibrant tomato bags contain 5 faded plum bags.
|
||||
light tan bags contain 1 dark gold bag, 3 light salmon bags.
|
||||
vibrant cyan bags contain 4 shiny aqua bags.
|
||||
dotted purple bags contain 4 wavy coral bags.
|
||||
vibrant red bags contain 4 faded tan bags, 1 drab aqua bag, 4 striped black bags.
|
||||
faded lime bags contain 3 light olive bags, 3 striped yellow bags.
|
||||
posh gold bags contain 1 dull indigo bag, 1 mirrored chartreuse bag.
|
||||
shiny aqua bags contain 2 vibrant turquoise bags.
|
||||
light orange bags contain 3 vibrant violet bags, 2 dotted yellow bags, 1 dark gray bag, 5 striped chartreuse bags.
|
||||
pale black bags contain 1 plaid brown bag, 2 muted chartreuse bags.
|
||||
drab violet bags contain 5 clear cyan bags, 1 pale gold bag, 4 drab salmon bags, 2 posh orange bags.
|
||||
dim silver bags contain 5 clear cyan bags.
|
||||
muted beige bags contain 1 dim tomato bag, 3 light olive bags.
|
||||
drab turquoise bags contain 3 plaid orange bags, 1 light purple bag.
|
||||
dark red bags contain 2 vibrant yellow bags, 4 mirrored fuchsia bags, 5 posh bronze bags, 2 dark gold bags.
|
||||
vibrant maroon bags contain 5 drab beige bags, 1 dark beige bag, 1 dark brown bag, 4 pale maroon bags.
|
||||
wavy magenta bags contain 3 light tomato bags, 5 muted gold bags, 3 muted cyan bags.
|
||||
shiny chartreuse bags contain 5 pale yellow bags.
|
||||
dull cyan bags contain 4 bright maroon bags, 4 faded bronze bags.
|
||||
light black bags contain 4 shiny teal bags, 5 faded beige bags, 1 muted gold bag, 4 plaid silver bags.
|
||||
bright green bags contain 5 striped lime bags, 4 muted yellow bags, 4 light beige bags, 4 plaid violet bags.
|
||||
striped orange bags contain 1 mirrored orange bag, 2 bright salmon bags.
|
||||
muted plum bags contain 3 mirrored orange bags, 1 muted chartreuse bag, 2 dull olive bags, 4 dull brown bags.
|
||||
pale white bags contain 5 light silver bags.
|
||||
mirrored gray bags contain 1 mirrored violet bag, 5 striped gray bags, 5 dim aqua bags, 4 wavy fuchsia bags.
|
||||
wavy beige bags contain 2 shiny beige bags.
|
||||
dotted red bags contain 4 dotted purple bags, 3 muted aqua bags, 2 pale tomato bags, 4 pale bronze bags.
|
||||
posh lavender bags contain 2 dotted tomato bags, 3 dim lavender bags, 2 muted gray bags, 3 light plum bags.
|
||||
mirrored yellow bags contain 4 wavy gold bags.
|
||||
wavy brown bags contain 3 dim fuchsia bags, 4 dull turquoise bags.
|
||||
plaid chartreuse bags contain 5 plaid red bags.
|
||||
shiny turquoise bags contain 2 faded turquoise bags, 3 muted tan bags.
|
||||
mirrored brown bags contain 4 dotted fuchsia bags, 4 dim red bags, 2 dotted plum bags.
|
||||
dim tan bags contain 1 drab tomato bag, 3 wavy red bags, 1 plaid turquoise bag, 2 clear lavender bags.
|
||||
faded yellow bags contain 1 clear bronze bag, 3 clear olive bags.
|
||||
bright orange bags contain 5 mirrored blue bags, 3 shiny blue bags.
|
||||
striped red bags contain 5 bright green bags, 3 wavy yellow bags.
|
||||
bright indigo bags contain 2 light maroon bags, 5 shiny bronze bags, 2 bright white bags.
|
||||
light gray bags contain 2 dotted maroon bags.
|
||||
light silver bags contain no other bags.
|
||||
bright gold bags contain 2 striped fuchsia bags.
|
||||
drab purple bags contain 5 light silver bags, 2 dull yellow bags, 2 shiny teal bags.
|
||||
mirrored coral bags contain 4 dim plum bags.
|
||||
light coral bags contain 3 dim lavender bags, 5 wavy green bags, 2 light bronze bags.
|
||||
plaid indigo bags contain 3 mirrored orange bags, 5 pale gold bags.
|
||||
dark crimson bags contain 4 dark turquoise bags, 4 plaid green bags, 4 clear fuchsia bags.
|
||||
wavy teal bags contain 1 pale silver bag, 4 mirrored chartreuse bags, 4 shiny black bags.
|
||||
dull tan bags contain 4 muted magenta bags.
|
||||
light violet bags contain 4 faded yellow bags, 5 light maroon bags, 3 clear teal bags, 2 pale crimson bags.
|
||||
striped silver bags contain 3 plaid fuchsia bags.
|
||||
shiny crimson bags contain 5 muted yellow bags.
|
||||
mirrored salmon bags contain 1 dim tan bag.
|
||||
dotted coral bags contain 5 dark tan bags.
|
||||
wavy gold bags contain 2 wavy turquoise bags, 4 dim indigo bags, 3 wavy bronze bags.
|
||||
vibrant bronze bags contain 1 pale purple bag.
|
||||
posh silver bags contain 4 posh chartreuse bags, 3 bright salmon bags, 1 dotted bronze bag, 3 shiny coral bags.
|
||||
bright purple bags contain 5 clear beige bags, 3 pale yellow bags, 1 wavy tomato bag, 5 pale lavender bags.
|
||||
muted tan bags contain 4 bright white bags, 5 dotted silver bags, 2 clear blue bags, 4 mirrored turquoise bags.
|
||||
light white bags contain 2 shiny purple bags, 1 dull aqua bag, 2 vibrant blue bags.
|
||||
faded fuchsia bags contain 2 dark green bags, 3 shiny violet bags, 4 drab plum bags, 3 vibrant olive bags.
|
||||
clear gray bags contain 2 muted red bags.
|
||||
dark tomato bags contain 4 dotted purple bags, 3 faded turquoise bags.
|
||||
light magenta bags contain 1 dull fuchsia bag.
|
||||
light purple bags contain 3 drab magenta bags, 4 dark coral bags, 3 light silver bags.
|
||||
vibrant turquoise bags contain 4 dotted black bags.
|
||||
dim indigo bags contain 4 muted chartreuse bags.
|
||||
dim bronze bags contain 3 drab gold bags, 4 clear brown bags, 2 muted tan bags.
|
||||
clear green bags contain 2 plaid fuchsia bags, 1 wavy bronze bag.
|
||||
dull maroon bags contain 2 wavy yellow bags, 1 dotted fuchsia bag, 4 mirrored yellow bags.
|
||||
dotted gray bags contain 5 dotted white bags, 2 pale tomato bags, 5 bright tan bags, 3 plaid turquoise bags.
|
||||
plaid gray bags contain 5 wavy lime bags, 4 dull aqua bags.
|
||||
mirrored crimson bags contain 1 shiny lavender bag, 4 plaid purple bags.
|
||||
shiny silver bags contain 5 vibrant lavender bags, 3 light coral bags, 5 dark aqua bags.
|
||||
dotted salmon bags contain 3 pale tomato bags.
|
||||
muted crimson bags contain 4 clear olive bags, 3 dull plum bags, 1 dark gray bag, 1 wavy lime bag.
|
||||
muted lavender bags contain 1 bright chartreuse bag, 3 pale yellow bags, 3 pale crimson bags.
|
||||
posh tan bags contain 4 faded tomato bags, 3 dotted olive bags, 4 striped maroon bags.
|
||||
vibrant salmon bags contain 4 vibrant indigo bags, 1 plaid orange bag.
|
||||
faded chartreuse bags contain 2 mirrored orange bags, 1 pale crimson bag.
|
||||
striped tomato bags contain 3 dim tan bags, 2 wavy gold bags.
|
||||
dim yellow bags contain 1 clear purple bag, 1 wavy red bag, 1 drab bronze bag.
|
||||
wavy tomato bags contain 5 dotted tomato bags, 3 dim salmon bags, 5 light tan bags, 3 dull brown bags.
|
||||
bright lime bags contain 3 mirrored turquoise bags, 3 dotted tan bags, 3 posh black bags, 5 wavy gold bags.
|
||||
muted brown bags contain 4 shiny indigo bags, 4 muted tan bags, 3 wavy tan bags.
|
||||
pale cyan bags contain 1 dotted black bag.
|
||||
drab green bags contain 1 muted cyan bag.
|
||||
dim teal bags contain 4 faded lavender bags, 2 pale violet bags.
|
||||
drab lavender bags contain 1 pale gold bag, 5 vibrant brown bags, 4 posh indigo bags, 1 plaid olive bag.
|
||||
dotted turquoise bags contain 2 muted lime bags, 4 striped indigo bags.
|
||||
clear white bags contain 2 bright lime bags, 1 mirrored coral bag.
|
||||
dark purple bags contain 5 wavy crimson bags, 5 light olive bags.
|
||||
light tomato bags contain 4 posh black bags, 1 faded blue bag, 5 dim black bags, 3 dull lime bags.
|
||||
bright aqua bags contain 3 clear tomato bags.
|
||||
bright tomato bags contain 1 clear green bag, 3 bright gray bags, 3 mirrored cyan bags, 5 posh chartreuse bags.
|
||||
dull yellow bags contain 5 wavy purple bags, 3 light purple bags, 5 clear cyan bags, 2 wavy coral bags.
|
||||
striped coral bags contain 3 mirrored black bags, 5 wavy coral bags, 2 posh white bags.
|
||||
shiny bronze bags contain 2 dim tomato bags, 3 dull lime bags.
|
||||
vibrant aqua bags contain 4 dull olive bags, 4 mirrored turquoise bags, 1 vibrant teal bag.
|
||||
faded magenta bags contain 3 plaid chartreuse bags, 5 plaid white bags, 1 drab lime bag, 3 mirrored fuchsia bags.
|
||||
pale beige bags contain 3 wavy gray bags, 5 mirrored tomato bags, 1 bright beige bag.
|
||||
pale crimson bags contain 1 pale violet bag, 4 pale black bags, 5 dim tomato bags, 1 mirrored turquoise bag.
|
||||
dark blue bags contain 4 dark maroon bags, 1 faded brown bag, 2 wavy red bags.
|
||||
posh tomato bags contain 2 posh beige bags, 4 dark maroon bags.
|
||||
dim plum bags contain 2 muted crimson bags, 1 striped coral bag, 2 plaid yellow bags, 5 striped violet bags.
|
||||
dull black bags contain 3 posh tomato bags, 1 vibrant yellow bag, 4 mirrored salmon bags, 2 light green bags.
|
||||
wavy plum bags contain 4 wavy blue bags.
|
||||
bright coral bags contain 4 posh gold bags, 2 plaid lime bags, 3 shiny black bags, 5 dim magenta bags.
|
||||
posh blue bags contain 2 dotted turquoise bags, 2 bright olive bags, 2 plaid gold bags.
|
||||
vibrant purple bags contain 2 mirrored orange bags, 4 dull lavender bags, 2 pale red bags.
|
||||
dark white bags contain 4 drab lime bags.
|
||||
wavy crimson bags contain 2 dark salmon bags, 5 wavy yellow bags, 2 bright bronze bags, 2 drab crimson bags.
|
||||
clear coral bags contain 4 vibrant blue bags.
|
||||
muted olive bags contain 3 plaid brown bags, 1 dim fuchsia bag, 2 posh yellow bags.
|
||||
plaid violet bags contain 4 muted aqua bags.
|
||||
plaid teal bags contain 4 bright tan bags, 2 dark tomato bags.
|
||||
plaid purple bags contain 3 posh teal bags.
|
||||
pale turquoise bags contain 2 faded purple bags, 4 mirrored maroon bags, 1 mirrored salmon bag.
|
||||
muted fuchsia bags contain 5 bright bronze bags, 4 muted gold bags.
|
||||
bright olive bags contain 2 faded blue bags, 3 faded turquoise bags, 5 light bronze bags, 3 dim tan bags.
|
||||
bright gray bags contain 1 bright white bag, 2 muted orange bags.
|
||||
light blue bags contain 1 dotted purple bag, 3 dim black bags, 3 posh purple bags, 2 mirrored violet bags.
|
||||
posh bronze bags contain 3 plaid fuchsia bags, 1 drab gold bag, 4 mirrored orange bags, 4 light teal bags.
|
||||
faded olive bags contain 3 striped blue bags, 3 dim salmon bags, 4 pale red bags, 2 dull maroon bags.
|
||||
dull coral bags contain 2 wavy gold bags, 1 dark magenta bag.
|
||||
dull olive bags contain 3 plaid turquoise bags, 3 plaid fuchsia bags, 4 wavy lime bags, 1 dotted black bag.
|
||||
plaid orange bags contain 1 dark salmon bag, 1 striped turquoise bag.
|
||||
clear blue bags contain 3 dim tan bags, 3 muted red bags, 3 faded tomato bags.
|
||||
dark chartreuse bags contain 4 bright bronze bags, 1 dim indigo bag.
|
||||
plaid tomato bags contain 5 shiny turquoise bags, 4 clear tan bags, 2 dotted bronze bags, 5 muted magenta bags.
|
||||
mirrored green bags contain 2 light silver bags, 3 light brown bags, 4 vibrant purple bags, 2 posh green bags.
|
||||
drab blue bags contain 4 drab indigo bags.
|
||||
vibrant silver bags contain 3 striped violet bags, 1 striped white bag, 2 bright blue bags.
|
||||
shiny olive bags contain 3 drab tomato bags.
|
||||
dull red bags contain 4 dim cyan bags, 3 wavy lime bags.
|
||||
vibrant plum bags contain 3 wavy coral bags, 2 light lavender bags.
|
||||
faded cyan bags contain 1 dim brown bag, 5 posh indigo bags.
|
||||
dotted violet bags contain 1 pale tomato bag, 5 dim plum bags.
|
||||
striped brown bags contain 5 dim coral bags, 4 clear blue bags.
|
||||
dotted indigo bags contain 5 clear salmon bags, 4 dim bronze bags.
|
||||
posh cyan bags contain 2 vibrant magenta bags.
|
||||
clear beige bags contain 1 bright olive bag.
|
||||
dark black bags contain 4 dull crimson bags, 3 plaid green bags.
|
||||
mirrored lavender bags contain 5 dark silver bags.
|
||||
bright black bags contain 4 shiny brown bags, 1 vibrant crimson bag, 2 posh white bags, 3 wavy gold bags.
|
||||
pale indigo bags contain 5 shiny gold bags, 3 light bronze bags, 3 striped turquoise bags.
|
||||
plaid cyan bags contain 1 shiny tan bag, 4 dark tan bags, 1 dull yellow bag.
|
||||
bright plum bags contain 1 pale chartreuse bag, 3 plaid red bags, 1 faded beige bag, 1 posh gray bag.
|
||||
drab maroon bags contain 3 dull olive bags, 1 pale green bag, 2 mirrored turquoise bags.
|
||||
pale chartreuse bags contain 4 dim tomato bags.
|
||||
striped black bags contain 4 vibrant turquoise bags, 3 faded white bags, 4 light plum bags, 1 pale black bag.
|
||||
dotted gold bags contain 5 posh teal bags, 5 striped violet bags.
|
||||
posh orange bags contain 1 clear green bag.
|
||||
light green bags contain 5 wavy turquoise bags, 2 pale red bags, 3 dark tomato bags, 3 dull turquoise bags.
|
||||
plaid beige bags contain 4 light silver bags, 4 plaid turquoise bags, 5 drab purple bags, 4 clear lime bags.
|
||||
mirrored violet bags contain 2 wavy fuchsia bags, 5 bright bronze bags.
|
||||
striped plum bags contain 2 plaid indigo bags, 5 bright yellow bags, 1 wavy magenta bag.
|
||||
bright yellow bags contain 3 wavy yellow bags.
|
||||
drab aqua bags contain 5 dark red bags, 2 light gold bags.
|
||||
plaid bronze bags contain 1 drab magenta bag.
|
||||
faded tan bags contain 4 shiny aqua bags, 2 light chartreuse bags.
|
||||
drab indigo bags contain 5 dotted beige bags, 3 dull lime bags, 1 striped violet bag, 4 vibrant tan bags.
|
||||
dark gold bags contain 4 mirrored lime bags, 3 dark salmon bags.
|
||||
muted orange bags contain 1 dull yellow bag, 2 shiny brown bags.
|
||||
plaid gold bags contain 4 drab coral bags, 5 shiny cyan bags.
|
||||
posh crimson bags contain 3 light brown bags, 3 bright bronze bags, 3 shiny yellow bags.
|
||||
bright magenta bags contain 5 dim lavender bags.
|
||||
light chartreuse bags contain 2 drab bronze bags, 3 dim coral bags.
|
||||
dim tomato bags contain no other bags.
|
||||
dark beige bags contain 3 mirrored yellow bags, 2 dull olive bags, 5 striped brown bags.
|
||||
clear cyan bags contain 5 drab beige bags, 1 shiny yellow bag, 5 wavy purple bags, 5 dark chartreuse bags.
|
||||
dark coral bags contain 3 dim lavender bags, 3 pale green bags, 4 mirrored orange bags, 1 dim coral bag.
|
||||
light lime bags contain 5 mirrored brown bags.
|
||||
shiny lavender bags contain 5 drab tan bags.
|
||||
faded lavender bags contain 1 light salmon bag, 2 dotted purple bags, 5 pale gold bags, 3 muted gold bags.
|
||||
pale tomato bags contain 5 dim coral bags.
|
||||
plaid coral bags contain 3 dull blue bags, 1 posh white bag, 3 light orange bags.
|
||||
dim coral bags contain no other bags.
|
||||
dotted olive bags contain 5 mirrored green bags, 3 drab aqua bags, 2 dull beige bags, 3 dim indigo bags.
|
||||
dark brown bags contain 1 muted tan bag, 5 wavy lime bags.
|
||||
mirrored red bags contain 5 vibrant aqua bags, 3 bright gray bags, 4 striped gray bags, 2 light lavender bags.
|
||||
mirrored olive bags contain 5 dark chartreuse bags, 1 dim lavender bag, 5 faded plum bags.
|
||||
dim black bags contain 1 shiny yellow bag, 4 plaid indigo bags.
|
||||
shiny maroon bags contain 1 mirrored orange bag, 1 muted chartreuse bag, 5 wavy bronze bags, 1 dull lavender bag.
|
||||
pale brown bags contain 4 light teal bags, 1 light plum bag, 3 bright aqua bags.
|
||||
striped chartreuse bags contain 2 shiny maroon bags.
|
||||
mirrored chartreuse bags contain 4 dotted tan bags, 4 bright bronze bags.
|
||||
plaid magenta bags contain 1 vibrant yellow bag, 5 wavy aqua bags, 5 dull turquoise bags, 2 wavy fuchsia bags.
|
||||
light salmon bags contain 3 muted tan bags, 3 faded turquoise bags, 4 drab bronze bags, 3 bright bronze bags.
|
||||
faded blue bags contain 1 wavy red bag, 5 wavy fuchsia bags, 4 bright bronze bags, 3 faded turquoise bags.
|
||||
plaid aqua bags contain 1 pale tan bag, 3 light white bags.
|
||||
mirrored turquoise bags contain 5 drab beige bags, 1 faded plum bag, 4 mirrored orange bags.
|
||||
shiny teal bags contain 2 pale black bags, 4 dull indigo bags, 4 vibrant teal bags.
|
||||
vibrant coral bags contain 3 drab turquoise bags, 4 striped beige bags, 1 wavy turquoise bag, 4 light crimson bags.
|
||||
faded gray bags contain 3 striped purple bags.
|
9
2020/day07/test
Normal file
9
2020/day07/test
Normal file
|
@ -0,0 +1,9 @@
|
|||
light red bags contain 1 bright white bag, 2 muted yellow bags.
|
||||
dark orange bags contain 3 bright white bags, 4 muted yellow bags.
|
||||
bright white bags contain 1 shiny gold bag.
|
||||
muted yellow bags contain 2 shiny gold bags, 9 faded blue bags.
|
||||
shiny gold bags contain 1 dark olive bag, 2 vibrant plum bags.
|
||||
dark olive bags contain 3 faded blue bags, 4 dotted black bags.
|
||||
vibrant plum bags contain 5 faded blue bags, 6 dotted black bags.
|
||||
faded blue bags contain no other bags.
|
||||
dotted black bags contain no other bags.
|
7
2020/day07/test2
Normal file
7
2020/day07/test2
Normal file
|
@ -0,0 +1,7 @@
|
|||
shiny gold bags contain 2 dark red bags.
|
||||
dark red bags contain 2 dark orange bags.
|
||||
dark orange bags contain 2 dark yellow bags.
|
||||
dark yellow bags contain 2 dark green bags.
|
||||
dark green bags contain 2 dark blue bags.
|
||||
dark blue bags contain 2 dark violet bags.
|
||||
dark violet bags contain no other bags.
|
165
2020/day08/day08.c
Normal file
165
2020/day08/day08.c
Normal file
|
@ -0,0 +1,165 @@
|
|||
#include <stdbool.h>
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
#include <string.h>
|
||||
#include <sys/time.h>
|
||||
|
||||
enum operation {
|
||||
NOP,
|
||||
ACC,
|
||||
JMP,
|
||||
};
|
||||
|
||||
struct instruction {
|
||||
enum operation op;
|
||||
int arg;
|
||||
};
|
||||
|
||||
enum outcome {
|
||||
ERROR,
|
||||
LOOP,
|
||||
END,
|
||||
};
|
||||
|
||||
struct result {
|
||||
enum outcome out;
|
||||
int ret;
|
||||
};
|
||||
|
||||
size_t count_lines(FILE *fp) {
|
||||
size_t count = 0;
|
||||
|
||||
for (char c = getc(fp); c != EOF; c = getc(fp)) {
|
||||
if (c == '\n') {
|
||||
count++;
|
||||
}
|
||||
}
|
||||
return count;
|
||||
}
|
||||
|
||||
struct result execute(size_t n, struct instruction program[n]) {
|
||||
int acc = 0;
|
||||
size_t ip = 0;
|
||||
bool visited[n];
|
||||
for (size_t i = 0; i < n; ++i) {
|
||||
visited[i] = false;
|
||||
}
|
||||
|
||||
while (visited[ip] == false && ip < n) {
|
||||
visited[ip] = true;
|
||||
switch (program[ip].op) {
|
||||
case NOP: {
|
||||
ip++;
|
||||
break;
|
||||
}
|
||||
case ACC: {
|
||||
acc += program[ip].arg;
|
||||
ip++;
|
||||
break;
|
||||
}
|
||||
case JMP: {
|
||||
ip += program[ip].arg;
|
||||
break;
|
||||
}
|
||||
default:
|
||||
printf("ERROR: invalid instruction %d %d in position %zu\n",
|
||||
program[ip].op, program[ip].arg, ip);
|
||||
return (struct result){.out = ERROR, .ret = 0};
|
||||
}
|
||||
}
|
||||
|
||||
if (ip == n) {
|
||||
return (struct result){.out = END, .ret = acc};
|
||||
}
|
||||
return (struct result){.out = LOOP, .ret = acc};
|
||||
}
|
||||
|
||||
int main(int argc, char *argv[]) {
|
||||
if (argc < 2) {
|
||||
printf("Usage: %s <input file>\n", argv[0]);
|
||||
return 0;
|
||||
}
|
||||
|
||||
FILE *fp = fopen(argv[1], "r");
|
||||
if (fp == NULL) {
|
||||
printf("Could not open file %s\n", argv[1]);
|
||||
return 1;
|
||||
}
|
||||
|
||||
size_t n = count_lines(fp);
|
||||
struct instruction program[n];
|
||||
rewind(fp);
|
||||
|
||||
char *buf = NULL;
|
||||
size_t buf_size = 0;
|
||||
size_t i = 0;
|
||||
while (getline(&buf, &buf_size, fp) != -1) {
|
||||
int arg;
|
||||
if (strncmp(buf, "nop", 3) == 0) {
|
||||
sscanf(buf, "nop %d", &arg);
|
||||
program[i] = (struct instruction){.op = NOP, .arg = arg};
|
||||
} else if (strncmp(buf, "acc", 3) == 0) {
|
||||
sscanf(buf, "acc %d", &arg);
|
||||
program[i] = (struct instruction){.op = ACC, .arg = arg};
|
||||
} else if (strncmp(buf, "jmp", 3) == 0) {
|
||||
sscanf(buf, "jmp %d", &arg);
|
||||
program[i] = (struct instruction){.op = JMP, .arg = arg};
|
||||
}
|
||||
i++;
|
||||
}
|
||||
free(buf);
|
||||
fclose(fp);
|
||||
|
||||
// Part 1
|
||||
printf("Part 1: ");
|
||||
struct timeval tv1, tv2;
|
||||
gettimeofday(&tv1, NULL);
|
||||
|
||||
struct result res = execute(n, program);
|
||||
if (res.out == LOOP) {
|
||||
printf("%d\n", res.ret);
|
||||
}
|
||||
|
||||
gettimeofday(&tv2, NULL);
|
||||
printf("Time: %lds %ldµs\n", tv2.tv_sec - tv1.tv_sec,
|
||||
tv2.tv_usec - tv1.tv_usec);
|
||||
|
||||
// Part 2 (bruteforce)
|
||||
printf("Part 2: ");
|
||||
gettimeofday(&tv1, NULL);
|
||||
|
||||
bool finished = false;
|
||||
i = 0;
|
||||
while (!finished && i < n) {
|
||||
switch (program[i].op) {
|
||||
case NOP: {
|
||||
program[i].op = JMP;
|
||||
res = execute(n, program);
|
||||
if (res.out == END) {
|
||||
finished = true;
|
||||
}
|
||||
program[i].op = NOP;
|
||||
break;
|
||||
}
|
||||
case JMP: {
|
||||
program[i].op = NOP;
|
||||
res = execute(n, program);
|
||||
if (res.out == END) {
|
||||
finished = true;
|
||||
}
|
||||
program[i].op = JMP;
|
||||
break;
|
||||
}
|
||||
default:
|
||||
break;
|
||||
}
|
||||
i++;
|
||||
}
|
||||
printf("%d\n", res.ret);
|
||||
|
||||
gettimeofday(&tv2, NULL);
|
||||
printf("Time: %lds %ldµs\n", tv2.tv_sec - tv1.tv_sec,
|
||||
tv2.tv_usec - tv1.tv_usec);
|
||||
|
||||
return 0;
|
||||
}
|
75
2020/day08/day08.rkt
Normal file
75
2020/day08/day08.rkt
Normal file
|
@ -0,0 +1,75 @@
|
|||
#lang racket/base
|
||||
|
||||
(require racket/string
|
||||
racket/vector
|
||||
racket/file
|
||||
racket/match)
|
||||
|
||||
(module+ test
|
||||
(require rackunit))
|
||||
|
||||
(module+ main
|
||||
(displayln "Day 8"))
|
||||
|
||||
(define (parse-instruction str)
|
||||
(define instr (string-split str))
|
||||
(cons (string->symbol (car instr))
|
||||
(map string->number (cdr instr))))
|
||||
|
||||
(define (read-input filename)
|
||||
(list->vector (map parse-instruction (file->lines filename))))
|
||||
|
||||
(define (execute program)
|
||||
(define n (vector-length program))
|
||||
(let loop ([acc 0]
|
||||
[i 0]
|
||||
[visited '()])
|
||||
(cond
|
||||
[(member i visited) (values 'loop visited acc)]
|
||||
[(= i n) (values 'end visited acc)]
|
||||
[else (match (vector-ref program i)
|
||||
[(list 'nop x) (loop acc (add1 i) (cons i visited))]
|
||||
[(list 'acc x) (loop (+ acc x) (add1 i) (cons i visited))]
|
||||
[(list 'jmp x) (loop acc (+ i x) (cons i visited))]
|
||||
[instr (error "invalid instruction" i instr)])])))
|
||||
|
||||
(define (part1 filename)
|
||||
(define program (read-input filename))
|
||||
(define-values (state visited acc) (execute program))
|
||||
acc)
|
||||
|
||||
(module+ test
|
||||
(check-equal? (part1 "test") 5))
|
||||
|
||||
(module+ main
|
||||
(displayln (part1 "input")))
|
||||
|
||||
(define (change-instruction program visited)
|
||||
(define new-program (vector-copy program))
|
||||
(define new-visited
|
||||
(let loop ([instructions visited])
|
||||
(match (vector-ref new-program (car instructions))
|
||||
[(list 'nop x)
|
||||
(vector-set! new-program (car instructions) (list 'jmp x))
|
||||
(cdr instructions)]
|
||||
[(list 'jmp x)
|
||||
(vector-set! new-program (car instructions) (list 'nop x))
|
||||
(cdr instructions)]
|
||||
[z (loop (cdr instructions))])))
|
||||
(values new-program new-visited))
|
||||
|
||||
(define (part2 filename)
|
||||
(define program (read-input filename))
|
||||
(define-values (initial-reason initial-visited initial-acc) (execute program))
|
||||
(let loop ([visited initial-visited])
|
||||
(let*-values ([(new-program new-visited) (change-instruction program visited)]
|
||||
[(reason visited acc) (execute new-program)])
|
||||
(if (equal? reason 'end)
|
||||
acc
|
||||
(loop new-visited)))))
|
||||
|
||||
(module+ test
|
||||
(check-equal? (part2 "test") 8))
|
||||
|
||||
(module+ main
|
||||
(displayln (part2 "input")))
|
641
2020/day08/input
Normal file
641
2020/day08/input
Normal file
|
@ -0,0 +1,641 @@
|
|||
acc +29
|
||||
acc +0
|
||||
acc +36
|
||||
jmp +292
|
||||
acc +11
|
||||
acc +16
|
||||
nop +280
|
||||
nop +320
|
||||
jmp +310
|
||||
acc +15
|
||||
jmp +76
|
||||
acc +31
|
||||
acc +6
|
||||
acc +29
|
||||
acc +35
|
||||
jmp +524
|
||||
acc +4
|
||||
acc +12
|
||||
jmp +162
|
||||
acc +14
|
||||
acc -10
|
||||
jmp +312
|
||||
acc +19
|
||||
jmp +385
|
||||
acc +46
|
||||
acc +13
|
||||
acc -19
|
||||
jmp +366
|
||||
jmp +56
|
||||
acc -9
|
||||
nop +74
|
||||
jmp +357
|
||||
acc +28
|
||||
jmp +223
|
||||
acc -12
|
||||
jmp +292
|
||||
nop +385
|
||||
acc +45
|
||||
jmp +255
|
||||
jmp +337
|
||||
nop +465
|
||||
acc +43
|
||||
jmp +555
|
||||
acc +20
|
||||
acc +23
|
||||
acc +39
|
||||
jmp -6
|
||||
acc -4
|
||||
jmp -39
|
||||
acc +7
|
||||
acc -13
|
||||
acc +41
|
||||
acc +4
|
||||
jmp +80
|
||||
jmp +1
|
||||
jmp +484
|
||||
acc -16
|
||||
acc +2
|
||||
acc +20
|
||||
jmp +244
|
||||
jmp +258
|
||||
acc +27
|
||||
acc -7
|
||||
acc +40
|
||||
nop +490
|
||||
jmp +247
|
||||
nop +363
|
||||
acc +46
|
||||
acc +27
|
||||
acc -4
|
||||
jmp +379
|
||||
jmp +62
|
||||
acc -15
|
||||
acc +38
|
||||
acc -4
|
||||
acc +4
|
||||
jmp +312
|
||||
acc +37
|
||||
jmp +271
|
||||
acc +3
|
||||
jmp +538
|
||||
jmp +1
|
||||
acc +33
|
||||
jmp +99
|
||||
jmp +107
|
||||
jmp -38
|
||||
jmp +359
|
||||
jmp +1
|
||||
acc +11
|
||||
acc -3
|
||||
jmp +109
|
||||
acc +17
|
||||
jmp +146
|
||||
acc +34
|
||||
acc -5
|
||||
jmp +174
|
||||
jmp +482
|
||||
acc +43
|
||||
acc +35
|
||||
acc +8
|
||||
acc +36
|
||||
jmp -41
|
||||
jmp +260
|
||||
jmp -49
|
||||
acc +30
|
||||
nop -33
|
||||
acc +49
|
||||
acc +40
|
||||
jmp +157
|
||||
acc -11
|
||||
acc -11
|
||||
acc +21
|
||||
acc +35
|
||||
jmp +489
|
||||
jmp +219
|
||||
acc +33
|
||||
acc +22
|
||||
jmp +224
|
||||
jmp +1
|
||||
jmp +278
|
||||
acc +0
|
||||
acc +31
|
||||
jmp +271
|
||||
acc -19
|
||||
acc +38
|
||||
acc -15
|
||||
acc +0
|
||||
jmp +81
|
||||
acc +7
|
||||
acc +50
|
||||
nop +55
|
||||
nop +2
|
||||
jmp +195
|
||||
acc -18
|
||||
acc +14
|
||||
jmp +1
|
||||
jmp -57
|
||||
acc -17
|
||||
nop +495
|
||||
jmp -21
|
||||
jmp +1
|
||||
acc +39
|
||||
acc +35
|
||||
acc +27
|
||||
jmp +301
|
||||
acc +6
|
||||
acc +11
|
||||
acc -10
|
||||
jmp +1
|
||||
jmp +56
|
||||
acc +38
|
||||
jmp +333
|
||||
acc +26
|
||||
acc -15
|
||||
acc +32
|
||||
acc -9
|
||||
jmp +412
|
||||
acc -17
|
||||
acc +9
|
||||
jmp +110
|
||||
nop +298
|
||||
acc +4
|
||||
acc +25
|
||||
acc +0
|
||||
jmp -136
|
||||
acc +24
|
||||
jmp +418
|
||||
acc -2
|
||||
acc +38
|
||||
jmp +92
|
||||
acc +5
|
||||
acc +22
|
||||
acc -4
|
||||
acc -12
|
||||
jmp +241
|
||||
acc +19
|
||||
nop -6
|
||||
acc -11
|
||||
acc +24
|
||||
jmp +236
|
||||
jmp +106
|
||||
jmp +343
|
||||
jmp -17
|
||||
acc +5
|
||||
jmp +143
|
||||
nop +354
|
||||
acc +20
|
||||
acc -11
|
||||
jmp +63
|
||||
nop +252
|
||||
jmp +96
|
||||
acc -11
|
||||
acc +35
|
||||
nop +409
|
||||
acc +2
|
||||
jmp +83
|
||||
acc +0
|
||||
acc -1
|
||||
jmp +299
|
||||
acc +46
|
||||
jmp +426
|
||||
acc +8
|
||||
acc +50
|
||||
acc +33
|
||||
jmp +384
|
||||
nop -20
|
||||
jmp -152
|
||||
jmp +283
|
||||
nop -161
|
||||
nop -76
|
||||
acc +34
|
||||
nop -202
|
||||
jmp -98
|
||||
acc +11
|
||||
jmp +194
|
||||
acc +12
|
||||
acc +32
|
||||
acc -18
|
||||
acc +4
|
||||
jmp +202
|
||||
acc -12
|
||||
acc +43
|
||||
acc -11
|
||||
jmp +70
|
||||
acc +8
|
||||
acc -5
|
||||
acc +9
|
||||
jmp -187
|
||||
acc +49
|
||||
acc +42
|
||||
acc +10
|
||||
jmp +274
|
||||
jmp -216
|
||||
acc -11
|
||||
acc -8
|
||||
acc +49
|
||||
nop -56
|
||||
jmp -197
|
||||
nop -33
|
||||
nop -167
|
||||
jmp -174
|
||||
acc +41
|
||||
acc +19
|
||||
acc +13
|
||||
jmp +334
|
||||
acc +48
|
||||
acc +37
|
||||
acc +35
|
||||
jmp +323
|
||||
jmp +1
|
||||
jmp -184
|
||||
nop +76
|
||||
acc +47
|
||||
acc +5
|
||||
jmp -150
|
||||
jmp +133
|
||||
acc -1
|
||||
jmp +197
|
||||
nop +175
|
||||
acc +28
|
||||
jmp +328
|
||||
jmp +209
|
||||
nop -190
|
||||
jmp +1
|
||||
jmp +181
|
||||
acc +33
|
||||
acc +34
|
||||
jmp +345
|
||||
jmp -118
|
||||
acc +40
|
||||
acc +36
|
||||
nop +32
|
||||
jmp +261
|
||||
acc +38
|
||||
acc +1
|
||||
acc -19
|
||||
acc +48
|
||||
jmp +320
|
||||
acc +32
|
||||
acc -7
|
||||
acc +34
|
||||
jmp +64
|
||||
acc +6
|
||||
acc +3
|
||||
acc -11
|
||||
jmp +293
|
||||
acc +49
|
||||
acc +23
|
||||
acc +46
|
||||
jmp +231
|
||||
jmp +1
|
||||
acc -17
|
||||
jmp +35
|
||||
jmp -78
|
||||
jmp +82
|
||||
acc +31
|
||||
nop +31
|
||||
acc +35
|
||||
acc +42
|
||||
jmp -208
|
||||
acc +2
|
||||
acc -16
|
||||
jmp +139
|
||||
nop -170
|
||||
acc -4
|
||||
acc +22
|
||||
acc +9
|
||||
jmp +295
|
||||
nop -248
|
||||
acc +33
|
||||
acc +32
|
||||
jmp +186
|
||||
acc -11
|
||||
jmp +151
|
||||
acc +15
|
||||
acc -7
|
||||
acc +20
|
||||
jmp -215
|
||||
acc +43
|
||||
acc +12
|
||||
acc +6
|
||||
acc +5
|
||||
jmp +225
|
||||
acc +15
|
||||
jmp +1
|
||||
nop +263
|
||||
jmp -317
|
||||
acc +34
|
||||
jmp +1
|
||||
jmp -275
|
||||
acc -15
|
||||
acc -12
|
||||
jmp +165
|
||||
nop -254
|
||||
acc +12
|
||||
nop +277
|
||||
jmp +105
|
||||
acc +35
|
||||
jmp +1
|
||||
acc +34
|
||||
jmp +93
|
||||
acc +9
|
||||
jmp -282
|
||||
acc +43
|
||||
jmp -335
|
||||
acc +21
|
||||
jmp -114
|
||||
acc +30
|
||||
jmp -246
|
||||
acc -17
|
||||
acc +10
|
||||
nop -211
|
||||
nop +202
|
||||
jmp +76
|
||||
acc +34
|
||||
acc +23
|
||||
acc +9
|
||||
acc +48
|
||||
jmp -208
|
||||
jmp -241
|
||||
acc +37
|
||||
jmp +97
|
||||
acc +10
|
||||
acc +47
|
||||
nop -292
|
||||
acc -13
|
||||
jmp +27
|
||||
acc -18
|
||||
nop -56
|
||||
jmp +33
|
||||
acc +7
|
||||
jmp -12
|
||||
acc -11
|
||||
acc -2
|
||||
acc +13
|
||||
jmp -328
|
||||
acc +21
|
||||
acc +30
|
||||
jmp -208
|
||||
acc -7
|
||||
jmp -87
|
||||
acc +41
|
||||
nop +76
|
||||
acc +22
|
||||
jmp +222
|
||||
acc +48
|
||||
acc +4
|
||||
jmp +225
|
||||
jmp +200
|
||||
acc -14
|
||||
acc -12
|
||||
nop -79
|
||||
jmp +192
|
||||
acc +41
|
||||
acc +3
|
||||
jmp -355
|
||||
jmp -292
|
||||
acc -18
|
||||
jmp -174
|
||||
acc +44
|
||||
acc +23
|
||||
jmp -163
|
||||
acc +5
|
||||
nop -125
|
||||
nop -7
|
||||
acc +41
|
||||
jmp -266
|
||||
jmp +90
|
||||
acc +5
|
||||
jmp +213
|
||||
acc +10
|
||||
acc -11
|
||||
nop -403
|
||||
jmp +1
|
||||
jmp -386
|
||||
acc -18
|
||||
acc +9
|
||||
nop +107
|
||||
acc +0
|
||||
jmp -383
|
||||
jmp +104
|
||||
acc +30
|
||||
acc -3
|
||||
nop -208
|
||||
acc -15
|
||||
jmp +211
|
||||
acc -12
|
||||
acc +18
|
||||
jmp -392
|
||||
acc +25
|
||||
acc +30
|
||||
jmp -170
|
||||
jmp -282
|
||||
acc +38
|
||||
acc -16
|
||||
jmp -108
|
||||
acc +29
|
||||
acc +31
|
||||
acc +29
|
||||
acc +32
|
||||
jmp -258
|
||||
acc -16
|
||||
jmp -40
|
||||
acc +41
|
||||
jmp -365
|
||||
acc +17
|
||||
acc +20
|
||||
jmp -77
|
||||
jmp -55
|
||||
acc +3
|
||||
acc +28
|
||||
nop -227
|
||||
jmp +116
|
||||
jmp +165
|
||||
acc +16
|
||||
jmp -74
|
||||
acc -4
|
||||
jmp -275
|
||||
acc +28
|
||||
jmp -254
|
||||
acc +13
|
||||
acc -12
|
||||
acc -16
|
||||
jmp -5
|
||||
acc +17
|
||||
nop -369
|
||||
nop -375
|
||||
nop +66
|
||||
jmp -173
|
||||
jmp -40
|
||||
jmp -448
|
||||
acc -10
|
||||
nop -332
|
||||
acc +39
|
||||
acc -8
|
||||
jmp +64
|
||||
acc -19
|
||||
acc +14
|
||||
jmp -376
|
||||
acc +20
|
||||
acc +25
|
||||
acc +11
|
||||
acc +29
|
||||
jmp -392
|
||||
acc +33
|
||||
acc +28
|
||||
nop -241
|
||||
acc -6
|
||||
jmp +2
|
||||
jmp -410
|
||||
acc +15
|
||||
nop -351
|
||||
jmp -254
|
||||
acc -2
|
||||
acc +15
|
||||
acc +11
|
||||
jmp -103
|
||||
acc +29
|
||||
acc +7
|
||||
jmp +21
|
||||
acc +20
|
||||
acc +3
|
||||
acc -4
|
||||
acc +31
|
||||
jmp -7
|
||||
acc -1
|
||||
jmp +1
|
||||
jmp -158
|
||||
acc +11
|
||||
acc -8
|
||||
jmp +123
|
||||
acc -9
|
||||
acc +42
|
||||
acc +6
|
||||
acc -18
|
||||
jmp -483
|
||||
nop -507
|
||||
acc +37
|
||||
acc -10
|
||||
jmp -61
|
||||
jmp +98
|
||||
acc +38
|
||||
acc +36
|
||||
jmp -358
|
||||
nop -231
|
||||
acc +23
|
||||
acc +49
|
||||
jmp -151
|
||||
acc +48
|
||||
acc +2
|
||||
acc +19
|
||||
acc +34
|
||||
jmp -8
|
||||
acc -14
|
||||
acc -16
|
||||
jmp -439
|
||||
acc -7
|
||||
acc -14
|
||||
jmp -466
|
||||
acc +1
|
||||
nop -254
|
||||
acc +11
|
||||
jmp -72
|
||||
acc +33
|
||||
acc +11
|
||||
acc +40
|
||||
jmp -428
|
||||
acc +26
|
||||
acc +8
|
||||
acc +19
|
||||
jmp -305
|
||||
nop +71
|
||||
acc +3
|
||||
jmp -457
|
||||
acc -6
|
||||
acc +36
|
||||
jmp +77
|
||||
acc +11
|
||||
nop +68
|
||||
jmp -69
|
||||
acc +7
|
||||
acc -8
|
||||
acc +50
|
||||
jmp -516
|
||||
acc +11
|
||||
acc +46
|
||||
acc +4
|
||||
jmp -179
|
||||
jmp -265
|
||||
nop -64
|
||||
jmp +63
|
||||
acc +27
|
||||
nop -340
|
||||
jmp -62
|
||||
acc +15
|
||||
acc +42
|
||||
acc -9
|
||||
jmp -549
|
||||
acc +3
|
||||
acc -10
|
||||
acc +28
|
||||
jmp -376
|
||||
jmp +1
|
||||
jmp -78
|
||||
jmp -87
|
||||
acc +34
|
||||
acc -17
|
||||
jmp -275
|
||||
acc +50
|
||||
acc +17
|
||||
acc +39
|
||||
jmp -133
|
||||
nop -331
|
||||
acc +33
|
||||
acc +38
|
||||
acc +25
|
||||
jmp -215
|
||||
acc +0
|
||||
acc -9
|
||||
jmp -258
|
||||
acc +25
|
||||
jmp -81
|
||||
jmp -574
|
||||
acc +37
|
||||
acc +48
|
||||
jmp -327
|
||||
acc +34
|
||||
nop -493
|
||||
acc +42
|
||||
jmp -459
|
||||
jmp +1
|
||||
jmp -135
|
||||
jmp -489
|
||||
acc +33
|
||||
acc +19
|
||||
acc +17
|
||||
acc +7
|
||||
jmp -106
|
||||
nop -164
|
||||
jmp -462
|
||||
acc +27
|
||||
jmp -612
|
||||
acc +15
|
||||
jmp -438
|
||||
acc +35
|
||||
jmp -171
|
||||
acc +10
|
||||
acc +4
|
||||
acc +34
|
||||
jmp -496
|
||||
nop -4
|
||||
acc +16
|
||||
jmp -541
|
||||
acc +13
|
||||
jmp -201
|
||||
jmp -551
|
||||
acc +40
|
||||
acc +9
|
||||
acc +0
|
||||
acc +33
|
||||
jmp +1
|
9
2020/day08/test
Normal file
9
2020/day08/test
Normal file
|
@ -0,0 +1,9 @@
|
|||
nop +0
|
||||
acc +1
|
||||
jmp +4
|
||||
acc +3
|
||||
jmp -3
|
||||
acc -99
|
||||
acc +1
|
||||
jmp -4
|
||||
acc +6
|
98
2020/day09/day09.c
Normal file
98
2020/day09/day09.c
Normal file
|
@ -0,0 +1,98 @@
|
|||
#include <stdbool.h>
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
#include <limits.h>
|
||||
|
||||
bool in_state(unsigned int m, unsigned int state[m][m], unsigned int x) {
|
||||
for (int i = 0; i < m; ++i) {
|
||||
for (int j = i + 1; j < m; ++j) {
|
||||
if (state[i][j] == x) {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
void print_state(unsigned int m, unsigned int state[m][m]) {
|
||||
for (int i = 0; i < m; ++i) {
|
||||
for (int j = 0; j < m; ++j) {
|
||||
printf("%u ", state[i][j]);
|
||||
}
|
||||
printf("\n");
|
||||
}
|
||||
}
|
||||
|
||||
void update_state(unsigned int m, unsigned int state[m][m], unsigned int *input,
|
||||
unsigned int k) {
|
||||
for (int i = k - m +1; i < k; ++i) {
|
||||
state[k % m][i % m] = input[i] + input[k];
|
||||
state[i % m][k % m] = input[i] + input[k];
|
||||
}
|
||||
}
|
||||
|
||||
int main(int argc, char *argv[]) {
|
||||
if (argc < 3) {
|
||||
printf("Usage: %s <input file> <preamble size>\n", argv[0]);
|
||||
return 0;
|
||||
}
|
||||
|
||||
FILE *fp = fopen(argv[1], "r");
|
||||
if (fp == NULL) {
|
||||
printf("Could not open file %s\n", argv[1]);
|
||||
return 1;
|
||||
}
|
||||
|
||||
unsigned int m;
|
||||
sscanf(argv[2], "%d", &m);
|
||||
|
||||
unsigned int input[1024] = {0};
|
||||
unsigned int n = 0;
|
||||
unsigned int d;
|
||||
while (fscanf(fp, "%d\n", &d) == 1) {
|
||||
input[n] = d;
|
||||
n++;
|
||||
}
|
||||
fclose(fp);
|
||||
|
||||
// Part 1
|
||||
unsigned int state[m][m];
|
||||
for (int i = 0; i < m; ++i) {
|
||||
for (int j = 0; j < m; ++j) {
|
||||
if (i != j) {
|
||||
state[i][j] = input[i] + input[j];
|
||||
} else {
|
||||
state[i][j] = 0;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
unsigned int k = m;
|
||||
while (in_state(m, state, input[k])) {
|
||||
update_state(m, state, input, k);
|
||||
k++;
|
||||
}
|
||||
|
||||
printf("%u\n", input[k]);
|
||||
|
||||
// Part 2
|
||||
unsigned int invalid_number = input[k];
|
||||
for (int width = 2; width < n; ++width) {
|
||||
for (int i = 0; i < n - width; ++i) {
|
||||
unsigned int sum = 0;
|
||||
unsigned int min = UINT_MAX;
|
||||
unsigned int max = 0;
|
||||
for (int j = 0; j < width; ++j) {
|
||||
sum += input[i + j];
|
||||
min = (input[i + j] < min) ? input[i + j] : min;
|
||||
max = (input[i + j] > max) ? input[i + j] : max;
|
||||
}
|
||||
if (sum == invalid_number) {
|
||||
printf("%u\n", min + max);
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
6
2020/day09/day09.dyalog
Normal file
6
2020/day09/day09.dyalog
Normal file
|
@ -0,0 +1,6 @@
|
|||
⎕IO←0
|
||||
p←⍎¨⊃⎕NGET'input'1
|
||||
m←25
|
||||
⊢x←p⌷⍨m+⍸~(m↓p)∊¨{(,∘.<⍨⍳m)/,⍵}¨∘.+⍨¨¯1↓m,/p ⍝ Part 1
|
||||
⍝+/∊{{(x=+/⍵)×(⌈/+⌊/)⍵}¨⍵,/p}¨2+⍳⍴p ⍝ Part 2
|
||||
(⌈/+⌊/)p[{(1+1⊃⍵)+⍳⊃-/⍵}⊃⍸x=∘.-⍨+\p] ⍝ Part 2 (faster)
|
65
2020/day09/day09.rkt
Normal file
65
2020/day09/day09.rkt
Normal file
|
@ -0,0 +1,65 @@
|
|||
#lang racket
|
||||
|
||||
(module+ test
|
||||
(require rackunit))
|
||||
|
||||
(module+ main
|
||||
(displayln "Day 9"))
|
||||
|
||||
(define (read-input filename)
|
||||
(list->vector (map string->number (file->lines filename))))
|
||||
|
||||
(define (initial-state p m)
|
||||
(reverse (for/list ([x (in-vector p 0 m)])
|
||||
(for/list ([y (in-vector p 0 m)]
|
||||
#:unless (= x y))
|
||||
(+ x y)))))
|
||||
|
||||
(define (update-state s p k)
|
||||
(define m (length (car s)))
|
||||
(define new-sums (for/list ([x (in-vector p (- k m) k)])
|
||||
(+ x (vector-ref p k))))
|
||||
(append (cdr s) (list new-sums)))
|
||||
|
||||
(define (in-state? s x)
|
||||
(member x (flatten s)))
|
||||
|
||||
;; The initial state is computed in O(m^2), and the search itself is
|
||||
;; only O(nm), where n is the length of the input, because updating
|
||||
;; the state is linear in m. So the overall complexity is O(m^2 + nm)
|
||||
;; instead of O(nm^2) for the naïve solution.
|
||||
(define (find-invalid-number p m)
|
||||
(define-values (s x)
|
||||
(for/fold ([s (initial-state p m)]
|
||||
[x (vector-ref p m)])
|
||||
([k (in-naturals m)]
|
||||
#:break (not (in-state? s x)))
|
||||
(values (update-state s p k)
|
||||
(vector-ref p k))))
|
||||
x)
|
||||
|
||||
(define (part1 filename m)
|
||||
(find-invalid-number (read-input filename) m))
|
||||
|
||||
(module+ test
|
||||
(check-equal? (part1 "test" 5) 127))
|
||||
|
||||
(module+ main
|
||||
(displayln (part1 "input" 25)))
|
||||
|
||||
(define (part2 filename m)
|
||||
(define p (read-input filename))
|
||||
(define n (vector-length p))
|
||||
(define invalid (find-invalid-number p m))
|
||||
(for*/last ([width (in-range 2 n)]
|
||||
[i (in-range 0 (- n width))])
|
||||
(define contiguous (vector->list (vector-copy p i (+ i width))))
|
||||
#:final (= invalid (apply + contiguous))
|
||||
(+ (apply min contiguous)
|
||||
(apply max contiguous))))
|
||||
|
||||
(module+ test
|
||||
(check-equal? (part2 "test" 5) 62))
|
||||
|
||||
(module+ main
|
||||
(displayln (part2 "input" 25)))
|
1000
2020/day09/input
Normal file
1000
2020/day09/input
Normal file
File diff suppressed because it is too large
Load diff
20
2020/day09/test
Normal file
20
2020/day09/test
Normal file
|
@ -0,0 +1,20 @@
|
|||
35
|
||||
20
|
||||
15
|
||||
25
|
||||
47
|
||||
40
|
||||
62
|
||||
55
|
||||
65
|
||||
95
|
||||
102
|
||||
117
|
||||
150
|
||||
182
|
||||
127
|
||||
219
|
||||
299
|
||||
277
|
||||
309
|
||||
576
|
63
2020/day10/day10.c
Normal file
63
2020/day10/day10.c
Normal file
|
@ -0,0 +1,63 @@
|
|||
#include <stdbool.h>
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
#include <limits.h>
|
||||
|
||||
int compare(const void* a, const void* b) {
|
||||
unsigned int x = *(const unsigned int*)a;
|
||||
unsigned int y = *(const unsigned int*)b;
|
||||
|
||||
if (x < y) return -1;
|
||||
if (x > y) return 1;
|
||||
return 0;
|
||||
}
|
||||
|
||||
int main(int argc, char *argv[]) {
|
||||
if (argc < 2) {
|
||||
printf("Usage: %s <input file>\n", argv[0]);
|
||||
return 0;
|
||||
}
|
||||
|
||||
FILE *fp = fopen(argv[1], "r");
|
||||
if (fp == NULL) {
|
||||
printf("Could not open file %s\n", argv[1]);
|
||||
return 1;
|
||||
}
|
||||
|
||||
unsigned int input[128] = {0};
|
||||
unsigned int n = 1;
|
||||
unsigned int d = 0;
|
||||
unsigned int max = 0;
|
||||
while (fscanf(fp, "%d\n", &d) == 1) {
|
||||
input[n] = d;
|
||||
n++;
|
||||
max = d > max ? d : max;
|
||||
}
|
||||
max += 3;
|
||||
input[n] = max;
|
||||
n++;
|
||||
fclose(fp);
|
||||
|
||||
qsort(input, n, sizeof(unsigned int), compare);
|
||||
|
||||
// Part 1
|
||||
int ones = 0;
|
||||
int threes = 0;
|
||||
for (int i = 1; i < n; ++i) {
|
||||
int diff = input[i] - input[i-1];
|
||||
ones += (diff == 1);
|
||||
threes += (diff == 3);
|
||||
}
|
||||
printf("%d\n", ones * threes);
|
||||
|
||||
// Part 2
|
||||
unsigned long counts[1024] = {0};
|
||||
counts[2] = 1;
|
||||
for (int i = 1; i < n; ++i) {
|
||||
unsigned int x = input[i];
|
||||
counts[x+2] = counts[x-1] + counts[x] + counts[x+1];
|
||||
}
|
||||
printf("%lu\n", counts[max+2]);
|
||||
|
||||
return 0;
|
||||
}
|
10
2020/day10/day10.dyalog
Normal file
10
2020/day10/day10.dyalog
Normal file
|
@ -0,0 +1,10 @@
|
|||
⎕IO←0 ⋄ ⎕PP←15
|
||||
p←⍎¨⊃⎕NGET'input'1
|
||||
p←0,p[⍋p],3+⌈/p
|
||||
×/⊢∘≢⌸2-/p ⍝ Part 1
|
||||
c←0,0,1,(⌈/p)⍴0 ⍝ paths counts
|
||||
{c[⍵+2]←+/c[⍵+¯1 0 1]}¨1↓p
|
||||
⊃⌽c ⍝ Part 2
|
||||
|
||||
a←(0∘<∧≤∘3)∘.-⍨p ⍝ adjacency matrix
|
||||
+/{⊃⊖({a+.×⍵}⍣⍵)a}¨⍳⍴p ⍝ Part 2, the matrix way
|
49
2020/day10/day10.rkt
Normal file
49
2020/day10/day10.rkt
Normal file
|
@ -0,0 +1,49 @@
|
|||
#lang racket
|
||||
|
||||
(module+ test
|
||||
(require rackunit))
|
||||
|
||||
(module+ main
|
||||
(displayln "Day 10"))
|
||||
|
||||
(define (read-input filename)
|
||||
(define input (map string->number (file->lines filename)))
|
||||
(sort (cons 0 (cons (target input) input)) <))
|
||||
|
||||
(define (target lst)
|
||||
(+ 3 (apply max lst)))
|
||||
|
||||
(define (part1 filename)
|
||||
(define jolts (read-input filename))
|
||||
(define counts (make-hash))
|
||||
(for ([x (in-list (drop jolts 1))]
|
||||
[y (in-list jolts)])
|
||||
(hash-update! counts (- x y) add1 0))
|
||||
(* (hash-ref counts 1 0) (hash-ref counts 3 0)))
|
||||
|
||||
(module+ test
|
||||
(check-equal? (part1 "test1") (* 7 5))
|
||||
(check-equal? (part1 "test2") (* 22 10)))
|
||||
|
||||
(module+ main
|
||||
(displayln (part1 "input")))
|
||||
|
||||
(define (count-paths jolts)
|
||||
(define counts (make-hash))
|
||||
(hash-set! counts 0 1)
|
||||
(for ([x (in-list (cdr jolts))])
|
||||
(hash-set! counts x (+ (hash-ref counts (- x 1) 0)
|
||||
(hash-ref counts (- x 2) 0)
|
||||
(hash-ref counts (- x 3) 0))))
|
||||
(hash-ref counts (last jolts)))
|
||||
|
||||
(define (part2 filename)
|
||||
(define jolts (read-input filename))
|
||||
(count-paths jolts))
|
||||
|
||||
(module+ test
|
||||
(check-equal? (part2 "test1") 8)
|
||||
(check-equal? (part2 "test2") 19208))
|
||||
|
||||
(module+ main
|
||||
(displayln (part2 "input")))
|
95
2020/day10/input
Normal file
95
2020/day10/input
Normal file
|
@ -0,0 +1,95 @@
|
|||
86
|
||||
149
|
||||
4
|
||||
75
|
||||
87
|
||||
132
|
||||
12
|
||||
115
|
||||
62
|
||||
61
|
||||
153
|
||||
78
|
||||
138
|
||||
43
|
||||
88
|
||||
108
|
||||
59
|
||||
152
|
||||
109
|
||||
63
|
||||
42
|
||||
60
|
||||
7
|
||||
104
|
||||
49
|
||||
156
|
||||
35
|
||||
2
|
||||
52
|
||||
72
|
||||
125
|
||||
94
|
||||
46
|
||||
136
|
||||
26
|
||||
16
|
||||
76
|
||||
117
|
||||
116
|
||||
150
|
||||
20
|
||||
13
|
||||
141
|
||||
131
|
||||
127
|
||||
67
|
||||
3
|
||||
40
|
||||
54
|
||||
82
|
||||
36
|
||||
100
|
||||
41
|
||||
56
|
||||
146
|
||||
157
|
||||
89
|
||||
23
|
||||
8
|
||||
55
|
||||
111
|
||||
135
|
||||
144
|
||||
77
|
||||
124
|
||||
18
|
||||
53
|
||||
92
|
||||
126
|
||||
101
|
||||
69
|
||||
27
|
||||
145
|
||||
11
|
||||
151
|
||||
31
|
||||
19
|
||||
34
|
||||
17
|
||||
130
|
||||
118
|
||||
28
|
||||
107
|
||||
137
|
||||
68
|
||||
93
|
||||
85
|
||||
66
|
||||
97
|
||||
110
|
||||
37
|
||||
114
|
||||
79
|
||||
121
|
||||
1
|
11
2020/day10/test1
Normal file
11
2020/day10/test1
Normal file
|
@ -0,0 +1,11 @@
|
|||
16
|
||||
10
|
||||
15
|
||||
5
|
||||
1
|
||||
11
|
||||
7
|
||||
19
|
||||
6
|
||||
12
|
||||
4
|
31
2020/day10/test2
Normal file
31
2020/day10/test2
Normal file
|
@ -0,0 +1,31 @@
|
|||
28
|
||||
33
|
||||
18
|
||||
42
|
||||
31
|
||||
14
|
||||
46
|
||||
20
|
||||
48
|
||||
47
|
||||
24
|
||||
23
|
||||
49
|
||||
45
|
||||
19
|
||||
38
|
||||
39
|
||||
11
|
||||
1
|
||||
32
|
||||
25
|
||||
35
|
||||
8
|
||||
17
|
||||
7
|
||||
9
|
||||
4
|
||||
2
|
||||
34
|
||||
10
|
||||
3
|
4
2020/day11/day11.dyalog
Normal file
4
2020/day11/day11.dyalog
Normal file
|
@ -0,0 +1,4 @@
|
|||
⎕IO←0
|
||||
p←'L'=↑⊃⎕NGET'input'1
|
||||
s←{(1=1 1⌷⍵)∧∧/2≠,⍵:2 ⋄ (2=1 1⌷⍵)∧4<+/2=,⍵:1 ⋄ 1:1 1⌷⍵}⌺3 3
|
||||
+/,2=(s⍣≡)p ⍝ Part 1
|
119
2020/day11/day11.rkt
Normal file
119
2020/day11/day11.rkt
Normal file
|
@ -0,0 +1,119 @@
|
|||
#lang racket
|
||||
|
||||
(module+ test
|
||||
(require rackunit))
|
||||
|
||||
(module+ main
|
||||
(displayln "Day 11"))
|
||||
|
||||
(define (matrix-ref mat i j default)
|
||||
(define n (vector-length mat))
|
||||
(define m (vector-length (vector-ref mat 0)))
|
||||
(if (or (< i 0) (<= n i) (< j 0) (<= m j))
|
||||
default
|
||||
(vector-ref (vector-ref mat i) j)))
|
||||
|
||||
(define (matrix-set! mat i j v)
|
||||
(vector-set! (vector-ref mat i) j v))
|
||||
|
||||
(define (matrix-copy mat)
|
||||
(for/vector ([l (in-vector mat)])
|
||||
(vector-copy l)))
|
||||
|
||||
(define (display-state state)
|
||||
(for ([l (in-vector state)])
|
||||
(displayln (list->string (vector->list l))))
|
||||
(displayln ""))
|
||||
|
||||
(define (parse-line str)
|
||||
(list->vector (string->list str)))
|
||||
|
||||
(define (read-input filename)
|
||||
(with-input-from-file filename
|
||||
(lambda ()
|
||||
(for/vector ([line (in-lines)])
|
||||
(parse-line line)))))
|
||||
|
||||
(define (update-seat-neighbours state x y)
|
||||
(define neighbours (for*/sum ([i '(-1 0 1)]
|
||||
[j '(-1 0 1)]
|
||||
#:unless (= 0 i j))
|
||||
(if (eq? #\# (matrix-ref state (+ x i) (+ y j) #\.)) 1 0)))
|
||||
(define s (matrix-ref state x y #\.))
|
||||
(cond
|
||||
[(and (eq? s #\L) (= neighbours 0)) #\#]
|
||||
[(and (eq? s #\#) (>= neighbours 4)) #\L]
|
||||
[else s]))
|
||||
|
||||
(define (update-state state update-seat-fn)
|
||||
(define n (vector-length state))
|
||||
(define m (vector-length (vector-ref state 0)))
|
||||
(define new-state (matrix-copy state))
|
||||
(for* ([x (in-range n)]
|
||||
[y (in-range m)])
|
||||
(matrix-set! new-state x y (update-seat-fn state x y)))
|
||||
new-state)
|
||||
|
||||
(define (count-occupied state)
|
||||
(for*/sum ([l (in-vector state)]
|
||||
[v (in-vector l)]
|
||||
#:when (eq? v #\#))
|
||||
1))
|
||||
|
||||
(define (part1 filename)
|
||||
(define input (read-input filename))
|
||||
(define n (vector-length input))
|
||||
(define m (vector-length (vector-ref input 0)))
|
||||
(define-values (prev final)
|
||||
(for/fold ([prev-state 0]
|
||||
[state input])
|
||||
([i (in-naturals)]
|
||||
#:break (equal? prev-state state))
|
||||
(define new-state (update-state state update-seat-neighbours))
|
||||
(values state new-state)))
|
||||
(count-occupied final))
|
||||
|
||||
(module+ test
|
||||
(check-equal? (part1 "test") 37))
|
||||
|
||||
(module+ main
|
||||
(displayln (part1 "input")))
|
||||
|
||||
(define (visible state x y dx dy)
|
||||
(define n (vector-length state))
|
||||
(define m (vector-length (vector-ref state 0)))
|
||||
(let loop ([u (+ x dx)]
|
||||
[v (+ y dy)])
|
||||
(cond
|
||||
[(or (< u 0) (< v 0) (<= n u) (<= m v)) 0]
|
||||
[(eq? #\L (matrix-ref state u v #\.)) 0]
|
||||
[(eq? #\# (matrix-ref state u v #\.)) 1]
|
||||
[else (loop (+ u dx) (+ v dy))])))
|
||||
|
||||
(define (update-seat-visible state x y)
|
||||
(define n-visible (apply + (for*/list ([dx '(-1 0 1)]
|
||||
[dy '(-1 0 1)]
|
||||
#:unless (= 0 dx dy))
|
||||
(visible state x y dx dy))))
|
||||
(define s (matrix-ref state x y #\.))
|
||||
(cond
|
||||
[(and (eq? s #\L) (= n-visible 0)) #\#]
|
||||
[(and (eq? s #\#) (>= n-visible 5)) #\L]
|
||||
[else s]))
|
||||
|
||||
(define (part2 filename)
|
||||
(define input (read-input filename))
|
||||
(define-values (prev final)
|
||||
(for/fold ([prev-state 0]
|
||||
[state input])
|
||||
([i (in-naturals)]
|
||||
#:break (equal? prev-state state))
|
||||
(define new-state (update-state state update-seat-visible))
|
||||
(values state new-state)))
|
||||
(count-occupied final))
|
||||
|
||||
(module+ test
|
||||
(check-equal? (part2 "test") 26))
|
||||
|
||||
(module+ main
|
||||
(displayln (part2 "input")))
|
98
2020/day11/input
Normal file
98
2020/day11/input
Normal file
|
@ -0,0 +1,98 @@
|
|||
LLLLLLLLL.LLLL.LLLLL.LLLLLLLLLL.LLLLLLLLLLLLLLLL.LLLLLL.LLLLLLLLLLLLLLLLLL.LLLLLLL.LLLLLLLL
|
||||
LLLLLLLLL.LLLL.LLLLLLLLLLLL.LLLLLLLLLLLLL.LLLLLL.LLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLL.LLLLLLLL
|
||||
LLLLLLLLL.LLLL.LLLLL.LLLLLL.LLLLLLLL.LLLLLLLLLLL.LLLLLLLLLLLLLLL.LLLLLLLLL.LLLLLLL.LLLLLLLL
|
||||
LLLLLLLL..LLLL.LLLLL.LLLLLL.LLLLLLLL.LLLLLLLLLLL.LLLLLL.LLLLLLLL.LLLLLLLLLLLLLLL.LLLLLLLL.L
|
||||
LLLL.LLLLLLLLLLLLLLL.LLLLLLLLLLLLLLLLLLLL.LLLLLL.LLLLLLLLLLLLLLL.LLLLLLLLL.LLLLLLL.LLLLLLLL
|
||||
LLLLLLLLLLLLLLLLLLLL.LLLLLLLLLLLLLLLLLLLL.LLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLL.LLLLLLL.LLLLLLLL
|
||||
......L.LL.....L.L..L.....L.L..LL.L.LL.L...L..L..............L..L......LL.....LL...L.L.....
|
||||
LLLLLLLLL.LLLL.LLLLLLLLLLLL.LLLLLLLLLLLLL..LLLLLLLLLLLL.LLLLLLLL.LLLLLLLL..LLLLLLL.LLLLLLLL
|
||||
LLLLLLLLLLLLLL.LLLLL.LLLLLLLLLLLLLLL.LLLLLLLLLLL.LLLLLL.LLLLLLLL.LLLLLLLLL.LLLLLLL.LLLLLLLL
|
||||
LLLLLLLLLLLLLL.LLLLLLLLLLLL.LLLLLLLLLLLLLLLLLLLL.LLLLLL.LLLLLLLL.LLLLLLLLLLLLLLLLL.LLL.LLLL
|
||||
LLLLLLLLL.LLLL.LLLLL.LLLLLLLLLLLLLLLLLLLL.LLLLLL.LLLLLLLLLLLLLLLLLLLLLLLLL.LLLLLLL.LLLLLLLL
|
||||
LLLLLLLLL..LLL.LLLLL.LLLLLL.LLLLLLLLLLLLLLLLLLLL.LLLLLL.LLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLL
|
||||
...L..L....LL.L.L......LLLLL.....LL....L.......L.LL.L.L.L..LL...LLLLLL.LL........L.L.......
|
||||
LLLLLLLLL.LLLLLLLLLLLLLLLLLLLLLLLLLL.LLLL.LLLLLL.LLLLLLLLLLLLLLLLLLLLLLLLL.LLLLLLL.LLLLLLLL
|
||||
LLLLLLLLLLLLLL.LLLLLLLLLLLL.LLLLLLLL.LLLL.LLLLLL.LLLLLL.LLLLLLLL.LLLLLLLLL.LLLLLLLLLLLLLLLL
|
||||
.LLLLLLLL.LLLL..LLLL.LLLLLL.LLLLLLLL.LLLL.LLLLLLLLLLLLL.LLLLLLLL.LLLLLLLLL.LLLLLLLL.LLLLLLL
|
||||
LLLLLLLLL.LLLL.LLLLL.LLLLLL.LLLLLLLLLLLLL.LLLLLL.LLLLLLLLLLLLLLL.LLLLLLLLL.LLLLLLL.LLLLLLLL
|
||||
LLLLLLLLL.LLLLLLLLLLLLLLLLL.LLLLLLLL.LLLL.LLLLLL.LLLLLLLLLLLLLLL.LLLLLLLLL.LLLLLLL.LL.LLLLL
|
||||
LLLLLLLLL.LLLL.LLLLL.LLLLLLLLLLLLLLL.LLLLLLLLLLL.LLLLLL.LLLLLLLL.LLLLLL.LL.LLLLLLL.LLLLLLLL
|
||||
LLLLLLLLL.L.LL.LLLLLLLLLLLLLLLLLLLLL.LLLL.LLLLLLLLLLLLLLLLLL.LLLLLLLLLLLLLLLLLLLLL.LLLLLLLL
|
||||
LLLLLLLLL.LLLLLLLLLLLL.LLLL.LLLLLLLLLLLLL.LLLLLL.LLLLLL.LLLLLLLL.LLLLLLLLL.LLLLLLL.LLLLLLLL
|
||||
......L.L..L.L...LLL.....L.L..L......LL...L..L..L.L......L.L..L....LLLL....L..L....L.L..L.L
|
||||
LLLLLL.LL.LLLLLLLLLL.LLLLLL.LLLLLLLL.LLLL.LLLLLLLLLLLLL.LLLLLLLLLLLLLLLLLL.LLLLLLL.LLLLLLLL
|
||||
LLLLLLLLL.LLLL.LLLLL.LLLLLL.LLLLLLLLLLLLL.LLLLLLLLLLLLL.LLLLLLLL.LLL.LLLLL.LLLLLLL.LLLLLLLL
|
||||
LLLLLLLLL.LLLL.LLLLLLLLLLLL.LLLLLLLL.LLLLLLLLLLL.LLLLLL.LLLLLLLL.LLLLLLLLL.LLLLLLLLLLLLLLLL
|
||||
LLLL.LLLL.LLLLLLLLL..LLLLLLLLLLLLLLL.LLLLLLLLLLL.LLLLLL.LLLLLLLL.LLLLLLLLLLLLLLLLL.LLLLLLLL
|
||||
LLLLLLLLL.LLLL.LLLLL.LLLLLLLLLLL.LLL.LLLLLLLLLLL.LLL.LL.LLLLLLLL.LLLLLLLLL.LLLLLLL.LLLLLLLL
|
||||
LLLLLLLLL.LLLL.LLLLLLLLLLLL.LL.LLLLL.LLLLLLLLLLLLLLLLLLLLLLLLLLL.LLLLLLLLL.LLLLLLL.LLLLLLLL
|
||||
LLLLLLLLL.LLLL.LLLLL.LLLLLL.LLL.LLLL.LLLL.LLLLLL.LLLLLLLLLLLLLLLLLLLLLLLLL.LLLLLLLLLLLLLLLL
|
||||
LLLLLLLLLLLLLL.LLLLL.LLLLLL.LLLLLLLL.LLLLL.LLLLLLLLLLLL.LLLLLLLL.LLLLLLLLL.LLLLLLLLLLLLLLLL
|
||||
LLLLLLLLL.L.LL.LLLLL.LLLLLL.LLLLLLLL.LLLL.LLLLLLLLLLLLL.LLLLLLLL.LLLLLLLLL.LLLLLLL.LLLLLLLL
|
||||
.LLL......L........L.....L..LL.L..L..L.L....L.L............L...........LLL..L..LL....LL..L.
|
||||
LLLLLLLLLLLLLL.LLLLL.LLLLLL.LLLLLLLL.LLLL.LLLLLL.LLLLLLLLLLLLLLL.LLLLLLLLL.LLLLLLL.LLLLLLLL
|
||||
LLLLLLLLLLLLLLLLLLLL..LLLLLLLLLLLLLL.LLLLLLLLLLL.LLLLLL.LLLLLLLL.LLLLLLLLLLLLLLLLL.LLLLLLLL
|
||||
LLLLLLLLL.LLLLLLLLLLLLLLLLLLLLLLLLLL.LLLLLLLLLLLLLLLLLL.LLLLLLLL.LLLLLLLLL.LLLLLLL.LLLLLLLL
|
||||
LLLLLLLLLLLLLL.LLLLL.LLLLLLLLLLLLLLL.L.LLLLLLLLL.LLLLLL.LLLLLLLL.LLLLLLLLLLLLLLLLL.LLLLLLLL
|
||||
.......LL..L.LLL.L....L..L....L......L..L...LL...L.L...LL....L.L........L...L...L.L.......L
|
||||
LLLLLLLLLLLLLL.LLLLL.LLLLLLLLLLLLLLL.LLLL.LLLLLLLLLLLLL.LLLLLLLL.LLLLLLLLL.LLLLLLL.LLLLLLLL
|
||||
LLLLLLLLL.LLLL.LLLLLLLLLLLLLLLLLLLLL.LLLLLLLLLLLLLLLLLL.LLLLLLLLLLLLLLLLLLLLLLLLLL.LLLLLLLL
|
||||
LLLLLLLLLLLLLL..LLLLLLLLLLL.LLLLLLLLLLLLLLLLLLLL.LLLLLL.LLLLL.LLLLLLLLLLLL.LL.LLLL.LLLLLLLL
|
||||
LLLLLLLLL.LLLL.LLLLLLLLLLLLLLLLLLLLL.LLLL.LLLLLL.LLLLLL.LLLLLLLL.LLLLLLLLL.LLLLLLL.LLLLLLLL
|
||||
.L..LLL.L....LL.L..L..LL..L.LL.L......L........LLL.....L..LL...L.LL.LL.....L....L..LL.L....
|
||||
LLLLLLLLLLL.LL.LLL.LLLLLLLLLLLLLLLLLLLLLL.LLLLLLLLL.LLLLLLLLLLLL.LLLLLLLLL.LLLLLLLLLLLLLLLL
|
||||
LLLLLLLLL.LLLL.LLLLLLLLLLLL.LLLLLLLL.LLLLLL.LLLL.LLLLLL.LLLLLLLL.LLLLLLLLLLLLLLLLL.LLLLLLLL
|
||||
LLLLLLLLL.LLLLLLLLLL.LLLLLLLLLLLLLLL.LLLL.LLLLLLLLLLLLL.LLLLLLL..LLLLLLLLL.LLLLLLLLLLLLLLLL
|
||||
LLLLLLLLL.LLLL.LLLLL.LLLLLLLLLLLLLLL.LLLLLLLLLLLLLLLLLL.LLLLLLLL.LLLLLLLLL.LLLLLLLLLLLLLLLL
|
||||
LLLLLLLLL.LLLL.LLLLL.LLLLLL.LLLLLLLLLLLLLLLLLLLL.LLLLLL.LLLLLLLLLLLLLLLLLL.LLLLLLL.LLLLLLLL
|
||||
L..L.LL....L..LL.L.....L.....L...L..L..L...L....L.L.L..LL.L......L...L......L....L.....L.L.
|
||||
LLLLLLLLL.LLLL.LLLLL.LLLLLL.LLLLLLLL.LLLL.LLLLLL.LLLLLLLLLLLLLLL..LLLLLLLL.LLLLLLL.LLLLLLLL
|
||||
LLLLLLLLL.LLLL.L.LLL.LLLLLL.LLLLLLLL.LLLLLLLLLLL.LLLLLL.LLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLL
|
||||
LLLLLLLLL.LLLL.LLLLL.LLLLLL.LLLLLLLLLLLLL.LLLLLL.LLLLLLLLLLLLL.L.LLLLL.LLLLLLLLLLL.LLLLLLLL
|
||||
LLLLLLLLL.LLLL.LLLLL.LLLLLL.LLLLLLLLLLLLL.LLLLLL.LLLLLLLLLLLLLLLLLLLLLLLLL.LLLLLLL.LLLLLLLL
|
||||
.L..L.L...LLL.LL.L.L...L........LLLLL.L..L......L.....L....L.LL.L.LLL...LL..LL.LL..LL.....L
|
||||
LLLLLLLLLLLLLLLLLLLL.LLLLLLLLLLLLLLL.LLLL.LLLLLL.LLLLLL.LLLLLLLL.LLLLLLLLL.LLLLLLLLLLLLLLLL
|
||||
LLLLLLLLL.LLLL.LLLLLLLLLLLLLLLLLLLLL.LLLL.LLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLL.LLLLLLLLLLLLLLLL
|
||||
LLLLLLLLL.LLLL.LLLLL.LLLLLLLLLLLLLLL.LLLLLLLLLLL.LLLLLL.LLLLLLLLLLLLLLLLLL.LLLLLLL.LLLLLLLL
|
||||
LLLLLLLLL.LLLL.LLLLL.LLLLLLLLLLLLLLL.LLLL.LLLLLL.LLLLLL.LLLLLLLLLLLLLLLLLL.LLLLLLLLLLLLLLLL
|
||||
LLLLLLLLL.LLLL.LLLLL.LLLLLLLLLLLLLLLLLLLL.LLLLLLLLLLLLL.LLLLLLLL.LLLLLLLLL.LLLLLLL.LLLLLLLL
|
||||
LLLLLLLLL.LLLL.LLLLL.LLLLLL.LLLLLLLLLLLLLLLLLLLLLLLLLLL.LLLLLLLL.LLLLLLLLL.LLLLLLLLLLLLLLLL
|
||||
LLLLLLLLL.LLLL.LLLLL.LLLLLL.LLLLLLLLLLLLL.LLLLLL.LLLLLLLLLLLLLLL.LLLLLLLL..LLLLLLL.LLLLLLLL
|
||||
..L.L..L...L..L.L........L.L.LLL..L.L...LLL..L..........L........L....LLLL.LL...L......LL..
|
||||
LLLLLLLLL.LLLLLLLLLL.LLLLLL.LLLLLLLL.LLLLLLLLLLL.LLLLLLLLLLLLLLLLLLLLLLLLL.LLLLLLL.LLLLLLLL
|
||||
LLLLLLLLL.LLLLLLLLLLLLLLLLL.LLLLLLLL.LLLL.LLLLLL.LLLLLL.LLLLLLLL.LLLLLLLL..LLLLLLL.LLLLLLLL
|
||||
LLLLLLLLL.LLLL.LLLLL.LLLLLL.LLLLLLLL.LLLLLLLLLLL.LLLLLLLLLLLLLLL.LLLLLLLLL.LLLLLLLLLLLL.LLL
|
||||
LLLLLLLLLLLLLL.LLLLL.LLLLLLLLLLLLLLLLLLLL.LLLLLL.LLL.LL.LLLLLLLLLLLLLLLLLL.LLLLLLL.LLLLLLLL
|
||||
....LL.L..L...LL......L.....L..LL.L.......LL...L....LLLLL..L..L.LLL.......LL..LL...LL.....L
|
||||
LLLLLLLLL.LLLL.LLLLLLLLLLLLLLLLLLLLL.LLLL.LLLLLL.LLLLLL.LLLLLLLL.LLLLLLLLL.LLLLLLL.LLLLLLLL
|
||||
LLLLLLLLL.LLLL.LLLLL.LLLLLLLLLLLLLLL.LLLL.LLLLLL.LLLLLL.LLLLLLLLLLLLLLLLLL.LLLLLLL.L.LLLLLL
|
||||
LLLLLLLLLLLLLL.LLLLL.LLLLLLLLLLLLLLL.LLLL.LLLLLL.LLLLLL.LLLLLLLL.LLLLLLLLL.LLLLLLLLLLLLLLLL
|
||||
LLLLLLLLL.LLLLLLLLLL.LLLLLL.LLLLLLLL.LLLLLLLLLLL.L.LLLL.LLLLLLLL.LLLLLLLLLLLLLLLLL.LLLLLLLL
|
||||
LLLLLLLLL.LLLLLLLLLLLLLLLLL.LLLLLLLL.LLLLLLLLLLLLLLLLLLLLL.LLLLL.LLLLLLLLLLLLLLLLL.LLLLLLL.
|
||||
.L.LL..L.LLL.L...L.......L..LLL.....L...LL...LLL...L.LL............L.L....LL.....L.L..LL..L
|
||||
LLLLLLLLL.LLLL.LLLLL.LLLLLL.LLLLLLLL.LLLL.LLLLLL.LLLLLLLLLLLLLLL.LLLLLLLLL.LLLLLLLLLL.LLLLL
|
||||
LLLLLLLLL.LLLL.LLLLL.L.L.LLLLLLLLLLL.LLLL.L.LLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLL
|
||||
LLLLLLLLLLLLLL.LLLLLLLLLL.L.LLLLLLLL.LLLLLLLLLLL.LLLLLLLLLLLLLLL.LLLLLLLLLLLLLLLLL.LLLLLLLL
|
||||
LLLLLLLLL.LLLL.LLLLL.LLLLLL.LLLLLLLL.LLLLLLLLLLLLLLLLLL.LLLLLLLL.LLLL.LLLL.LLLLLLLLLLLLLLLL
|
||||
LLLLLLLLL.LLLL.LLLLL.LLLLLL.LLLLLLLL.LLLLLLLLLLLLLLLLLL.LLLLLLLL.LLLLLLLLL.LLLLLLL.LLLLLLLL
|
||||
LLLLLLLLLLLLLL.LLLLL.LLLLLL.LLLLLLLLLLLLLLLLLLLLLLLLLLL.LLLLLLLL.LLLLLLLLL.LLLLLLL.LLLLLLLL
|
||||
LLL..L....L.LL..L.L.LLL.LL..L.......L.LL..L..L....L..L...L...L.L..L.L.L.L.L.L.LLL.L.....L.L
|
||||
LLLLLLLLL.LLLL.LLLLLLLLLLLLLLLLLLLLL.LLLLLLLLLLL.LLLLLL.LLLLLLLLLLLLLLLLLL.LLLLLLL.LL.LLLLL
|
||||
LLLLLLLLL.LLLL.LLLLLLLLLLLL.LLLLLLLL.LLLL.LLLLLL.LLLLLLLLLLLLLLLLLLLLLLLLL.LLLLLLLLLLLLLLLL
|
||||
LLLLLLLLL.LLLL.LLLLL.LLLLLL.LLLLLLLLLLLLL.LLLLLLLLLLLLLLLLLLLLLL.LLLLLLLLL.LLLLLLL.LLLLLLLL
|
||||
LLLLLLLLLLLLLLLLLLLL.LLLLLL.LL.LLLLL.LLLL.LLLLLLLLLLLLL.LLLLLLLL.LLLLLLLLL.LLLL.LLLLLLLLLLL
|
||||
LLLLLLLLL.LLLLLLLLLLLLLLLLL.LLLLLLLL.LLLLLLLLLLL.LLLLLL.LLLLLLLL.LLLLLLLLLLLLLLLLL.LLLLLLLL
|
||||
LLLLLLLLL.LLLLLLLLLL.LLLLLLLLLLLLLLL.LLLL.LLLLLL.LLLLLLLLLL.LLLL.LLLLLLLLLLLLLLLLL.LLLLLLLL
|
||||
.L..L..LL.L..L..L.L.L.LL..L....L.....L.LL..........L..L...LLL.L....LL...LL...L.LL.L.....LL.
|
||||
LLLL.LLLL.LLLL.LLLLLLLLLLLLLLLLLLLLL.LLLL.LLLLLLLLLLLLL.LLLLLLLL.LLLLLLLLL.LLLLLLLLLLLLLLLL
|
||||
LLLLLLLLL.LLLL.LLLLL.LLLLLLLLLLLLLLL.LLLLLLLLLLLLLLLLLL.LLLLLLLL.LLLLLL.LLLLLLLLLLLLLLLLLLL
|
||||
LLLLLLLLL.LLLLLLLLLL.LLLLLL.LLLLLLLLLLLLL.LLLLLLLLLLLLLLLLLLLLLL.LLLLLLLLLLLLLLLLLLLLLLLLLL
|
||||
LLLLLLLLLLLLLLLLLLLL.LLLLLL.LLLLLLLLLLLLL.LLLLLL.LLLLLL.LLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLL
|
||||
.LLLLLLLLLLLLLLLLLLLLLLLLLL.LLLLLLLL.LLLL.LLLLLLLLLLLLL.LLLLLLLLLLLLLLLLLLLLLLLLLL.LLLLLLLL
|
||||
LLLLLLLLL.LLLL.LLLLLLLLLLLL.LLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLL.LLLLLLLLLLLLLLLL
|
||||
LLLLLLLLLL.LLL.LLLLL.LLLLLL.LLLLLLLLLLLLLLLLLLLL.LLLLLL.LLLLLLLL.LLLLLLLLL.LLLLLLL.LLLLLLLL
|
||||
LLLLLLLLL.LLLLLLLLLLLLLLLLL.LLLLLLLL.LL.L.LLLLLL.LL.LLLLLLLLLLLLLLLLLLLLLLLLLLLLL.LLLLLLLLL
|
||||
LLLLLLLLL.LLLL..LLLL.LLLLLL.LLLLLLLL.LL.L.LLLLLL.LLLLLL.LLLLLLLL.LLLLLLLLLLLLLLLLL.LLLLLLLL
|
||||
LLLLLLLLL.LLLL.LLLLL.LLLLLL.LLLLLLLL.LLLLLLLLLLL.LLLLLL.LLLLLLLL.LLLLLLLLL.LLLLLLL.LLLLLLLL
|
||||
LLLLLLLLL.LLLLLLLLLL.LLLLLL.LLLLL.LLLLLLL.LL.LLL.LLLLLLLLLLLLLLLLLLLLLLLLL.LLLLLL..LLLLLLLL
|
||||
LLLLLLLLLLLLLL.LLLLL.LLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLL.LLLLLLLL.LLLLLLLLL.LLLLLLLLLL.LLLLL
|
10
2020/day11/test
Normal file
10
2020/day11/test
Normal file
|
@ -0,0 +1,10 @@
|
|||
L.LL.LL.LL
|
||||
LLLLLLL.LL
|
||||
L.L.L..L..
|
||||
LLLL.LL.LL
|
||||
L.LL.LL.LL
|
||||
L.LLLLL.LL
|
||||
..L.L.....
|
||||
LLLLLLLLLL
|
||||
L.LLLLLL.L
|
||||
L.LLLLL.LL
|
119
2020/day12/day12.c
Normal file
119
2020/day12/day12.c
Normal file
|
@ -0,0 +1,119 @@
|
|||
#include <complex.h>
|
||||
#include <math.h>
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
|
||||
#define PI
|
||||
|
||||
struct instruction {
|
||||
char action;
|
||||
int value;
|
||||
};
|
||||
|
||||
struct state {
|
||||
double complex pos;
|
||||
double complex dir;
|
||||
};
|
||||
|
||||
void step1(struct state *st, struct instruction instr) {
|
||||
switch (instr.action) {
|
||||
case 'N': {
|
||||
st->pos += instr.value * I;
|
||||
break;
|
||||
}
|
||||
case 'S': {
|
||||
st->pos -= instr.value * I;
|
||||
break;
|
||||
}
|
||||
case 'E': {
|
||||
st->pos += instr.value;
|
||||
break;
|
||||
}
|
||||
case 'W': {
|
||||
st->pos -= instr.value;
|
||||
break;
|
||||
}
|
||||
case 'F': {
|
||||
st->pos += instr.value * st->dir;
|
||||
break;
|
||||
}
|
||||
case 'R': {
|
||||
st->dir *= cexp(-instr.value * I * M_PI / 180);
|
||||
break;
|
||||
}
|
||||
case 'L': {
|
||||
st->dir *= cexp(instr.value * I * M_PI / 180);
|
||||
break;
|
||||
}
|
||||
default:
|
||||
printf("Invalid instruction %c %d\n", instr.action, instr.value);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
void step2(struct state *st, struct instruction instr) {
|
||||
switch (instr.action) {
|
||||
case 'N': {
|
||||
st->dir += instr.value * I;
|
||||
break;
|
||||
}
|
||||
case 'S': {
|
||||
st->dir -= instr.value * I;
|
||||
break;
|
||||
}
|
||||
case 'E': {
|
||||
st->dir += instr.value;
|
||||
break;
|
||||
}
|
||||
case 'W': {
|
||||
st->dir -= instr.value;
|
||||
break;
|
||||
}
|
||||
case 'F': {
|
||||
st->pos += instr.value * st->dir;
|
||||
break;
|
||||
}
|
||||
case 'R': {
|
||||
st->dir *= cexp(-instr.value * I * M_PI / 180);
|
||||
break;
|
||||
}
|
||||
case 'L': {
|
||||
st->dir *= cexp(instr.value * I * M_PI / 180);
|
||||
break;
|
||||
}
|
||||
default:
|
||||
printf("Invalid instruction %c %d\n", instr.action, instr.value);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
int main(int argc, char *argv[]) {
|
||||
if (argc < 2) {
|
||||
printf("Usage: %s <input file>\n", argv[0]);
|
||||
return 0;
|
||||
}
|
||||
|
||||
FILE *fp = fopen(argv[1], "r");
|
||||
if (fp == NULL) {
|
||||
printf("Could not open file %s\n", argv[1]);
|
||||
return 1;
|
||||
}
|
||||
|
||||
struct instruction in[1024];
|
||||
int n = 0;
|
||||
while (fscanf(fp, "%c%d\n", &in[n].action, &in[n].value) == 2) {
|
||||
n++;
|
||||
}
|
||||
fclose(fp);
|
||||
|
||||
struct state st1 = {.pos = 0, .dir = 1};
|
||||
struct state st2 = {.pos = 0, .dir = 10 + I};
|
||||
for (int i = 0; i < n; ++i) {
|
||||
step1(&st1, in[i]);
|
||||
step2(&st2, in[i]);
|
||||
}
|
||||
printf("%d\n", (int)round(fabs(creal(st1.pos)) + fabs(cimag(st1.pos))));
|
||||
printf("%d\n", (int)round(fabs(creal(st2.pos)) + fabs(cimag(st2.pos))));
|
||||
|
||||
return 0;
|
||||
}
|
66
2020/day12/day12.rkt
Normal file
66
2020/day12/day12.rkt
Normal file
|
@ -0,0 +1,66 @@
|
|||
#lang racket
|
||||
|
||||
(module+ test
|
||||
(require rackunit))
|
||||
|
||||
(module+ main
|
||||
(displayln "Day 12"))
|
||||
|
||||
(define (parse-instruction str)
|
||||
(list (string->symbol (substring str 0 1))
|
||||
(string->number (substring str 1))))
|
||||
|
||||
(define (read-input filename)
|
||||
(map parse-instruction (file->lines filename)))
|
||||
|
||||
(struct state
|
||||
(pos dir)
|
||||
#:transparent)
|
||||
|
||||
(define (step st instr)
|
||||
(match instr
|
||||
[`(N ,n) (struct-copy state st [pos (+ (state-pos st) (make-rectangular 0 n))])]
|
||||
[`(S ,n) (struct-copy state st [pos (- (state-pos st) (make-rectangular 0 n))])]
|
||||
[`(E ,n) (struct-copy state st [pos (+ (state-pos st) (make-rectangular n 0))])]
|
||||
[`(W ,n) (struct-copy state st [pos (- (state-pos st) (make-rectangular n 0))])]
|
||||
[`(F ,n) (struct-copy state st [pos (+ (state-pos st) (* n (state-dir st)))])]
|
||||
[`(R ,n) (struct-copy state st [dir (* (state-dir st) (make-polar 1 (degrees->radians (- n))))])]
|
||||
[`(L ,n) (struct-copy state st [dir (* (state-dir st) (make-polar 1 (degrees->radians n)))])]))
|
||||
|
||||
(define (part1 filename)
|
||||
(define input (read-input filename))
|
||||
(define final
|
||||
(state-pos (for/fold ([st (state 0 1)])
|
||||
([instr (in-list input)])
|
||||
(step st instr))))
|
||||
(exact-round (+ (abs (real-part final)) (abs (imag-part final)))))
|
||||
|
||||
(module+ test
|
||||
(check-equal? (part1 "test") 25))
|
||||
|
||||
(module+ main
|
||||
(displayln (part1 "input")))
|
||||
|
||||
(define (step2 st instr)
|
||||
(match instr
|
||||
[`(N ,n) (struct-copy state st [dir (+ (state-dir st) (make-rectangular 0 n))])]
|
||||
[`(S ,n) (struct-copy state st [dir (- (state-dir st) (make-rectangular 0 n))])]
|
||||
[`(E ,n) (struct-copy state st [dir (+ (state-dir st) (make-rectangular n 0))])]
|
||||
[`(W ,n) (struct-copy state st [dir (- (state-dir st) (make-rectangular n 0))])]
|
||||
[`(F ,n) (struct-copy state st [pos (+ (state-pos st) (* n (state-dir st)))])]
|
||||
[`(R ,n) (struct-copy state st [dir (* (state-dir st) (make-polar 1 (degrees->radians (- n))))])]
|
||||
[`(L ,n) (struct-copy state st [dir (* (state-dir st) (make-polar 1 (degrees->radians n)))])]))
|
||||
|
||||
(define (part2 filename)
|
||||
(define input (read-input filename))
|
||||
(define final
|
||||
(state-pos (for/fold ([st (state 0 (make-rectangular 10 1))])
|
||||
([instr (in-list input)])
|
||||
(step2 st instr))))
|
||||
(exact-round (+ (abs (real-part final)) (abs (imag-part final)))))
|
||||
|
||||
(module+ test
|
||||
(check-equal? (part2 "test") 286))
|
||||
|
||||
(module+ main
|
||||
(displayln (part2 "input")))
|
776
2020/day12/input
Normal file
776
2020/day12/input
Normal file
|
@ -0,0 +1,776 @@
|
|||
R180
|
||||
E1
|
||||
N1
|
||||
R90
|
||||
E4
|
||||
F84
|
||||
W3
|
||||
F19
|
||||
E5
|
||||
N1
|
||||
W5
|
||||
W4
|
||||
R90
|
||||
S1
|
||||
F70
|
||||
R90
|
||||
W2
|
||||
S3
|
||||
L180
|
||||
E2
|
||||
R90
|
||||
E1
|
||||
R90
|
||||
N2
|
||||
E3
|
||||
F55
|
||||
W3
|
||||
R90
|
||||
S2
|
||||
E4
|
||||
L90
|
||||
F33
|
||||
W4
|
||||
S3
|
||||
F11
|
||||
N4
|
||||
W4
|
||||
F88
|
||||
W3
|
||||
F62
|
||||
L90
|
||||
S3
|
||||
W3
|
||||
N1
|
||||
E3
|
||||
E2
|
||||
N1
|
||||
E3
|
||||
S3
|
||||
E5
|
||||
S4
|
||||
W5
|
||||
L90
|
||||
W5
|
||||
R90
|
||||
E4
|
||||
F36
|
||||
N4
|
||||
E4
|
||||
E5
|
||||
F47
|
||||
R90
|
||||
N3
|
||||
E3
|
||||
L180
|
||||
S5
|
||||
R90
|
||||
S5
|
||||
W2
|
||||
S3
|
||||
F43
|
||||
W2
|
||||
R180
|
||||
W2
|
||||
S2
|
||||
L180
|
||||
E2
|
||||
F49
|
||||
L90
|
||||
F77
|
||||
S5
|
||||
E1
|
||||
S2
|
||||
F39
|
||||
L180
|
||||
F12
|
||||
W1
|
||||
L90
|
||||
F60
|
||||
S2
|
||||
E3
|
||||
N1
|
||||
E5
|
||||
R90
|
||||
E1
|
||||
N4
|
||||
W4
|
||||
S4
|
||||
E2
|
||||
L90
|
||||
F100
|
||||
E3
|
||||
F58
|
||||
S2
|
||||
E4
|
||||
F83
|
||||
W3
|
||||
N1
|
||||
R90
|
||||
F99
|
||||
W5
|
||||
W4
|
||||
F19
|
||||
N3
|
||||
W1
|
||||
W5
|
||||
F70
|
||||
R180
|
||||
R90
|
||||
F58
|
||||
E5
|
||||
N3
|
||||
R90
|
||||
N4
|
||||
F86
|
||||
N4
|
||||
F70
|
||||
L90
|
||||
F36
|
||||
R90
|
||||
S4
|
||||
R180
|
||||
N5
|
||||
F81
|
||||
W5
|
||||
R90
|
||||
E5
|
||||
L90
|
||||
F73
|
||||
S5
|
||||
E3
|
||||
N1
|
||||
F27
|
||||
E2
|
||||
N3
|
||||
L180
|
||||
W2
|
||||
F24
|
||||
N2
|
||||
L90
|
||||
F69
|
||||
N2
|
||||
E3
|
||||
F49
|
||||
L90
|
||||
S4
|
||||
W5
|
||||
F18
|
||||
R180
|
||||
F62
|
||||
S2
|
||||
F65
|
||||
E3
|
||||
F100
|
||||
N1
|
||||
F96
|
||||
W1
|
||||
F75
|
||||
L180
|
||||
W2
|
||||
S2
|
||||
F93
|
||||
E5
|
||||
S3
|
||||
R90
|
||||
S2
|
||||
F34
|
||||
R90
|
||||
F83
|
||||
S1
|
||||
W1
|
||||
F58
|
||||
L180
|
||||
N4
|
||||
E1
|
||||
R90
|
||||
W2
|
||||
F93
|
||||
S3
|
||||
F20
|
||||
R90
|
||||
N3
|
||||
E3
|
||||
N3
|
||||
L90
|
||||
F8
|
||||
S3
|
||||
F18
|
||||
S3
|
||||
N2
|
||||
F6
|
||||
L270
|
||||
F70
|
||||
W5
|
||||
S3
|
||||
F54
|
||||
E2
|
||||
F75
|
||||
E3
|
||||
R90
|
||||
N2
|
||||
W3
|
||||
L90
|
||||
E4
|
||||
F58
|
||||
N5
|
||||
F97
|
||||
W2
|
||||
L90
|
||||
W5
|
||||
S2
|
||||
W1
|
||||
S5
|
||||
F85
|
||||
N1
|
||||
E1
|
||||
N4
|
||||
E4
|
||||
L90
|
||||
E1
|
||||
R90
|
||||
S5
|
||||
L180
|
||||
R270
|
||||
N1
|
||||
L90
|
||||
E4
|
||||
N3
|
||||
F45
|
||||
N2
|
||||
F68
|
||||
R90
|
||||
F36
|
||||
N5
|
||||
F82
|
||||
S5
|
||||
E4
|
||||
R180
|
||||
S2
|
||||
L180
|
||||
N3
|
||||
R270
|
||||
W5
|
||||
F70
|
||||
L90
|
||||
W5
|
||||
F80
|
||||
W4
|
||||
N2
|
||||
R90
|
||||
S3
|
||||
W1
|
||||
F23
|
||||
N1
|
||||
W1
|
||||
N4
|
||||
F70
|
||||
S3
|
||||
L180
|
||||
F57
|
||||
R90
|
||||
L90
|
||||
F55
|
||||
L90
|
||||
N4
|
||||
F87
|
||||
L90
|
||||
F1
|
||||
L270
|
||||
F17
|
||||
N5
|
||||
R180
|
||||
F84
|
||||
R90
|
||||
W5
|
||||
F7
|
||||
W1
|
||||
S1
|
||||
E3
|
||||
F46
|
||||
S5
|
||||
E2
|
||||
F23
|
||||
R90
|
||||
E4
|
||||
W2
|
||||
F96
|
||||
E5
|
||||
L90
|
||||
F65
|
||||
F3
|
||||
S5
|
||||
E5
|
||||
N3
|
||||
W4
|
||||
L90
|
||||
S2
|
||||
F57
|
||||
E1
|
||||
R90
|
||||
F68
|
||||
E3
|
||||
L90
|
||||
W1
|
||||
F29
|
||||
N5
|
||||
W5
|
||||
N1
|
||||
F95
|
||||
N1
|
||||
L90
|
||||
F31
|
||||
S5
|
||||
L180
|
||||
N2
|
||||
W5
|
||||
R90
|
||||
F27
|
||||
E1
|
||||
R90
|
||||
E3
|
||||
S5
|
||||
F10
|
||||
R90
|
||||
N4
|
||||
E2
|
||||
F25
|
||||
S4
|
||||
E5
|
||||
F51
|
||||
N3
|
||||
W2
|
||||
L90
|
||||
S3
|
||||
L180
|
||||
F17
|
||||
E4
|
||||
F93
|
||||
E3
|
||||
L90
|
||||
F41
|
||||
L90
|
||||
S5
|
||||
L90
|
||||
W5
|
||||
N1
|
||||
F81
|
||||
L90
|
||||
E4
|
||||
W2
|
||||
R90
|
||||
W1
|
||||
S5
|
||||
R90
|
||||
F39
|
||||
W3
|
||||
R90
|
||||
N5
|
||||
E1
|
||||
L90
|
||||
F82
|
||||
S3
|
||||
R90
|
||||
W4
|
||||
F66
|
||||
F4
|
||||
L90
|
||||
F77
|
||||
R90
|
||||
E1
|
||||
L90
|
||||
F53
|
||||
S4
|
||||
F35
|
||||
W1
|
||||
F64
|
||||
R90
|
||||
F9
|
||||
S1
|
||||
E1
|
||||
L90
|
||||
W4
|
||||
R90
|
||||
S2
|
||||
W5
|
||||
R90
|
||||
S4
|
||||
L90
|
||||
N3
|
||||
F8
|
||||
L180
|
||||
N5
|
||||
E5
|
||||
N4
|
||||
F35
|
||||
N5
|
||||
W1
|
||||
N1
|
||||
E5
|
||||
F15
|
||||
R180
|
||||
F92
|
||||
W3
|
||||
L90
|
||||
F4
|
||||
L90
|
||||
E1
|
||||
S3
|
||||
W3
|
||||
R90
|
||||
F37
|
||||
N5
|
||||
F19
|
||||
S2
|
||||
F98
|
||||
L90
|
||||
F24
|
||||
W3
|
||||
F68
|
||||
N5
|
||||
R90
|
||||
W3
|
||||
L90
|
||||
W3
|
||||
L90
|
||||
S1
|
||||
L90
|
||||
S4
|
||||
W3
|
||||
F56
|
||||
N4
|
||||
R90
|
||||
E3
|
||||
W1
|
||||
L90
|
||||
E4
|
||||
N3
|
||||
R180
|
||||
E1
|
||||
S1
|
||||
W2
|
||||
R90
|
||||
N3
|
||||
F82
|
||||
N2
|
||||
F37
|
||||
S3
|
||||
L180
|
||||
E2
|
||||
L180
|
||||
F6
|
||||
N2
|
||||
F96
|
||||
E2
|
||||
R180
|
||||
E2
|
||||
W3
|
||||
R90
|
||||
E2
|
||||
S5
|
||||
S1
|
||||
F23
|
||||
R90
|
||||
W5
|
||||
F75
|
||||
S1
|
||||
L90
|
||||
S3
|
||||
E1
|
||||
F83
|
||||
W4
|
||||
L180
|
||||
W5
|
||||
L90
|
||||
N1
|
||||
E1
|
||||
S2
|
||||
F17
|
||||
L90
|
||||
S2
|
||||
F53
|
||||
R90
|
||||
S3
|
||||
N3
|
||||
W1
|
||||
N4
|
||||
L180
|
||||
L90
|
||||
E3
|
||||
F9
|
||||
S5
|
||||
F24
|
||||
W3
|
||||
E5
|
||||
N2
|
||||
F73
|
||||
N1
|
||||
F28
|
||||
N2
|
||||
W4
|
||||
N3
|
||||
F53
|
||||
E5
|
||||
F47
|
||||
W2
|
||||
F60
|
||||
L90
|
||||
E2
|
||||
F19
|
||||
S1
|
||||
F63
|
||||
W5
|
||||
F100
|
||||
N3
|
||||
L180
|
||||
F83
|
||||
N4
|
||||
W5
|
||||
F37
|
||||
S1
|
||||
F50
|
||||
E1
|
||||
N2
|
||||
W3
|
||||
R90
|
||||
F85
|
||||
S4
|
||||
F72
|
||||
N4
|
||||
L90
|
||||
F48
|
||||
R90
|
||||
F99
|
||||
R90
|
||||
F58
|
||||
W3
|
||||
W4
|
||||
F64
|
||||
E1
|
||||
R90
|
||||
F74
|
||||
L90
|
||||
F23
|
||||
N3
|
||||
N3
|
||||
E1
|
||||
S1
|
||||
W5
|
||||
L180
|
||||
F98
|
||||
L90
|
||||
F36
|
||||
W4
|
||||
S2
|
||||
W3
|
||||
F9
|
||||
F72
|
||||
W5
|
||||
F78
|
||||
N2
|
||||
F65
|
||||
S3
|
||||
F47
|
||||
S5
|
||||
R90
|
||||
F68
|
||||
L180
|
||||
W2
|
||||
F7
|
||||
E2
|
||||
E3
|
||||
S4
|
||||
R90
|
||||
N2
|
||||
L180
|
||||
W2
|
||||
R180
|
||||
E4
|
||||
R90
|
||||
W3
|
||||
L90
|
||||
E4
|
||||
F54
|
||||
L180
|
||||
E2
|
||||
F6
|
||||
W5
|
||||
F82
|
||||
E4
|
||||
R90
|
||||
E4
|
||||
F25
|
||||
N2
|
||||
R270
|
||||
N4
|
||||
F18
|
||||
N5
|
||||
R90
|
||||
S3
|
||||
R90
|
||||
F38
|
||||
R90
|
||||
F97
|
||||
W4
|
||||
F85
|
||||
S4
|
||||
F56
|
||||
E4
|
||||
S1
|
||||
F40
|
||||
W3
|
||||
F52
|
||||
L90
|
||||
F76
|
||||
N4
|
||||
F15
|
||||
S2
|
||||
F22
|
||||
S5
|
||||
L180
|
||||
F91
|
||||
L180
|
||||
F8
|
||||
L90
|
||||
E4
|
||||
N4
|
||||
F67
|
||||
L90
|
||||
S3
|
||||
R180
|
||||
R90
|
||||
N4
|
||||
F71
|
||||
W3
|
||||
F34
|
||||
E2
|
||||
N1
|
||||
F43
|
||||
W5
|
||||
L180
|
||||
N5
|
||||
W2
|
||||
F42
|
||||
R90
|
||||
W3
|
||||
F39
|
||||
E1
|
||||
S2
|
||||
L180
|
||||
N5
|
||||
E3
|
||||
N5
|
||||
F28
|
||||
E1
|
||||
R90
|
||||
S3
|
||||
F40
|
||||
L90
|
||||
S2
|
||||
S2
|
||||
L90
|
||||
W5
|
||||
L90
|
||||
F93
|
||||
R180
|
||||
W4
|
||||
S4
|
||||
W4
|
||||
F100
|
||||
S3
|
||||
R90
|
||||
E2
|
||||
L180
|
||||
W1
|
||||
E3
|
||||
S5
|
||||
L90
|
||||
F87
|
||||
N1
|
||||
R90
|
||||
F3
|
||||
R90
|
||||
E5
|
||||
R90
|
||||
S3
|
||||
F45
|
||||
L90
|
||||
S2
|
||||
F42
|
||||
R90
|
||||
F95
|
||||
L90
|
||||
E1
|
||||
N3
|
||||
R90
|
||||
F73
|
||||
S3
|
||||
E1
|
||||
L90
|
||||
S2
|
||||
E3
|
||||
L90
|
||||
L270
|
||||
F38
|
||||
S5
|
||||
R90
|
||||
F42
|
||||
L90
|
||||
N1
|
||||
F7
|
||||
S3
|
||||
F65
|
||||
N2
|
||||
F42
|
||||
L180
|
||||
W5
|
||||
S4
|
||||
E4
|
||||
F65
|
||||
S4
|
||||
E5
|
||||
F51
|
||||
E4
|
||||
R180
|
||||
F70
|
||||
R90
|
||||
F28
|
||||
N5
|
||||
W5
|
||||
N1
|
||||
F96
|
||||
L90
|
||||
W4
|
||||
S3
|
||||
W3
|
||||
F89
|
||||
W1
|
||||
L90
|
||||
F75
|
||||
L270
|
||||
S3
|
||||
R90
|
||||
L90
|
||||
F7
|
||||
E2
|
||||
F24
|
||||
R180
|
||||
S2
|
||||
L180
|
||||
F48
|
||||
R90
|
||||
F37
|
||||
W2
|
||||
R90
|
||||
W4
|
||||
L90
|
||||
W3
|
||||
F81
|
||||
E4
|
||||
N2
|
||||
F39
|
||||
E4
|
||||
N1
|
||||
W1
|
||||
L90
|
||||
F59
|
5
2020/day12/test
Normal file
5
2020/day12/test
Normal file
|
@ -0,0 +1,5 @@
|
|||
F10
|
||||
N3
|
||||
F7
|
||||
R90
|
||||
F11
|
89
2020/day13/day13.c
Normal file
89
2020/day13/day13.c
Normal file
|
@ -0,0 +1,89 @@
|
|||
#include <limits.h>
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
|
||||
long egcd(long *x, long *y, long a, long b) {
|
||||
if (b == 0) {
|
||||
*x = 1;
|
||||
*y = 0;
|
||||
return a;
|
||||
}
|
||||
|
||||
long x1, y1;
|
||||
long gcd = egcd(&x1, &y1, b, a % b);
|
||||
*x = y1;
|
||||
*y = x1 - (a / b) * y1;
|
||||
|
||||
return gcd;
|
||||
}
|
||||
|
||||
long modinv(long a, long m) {
|
||||
long x, y;
|
||||
long gcd = egcd(&x, &y, a, m);
|
||||
if (gcd != 1) {
|
||||
return -1;
|
||||
}
|
||||
if (x < 0) {
|
||||
return m + x;
|
||||
}
|
||||
return x;
|
||||
}
|
||||
|
||||
int main(int argc, char *argv[]) {
|
||||
if (argc < 2) {
|
||||
printf("Usage: %s <input file>\n", argv[0]);
|
||||
return 0;
|
||||
}
|
||||
|
||||
FILE *fp = fopen(argv[1], "r");
|
||||
if (fp == NULL) {
|
||||
printf("Could not open file %s\n", argv[1]);
|
||||
return 1;
|
||||
}
|
||||
|
||||
int t;
|
||||
fscanf(fp, "%d\n", &t);
|
||||
|
||||
int buses[100] = {0};
|
||||
int n = 0;
|
||||
while (fscanf(fp, "%d,", &buses[n++]) == 1 || fscanf(fp, "x,") == 0)
|
||||
;
|
||||
n--;
|
||||
fclose(fp);
|
||||
|
||||
// Part 1
|
||||
int min = INT_MAX;
|
||||
int tmin = 0;
|
||||
for (int i = 0; i < n; ++i) {
|
||||
if (buses[i] == 0) {
|
||||
continue;
|
||||
}
|
||||
int x = buses[i] - t % buses[i];
|
||||
if (x < min) {
|
||||
min = x;
|
||||
tmin = i;
|
||||
}
|
||||
}
|
||||
printf("%d\n", min * buses[tmin]);
|
||||
|
||||
// Part 2
|
||||
unsigned long N = 1;
|
||||
for (int i = 0; i < n; ++i) {
|
||||
if (buses[i] == 0) {
|
||||
continue;
|
||||
}
|
||||
N *= buses[i];
|
||||
}
|
||||
|
||||
long x = 0;
|
||||
for (int i = 0; i < n; ++i) {
|
||||
if (buses[i] == 0) {
|
||||
continue;
|
||||
}
|
||||
long Ni = N / buses[i];
|
||||
x += (buses[i] - i) * modinv(Ni, buses[i]) * Ni;
|
||||
}
|
||||
printf("%ld\n", x % N);
|
||||
|
||||
return 0;
|
||||
}
|
18
2020/day13/day13.dyalog
Normal file
18
2020/day13/day13.dyalog
Normal file
|
@ -0,0 +1,18 @@
|
|||
⎕IO←0 ⋄ (⎕FR ⎕PP)←1287 34
|
||||
p←⊃⎕NGET'input'1
|
||||
t←⍎⊃p
|
||||
b←⍎¨((1<',x'∘⍳)⊆⊢)1⊃p
|
||||
b{×/((⊢⍳⌊/)⍵)⌷¨(⊂⍺),⊂⍵}b|-t ⍝ Part 1
|
||||
⍝ https://www.jsoftware.com/papers/50/50_44.htm
|
||||
xea←{(⍺,1 0){0=⊃⍵:⍺ ⋄ ⍵ ∇ ⍺-⍵×⌊(⊃⍺)÷⊃⍵}(⍵,0 1)}
|
||||
∇r←larg cr rarg
|
||||
m r←larg
|
||||
n s←rarg
|
||||
gcd a b←m xea n
|
||||
lcm←m×n÷gcd
|
||||
c←lcm|gcd÷⍨(r×b×n)+(s×a×m)
|
||||
r←lcm,c
|
||||
∇
|
||||
c←','(≠⊆⊢)1⊃p
|
||||
b←↓⍉⍎¨⍕¨↑(⊂~('x'≡⊃)¨c)/¨(⊂c),⊂-⍳⍴c
|
||||
1⊃⊃cr/{x y←⍵ ⋄ 0=y:x,y ⋄ 1:x(x+y)}¨b ⍝ Part 2
|
42
2020/day13/day13.rkt
Normal file
42
2020/day13/day13.rkt
Normal file
|
@ -0,0 +1,42 @@
|
|||
#lang racket
|
||||
|
||||
(require math/number-theory)
|
||||
|
||||
(module+ test
|
||||
(require rackunit))
|
||||
|
||||
(module+ main
|
||||
(displayln "Day 13"))
|
||||
|
||||
(define (parse-buses str)
|
||||
(map string->number (string-split str ",")))
|
||||
|
||||
(define (read-input filename)
|
||||
(define in (file->lines filename))
|
||||
(values (string->number (car in))
|
||||
(parse-buses (cadr in))))
|
||||
|
||||
(define (part1 filename)
|
||||
(define-values (t buses) (read-input filename))
|
||||
(define waits (for/list ([b (in-list buses)]
|
||||
#:when b)
|
||||
(list b (- b (modulo t b)))))
|
||||
(apply * (argmin cadr waits)))
|
||||
|
||||
(module+ test
|
||||
(check-equal? (part1 "test") 295))
|
||||
|
||||
(module+ main
|
||||
(displayln (part1 "input")))
|
||||
|
||||
(define (part2 filename)
|
||||
(define-values (t buses) (read-input filename))
|
||||
(define active-buses (for/list ([b (in-list buses)] #:when b) b))
|
||||
(define times (for/list ([b (in-list buses)] [i (in-naturals)] #:when b) (- i)))
|
||||
(solve-chinese times active-buses))
|
||||
|
||||
(module+ test
|
||||
(check-equal? (part2 "test") 1068781))
|
||||
|
||||
(module+ main
|
||||
(displayln (part2 "input")))
|
2
2020/day13/input
Normal file
2
2020/day13/input
Normal file
|
@ -0,0 +1,2 @@
|
|||
1000509
|
||||
17,x,x,x,x,x,x,x,x,x,x,37,x,x,x,x,x,739,x,29,x,x,x,x,x,x,x,x,x,x,13,x,x,x,x,x,x,x,x,x,23,x,x,x,x,x,x,x,971,x,x,x,x,x,x,x,x,x,41,x,x,x,x,x,x,x,x,19
|
2
2020/day13/test
Normal file
2
2020/day13/test
Normal file
|
@ -0,0 +1,2 @@
|
|||
939
|
||||
7,13,x,x,59,x,31,19
|
123
2020/day14/day14.c
Normal file
123
2020/day14/day14.c
Normal file
|
@ -0,0 +1,123 @@
|
|||
#include "uthash.h"
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
#include <string.h>
|
||||
|
||||
struct memcell {
|
||||
unsigned long key;
|
||||
unsigned long val;
|
||||
UT_hash_handle hh;
|
||||
};
|
||||
|
||||
unsigned long part1(FILE *fp) {
|
||||
char *buf = NULL;
|
||||
size_t buf_size = 0;
|
||||
struct memcell *mem = NULL;
|
||||
char mask[36];
|
||||
|
||||
while (getline(&buf, &buf_size, fp) != -1) {
|
||||
if (strncmp(buf, "mask", 4) == 0) {
|
||||
sscanf(buf, "mask = %s", mask);
|
||||
}
|
||||
|
||||
else {
|
||||
unsigned long addr, val;
|
||||
sscanf(buf, "mem[%ld] = %ld", &addr, &val);
|
||||
|
||||
for (int i = 0; i < 36; ++i) {
|
||||
if (mask[35 - i] == '1') {
|
||||
val |= 1UL << i;
|
||||
} else if (mask[35 - i] == '0') {
|
||||
val &= ~(1UL << i);
|
||||
}
|
||||
}
|
||||
|
||||
struct memcell *elt = (struct memcell *)malloc(sizeof(struct memcell));
|
||||
struct memcell *prev_elt =
|
||||
(struct memcell *)malloc(sizeof(struct memcell));
|
||||
elt->key = addr;
|
||||
elt->val = val;
|
||||
HASH_REPLACE(hh, mem, key, sizeof(unsigned long), elt, prev_elt);
|
||||
}
|
||||
}
|
||||
|
||||
unsigned long sum = 0;
|
||||
for (struct memcell *cell = mem; cell != NULL; cell = cell->hh.next) {
|
||||
sum += cell->val;
|
||||
}
|
||||
|
||||
return sum;
|
||||
}
|
||||
|
||||
unsigned long part2(FILE *fp) {
|
||||
char *buf = NULL;
|
||||
size_t buf_size = 0;
|
||||
struct memcell *mem = NULL;
|
||||
char mask[36];
|
||||
int xcount;
|
||||
|
||||
while (getline(&buf, &buf_size, fp) != -1) {
|
||||
if (strncmp(buf, "mask", 4) == 0) {
|
||||
sscanf(buf, "mask = %s", mask);
|
||||
xcount = 0;
|
||||
for (int i = 0; i < 36; ++i) {
|
||||
if (mask[i] == 'X') {
|
||||
xcount++;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
else {
|
||||
unsigned long addr, val;
|
||||
sscanf(buf, "mem[%ld] = %ld", &addr, &val);
|
||||
|
||||
for (unsigned long m = 0; m < (1UL << xcount); ++m) {
|
||||
unsigned long new_addr = addr;
|
||||
int x_idx = 0;
|
||||
for (int i = 0; i < 36; ++i) {
|
||||
if (mask[35 - i] == '1') {
|
||||
new_addr |= 1UL << i;
|
||||
} else if (mask[35 - i] == 'X') {
|
||||
unsigned long bit = (1UL & (m >> x_idx));
|
||||
new_addr ^= (-bit ^ new_addr) & (1UL << i);
|
||||
x_idx++;
|
||||
}
|
||||
}
|
||||
|
||||
struct memcell *elt = (struct memcell *)malloc(sizeof(struct memcell));
|
||||
struct memcell *prev_elt =
|
||||
(struct memcell *)malloc(sizeof(struct memcell));
|
||||
elt->key = new_addr;
|
||||
elt->val = val;
|
||||
HASH_REPLACE(hh, mem, key, sizeof(unsigned long), elt, prev_elt);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
unsigned long sum = 0;
|
||||
for (struct memcell *cell = mem; cell != NULL; cell = cell->hh.next) {
|
||||
sum += cell->val;
|
||||
}
|
||||
|
||||
return sum;
|
||||
}
|
||||
|
||||
int main(int argc, char *argv[]) {
|
||||
if (argc < 2) {
|
||||
printf("Usage: %s <input file>\n", argv[0]);
|
||||
return 0;
|
||||
}
|
||||
|
||||
FILE *fp = fopen(argv[1], "r");
|
||||
if (fp == NULL) {
|
||||
printf("Could not open file %s\n", argv[1]);
|
||||
return 1;
|
||||
}
|
||||
|
||||
printf("%lu\n", part1(fp));
|
||||
rewind(fp);
|
||||
printf("%lu\n", part2(fp));
|
||||
fclose(fp);
|
||||
|
||||
return 0;
|
||||
}
|
82
2020/day14/day14.rkt
Normal file
82
2020/day14/day14.rkt
Normal file
|
@ -0,0 +1,82 @@
|
|||
#lang racket
|
||||
|
||||
(module+ test
|
||||
(require rackunit))
|
||||
|
||||
(define (parse-line str)
|
||||
(if (string-prefix? str "mask")
|
||||
(list 'mask (string-trim str "mask = "))
|
||||
(let ([params (map string->number (cdr (regexp-match #px"mem\\[(\\d+)\\] = (\\d+)" str)))])
|
||||
(list 'mem (car params) (cadr params)))))
|
||||
|
||||
(define (read-input filename)
|
||||
(map parse-line (file->lines filename)))
|
||||
|
||||
(define (apply-mask mask num)
|
||||
(define num-binary (reverse (string->list (number->string num 2))))
|
||||
(define num-lst (append num-binary (make-list (- 36 (length num-binary)) #\0)))
|
||||
(define mask-lst (reverse (string->list mask)))
|
||||
(define res-lst (for/list ([d (in-list num-lst)]
|
||||
[m (in-list mask-lst)])
|
||||
(cond
|
||||
[(eq? m #\1) #\1]
|
||||
[(eq? m #\0) #\0]
|
||||
[else d])))
|
||||
(string->number (list->string (reverse res-lst)) 2))
|
||||
|
||||
(define (part1 filename)
|
||||
(define input (read-input filename))
|
||||
(define mem (make-hash))
|
||||
(for/fold ([mask ""])
|
||||
([instr (in-list input)])
|
||||
(match instr
|
||||
[`(mask ,x) x]
|
||||
[`(mem ,i ,x) (hash-set! mem i (apply-mask mask x))
|
||||
mask]))
|
||||
(apply + (hash-values mem)))
|
||||
|
||||
(module+ test
|
||||
(check-equal? (part1 "test") 165))
|
||||
|
||||
(module+ main
|
||||
(displayln (part1 "input")))
|
||||
|
||||
(define (floating-expansion mask)
|
||||
(define x-indexes (indexes-of (reverse (string->list mask)) #\X))
|
||||
(for/list ([idxs (in-combinations x-indexes)])
|
||||
(apply + (map (λ (idx) (- (expt 2 idx))) idxs))))
|
||||
|
||||
(define (destinations mask mask-expansion addr)
|
||||
(map (λ (x) (+ (bitwise-ior mask addr) x)) mask-expansion))
|
||||
|
||||
(module+ test
|
||||
(let* ([mask "000000000000000000000000000000X1001X"]
|
||||
[mask-num (string->number (string-replace mask "X" "1") 2)]
|
||||
[mask-expansion (floating-expansion mask)])
|
||||
(check-equal? (sort (destinations mask-num mask-expansion 42) <)
|
||||
'(26 27 58 59)))
|
||||
(let* ([mask "00000000000000000000000000000000X0XX"]
|
||||
[mask-num (string->number (string-replace mask "X" "1") 2)]
|
||||
[mask-expansion (floating-expansion mask)])
|
||||
(check-equal? (sort (destinations mask-num mask-expansion 16) <)
|
||||
'(16 17 18 19 24 25 26 27))))
|
||||
|
||||
(define (part2 filename)
|
||||
(define input (read-input filename))
|
||||
(define mem (make-hash))
|
||||
(for/fold ([mask 0]
|
||||
[mask-expansion '()])
|
||||
([instr (in-list input)])
|
||||
(match instr
|
||||
[`(mask ,x) (values (string->number (string-replace x "X" "1") 2)
|
||||
(floating-expansion x))]
|
||||
[`(mem ,i ,x) (for ([dest (in-list (destinations mask mask-expansion i))])
|
||||
(hash-set! mem dest x))
|
||||
(values mask mask-expansion)]))
|
||||
(apply + (hash-values mem)))
|
||||
|
||||
(module+ test
|
||||
(check-equal? (part2 "test2") 208))
|
||||
|
||||
(module+ main
|
||||
(displayln (part2 "input")))
|
592
2020/day14/input
Normal file
592
2020/day14/input
Normal file
|
@ -0,0 +1,592 @@
|
|||
mask = 100X100X101011111X100000100X11010011
|
||||
mem[33323] = 349380
|
||||
mem[52742] = 116688965
|
||||
mem[4113] = 11499
|
||||
mem[15819] = 313303
|
||||
mem[23239] = 755579063
|
||||
mask = X00X10X1X010110110111X00010X100X000X
|
||||
mem[49207] = 466621685
|
||||
mem[34069] = 6874604
|
||||
mask = 1001100XX00011110110100XX0110000001X
|
||||
mem[61278] = 56361674
|
||||
mem[51360] = 61871432
|
||||
mem[31903] = 45067
|
||||
mask = 100X100XX0101X11X1X00X00001001X101X0
|
||||
mem[22981] = 144008
|
||||
mem[12013] = 49165315
|
||||
mem[54643] = 50677
|
||||
mem[59166] = 678129
|
||||
mem[64022] = 27522
|
||||
mask = 100110X0001X11011000101X1000001X00X0
|
||||
mem[32693] = 425145
|
||||
mem[11437] = 236593490
|
||||
mem[16078] = 227582
|
||||
mem[35266] = 197465438
|
||||
mem[39279] = 127942
|
||||
mask = 10101000X0X00001X1001000010100111X00
|
||||
mem[49794] = 2082
|
||||
mem[60407] = 2129
|
||||
mem[33300] = 921
|
||||
mem[18582] = 62106545
|
||||
mem[32160] = 843912
|
||||
mem[36917] = 7740
|
||||
mem[1836] = 54721591
|
||||
mask = 100010X1X0X011X1101XX00001X01000X10X
|
||||
mem[8385] = 1381
|
||||
mem[38022] = 2501412
|
||||
mem[34713] = 3648024
|
||||
mem[33245] = 1178087
|
||||
mem[22176] = 263
|
||||
mem[20535] = 1289
|
||||
mem[2092] = 88590569
|
||||
mask = X001100X00X0X01X0X100X100010110XX101
|
||||
mem[65061] = 2768
|
||||
mem[56375] = 6734
|
||||
mem[18070] = 20571066
|
||||
mem[61511] = 403157281
|
||||
mem[4164] = 179682
|
||||
mem[11801] = 5501
|
||||
mem[22339] = 14414879
|
||||
mask = X0011000001X1001X0100111110X00110111
|
||||
mem[3844] = 1046
|
||||
mem[33741] = 109390
|
||||
mem[54311] = 94183595
|
||||
mem[48744] = 112575
|
||||
mem[29663] = 2042
|
||||
mask = X00X100000101001101001001X00001000X1
|
||||
mem[25325] = 177269
|
||||
mem[919] = 50779835
|
||||
mem[52113] = 2386630
|
||||
mem[60154] = 29645195
|
||||
mem[24761] = 8101
|
||||
mask = X101X000X01011011010X100001101110X01
|
||||
mem[5169] = 2865
|
||||
mem[55126] = 50829
|
||||
mem[60154] = 124556261
|
||||
mem[48753] = 377574
|
||||
mem[48662] = 9144531
|
||||
mask = 10011X00001010011010000101110XX0X00X
|
||||
mem[41623] = 632353121
|
||||
mem[10365] = 70888870
|
||||
mem[59458] = 849
|
||||
mem[18992] = 486294339
|
||||
mask = X00X100X011011111100X00001001010100X
|
||||
mem[42046] = 518245944
|
||||
mem[4654] = 39071
|
||||
mem[46109] = 1540
|
||||
mem[3245] = 822
|
||||
mem[25937] = 257692
|
||||
mem[19118] = 6601278
|
||||
mask = 1001001XXX100XXX101XX0001010001000X0
|
||||
mem[34356] = 55967
|
||||
mem[52601] = 522574
|
||||
mem[31903] = 7669828
|
||||
mem[36165] = 10552
|
||||
mask = 110X101X00X0111111XX001X0001000XX10X
|
||||
mem[42649] = 1534730
|
||||
mem[8324] = 467628
|
||||
mem[9447] = 3054
|
||||
mem[41788] = 28205
|
||||
mem[9353] = 14315559
|
||||
mask = 1X01X01100111111X101000000X100100000
|
||||
mem[270] = 3208
|
||||
mem[20373] = 186089492
|
||||
mem[43940] = 449607191
|
||||
mem[63389] = 674
|
||||
mem[437] = 6933780
|
||||
mask = 1001X00001X01X0X101101X0010X00110110
|
||||
mem[22829] = 3301
|
||||
mem[59260] = 6763
|
||||
mem[22305] = 203360
|
||||
mask = 10011110101010X010XX011X0010001XX000
|
||||
mem[55041] = 6199
|
||||
mem[55452] = 151
|
||||
mem[2746] = 464657
|
||||
mask = 1001000000X0X10110X01101X00100111000
|
||||
mem[54354] = 666913
|
||||
mem[44827] = 214920
|
||||
mem[44621] = 13259544
|
||||
mem[29462] = 14725
|
||||
mem[27633] = 284739975
|
||||
mem[63195] = 11668372
|
||||
mask = 10X010X10100X111001X101010101X11100X
|
||||
mem[21667] = 426958
|
||||
mem[55530] = 91533
|
||||
mem[10365] = 493
|
||||
mem[51246] = 513589450
|
||||
mem[44622] = 1773
|
||||
mem[4113] = 401
|
||||
mask = 100X1000001011XXX0100XXX100010X10X00
|
||||
mem[60407] = 869913
|
||||
mem[10365] = 59083
|
||||
mem[18321] = 3019
|
||||
mem[65061] = 10794134
|
||||
mem[62827] = 2777572
|
||||
mem[20373] = 23798334
|
||||
mask = 1000X10011X010011X10X0000101X0100001
|
||||
mem[17936] = 4347
|
||||
mem[38270] = 611
|
||||
mem[7408] = 2854792
|
||||
mem[2612] = 604172
|
||||
mem[24287] = 418220
|
||||
mem[27110] = 31440
|
||||
mem[64742] = 1872667
|
||||
mask = 10X110000010100110X001X01X1000000111
|
||||
mem[30518] = 13431
|
||||
mem[64496] = 204238
|
||||
mem[62259] = 1191
|
||||
mem[17457] = 3652
|
||||
mask = 100X1X0XX1101XX11010X000X01010010011
|
||||
mem[25325] = 67829
|
||||
mem[4021] = 8039
|
||||
mask = 1XXXXX0X0010110X11100111001111101110
|
||||
mem[34600] = 4128134
|
||||
mem[47565] = 28022073
|
||||
mask = X0X110000XX010X10010X0X111X111010101
|
||||
mem[64746] = 17532220
|
||||
mem[55786] = 109034
|
||||
mem[12715] = 185475
|
||||
mask = 1001110X011010111010X1010010100XX100
|
||||
mem[28923] = 1444
|
||||
mem[7508] = 41968
|
||||
mem[39856] = 447
|
||||
mem[19698] = 4420683
|
||||
mem[60924] = 7222
|
||||
mem[8056] = 225410214
|
||||
mask = 100X10X1X0X011X10110X01X011000X10X00
|
||||
mem[58206] = 585282
|
||||
mem[10984] = 105158307
|
||||
mem[31562] = 526874
|
||||
mem[60154] = 107013
|
||||
mem[4409] = 4126230
|
||||
mask = 1010100010X0XX0111X00X00011X000X0XX0
|
||||
mem[7122] = 428629
|
||||
mem[29394] = 262029322
|
||||
mem[33832] = 6067254
|
||||
mask = 0001100XXX0010X001100010X000110001X1
|
||||
mem[1975] = 32392
|
||||
mem[14891] = 9350
|
||||
mem[19905] = 28213400
|
||||
mem[11981] = 132973999
|
||||
mem[49582] = 4347
|
||||
mem[64106] = 235564
|
||||
mem[9648] = 1440
|
||||
mask = 000110010011XXXX0X1001010001X00X0100
|
||||
mem[18992] = 628
|
||||
mem[37263] = 1031
|
||||
mem[4387] = 1442306
|
||||
mem[2471] = 1123350
|
||||
mem[1493] = 88891215
|
||||
mem[22500] = 3553
|
||||
mem[6845] = 26007
|
||||
mask = 10011X00011011X1101X00X001X1X001X111
|
||||
mem[49101] = 13289
|
||||
mem[32] = 391365
|
||||
mem[31906] = 79
|
||||
mem[48744] = 71043
|
||||
mask = 1001X0X00010100110X001011001101X01X0
|
||||
mem[25999] = 2473051
|
||||
mem[36408] = 56819077
|
||||
mem[46656] = 2074748
|
||||
mem[10871] = 8606
|
||||
mem[7122] = 2053
|
||||
mem[59403] = 5442
|
||||
mask = 1XX0X01X100X11111010X000X00X000101X0
|
||||
mem[1160] = 280063168
|
||||
mem[20571] = 19030
|
||||
mem[23225] = 51089295
|
||||
mem[40992] = 17475
|
||||
mem[63413] = 1144
|
||||
mem[19458] = 284777610
|
||||
mem[21502] = 10410
|
||||
mask = 100X100X00101X0100X0X0X11100111XX11X
|
||||
mem[33860] = 160
|
||||
mem[37007] = 56420
|
||||
mem[55140] = 490726
|
||||
mem[47752] = 521745
|
||||
mem[55594] = 336661995
|
||||
mem[44008] = 265991679
|
||||
mask = 1001100001X010011100100X01X0X011111X
|
||||
mem[1289] = 55191
|
||||
mem[53058] = 23079796
|
||||
mem[25362] = 57315626
|
||||
mem[8895] = 35287816
|
||||
mask = 0001100100XX00100X1X0X00XX00XX000110
|
||||
mem[12568] = 136661
|
||||
mem[9931] = 303487
|
||||
mem[38781] = 91532
|
||||
mem[25506] = 950257996
|
||||
mem[3694] = 6225663
|
||||
mem[6631] = 62710499
|
||||
mem[3205] = 7586715
|
||||
mask = X0001000001X111110100000X0110001000X
|
||||
mem[61696] = 34763
|
||||
mem[42583] = 2987088
|
||||
mem[8416] = 2293694
|
||||
mem[21503] = 8071
|
||||
mem[41788] = 950960
|
||||
mem[9648] = 23284946
|
||||
mask = 100010000010XX0XX01000000X011100X1X0
|
||||
mem[30270] = 421
|
||||
mem[52379] = 86815089
|
||||
mem[16627] = 3647190
|
||||
mem[36794] = 132421727
|
||||
mem[54580] = 248096
|
||||
mask = 10X1101000X01001X00111110101110001X0
|
||||
mem[48399] = 9196559
|
||||
mem[6869] = 32793911
|
||||
mem[20422] = 1560
|
||||
mem[12101] = 15618
|
||||
mem[25154] = 390003034
|
||||
mem[23791] = 229770864
|
||||
mem[49558] = 12206144
|
||||
mask = 100X10010X101XX1XXX000001X00101X1100
|
||||
mem[3205] = 110968351
|
||||
mem[65515] = 7362194
|
||||
mem[2197] = 52580964
|
||||
mem[13004] = 3723834
|
||||
mem[46931] = 24935229
|
||||
mem[919] = 6284
|
||||
mask = 10001X11100X1X1X10X111X100X0000010X1
|
||||
mem[30162] = 1665
|
||||
mem[35687] = 3554
|
||||
mem[3735] = 8003
|
||||
mem[18258] = 44276232
|
||||
mem[48625] = 401841687
|
||||
mem[62781] = 2814958
|
||||
mem[5302] = 175144514
|
||||
mask = 1001X0XX001X101110101000X11X00010X00
|
||||
mem[38152] = 42369373
|
||||
mem[36392] = 13302
|
||||
mem[13867] = 940605082
|
||||
mask = 10001100X11010X1101000X0X11100110011
|
||||
mem[63412] = 5289
|
||||
mem[788] = 6600
|
||||
mem[27915] = 254034
|
||||
mem[24347] = 16264001
|
||||
mem[52437] = 651358
|
||||
mask = 10011X0X0110X0X11X101100101100X11100
|
||||
mem[56524] = 1244173
|
||||
mem[64911] = 2124386
|
||||
mem[3815] = 107466
|
||||
mem[14375] = 6798
|
||||
mem[16285] = 66968238
|
||||
mem[7968] = 835823180
|
||||
mask = 10X110100X101XX110X11110XX0111001010
|
||||
mem[58730] = 132998954
|
||||
mem[8056] = 754181
|
||||
mem[39247] = 126
|
||||
mask = 1001X000001XX10110101X1110110X10101X
|
||||
mem[59028] = 10817
|
||||
mem[17977] = 61299509
|
||||
mask = 1X001100X1X0100110100000X111XXX001X0
|
||||
mem[2056] = 32701076
|
||||
mem[2071] = 2401082
|
||||
mem[9887] = 998417
|
||||
mask = 100110X11X101X1110X00100X0101111X0X1
|
||||
mem[33860] = 388064
|
||||
mem[59050] = 16623098
|
||||
mem[5188] = 319
|
||||
mem[37207] = 2470432
|
||||
mem[27333] = 2026
|
||||
mask = 1000X000001X1X0X00XXX00X100011X11010
|
||||
mem[24029] = 9105
|
||||
mem[14364] = 243545984
|
||||
mem[4113] = 3279
|
||||
mask = 1X0X1001X0101011110XX1000100X000X101
|
||||
mem[17781] = 509963835
|
||||
mem[37716] = 62611707
|
||||
mem[23997] = 1023138975
|
||||
mem[5927] = 32777
|
||||
mem[55304] = 264062857
|
||||
mask = 100110X001X01X01100011100X100110X11X
|
||||
mem[58338] = 741
|
||||
mem[34693] = 991498
|
||||
mem[32339] = 30979944
|
||||
mem[50216] = 66393532
|
||||
mem[29090] = 11574321
|
||||
mem[30824] = 15729
|
||||
mem[16868] = 23942
|
||||
mask = 1X0XX0010X0011110X101010111011111010
|
||||
mem[48969] = 3327849
|
||||
mem[52521] = 460105388
|
||||
mem[33860] = 422661865
|
||||
mem[44621] = 6715
|
||||
mem[27762] = 11952
|
||||
mem[34536] = 4064
|
||||
mask = 1001X001001X0011001000100110010001XX
|
||||
mem[195] = 487302
|
||||
mem[17992] = 889
|
||||
mem[11858] = 958195
|
||||
mem[11013] = 202443463
|
||||
mask = 1000101X100X1111011000X100110000X001
|
||||
mem[13097] = 3534
|
||||
mem[41292] = 85120
|
||||
mem[9497] = 154119
|
||||
mem[19610] = 5709354
|
||||
mem[34972] = 48311
|
||||
mem[50753] = 180578
|
||||
mem[35921] = 667946365
|
||||
mask = XX1010X00110X00111000XX00001000110X0
|
||||
mem[3712] = 2843518
|
||||
mem[34604] = 2965
|
||||
mem[54311] = 162583
|
||||
mask = 0001X0X00100100X001000001X1X10X01X10
|
||||
mem[49406] = 965493
|
||||
mem[59050] = 392048
|
||||
mem[3574] = 922708604
|
||||
mem[7419] = 33525859
|
||||
mem[1933] = 8
|
||||
mem[4367] = 11521
|
||||
mask = 1001X0X00X10X00X101X00001110X0100X00
|
||||
mem[29215] = 417522
|
||||
mem[56468] = 34229032
|
||||
mem[26868] = 552971
|
||||
mem[36368] = 420213
|
||||
mask = 100110X0X1101011101X01X01101101X001X
|
||||
mem[4913] = 455
|
||||
mem[3815] = 11211510
|
||||
mem[21545] = 1469
|
||||
mem[35762] = 1806
|
||||
mem[58825] = 3743
|
||||
mem[23225] = 474872535
|
||||
mem[53173] = 46538
|
||||
mask = 1XX0X00X0X101001001010100X0X01X00010
|
||||
mem[64106] = 98247289
|
||||
mem[13686] = 54961348
|
||||
mem[38944] = 462290318
|
||||
mem[53185] = 7075
|
||||
mem[30162] = 39454
|
||||
mem[14983] = 1010603
|
||||
mem[38339] = 970
|
||||
mask = X001100X010X111110001000001X01100110
|
||||
mem[12827] = 22328
|
||||
mem[18628] = 7082210
|
||||
mem[31013] = 20804915
|
||||
mem[13966] = 86
|
||||
mem[518] = 1757
|
||||
mask = X001100XX001001001110000000000XX1110
|
||||
mem[14375] = 8414661
|
||||
mem[1568] = 225486
|
||||
mem[25775] = 336197
|
||||
mask = 100110000X00100X100001100X111X100X01
|
||||
mem[2071] = 51386682
|
||||
mem[32897] = 162194
|
||||
mem[11308] = 1799417
|
||||
mem[20829] = 299249
|
||||
mask = 1X0010XXX0001111XX1100X001X1X0000101
|
||||
mem[29189] = 36530
|
||||
mem[657] = 114543286
|
||||
mem[9356] = 451
|
||||
mask = X000100000101X0110X0011XX10000110001
|
||||
mem[30577] = 117881
|
||||
mem[60874] = 19567558
|
||||
mem[10363] = 13493
|
||||
mem[5690] = 382
|
||||
mem[61059] = 4757304
|
||||
mem[36165] = 95983791
|
||||
mask = 100X00X00010100X1010000X101000X10000
|
||||
mem[33324] = 39476477
|
||||
mem[34713] = 7398
|
||||
mem[46214] = 98709
|
||||
mem[35856] = 1020446010
|
||||
mask = 10X01X000010000X11100101011X001X0100
|
||||
mem[65061] = 61054
|
||||
mem[54052] = 92826
|
||||
mem[35603] = 58759
|
||||
mem[58037] = 40910
|
||||
mem[62217] = 45701380
|
||||
mask = 1X011000001011011010XX00X10X0X010001
|
||||
mem[15920] = 5645
|
||||
mem[28828] = 265910022
|
||||
mem[29437] = 5544
|
||||
mem[56112] = 637
|
||||
mem[45033] = 36063036
|
||||
mem[12783] = 13776458
|
||||
mask = 10011011X010100110XX100100XX11011X00
|
||||
mem[518] = 25998191
|
||||
mem[13053] = 7866406
|
||||
mem[38152] = 3208
|
||||
mem[18730] = 711
|
||||
mask = 10X11000001XX1X000100X11101XX1X10111
|
||||
mem[47121] = 11272115
|
||||
mem[43618] = 27683
|
||||
mask = 100X1101X0101001100X010000X11001X100
|
||||
mem[21702] = 34688805
|
||||
mem[43624] = 3956780
|
||||
mem[24476] = 17239393
|
||||
mem[23321] = 25573609
|
||||
mem[15163] = 1713
|
||||
mem[65338] = 27386792
|
||||
mask = 10011010010X10011X0011110XX100001111
|
||||
mem[53501] = 16700270
|
||||
mem[28069] = 20683243
|
||||
mem[33593] = 114830
|
||||
mem[9962] = 403282549
|
||||
mem[54061] = 2336
|
||||
mem[46656] = 7039
|
||||
mem[58616] = 181
|
||||
mask = 10001X11001011XX101X0100010010101100
|
||||
mem[8738] = 234383093
|
||||
mem[11512] = 1792627
|
||||
mem[54326] = 1574223
|
||||
mask = 10011X101X10100XX000X10010X01X01100X
|
||||
mem[51382] = 17879
|
||||
mem[44905] = 783
|
||||
mem[57514] = 1018128542
|
||||
mem[18628] = 240492
|
||||
mem[2108] = 3429
|
||||
mem[2304] = 3748
|
||||
mask = 0X011001X0X000X000110100101000000000
|
||||
mem[4452] = 19437119
|
||||
mem[64742] = 179090
|
||||
mem[16430] = 486207
|
||||
mask = 1001X000111X1X1110110X011111100X0011
|
||||
mem[52004] = 41486
|
||||
mem[48779] = 83675
|
||||
mem[17861] = 48577395
|
||||
mem[39247] = 16952
|
||||
mem[8738] = 3981
|
||||
mem[32923] = 1168904
|
||||
mask = 10011001XX0011X11X0010X1010X10101000
|
||||
mem[33319] = 44401
|
||||
mem[4142] = 517003945
|
||||
mem[29189] = 415157
|
||||
mem[33358] = 1395165
|
||||
mask = 1001100X010010011XX00XXX1100101X0101
|
||||
mem[13618] = 246280673
|
||||
mem[58338] = 17884
|
||||
mem[10885] = 816
|
||||
mem[11277] = 24331199
|
||||
mem[17936] = 1616051
|
||||
mask = 1001100X01X01001X00011000110X0X001XX
|
||||
mem[58338] = 302363844
|
||||
mem[53596] = 175604903
|
||||
mem[56468] = 419729
|
||||
mem[27915] = 581
|
||||
mem[41501] = 69718
|
||||
mask = 100110000X1010110100X1X001X00X01001X
|
||||
mem[18333] = 15544
|
||||
mem[3929] = 2622169
|
||||
mem[37718] = 176413
|
||||
mem[27333] = 848
|
||||
mem[17456] = 1097
|
||||
mask = 100110101010X001X000X0001X00001011X0
|
||||
mem[53045] = 2356198
|
||||
mem[49908] = 1086
|
||||
mem[17019] = 7107107
|
||||
mem[12013] = 70971
|
||||
mem[7048] = 1585
|
||||
mem[3666] = 4937143
|
||||
mask = 10011XXXX01010011000010X1X11100XXX00
|
||||
mem[65524] = 4129175
|
||||
mem[5636] = 315661
|
||||
mem[39270] = 455882795
|
||||
mask = X1001100110010011010000001110X0X00XX
|
||||
mem[50481] = 26734
|
||||
mem[57708] = 199726127
|
||||
mem[20422] = 130991
|
||||
mem[13651] = 1094687
|
||||
mem[1292] = 60536
|
||||
mask = 110X1011001XX111110100X0000010X1X101
|
||||
mem[39644] = 14574
|
||||
mem[8596] = 30400
|
||||
mask = 1000101XX0X0X1110110111X110011X00110
|
||||
mem[919] = 32148
|
||||
mem[41] = 453324
|
||||
mem[36794] = 179133
|
||||
mem[2780] = 958033590
|
||||
mask = 100010X1X11011110010X01101101110X100
|
||||
mem[20035] = 1674335
|
||||
mem[18909] = 33271
|
||||
mem[21491] = 4013451
|
||||
mem[21792] = 78760
|
||||
mem[42156] = 980
|
||||
mem[3276] = 3971405
|
||||
mask = 10XX10000X10X00111X0XX00X0010011X100
|
||||
mem[36368] = 5097527
|
||||
mem[3099] = 104365
|
||||
mem[57092] = 74461253
|
||||
mem[46314] = 30483860
|
||||
mask = X000101X101011X10110XXX001X00X11X010
|
||||
mem[9948] = 43011947
|
||||
mem[53185] = 41588
|
||||
mem[25699] = 101124
|
||||
mem[60046] = 123243
|
||||
mem[23975] = 125991
|
||||
mask = 1X00100000X01X00101011100X1010000101
|
||||
mem[65101] = 504575
|
||||
mem[55313] = 14953613
|
||||
mem[42156] = 526
|
||||
mem[55573] = 1303957
|
||||
mem[53260] = 16252
|
||||
mem[48073] = 8667
|
||||
mask = 1001100100101X11110X0X0X0111X00001X0
|
||||
mem[10402] = 793546
|
||||
mem[45910] = 18
|
||||
mem[23627] = 72728
|
||||
mem[7408] = 16579752
|
||||
mem[22105] = 10576
|
||||
mem[61054] = 1160961
|
||||
mem[2989] = 149675383
|
||||
mask = 0001X001000000XX0111X110010001010110
|
||||
mem[15867] = 14
|
||||
mem[23379] = 10511918
|
||||
mem[4217] = 4840435
|
||||
mem[29978] = 11828937
|
||||
mem[28303] = 2358671
|
||||
mask = 10010010011X0XX11010X000110000110X00
|
||||
mem[11923] = 149358903
|
||||
mem[46246] = 3148
|
||||
mem[17596] = 9370
|
||||
mem[1540] = 12848
|
||||
mem[25775] = 29444
|
||||
mem[32564] = 64008
|
||||
mem[16097] = 641
|
||||
mask = 0X011001X010X010X0100X1X0X0X000111X1
|
||||
mem[45770] = 1008133
|
||||
mem[15551] = 3912928
|
||||
mem[53058] = 188856
|
||||
mem[44827] = 9036496
|
||||
mem[59530] = 20033543
|
||||
mask = 1001100X0XX01X0110X000XX010010XX1101
|
||||
mem[2056] = 737
|
||||
mem[34972] = 30655
|
||||
mem[50728] = 927954
|
||||
mask = 10001X0000X0X0010010101010X001100110
|
||||
mem[39247] = 425181
|
||||
mem[64200] = 13111811
|
||||
mem[8169] = 1250162
|
||||
mask = 100110000X10XXX11010X0001110X011XX00
|
||||
mem[62259] = 4350710
|
||||
mem[56112] = 42327
|
||||
mem[53173] = 2221557
|
||||
mem[36759] = 242686307
|
||||
mem[29077] = 1179326
|
||||
mem[2056] = 356
|
||||
mask = 10000000001XX000101000X0X11000X10110
|
||||
mem[18542] = 454113
|
||||
mem[44192] = 501708
|
||||
mem[54994] = 149470837
|
||||
mem[54260] = 582959
|
||||
mem[65424] = 295679271
|
||||
mem[36368] = 2002
|
||||
mem[16392] = 99
|
||||
mask = 10100001XX101001X0101100101101000XX0
|
||||
mem[17861] = 3340321
|
||||
mem[24705] = 4143350
|
||||
mem[38940] = 201585
|
||||
mem[35632] = 19204465
|
||||
mem[9443] = 5273035
|
||||
mask = 10X110010010100101000X00001010X0111X
|
||||
mem[2991] = 51624
|
||||
mem[56468] = 1603
|
||||
mem[35633] = 4068
|
||||
mask = 10011X01001010X10000X011000111101X11
|
||||
mem[58842] = 69158
|
||||
mem[43765] = 1624
|
||||
mem[24913] = 133864698
|
||||
mem[15015] = 247
|
||||
mem[10155] = 1064
|
||||
mem[33787] = 142284522
|
||||
mem[17457] = 15488682
|
4
2020/day14/test
Normal file
4
2020/day14/test
Normal file
|
@ -0,0 +1,4 @@
|
|||
mask = XXXXXXXXXXXXXXXXXXXXXXXXXXXXX1XXXX0X
|
||||
mem[8] = 11
|
||||
mem[7] = 101
|
||||
mem[8] = 0
|
4
2020/day14/test2
Normal file
4
2020/day14/test2
Normal file
|
@ -0,0 +1,4 @@
|
|||
mask = 000000000000000000000000000000X1001X
|
||||
mem[42] = 100
|
||||
mask = 00000000000000000000000000000000X0XX
|
||||
mem[26] = 1
|
1143
2020/day14/uthash.h
Normal file
1143
2020/day14/uthash.h
Normal file
File diff suppressed because it is too large
Load diff
34
2020/day15/day15.c
Normal file
34
2020/day15/day15.c
Normal file
|
@ -0,0 +1,34 @@
|
|||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
|
||||
#define SIZE 30000000
|
||||
|
||||
size_t a[SIZE];
|
||||
|
||||
int main(int argc, char *argv[]) {
|
||||
if (argc < 2) {
|
||||
printf("Usage: %s <input list>\n", argv[0]);
|
||||
return 0;
|
||||
}
|
||||
|
||||
for (size_t i = 1; i < argc - 1; ++i) {
|
||||
a[atoi(argv[i])] = i;
|
||||
}
|
||||
|
||||
size_t n = atoi(argv[argc - 1]);
|
||||
for (size_t i = argc - 1; i < SIZE; ++i) {
|
||||
if (i == 2020) { // Part 1
|
||||
printf("%zu\n", n);
|
||||
}
|
||||
size_t prev_n = n;
|
||||
if (a[n] == 0) {
|
||||
n = 0;
|
||||
} else {
|
||||
n = i - a[n];
|
||||
}
|
||||
a[prev_n] = i;
|
||||
}
|
||||
printf("%zu\n", n); // Part 2
|
||||
|
||||
return 0;
|
||||
}
|
39
2020/day15/day15.rkt
Normal file
39
2020/day15/day15.rkt
Normal file
|
@ -0,0 +1,39 @@
|
|||
#lang racket
|
||||
|
||||
(module+ test
|
||||
(require rackunit))
|
||||
|
||||
(define (run-game input idx)
|
||||
(define h (make-hash))
|
||||
(for ([n (in-list (drop-right input 1))]
|
||||
[i (in-naturals)])
|
||||
(hash-set! h n (add1 i)))
|
||||
(for/fold ([n (last input)])
|
||||
([i (in-range (length input) idx)])
|
||||
(define res (- i (hash-ref h n i)))
|
||||
(hash-set! h n i)
|
||||
res))
|
||||
|
||||
(module+ test
|
||||
(check-equal? (run-game '(0 3 6) 2020) 436)
|
||||
(check-equal? (run-game '(1 3 2) 2020) 1)
|
||||
(check-equal? (run-game '(2 1 3) 2020) 10)
|
||||
(check-equal? (run-game '(1 2 3) 2020) 27)
|
||||
(check-equal? (run-game '(2 3 1) 2020) 78)
|
||||
(check-equal? (run-game '(3 2 1) 2020) 438)
|
||||
(check-equal? (run-game '(3 1 2) 2020) 1836))
|
||||
|
||||
(module+ main
|
||||
(displayln (run-game '(14 1 17 0 3 20) 2020)))
|
||||
|
||||
(module+ test
|
||||
(check-equal? (run-game '(0 3 6) 30000000) 175594)
|
||||
(check-equal? (run-game '(1 3 2) 30000000) 2578)
|
||||
(check-equal? (run-game '(2 1 3) 30000000) 3544142)
|
||||
(check-equal? (run-game '(1 2 3) 30000000) 261214)
|
||||
(check-equal? (run-game '(2 3 1) 30000000) 6895259)
|
||||
(check-equal? (run-game '(3 2 1) 30000000) 18)
|
||||
(check-equal? (run-game '(3 1 2) 30000000) 362))
|
||||
|
||||
(module+ main
|
||||
(displayln (run-game '(14 1 17 0 3 20) 30000000)))
|
88
2020/day16/day16.rkt
Normal file
88
2020/day16/day16.rkt
Normal file
|
@ -0,0 +1,88 @@
|
|||
#lang racket
|
||||
|
||||
(module+ test
|
||||
(require rackunit))
|
||||
|
||||
(define (parse-ticket str)
|
||||
(map string->number (string-split str ",")))
|
||||
|
||||
(define (parse-rules lst)
|
||||
(for/hash ([str (in-list lst)])
|
||||
(define name (car (string-split str ": ")))
|
||||
(define ranges (map string->number (regexp-match* #px"\\d+" str)))
|
||||
(values name
|
||||
(λ (n) (or (<= (first ranges) n (second ranges))
|
||||
(<= (third ranges) n (fourth ranges)))))))
|
||||
|
||||
(define (read-input filename)
|
||||
(define in-str (file->string filename))
|
||||
(define rules (parse-rules (regexp-match* #px"[\\w ]+: \\d+-\\d+ or \\d+-\\d+" in-str)))
|
||||
(define my-ticket
|
||||
(parse-ticket (cadr (regexp-match #px"your ticket:\n([\\d,]+)" in-str))))
|
||||
(define nearby-tickets
|
||||
(map parse-ticket
|
||||
(string-split
|
||||
(cadr (regexp-match #px"nearby tickets:\n([\\d,\n]+)" in-str)))))
|
||||
(values rules my-ticket nearby-tickets))
|
||||
|
||||
(define (part1 filename)
|
||||
(define-values (rules my-ticket nearby-tickets) (read-input filename))
|
||||
(define invalid-values
|
||||
(for*/list ([ticket (in-list nearby-tickets)]
|
||||
[val (in-list ticket)]
|
||||
#:when (for/and ([(name rule-proc) (in-hash rules)])
|
||||
(not (rule-proc val))))
|
||||
val))
|
||||
(apply + invalid-values))
|
||||
|
||||
(module+ test
|
||||
(check-equal? (part1 "test1") 71))
|
||||
|
||||
(module+ main
|
||||
(displayln (part1 "input")))
|
||||
|
||||
(define ((valid? rules) ticket)
|
||||
(for/and ([val (in-list ticket)])
|
||||
(for/or ([(name rule-proc) (in-hash rules)])
|
||||
(rule-proc val))))
|
||||
|
||||
(define (field-positions h)
|
||||
(if (for/and ([(k v) (in-hash h)]) (= 1 (length v)))
|
||||
(for/hash ([(k v) (in-hash h)]) (values k (car v)))
|
||||
(begin
|
||||
(for ([(name lst) (in-hash h)]
|
||||
#:when (= 1 (length lst)))
|
||||
(for ([(other-name other-lst) (in-hash h)]
|
||||
#:unless (equal? other-name name))
|
||||
(hash-set! h other-name (remove (car lst) other-lst))))
|
||||
(field-positions h))))
|
||||
|
||||
(define (determine-ticket filename)
|
||||
(define-values (rules my-ticket nearby-tickets) (read-input filename))
|
||||
(define valid-tickets (filter (valid? rules) nearby-tickets))
|
||||
(define h (make-hash))
|
||||
(for ([(name rule-proc) (in-hash rules)])
|
||||
(hash-set! h name (range (length my-ticket))))
|
||||
(for ([(name rule-proc) (in-hash rules)]
|
||||
#:when #t
|
||||
[ticket (in-list valid-tickets)]
|
||||
#:when #t
|
||||
[val (in-list ticket)]
|
||||
[i (in-naturals)]
|
||||
#:when (not (rule-proc val)))
|
||||
(hash-update! h name (λ (lst) (remove i lst =))))
|
||||
(define positions (field-positions h))
|
||||
(for/hash ([(name pos) (in-hash positions)])
|
||||
(values name (list-ref my-ticket pos))))
|
||||
|
||||
(module+ test
|
||||
(check-equal? (determine-ticket "test2") (hash "class" 12 "row" 11 "seat" 13)))
|
||||
|
||||
(define (part2 filename)
|
||||
(define ticket (determine-ticket filename))
|
||||
(apply * (for/list ([(name val) (in-hash ticket)]
|
||||
#:when (string-prefix? name "departure"))
|
||||
val)))
|
||||
|
||||
(module+ main
|
||||
(displayln (part2 "input")))
|
260
2020/day16/input
Normal file
260
2020/day16/input
Normal file
|
@ -0,0 +1,260 @@
|
|||
departure location: 29-458 or 484-956
|
||||
departure station: 40-723 or 738-960
|
||||
departure platform: 30-759 or 784-956
|
||||
departure track: 37-608 or 623-964
|
||||
departure date: 31-664 or 685-950
|
||||
departure time: 27-498 or 508-959
|
||||
arrival location: 36-245 or 269-961
|
||||
arrival station: 35-808 or 814-973
|
||||
arrival platform: 40-831 or 856-951
|
||||
arrival track: 36-857 or 875-971
|
||||
class: 43-161 or 167-963
|
||||
duration: 25-75 or 91-966
|
||||
price: 37-708 or 724-972
|
||||
route: 39-370 or 396-971
|
||||
row: 47-280 or 299-949
|
||||
seat: 41-105 or 125-952
|
||||
train: 43-351 or 359-966
|
||||
type: 34-575 or 586-965
|
||||
wagon: 27-397 or 420-953
|
||||
zone: 48-206 or 226-965
|
||||
|
||||
your ticket:
|
||||
61,151,59,101,173,71,103,167,127,157,137,73,181,97,179,149,131,139,67,53
|
||||
|
||||
nearby tickets:
|
||||
136,368,517,218,187,318,185,172,146,646,804,747,816,625,695,701,420,588,167,302
|
||||
144,452,191,495,196,652,878,605,607,61,932,897,539,82,456,806,587,595,153,168
|
||||
517,981,569,738,886,608,935,882,943,627,884,644,228,698,640,53,748,570,880,322
|
||||
65,428,312,692,61,465,626,312,644,645,539,189,485,182,310,555,442,493,550,275
|
||||
701,547,434,796,278,451,179,397,233,645,741,512,442,800,693,213,188,429,654,707
|
||||
898,573,456,132,190,898,705,447,875,160,688,592,627,520,434,81,517,634,240,185
|
||||
155,433,198,917,513,425,143,149,421,131,815,13,69,887,928,451,497,923,623,347
|
||||
908,896,430,539,532,406,439,75,857,134,589,631,552,541,633,933,522,557,807,917
|
||||
367,397,712,343,276,195,334,131,137,881,884,912,197,548,817,744,54,226,457,899
|
||||
340,453,916,915,430,487,816,543,485,712,703,899,638,756,431,649,364,925,238,815
|
||||
525,70,427,894,279,430,792,365,278,946,624,568,371,61,453,595,324,947,598,104
|
||||
986,444,243,741,822,745,484,878,457,486,937,368,746,652,126,589,907,317,828,741
|
||||
171,830,687,65,815,368,508,799,71,230,560,595,364,303,312,757,112,274,597,881
|
||||
917,135,661,130,898,699,618,58,206,73,149,488,458,818,69,803,572,328,888,75
|
||||
270,133,228,458,519,56,425,450,277,750,365,538,591,522,925,201,533,982,857,190
|
||||
810,599,315,529,515,898,857,605,92,438,629,533,899,491,360,603,537,458,542,597
|
||||
307,128,930,489,156,323,924,900,309,216,101,127,312,647,605,491,237,523,746,875
|
||||
632,660,660,701,700,106,169,144,341,625,432,196,799,880,808,944,443,200,341,750
|
||||
349,881,943,793,541,772,643,171,540,572,647,55,882,569,934,365,944,199,278,568
|
||||
703,755,639,929,140,196,897,235,342,79,360,370,302,314,818,786,565,535,186,444
|
||||
936,458,393,624,509,563,540,830,788,902,200,628,896,917,795,95,496,332,941,308
|
||||
154,234,305,793,927,947,632,661,367,271,273,205,527,638,151,547,285,806,186,328
|
||||
641,530,616,660,626,274,368,171,280,149,269,456,658,336,306,194,659,102,318,149
|
||||
322,72,125,138,550,365,688,280,442,303,491,509,136,696,996,235,202,704,334,913
|
||||
640,571,170,700,803,650,592,545,421,703,600,638,590,242,316,203,3,531,906,233
|
||||
424,899,571,333,226,66,159,698,326,330,62,662,140,191,933,742,755,478,349,99
|
||||
645,790,316,205,637,935,187,700,565,485,746,947,130,188,436,726,311,827,309,58
|
||||
153,200,307,361,169,634,608,312,228,163,313,654,520,511,527,705,300,173,306,433
|
||||
125,56,770,177,237,447,425,55,557,192,275,652,160,568,495,508,525,100,487,588
|
||||
877,457,275,799,205,889,890,304,568,893,237,825,597,202,911,175,917,164,337,822
|
||||
312,306,427,893,562,326,904,931,703,693,946,71,181,631,328,566,552,190,750,709
|
||||
91,137,910,193,277,702,142,457,562,335,228,568,672,195,349,139,759,754,946,57
|
||||
548,892,303,808,883,514,69,705,942,615,128,822,514,366,54,934,554,420,433,926
|
||||
306,518,931,549,652,792,282,808,157,752,60,857,341,104,632,202,806,98,336,940
|
||||
144,991,568,185,756,367,893,695,784,631,901,797,607,69,545,696,369,944,948,641
|
||||
60,542,350,690,178,793,273,322,688,321,719,433,592,67,518,808,449,758,180,447
|
||||
901,740,339,828,898,913,895,284,93,794,789,894,529,238,75,439,519,797,54,890
|
||||
301,314,556,624,202,207,161,277,140,138,330,740,908,553,190,432,99,532,789,54
|
||||
534,67,160,994,129,272,550,599,657,630,786,556,626,319,245,692,64,948,397,532
|
||||
518,545,351,652,920,142,105,706,185,167,268,549,540,184,140,347,597,830,653,753
|
||||
275,75,743,916,512,918,162,805,150,798,797,178,67,935,603,300,94,494,491,452
|
||||
555,322,542,648,363,787,747,747,909,245,305,203,455,758,920,110,349,150,451,315
|
||||
640,309,891,542,541,519,69,720,699,435,799,131,699,686,948,541,520,703,529,696
|
||||
918,924,201,345,458,359,821,535,528,431,164,93,563,497,657,187,606,102,325,897
|
||||
154,877,828,160,346,675,144,300,304,174,605,708,437,831,934,234,234,911,550,793
|
||||
428,128,570,341,530,891,303,184,366,752,485,573,156,277,335,104,217,202,174,149
|
||||
500,558,336,927,881,135,640,440,931,242,648,304,338,235,895,232,126,61,308,551
|
||||
201,899,52,447,175,624,677,518,519,915,343,788,429,664,647,233,420,276,655,490
|
||||
396,884,892,744,877,186,988,203,639,103,143,181,900,510,346,556,631,788,742,177
|
||||
630,534,685,517,134,590,908,627,370,525,541,907,320,807,302,186,706,340,815,247
|
||||
791,490,78,232,73,273,890,589,543,271,655,169,180,530,441,137,629,918,278,920
|
||||
814,0,436,661,362,458,497,787,72,318,900,341,190,130,897,896,487,602,95,904
|
||||
918,179,141,508,886,99,307,894,686,634,641,318,546,232,563,165,543,885,705,929
|
||||
652,807,144,143,642,265,420,887,55,51,157,513,748,169,420,427,651,692,880,937
|
||||
318,565,305,929,754,587,318,308,306,825,568,457,72,218,146,805,160,342,269,70
|
||||
555,688,323,557,816,651,229,491,237,795,694,517,931,827,629,586,150,229,108,663
|
||||
907,230,149,455,109,536,910,601,801,548,346,942,159,125,158,59,74,174,446,496
|
||||
396,756,177,597,157,940,802,337,122,623,795,938,883,746,397,227,741,70,900,55
|
||||
536,159,803,195,336,426,228,888,434,911,887,753,888,735,309,185,876,920,799,623
|
||||
280,920,396,155,202,367,656,454,454,875,324,24,240,562,885,821,493,519,702,142
|
||||
491,199,150,134,433,186,949,200,101,97,546,152,706,788,337,56,760,366,145,857
|
||||
644,528,644,422,752,165,351,593,549,347,941,243,244,512,757,537,99,626,905,804
|
||||
631,901,747,424,904,510,206,99,594,820,180,910,357,171,231,488,59,328,805,656
|
||||
229,923,194,517,656,364,74,485,99,804,943,190,946,343,573,751,392,819,420,236
|
||||
616,823,922,633,149,746,565,558,322,593,319,897,695,496,914,568,552,511,94,587
|
||||
119,568,129,320,302,305,804,554,232,647,303,194,923,891,915,744,485,551,540,68
|
||||
74,336,432,197,715,923,914,527,278,660,910,53,692,452,422,513,568,531,650,944
|
||||
787,604,243,646,429,56,73,546,553,883,170,883,432,200,634,701,920,22,54,896
|
||||
318,271,875,590,360,445,177,63,999,154,746,637,535,329,92,892,949,204,442,435
|
||||
51,558,155,421,441,325,920,568,820,300,804,537,544,423,74,231,91,616,245,312
|
||||
659,652,941,431,349,351,50,662,520,646,305,642,96,490,350,697,671,637,495,797
|
||||
776,131,949,887,272,457,910,642,940,425,702,176,746,510,271,245,885,928,886,562
|
||||
313,420,594,938,946,571,193,999,938,534,161,100,607,136,101,894,934,595,561,590
|
||||
269,745,143,347,305,593,722,69,487,662,60,137,569,240,653,71,590,891,648,632
|
||||
542,623,629,806,515,178,898,230,496,143,748,509,485,604,518,445,918,981,818,626
|
||||
706,303,536,635,196,190,642,884,300,55,179,920,813,634,520,328,796,189,560,101
|
||||
239,542,116,685,104,801,759,52,567,436,322,745,628,487,687,520,203,856,191,641
|
||||
332,748,664,896,929,593,740,881,318,654,427,148,7,235,939,205,422,348,128,800
|
||||
919,553,103,430,426,727,437,663,368,368,795,103,912,751,933,922,361,492,231,516
|
||||
231,586,567,204,101,574,762,167,567,567,161,568,317,934,603,510,68,655,892,907
|
||||
491,273,431,135,161,192,930,484,167,361,396,197,247,830,938,454,939,363,605,931
|
||||
339,888,500,830,328,630,629,750,273,300,279,603,562,103,57,277,127,342,309,306
|
||||
733,68,884,341,650,602,804,656,307,891,551,789,201,485,185,488,69,188,183,600
|
||||
525,601,168,649,235,519,922,453,130,193,87,105,529,943,799,880,898,788,320,56
|
||||
822,164,814,195,519,700,546,896,595,94,916,492,457,745,491,919,597,278,67,894
|
||||
703,310,529,551,898,564,857,924,915,538,530,61,529,788,920,819,730,314,493,699
|
||||
497,337,168,443,698,502,911,496,700,800,814,905,422,62,493,202,881,820,430,891
|
||||
185,794,689,155,191,797,131,103,163,91,897,602,902,154,520,927,686,447,364,277
|
||||
927,607,746,440,322,752,202,596,427,101,194,22,346,630,127,128,752,947,561,508
|
||||
159,513,441,763,644,856,146,698,527,595,239,439,178,918,142,600,149,494,820,552
|
||||
343,557,340,70,452,655,381,883,785,137,130,908,496,653,877,894,940,791,151,433
|
||||
169,586,177,757,332,717,367,540,826,536,815,750,542,800,520,792,831,364,324,902
|
||||
935,516,687,946,99,337,447,625,936,422,351,518,79,661,149,826,184,457,73,434
|
||||
744,289,881,568,484,703,640,334,520,917,828,133,199,328,304,137,345,370,560,439
|
||||
804,487,367,273,67,239,739,587,892,697,158,508,929,143,523,909,418,637,184,135
|
||||
297,627,931,235,828,324,941,586,703,520,934,634,423,439,941,158,67,180,883,902
|
||||
432,155,443,557,254,311,340,450,807,239,277,243,628,817,789,689,591,554,696,517
|
||||
307,73,278,429,881,197,328,792,900,918,882,332,105,740,58,758,933,195,92,81
|
||||
697,759,167,816,537,430,875,444,790,943,498,649,144,525,655,359,463,909,324,573
|
||||
370,883,875,67,428,97,206,143,518,124,920,513,439,201,918,179,791,176,650,641
|
||||
792,63,139,564,738,520,175,520,365,591,694,932,631,249,887,438,103,946,174,98
|
||||
945,909,559,597,605,270,928,692,881,149,366,571,703,754,784,744,572,898,495,162
|
||||
754,316,191,157,704,153,111,551,883,535,362,800,925,130,929,949,425,686,91,923
|
||||
551,440,753,714,104,749,691,445,143,340,427,555,277,167,758,606,300,305,314,302
|
||||
433,604,649,372,751,889,568,305,654,160,194,536,921,930,573,337,230,552,303,817
|
||||
568,926,140,332,144,183,724,924,313,935,132,935,795,535,798,823,146,201,591,233
|
||||
351,605,724,662,56,704,443,562,896,787,347,234,793,816,494,561,659,898,552,454
|
||||
857,893,188,127,184,93,562,795,125,490,54,243,361,943,276,348,988,818,103,540
|
||||
308,787,793,232,426,273,704,397,740,907,830,311,126,100,985,542,628,636,157,485
|
||||
650,551,594,909,534,514,277,554,745,432,569,494,582,230,590,922,750,562,126,311
|
||||
814,904,444,204,821,160,492,205,324,489,792,912,699,454,828,341,983,275,830,187
|
||||
637,924,804,175,948,515,211,604,624,827,746,820,798,742,485,451,785,488,184,100
|
||||
153,208,199,827,200,56,530,185,655,821,177,700,148,170,535,337,707,900,343,521
|
||||
192,878,310,319,922,133,898,368,794,804,898,96,311,622,787,894,564,690,589,942
|
||||
242,899,820,143,58,623,811,52,661,342,702,562,878,146,538,510,307,206,795,900
|
||||
928,893,947,827,895,161,275,266,99,338,882,930,227,445,129,50,192,626,337,906
|
||||
756,554,564,101,96,287,198,800,192,92,798,639,687,878,932,321,785,694,153,631
|
||||
789,743,557,565,915,188,481,740,538,422,159,625,70,270,660,143,139,695,523,701
|
||||
437,657,397,336,698,592,329,175,452,913,492,816,492,478,313,923,915,181,819,645
|
||||
926,248,489,490,180,526,273,91,819,515,742,875,65,875,62,307,439,930,701,442
|
||||
787,892,816,592,332,299,331,786,151,547,161,755,798,95,572,235,499,567,644,311
|
||||
754,125,490,559,71,553,514,279,397,437,929,5,204,327,228,132,234,340,560,633
|
||||
913,87,426,522,242,240,184,193,708,750,510,558,697,103,151,651,625,332,948,571
|
||||
300,427,555,241,423,949,59,230,339,590,685,806,647,914,100,630,544,213,71,100
|
||||
755,343,926,350,822,445,943,693,932,200,905,97,129,664,159,916,251,450,557,589
|
||||
698,54,529,201,71,55,693,187,488,24,607,915,456,448,179,489,454,160,876,545
|
||||
437,756,54,565,445,901,194,206,945,821,349,59,696,496,902,532,166,160,633,150
|
||||
101,177,158,698,165,928,572,364,60,545,547,554,706,350,319,200,95,97,327,697
|
||||
51,68,223,67,883,827,533,432,949,643,497,906,519,66,312,593,188,97,635,66
|
||||
306,98,918,128,664,184,428,140,181,492,758,325,291,922,590,441,231,878,562,789
|
||||
468,541,235,433,334,946,192,97,449,940,168,61,495,155,560,639,657,825,587,948
|
||||
451,541,754,99,586,534,692,19,132,758,441,366,929,531,420,690,633,876,178,532
|
||||
553,331,320,193,887,433,104,817,241,374,91,700,708,498,269,708,151,269,635,739
|
||||
630,824,178,166,829,645,68,339,397,747,103,132,857,243,596,204,690,97,898,335
|
||||
550,741,634,426,58,381,934,363,456,895,345,487,898,703,99,906,528,498,635,360
|
||||
907,934,498,698,793,810,691,275,423,238,313,438,575,425,141,563,322,884,135,201
|
||||
14,330,588,105,146,173,309,897,59,176,334,891,785,656,492,315,571,426,104,795
|
||||
153,876,887,321,657,931,855,510,362,333,556,92,64,591,180,641,54,179,931,910
|
||||
361,328,275,565,359,532,894,133,61,567,701,632,470,67,509,806,626,747,911,271
|
||||
2,198,322,698,608,447,817,454,532,68,888,540,690,447,434,921,949,705,946,97
|
||||
182,361,485,348,368,922,52,799,433,187,298,369,238,168,693,797,156,631,200,936
|
||||
754,553,559,545,685,191,490,634,589,539,392,879,128,105,701,509,549,815,511,687
|
||||
882,564,261,156,564,655,455,908,739,359,137,516,485,426,904,933,597,307,349,660
|
||||
419,896,64,802,443,543,804,300,746,914,793,593,426,314,489,803,929,743,275,59
|
||||
171,636,681,93,927,315,520,587,168,694,50,130,333,441,795,628,702,202,68,920
|
||||
139,738,164,895,128,344,806,653,438,887,136,939,351,458,361,239,746,102,510,594
|
||||
921,911,367,799,548,897,51,122,366,934,929,229,625,157,685,945,130,513,916,367
|
||||
947,195,626,827,707,535,439,700,707,326,657,455,109,179,147,450,599,96,690,159
|
||||
438,95,521,520,937,226,794,364,522,127,883,645,424,423,524,704,312,917,1,344
|
||||
947,635,455,738,814,740,422,450,793,138,519,988,232,947,792,64,426,65,663,428
|
||||
840,367,447,188,909,333,130,245,927,241,73,315,574,173,229,325,273,508,878,689
|
||||
882,143,361,90,309,447,909,929,330,234,509,363,743,50,931,756,336,603,516,332
|
||||
129,829,154,143,646,350,105,155,524,443,171,65,338,345,336,742,302,644,982,688
|
||||
575,739,805,347,944,747,308,509,686,569,928,203,757,92,436,912,822,281,205,808
|
||||
744,710,565,141,237,67,694,569,147,434,664,949,700,528,820,623,337,597,68,340
|
||||
719,185,486,550,369,316,831,175,420,632,490,629,899,364,912,485,923,657,61,646
|
||||
885,276,511,745,789,313,400,545,573,708,687,650,72,692,876,625,202,823,750,608
|
||||
74,930,695,875,635,608,335,658,642,689,227,657,743,16,896,142,944,795,167,525
|
||||
423,831,603,795,452,351,794,238,857,97,606,360,735,426,426,895,931,336,514,315
|
||||
902,227,487,754,520,177,98,191,316,332,745,738,502,645,828,240,148,826,703,541
|
||||
136,173,317,265,640,348,653,894,75,686,563,125,949,443,641,183,634,104,650,334
|
||||
191,628,943,661,808,657,645,160,316,148,316,637,166,606,652,344,277,943,565,448
|
||||
370,949,693,569,147,938,204,926,796,700,880,437,328,891,172,308,5,100,635,145
|
||||
498,304,533,453,446,52,184,310,634,527,933,59,405,913,650,624,545,521,59,446
|
||||
451,14,454,313,143,799,643,784,485,690,651,58,565,938,330,742,300,756,193,556
|
||||
799,103,882,650,785,603,820,317,636,453,111,593,626,902,630,795,638,928,534,527
|
||||
303,134,527,820,145,127,548,825,200,232,801,573,594,598,920,456,925,723,593,341
|
||||
829,540,461,605,702,534,785,237,587,155,635,143,176,489,930,205,126,705,228,320
|
||||
915,144,484,559,142,804,158,76,237,335,921,660,531,370,194,457,891,660,627,508
|
||||
426,239,910,745,557,805,435,154,431,795,528,856,989,539,206,346,659,231,182,326
|
||||
54,893,815,195,567,142,940,452,628,638,533,319,936,760,547,425,569,695,749,818
|
||||
663,157,244,699,323,129,489,510,93,100,143,821,72,543,549,172,335,648,165,228
|
||||
597,426,936,829,799,315,787,148,98,259,913,497,200,326,344,641,276,278,201,822
|
||||
250,941,689,157,312,639,631,588,572,902,632,334,311,226,921,522,647,240,566,820
|
||||
746,928,535,791,342,51,931,167,637,935,155,655,848,831,926,342,881,882,126,136
|
||||
437,792,745,628,556,69,91,893,161,436,64,877,186,436,533,679,423,184,552,170
|
||||
147,192,755,556,570,199,181,642,103,128,125,549,593,741,934,202,984,435,101,308
|
||||
275,948,568,340,538,947,338,156,541,487,334,336,219,561,738,365,530,188,624,422
|
||||
531,397,664,617,908,57,93,171,149,364,598,148,875,818,199,823,455,128,328,820
|
||||
193,489,794,169,159,365,76,803,75,484,915,634,276,330,229,421,156,98,587,456
|
||||
324,159,6,66,237,458,489,167,887,155,530,934,321,53,226,97,748,605,359,179
|
||||
744,596,339,431,759,453,889,456,441,130,12,485,927,877,498,561,746,545,457,300
|
||||
944,194,517,587,426,489,129,96,136,885,801,788,554,157,457,538,615,154,527,428
|
||||
628,485,820,803,883,203,888,599,204,794,784,564,245,692,606,288,327,906,434,146
|
||||
510,314,660,644,698,568,262,351,359,513,946,361,657,607,56,310,351,884,624,498
|
||||
798,928,439,531,555,159,4,331,742,75,931,790,532,822,425,792,144,196,305,902
|
||||
786,751,749,893,808,91,190,445,944,877,921,887,686,165,97,820,135,234,337,662
|
||||
829,925,635,819,559,748,205,594,803,71,791,319,449,937,203,132,71,386,62,520
|
||||
892,226,631,900,803,172,203,305,495,397,143,175,328,194,72,171,588,130,722,320
|
||||
301,518,630,913,143,548,226,132,184,448,304,229,662,231,608,763,245,906,828,437
|
||||
453,273,189,550,269,600,441,703,125,299,631,759,436,321,882,125,644,263,815,426
|
||||
787,879,590,455,154,203,74,95,334,359,559,314,552,319,513,454,24,299,364,656
|
||||
429,437,322,739,827,230,168,197,708,701,186,441,749,312,635,856,445,777,902,635
|
||||
946,4,831,146,508,326,450,206,492,662,69,98,897,650,658,547,333,889,197,129
|
||||
300,917,642,791,661,825,306,450,278,237,940,943,188,158,138,713,630,946,550,817
|
||||
511,340,588,630,545,554,359,443,269,824,325,639,752,829,128,423,493,936,787,123
|
||||
928,92,807,754,161,280,317,337,877,493,299,546,940,802,820,877,716,143,707,902
|
||||
207,424,789,178,179,552,707,785,275,233,455,598,887,68,921,641,522,754,432,738
|
||||
514,116,60,191,534,633,598,427,327,369,341,54,130,599,347,572,707,337,102,232
|
||||
807,530,347,364,543,330,695,93,901,190,333,603,615,57,648,697,449,320,592,822
|
||||
878,696,303,298,892,366,697,234,754,186,443,572,488,188,172,700,443,935,927,183
|
||||
495,147,901,788,647,197,171,925,745,919,701,941,73,568,542,390,429,912,529,131
|
||||
800,696,330,793,655,914,59,180,447,816,50,321,806,917,58,51,78,900,430,881
|
||||
166,808,924,185,139,428,64,888,659,151,519,336,277,194,91,484,875,488,526,363
|
||||
875,172,904,364,919,794,926,236,915,816,816,135,909,118,595,750,530,925,656,193
|
||||
807,379,919,57,440,741,931,426,307,757,487,940,487,362,485,195,226,623,323,493
|
||||
206,789,424,130,573,831,355,945,60,658,790,368,931,944,548,534,757,942,341,486
|
||||
948,280,664,190,126,560,436,885,571,893,550,785,68,281,159,889,881,312,942,705
|
||||
557,542,818,697,913,351,635,130,801,930,66,946,351,230,170,260,508,93,438,903
|
||||
890,570,314,658,785,245,882,510,325,636,929,322,337,710,923,451,303,550,187,458
|
||||
891,790,943,449,689,549,519,588,2,443,304,160,556,240,553,75,320,275,436,572
|
||||
56,946,556,623,142,930,875,318,686,285,454,562,637,935,152,902,496,704,97,917
|
||||
637,102,294,643,179,522,493,442,546,453,884,185,351,652,178,206,129,341,931,168
|
||||
522,626,821,308,198,547,637,792,984,827,693,456,596,330,73,204,646,234,698,149
|
||||
198,327,324,564,815,904,947,702,798,70,203,758,233,129,647,96,880,269,2,904
|
||||
682,420,455,944,928,168,368,943,947,273,940,556,552,424,924,135,346,324,56,561
|
||||
508,101,190,526,934,622,945,925,341,159,586,549,180,703,437,820,65,368,635,396
|
||||
748,787,876,487,158,589,169,653,905,334,631,637,329,270,338,615,625,324,238,228
|
||||
183,803,751,563,206,204,320,876,13,949,594,647,568,317,750,628,877,155,546,880
|
||||
90,818,606,509,636,172,59,599,818,498,435,229,234,801,904,168,802,315,567,458
|
||||
522,327,105,857,186,641,131,234,821,154,817,887,718,608,232,140,566,598,804,485
|
||||
645,744,827,913,103,602,229,525,569,187,544,163,370,793,450,925,245,510,68,738
|
||||
932,365,93,115,147,237,654,137,50,913,485,92,458,787,342,174,898,58,817,910
|
||||
315,488,205,645,638,699,235,364,663,74,687,597,771,749,896,631,139,532,897,550
|
||||
145,130,336,914,322,76,492,338,359,798,536,64,361,509,917,370,95,586,934,935
|
||||
525,544,796,226,96,572,367,916,652,71,634,745,161,998,591,942,547,344,227,626
|
||||
794,806,486,897,231,361,808,739,183,370,227,192,69,136,560,439,887,109,269,331
|
||||
496,928,270,550,800,179,788,646,197,789,906,511,640,550,904,227,592,81,895,92
|
||||
396,334,738,230,104,929,502,137,302,440,927,175,449,169,304,451,421,559,901,513
|
||||
899,187,303,161,608,545,638,160,496,537,338,426,516,374,66,303,650,430,453,758
|
||||
95,991,554,932,943,95,740,276,323,190,856,697,888,270,498,595,600,786,149,454
|
||||
384,155,54,630,181,230,645,58,540,745,548,520,430,935,155,755,171,571,592,892
|
||||
892,695,529,937,330,605,60,901,520,539,553,330,205,588,538,472,689,753,934,423
|
||||
53,195,67,817,21,625,543,912,368,945,509,183,425,486,367,922,156,829,755,793
|
||||
271,337,271,229,827,947,313,163,548,278,823,186,687,747,59,328,149,897,926,892
|
12
2020/day16/test1
Normal file
12
2020/day16/test1
Normal file
|
@ -0,0 +1,12 @@
|
|||
class: 1-3 or 5-7
|
||||
row: 6-11 or 33-44
|
||||
seat: 13-40 or 45-50
|
||||
|
||||
your ticket:
|
||||
7,1,14
|
||||
|
||||
nearby tickets:
|
||||
7,3,47
|
||||
40,4,50
|
||||
55,2,20
|
||||
38,6,12
|
11
2020/day16/test2
Normal file
11
2020/day16/test2
Normal file
|
@ -0,0 +1,11 @@
|
|||
class: 0-1 or 4-19
|
||||
row: 0-5 or 8-19
|
||||
seat: 0-13 or 16-19
|
||||
|
||||
your ticket:
|
||||
11,12,13
|
||||
|
||||
nearby tickets:
|
||||
3,9,18
|
||||
15,1,5
|
||||
5,14,9
|
144
2020/day17/day17.c
Normal file
144
2020/day17/day17.c
Normal file
|
@ -0,0 +1,144 @@
|
|||
#include <stdbool.h>
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
#include <string.h>
|
||||
|
||||
#define INPUT_SIZE 8
|
||||
#define SIZE 30 // = (size of the input + 6 for growth + 1 padding) * 2
|
||||
|
||||
bool alive3(bool state[SIZE][SIZE][SIZE], int x, int y, int z) {
|
||||
int neighbours_count = 0;
|
||||
for (int i = -1; i <= 1; ++i) {
|
||||
for (int j = -1; j <= 1; ++j) {
|
||||
for (int k = -1; k <= 1; ++k) {
|
||||
neighbours_count += state[x + i][y + j][z + k];
|
||||
}
|
||||
}
|
||||
}
|
||||
neighbours_count -= state[x][y][z];
|
||||
|
||||
if (state[x][y][z]) {
|
||||
return (2 <= neighbours_count) && (neighbours_count <= 3);
|
||||
}
|
||||
return 3 == neighbours_count;
|
||||
}
|
||||
|
||||
bool alive4(bool state[SIZE][SIZE][SIZE][SIZE], int x, int y, int z, int w) {
|
||||
int neighbours_count = 0;
|
||||
for (int i = -1; i <= 1; ++i) {
|
||||
for (int j = -1; j <= 1; ++j) {
|
||||
for (int k = -1; k <= 1; ++k) {
|
||||
for (int l = -1; l <= 1; ++l) {
|
||||
neighbours_count += state[x + i][y + j][z + k][w + l];
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
neighbours_count -= state[x][y][z][w];
|
||||
|
||||
if (state[x][y][z][w]) {
|
||||
return (2 <= neighbours_count) && (neighbours_count <= 3);
|
||||
}
|
||||
return 3 == neighbours_count;
|
||||
}
|
||||
|
||||
int part1(bool input[INPUT_SIZE][INPUT_SIZE]) {
|
||||
bool state[SIZE][SIZE][SIZE] = {false};
|
||||
bool new_state[SIZE][SIZE][SIZE] = {false};
|
||||
|
||||
for (int i = 0; i < INPUT_SIZE; ++i) {
|
||||
for (int j = 0; j < INPUT_SIZE; ++j) {
|
||||
state[SIZE / 2 + i][SIZE / 2 + j][SIZE / 2] = input[i][j];
|
||||
}
|
||||
}
|
||||
|
||||
for (int step = 0; step < 6; ++step) {
|
||||
for (int x = 1; x < SIZE - 1; ++x) {
|
||||
for (int y = 1; y < SIZE - 1; ++y) {
|
||||
for (int z = 1; z < SIZE - 1; ++z) {
|
||||
new_state[x][y][z] = alive3(state, x, y, z);
|
||||
}
|
||||
}
|
||||
}
|
||||
memcpy(state, new_state, sizeof(state));
|
||||
}
|
||||
|
||||
int active_count = 0;
|
||||
for (int x = 1; x < SIZE - 1; ++x) {
|
||||
for (int y = 1; y < SIZE - 1; ++y) {
|
||||
for (int z = 1; z < SIZE - 1; ++z) {
|
||||
active_count += state[x][y][z];
|
||||
}
|
||||
}
|
||||
}
|
||||
return active_count;
|
||||
}
|
||||
|
||||
int part2(bool input[INPUT_SIZE][INPUT_SIZE]) {
|
||||
bool state[SIZE][SIZE][SIZE][SIZE] = {false};
|
||||
bool new_state[SIZE][SIZE][SIZE][SIZE] = {false};
|
||||
|
||||
for (int i = 0; i < INPUT_SIZE; ++i) {
|
||||
for (int j = 0; j < INPUT_SIZE; ++j) {
|
||||
state[SIZE / 2 + i][SIZE / 2 + j][SIZE / 2][SIZE / 2] = input[i][j];
|
||||
}
|
||||
}
|
||||
|
||||
for (int step = 0; step < 6; ++step) {
|
||||
for (int x = 1; x < SIZE - 1; ++x) {
|
||||
for (int y = 1; y < SIZE - 1; ++y) {
|
||||
for (int z = 1; z < SIZE - 1; ++z) {
|
||||
for (int w = 1; w < SIZE - 1; ++w) {
|
||||
new_state[x][y][z][w] = alive4(state, x, y, z, w);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
memcpy(state, new_state, sizeof(state));
|
||||
}
|
||||
|
||||
int active_count = 0;
|
||||
for (int x = 1; x < SIZE - 1; ++x) {
|
||||
for (int y = 1; y < SIZE - 1; ++y) {
|
||||
for (int z = 1; z < SIZE - 1; ++z) {
|
||||
for (int w = 1; w < SIZE - 1; ++w) {
|
||||
active_count += state[x][y][z][w];
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
return active_count;
|
||||
}
|
||||
|
||||
int main(int argc, char *argv[]) {
|
||||
if (argc < 2) {
|
||||
printf("Usage: %s <input file>\n", argv[0]);
|
||||
return 0;
|
||||
}
|
||||
|
||||
FILE *fp = fopen(argv[1], "r");
|
||||
if (fp == NULL) {
|
||||
printf("Could not open file %s\n", argv[1]);
|
||||
return 1;
|
||||
}
|
||||
|
||||
bool input[INPUT_SIZE][INPUT_SIZE] = {false};
|
||||
int i = 0;
|
||||
int j = 0;
|
||||
char c;
|
||||
while ((c = fgetc(fp)) != EOF) {
|
||||
if (c == '\n') {
|
||||
i++;
|
||||
j = 0;
|
||||
} else {
|
||||
input[i][j] = (c == '#');
|
||||
j++;
|
||||
}
|
||||
}
|
||||
fclose(fp);
|
||||
|
||||
printf("%d\n", part1(input));
|
||||
printf("%d\n", part2(input));
|
||||
|
||||
return 0;
|
||||
}
|
58
2020/day17/day17.rkt
Normal file
58
2020/day17/day17.rkt
Normal file
|
@ -0,0 +1,58 @@
|
|||
#lang racket/base
|
||||
|
||||
(require racket/list
|
||||
racket/set)
|
||||
|
||||
(module+ test
|
||||
(require rackunit))
|
||||
|
||||
(define (read-input filename dimension)
|
||||
(with-input-from-file filename
|
||||
(lambda ()
|
||||
(for/set ([line (in-lines)]
|
||||
[i (in-naturals)]
|
||||
#:when #t
|
||||
[c (in-list (string->list line))]
|
||||
[j (in-naturals)]
|
||||
#:when (eq? c #\#))
|
||||
(append (list i j) (make-list (- dimension 2) 0))))))
|
||||
|
||||
(define (neighbours pos)
|
||||
(define dim (length pos))
|
||||
(define relative (remove (make-list dim 0) (apply cartesian-product (make-list dim '(-1 0 1)))))
|
||||
(map (λ (rel) (map + pos rel)) relative))
|
||||
|
||||
(define (lives? state pos)
|
||||
(define neighbours-count (length (filter (λ (n) (set-member? state n))
|
||||
(neighbours pos))))
|
||||
(define current (set-member? state pos))
|
||||
(or (and current (<= 2 neighbours-count 3))
|
||||
(and (not current) (= 3 neighbours-count))))
|
||||
|
||||
(define (step state)
|
||||
(define dim (length (set-first state)))
|
||||
(define indexes (flatten (set->list state)))
|
||||
(define min-index (sub1 (apply min indexes)))
|
||||
(define max-index (+ 2 (apply max indexes)))
|
||||
(for/set ([pos (apply cartesian-product (make-list dim (range min-index max-index)))]
|
||||
#:when (lives? state pos))
|
||||
pos))
|
||||
|
||||
(define (power n f)
|
||||
(apply compose (make-list n f)))
|
||||
|
||||
(define (part1 filename)
|
||||
(define input (read-input filename 3))
|
||||
(set-count ((power 6 step) input)))
|
||||
|
||||
(define (part2 filename)
|
||||
(define input (read-input filename 4))
|
||||
(set-count ((power 6 step) input)))
|
||||
|
||||
(module+ test
|
||||
(check-equal? (part1 "test") 112)
|
||||
(check-equal? (part2 "test") 848))
|
||||
|
||||
(module+ main
|
||||
(displayln (part1 "input"))
|
||||
(displayln (part2 "input")))
|
8
2020/day17/input
Normal file
8
2020/day17/input
Normal file
|
@ -0,0 +1,8 @@
|
|||
..##.#.#
|
||||
.#####..
|
||||
#.....##
|
||||
##.##.#.
|
||||
..#...#.
|
||||
.#..##..
|
||||
.#...#.#
|
||||
#..##.##
|
3
2020/day17/test
Normal file
3
2020/day17/test
Normal file
|
@ -0,0 +1,3 @@
|
|||
.#.
|
||||
..#
|
||||
###
|
4
2020/day18/day18.dyalog
Normal file
4
2020/day18/day18.dyalog
Normal file
|
@ -0,0 +1,4 @@
|
|||
⎕io←0 ⋄ ⎕pp←34
|
||||
p←⊃⎕NGET'input'1
|
||||
+/⍎¨⌽¨('\(' '\)' '\*'⎕R{')(×'[⍵.PatternNum]})¨p ⍝ part 1
|
||||
+/⍎¨⌽¨('()*'{⍺⍺(⍵⍵⌷⍨∘⊂⍳)@(∊∘⍺⍺)⍵}')(×')¨p ⍝ part 1 (without regex)
|
63
2020/day18/day18.rkt
Normal file
63
2020/day18/day18.rkt
Normal file
|
@ -0,0 +1,63 @@
|
|||
#lang racket
|
||||
|
||||
(module+ test
|
||||
(require rackunit))
|
||||
|
||||
(define (read-input filename)
|
||||
(with-input-from-file filename
|
||||
(lambda ()
|
||||
(for/list ([line (in-lines)])
|
||||
(parse-expression line)))))
|
||||
|
||||
(define (parse-expression str)
|
||||
(read (open-input-string (string-append "(" str ")"))))
|
||||
|
||||
(define (eval-left lst)
|
||||
(match lst
|
||||
[(? number? x) x]
|
||||
[(list x) x]
|
||||
[(list-rest a '+ b r)
|
||||
(eval-left (cons (+ (eval-left a) (eval-left b)) r))]
|
||||
[(list-rest a '* b r)
|
||||
(eval-left (cons (* (eval-left a) (eval-left b)) r))]))
|
||||
|
||||
(define (part1 filename)
|
||||
(define input (read-input filename))
|
||||
(apply + (map eval-left input)))
|
||||
|
||||
(module+ test
|
||||
(check-equal? (eval-left (parse-expression "1 + 2 * 3 + 4 * 5 + 6")) 71)
|
||||
(check-equal? (eval-left (parse-expression "1 + (2 * 3) + (4 * (5 + 6))")) 51)
|
||||
(check-equal? (eval-left (parse-expression "2 * 3 + (4 * 5)")) 26)
|
||||
(check-equal? (eval-left (parse-expression "5 + (8 * 3 + 9 + 3 * 4 * 3)")) 437)
|
||||
(check-equal? (eval-left (parse-expression "5 * 9 * (7 * 3 * 3 + 9 * 3 + (8 + 6 * 4))")) 12240)
|
||||
(check-equal? (eval-left (parse-expression "((2 + 4 * 9) * (6 + 9 * 8 + 6) + 6) + 2 + 4 * 2")) 13632))
|
||||
|
||||
(module+ main
|
||||
(displayln (part1 "input")))
|
||||
|
||||
(define (eval-left-priority lst)
|
||||
(match lst
|
||||
[(? number? x) x]
|
||||
[(list x) x]
|
||||
[(list-rest a '* b '+ c r)
|
||||
(eval-left-priority (list* a '* (+ (eval-left-priority b) (eval-left-priority c)) r))]
|
||||
[(list-rest a '+ b r)
|
||||
(eval-left-priority (cons (+ (eval-left-priority a) (eval-left-priority b)) r))]
|
||||
[(list-rest a '* b r)
|
||||
(eval-left-priority (cons (* (eval-left-priority a) (eval-left-priority b)) r))]))
|
||||
|
||||
(module+ test
|
||||
(check-equal? (eval-left-priority (parse-expression "1 + 2 * 3 + 4 * 5 + 6")) 231)
|
||||
(check-equal? (eval-left-priority (parse-expression "1 + (2 * 3) + (4 * (5 + 6))")) 51)
|
||||
(check-equal? (eval-left-priority (parse-expression "2 * 3 + (4 * 5)")) 46)
|
||||
(check-equal? (eval-left-priority (parse-expression "5 + (8 * 3 + 9 + 3 * 4 * 3)")) 1445)
|
||||
(check-equal? (eval-left-priority (parse-expression "5 * 9 * (7 * 3 * 3 + 9 * 3 + (8 + 6 * 4))")) 669060)
|
||||
(check-equal? (eval-left-priority (parse-expression "((2 + 4 * 9) * (6 + 9 * 8 + 6) + 6) + 2 + 4 * 2")) 23340))
|
||||
|
||||
(define (part2 filename)
|
||||
(define input (read-input filename))
|
||||
(apply + (map eval-left-priority input)))
|
||||
|
||||
(module+ main
|
||||
(displayln (part2 "input")))
|
380
2020/day18/input
Normal file
380
2020/day18/input
Normal file
|
@ -0,0 +1,380 @@
|
|||
7 + (9 * 8 + 5 + 5 * (3 * 4 * 7 + 6 * 4)) * ((3 * 6 + 3 * 4 * 7 * 4) + 4 * 3 * 5 + 5 * (5 * 6 + 7)) * 2 + 6 * 4
|
||||
9 * 4 * ((9 * 8 + 9 + 2 + 9) + 2 * 9 + 2 + 2) * 5 * 6
|
||||
3 * ((9 * 3 * 8 * 6 * 6 * 7) + 8) * 2 * 9 + 4 * 8
|
||||
(3 + 4 + 4 * 4 + 9) + (7 + 6 + 2 * 8) * 9 + 7 * 8
|
||||
9 + 6 + 6 + 9 * 9 * 5
|
||||
(3 * 5 + (4 + 3 * 7 * 8) + 7 + 8 + 2) * 8 * (3 * 4 * 8) * ((4 + 5 * 2) * 7)
|
||||
6 + (5 + 8 * (6 * 8 * 9 + 9 + 8 * 9) * 4 + (5 * 9)) * 2 + 2
|
||||
(6 + 8 + (6 * 6 + 2) * 6 * (7 + 7 + 8 + 9)) * 3 + 8 + (6 * (8 + 8 + 9)) + 2
|
||||
9 + (4 + 6 + 5 * 9 * 4)
|
||||
(5 * 3 * 4 * 4 + (6 * 4 * 5)) * 2 * 9
|
||||
(2 * 3 * 9) * 2
|
||||
6 + (4 + 8 + 2)
|
||||
(9 * 7 + (2 + 9 * 9 * 9 + 3) + (7 * 3 * 4 * 2 + 3 * 7) + (5 + 9 + 4 + 3) + 4) * 9
|
||||
(2 + 2 * 5 + 9) * ((5 + 9 * 4 + 7) * 2) * 7 + 4
|
||||
4 + 2 + ((4 + 3 * 2 * 4 + 5) * 6 + 7 * (4 * 2) * 9 * (6 + 3 + 8 + 2 * 5))
|
||||
(5 + 9) + 6 + 9 + 8 * 5 + 4
|
||||
5 * 5 + ((3 + 5 * 4 + 7 * 9 * 7) + (7 + 2 * 3 * 4 + 8) * 6) + (5 * 9 + 9 + (3 + 5) * (8 + 2) + 5) + (3 * 3 * (6 + 3 + 7 * 8) + 3 + 2)
|
||||
2 + 4 + 8 + 4 + 7 + (2 + (4 + 8 * 4 + 4 + 6) * 8 * (6 * 6 + 7 * 2) * 6 * (8 + 5 + 9 * 4 + 5 + 6))
|
||||
7 * 4 + 8 + (8 + (7 * 3 + 4)) * 3
|
||||
(6 + 7 + 8 * 4) + ((8 + 7 + 8 * 5) + 8 * 8)
|
||||
9 * 5 * 8 + 2
|
||||
6 * (9 * 5 * 9 + 9 + (3 + 7) * (8 + 9 + 3 + 5 + 2 + 7)) * (6 + 7 + 4) + (2 + (2 + 7 * 2 + 4 + 2) + 4 * (9 + 6 * 5 + 2 * 9)) + (8 + (8 + 6 * 5 + 6 + 9) + (2 * 7 + 2 * 9 * 9) + 7)
|
||||
4 + 2 + 9 + ((3 * 6 + 8 + 4 + 5 + 4) + 4 + (5 + 4 * 8 + 8) * (3 * 4 * 8) * 7 + (8 * 3 + 8)) + 5
|
||||
6 + 9 + 4
|
||||
9 * 3 * 4 * 3 * 9
|
||||
2 * 7 * (9 * (6 + 9 + 6 + 5 * 5 + 6) + (2 * 7 * 2 + 3) + 6 * 2)
|
||||
(6 + 3 + 6) * 9 + 5 * ((9 + 9 + 7 + 5) + 4)
|
||||
8 * 4 * (8 + (7 * 4) * 5 + 6 + 7 + (5 * 7 + 9)) + (5 + (8 + 7 * 2 + 2 + 3) + 8 + 6 + 2 + 2) * (5 + (7 + 4 * 2 + 6 + 6 + 3) + 3 * 8 + 7)
|
||||
9 + (5 * 6 + 5 * 2 + 8) * 3
|
||||
5 * ((9 * 5 + 9) * 9) + 4 * 8
|
||||
4 * 5 * (5 + 5 + (2 * 9 + 3) * 4) * 7
|
||||
9 * 8 * (8 * (9 * 4 + 7 * 2 + 3 * 8) + (2 * 7 * 2 * 3 + 7 * 2))
|
||||
9 * 4 + 2 * 7 * (5 * (4 * 5 * 6) * 3 * 4 + 4) * (4 + 4)
|
||||
2 * (5 + 6 + (2 * 3 * 3 * 2 * 5 * 5)) + 4
|
||||
(5 * 7 * 8 + 4 + 6) * 2 + 3
|
||||
8 * ((5 * 3) * (6 + 6 * 6 * 2) * 8 * 6 * 6) * 7 * (3 + 6 * 2 + (9 * 8 * 8 + 7) * (5 + 2 * 2 + 5) + 9)
|
||||
7 * (7 + 5 + 2 + (5 + 9 * 4 + 5 + 3) * 8) + 2 * 8 * 6
|
||||
2 * (6 + 7 * 7) + 3 * 7 * (4 * 7 * 6)
|
||||
7 + 7 + 8 * (7 + 2 * (3 + 9 + 8 + 7 + 4) * 9) + 5
|
||||
8 + 3 * 9 * (8 + 8 * 5) + 8 * 2
|
||||
6 * 6 * 5 * (8 * 9 * 2 + 6 * 2 * (9 + 3 + 4 * 3 + 6)) + 2 + 4
|
||||
3 + 8 + 7 + 3 * 5 + 9
|
||||
(4 * (9 * 2 + 3 * 4) * 5 * 2 + 5) + (7 * 7 * 4 + (4 + 3 + 5 + 6 + 3 + 7) + 6 + 3) * (3 + 9 * 2 + 2) + 3 + 8 * (7 * 8 * 5)
|
||||
8 * (6 + 6 * (4 * 3 * 6 + 9 + 9) + (2 * 3 * 2 * 4 * 2)) * (2 * (8 + 8) * 6 * 4 + 3) + 9 * 6
|
||||
3 * ((7 + 6 * 8 * 9) + 7 * 7 * 2 + 3 * 7) * 8 + 9 + (2 + 7 * 6) * 3
|
||||
4 * 8 + 6 + (3 * 3 + 8 * 7 * 9) + 4 * 6
|
||||
2 * 5 * (8 * 2) * 4
|
||||
((3 + 9) * 2 * 5 + 5 + 8 + 8) * 6 + 2
|
||||
9 + 2 + 3
|
||||
7 + 4 + 9 * 9 + (9 * 6 * 5 * (3 + 3 * 7 + 3 + 9 * 7) * 9 + 8) + 9
|
||||
(6 + 2 * 9) + (6 * 6 + 2 + (6 * 6 * 3 * 6)) * 4 + 2 + 2
|
||||
5 + 9 * ((3 + 8 + 7 + 3 + 9 + 3) + 8)
|
||||
(4 + 7 * 9 * (4 * 8 + 7 + 2 + 6) + 2) + 9 * 9 * 2 + 8 + 8
|
||||
(3 * 6 + 3 + 7 + 5) + ((2 * 3 + 2 * 3 * 7 * 5) + 6 + 6 * 9 * 7 * 8)
|
||||
5 * 7 + 7 * (6 * 5 + 8 * (7 + 5 * 9)) + 8
|
||||
(7 + 6 * (2 * 5) + 3 * 6) + 5 * 2 + ((8 + 9) * 6) * 2
|
||||
4 + 8 * 3 * (7 * (5 * 5) * 3) + 3
|
||||
9 + 7 + (3 + 7 * 5 + 3 + 2) + (8 + 7 * 5)
|
||||
2 * ((5 * 8 * 2 + 5 * 2 + 8) * 2 * 4 * 3) + 5 * 5 * 9 * 4
|
||||
3 * 6 + 6 + (8 + (3 * 8 * 4 * 7) * (6 + 5)) * 6
|
||||
6 + (5 * 3 * 7 * 2 + (2 * 6 * 6 + 4) + 9) * 2 * 6 + 6
|
||||
(4 + 9 + 9 * (3 + 6 + 3 * 7 + 8 + 5)) * 8 + 5 + 5 * (8 + 6 + 3) * 4
|
||||
7 * 8 + (2 + (5 + 6 * 5) * 6 * 6 + 5 + 3)
|
||||
7 + (3 + (8 + 7 * 5 + 5 + 5) * 5 + 4 + 8) + 9 + 3
|
||||
7 * ((7 * 5 * 9 + 7) * 6 * 4 * 6 * 6 + 6)
|
||||
7 + 5 + (3 * 3) * 6 + 5
|
||||
(4 * (3 * 3 * 5 + 8 + 9) * 4 * 8 + 7 * 3) + 5 * 5 + (8 + 2) * 9 * 3
|
||||
8 * (2 + 3 + 4) + 4 + 8 + (3 * 4 * (3 + 2) * 4)
|
||||
9 * 2 * (9 + (8 + 6) * (7 + 9 * 5 * 6) * 8 + 7 + 7) + 5 * 2 * 9
|
||||
7 * 7 + 7 + 2 + (5 + 2 + 6 + 7 * 6 + 8) + (9 * (6 + 2) * 3 + 9 + 4 + 7)
|
||||
(3 * 4) * 9 + ((2 + 5 * 2 + 9 + 6) + 5 + 9 * (4 * 9 * 7 + 2 + 3 + 6) + 4 + (4 + 7 * 8 + 5 * 9)) * 9 + ((8 * 9 + 2 + 7 + 8 + 5) * 7 + 5 * 2 * 9 + (7 * 8 * 6 + 8 + 2))
|
||||
((4 + 9 + 7 * 6 * 6) + 3 + 6 * 3 + 3 * 5) * 7 + 2 * 9 * 4
|
||||
3 * 7 * 3
|
||||
(6 * (9 + 8) + (3 * 4 * 8) + 9 * 4 * (8 + 6 * 8 + 8 + 3 * 5)) + 3 * 4 * 9 * 6 + 2
|
||||
((5 * 7) * (9 + 2)) + (2 * 9 * 7 + 3) * 8 + (7 * 5 * 5 * (9 * 9 * 2)) + ((7 + 7 + 8 + 4) * (5 * 3 * 7) * 6 * (7 * 7) * (2 + 2) + 7) * 6
|
||||
((9 * 9) * (8 + 3 * 5 + 9) + 5 * 7 + 3 + 8) + 2 + 7 + 3
|
||||
8 * 5 * (8 + 3 * 6) + 4 + 8 + 5
|
||||
(4 * 9 + (8 + 9 + 8 * 9 * 3) + (3 * 8 * 9 * 9 * 2) + 6 + 5) + 2 + (5 * (6 + 4 * 9 + 3)) + (4 * 9 * (9 * 8 * 7 * 6) * 5 * (2 * 7 * 9) + 5) * ((4 * 5 + 6 * 4) * 6 * 6 + 9 * 7)
|
||||
(8 * 8 * 7 * 5 * 2 + (9 * 9 + 4 + 8 + 3 + 5)) + 5 * 3 * 3
|
||||
5 + (8 * (3 * 3 * 2 + 7) + 9 + 2) * 8 * 4
|
||||
9 * (9 * 4 + 2 + 9 * 5 + 3) * 3 + 3 * (5 * (9 * 5 * 8 + 2) * (3 + 8 + 3 + 2) + (6 * 5 * 9 * 5) * (4 + 2 + 5 + 2 * 9) + 4) * 5
|
||||
8 + (7 * 7 * 9) * 7 * 8 * 9 * 3
|
||||
6 + 9
|
||||
(3 * 8 + (8 * 2 + 9 + 3 * 5 * 6) * 2) * 6 * 2 + 4 + 4 * (4 + 5 * 4)
|
||||
(6 + 8) * 3 + 4
|
||||
7 + 2 * 4 + 9 + 7
|
||||
8 * (7 + 2 * (2 + 4) + 3 + 6 + 9) * 2 * 9
|
||||
(6 * 9 * (2 * 6 + 2)) * 4 + 7 + 9
|
||||
((2 + 7 + 7 + 4 * 2) + 2 * 9) * 9
|
||||
3 + 8 + 9
|
||||
5 * 9 * (3 + 4 * 6 + (8 + 3 * 3 + 5))
|
||||
(4 * 4 + (8 * 6 * 7) + (7 * 5 + 9 + 6 * 7 + 8) + 8 * 7) * (6 + 2) * 5 * 3
|
||||
6 * 3 + 5 * (9 * 2 + 8 + 5 * 9) * 8
|
||||
(8 * 9 + 7 * 7 * 8 * 8) * 7 * 6
|
||||
6 + 7 * 6 + 2 * (6 + 7 * 5 * 9 + 6 * 4)
|
||||
4 + ((9 * 3 + 9 * 9 * 5) + 5) * 9
|
||||
2 * (2 * 7) * 6 + 9 + (8 * 7 + (2 * 5 + 8 + 5) + 4 * 5 * (4 * 3))
|
||||
(9 + 2 + (9 + 5 + 7) * 3 + 7 * 3) + 3 + 8 + (6 * 5 * 9)
|
||||
(9 * (7 + 6 * 9) * 5 + 5 + 6 + 6) * 5 + 9
|
||||
7 * 8 * 2 * 9
|
||||
5 * 2 + 7 + ((6 * 4) + 8 + 2 * 3 + 6) * 9 * 2
|
||||
((6 * 8 * 6 * 5 + 3 * 4) * (4 + 5) + 4) + 9 + 4
|
||||
4 + 7 + 7 + (4 * 7 * 3 + 9 + (6 + 5) * 9) + 5
|
||||
(2 + 4 * (8 + 6 * 5 + 4) * 2 + (9 + 6)) * 2 + 8
|
||||
(2 * (3 + 2 + 9 * 4)) * 8 * 9
|
||||
3 * 3 * (9 + 6 + 7)
|
||||
6 + 2 * 6 * 5 + (4 * 7) + 8
|
||||
((6 * 4 * 8 + 2 + 4) + 5 * 5) + 4 * 4 * 9 + 4
|
||||
(7 + 9 * 2 + 8 * (7 * 3)) * 6 * 9 + 4
|
||||
(5 * 8 + 6 + 2 + 3) + 6 + 8 * (4 + 4 * 7 + 8 + 7 * 4) + 3
|
||||
(8 * 5 + 4 + 3 * 2) + (8 + 5 + (9 + 7) * (5 * 9 * 2 * 5 + 9 + 9)) * (7 + 8) + 2
|
||||
9 + (2 + 7 * 2 * 7 * 8) + 9 * 5 + 4 + 9
|
||||
5 * 7 * ((5 + 9 * 5 * 5 + 9) + 2) + 4
|
||||
7 + 7 + (4 + (3 * 6 * 9 + 8) + 2 + (9 * 6 + 5) * 2)
|
||||
9 * 8 + ((7 * 5 * 2 * 3 * 3) * (4 * 8 * 2 * 9 * 8 + 5)) * 6 + 4 * 9
|
||||
(8 * 5 * 8 * (2 * 5)) * 6
|
||||
((9 + 7 * 5 * 6 + 3 + 8) + 8) * 6 + (5 + 2 * 2) + 4 + 9 * ((4 * 5 * 7 * 9 + 4) + 9 + 2)
|
||||
((3 + 3 + 2 * 4 * 4) * 7) * 3 * 8 + 4 + 8
|
||||
2 + (2 * 3 * 7 * 2 * (3 * 4 * 6 * 2 + 2 + 5) * 7) * 3 * ((8 + 5) * 4 * 4)
|
||||
(7 * 3 * 9 + 7) * 9 * 6 + 2 + 6 + (8 + (5 + 6 + 9 * 7) + 6 + 4)
|
||||
(8 * 4 * 6 * 7 * 2 * 4) * 5 + 2 * 3 + 9
|
||||
7 * (7 * 3 + 8 * (5 * 4 + 8 * 8) + 7) + ((3 * 6 * 3 * 2 + 6) * 5 * 9) + 4
|
||||
5 + 3 + ((4 + 9 + 8 * 4 * 3) * 4 + 3 * 6)
|
||||
5 + ((4 + 4) * 2) * (9 * 5 + 3 * 3 + 9) * 7
|
||||
9 * 2 * 4 * (4 + 3 * (4 + 3) * 3) * 4
|
||||
3 + 4 * ((5 * 8 * 2 * 3) + (9 + 8 * 2) * (5 * 3 + 3 + 7) * (2 + 8) * (6 * 4 * 9 * 4))
|
||||
9 + 3 + 5 + (4 + (3 * 2 * 6) * 9 * 9)
|
||||
9 * 2 + 3 + 5 * 2 + 3
|
||||
((9 + 3 + 3 * 6 * 4 + 5) + (9 * 3) * 4 + 2 + (2 * 5 + 5)) * (9 + 5 * 3 * 7) * 8 * 4 + 9 + (2 * 8 * 4)
|
||||
9 + ((4 * 8 + 2) * (8 + 4 * 4) + 4 + (7 + 9 + 6 * 3 * 4 * 8) * 8 * (5 + 8 + 9 * 8)) + 3 * (4 + 3 * 5 + (3 * 4 * 9))
|
||||
(9 * 3 + 9 * 8 + 6 + 2) + 6 * (4 + 4)
|
||||
(6 + 3 + 6 + 4) * 9 * 5
|
||||
6 + 8 * (6 + 3) * (7 + 6 + 7 * 9 * (2 + 5 * 2)) + 3
|
||||
3 + 5 + (4 * 5 * 2) + 2 + 7
|
||||
6 + 9 * 5 + (4 + 2 + 5) * (2 + 6 * 2 * 3)
|
||||
8 * ((9 * 5 + 9 * 2 * 9 * 9) * (2 + 5 * 3 + 9 + 6 + 2) + 6 * 8 + (8 * 8)) * 6 + 6 + (9 * 8 * 8 * 2 * 5) + 5
|
||||
3 + 5 + 2 + (2 * 4)
|
||||
2 * (2 + 6 + 8 * 2 + (2 * 5 + 6) * 5)
|
||||
(9 + (2 * 8 * 3 * 3) + 9 + 8 * 2) + 2 * 9 + 7
|
||||
2 * (9 + 6 + 7) + (2 * 2 * (7 + 8) * 4 * (4 * 4 + 3 * 5)) + 6 * 3
|
||||
(3 * 4 * (5 + 9) * (7 * 3 * 3 + 3 + 9 + 8)) * 2 * 8
|
||||
(7 * 2 + 7) * ((2 * 4 * 5) + 2 * 3 + (7 + 8)) + 3 + 9 + 3
|
||||
4 + 2 * (5 * 4 + 7 + 6) * 6
|
||||
2 * (7 * 3)
|
||||
((9 + 9 * 4 * 4 + 6) + 6 + (4 + 7 * 9 * 5 + 9)) + 8 + 7
|
||||
3 + (6 * 3 * (8 + 4 * 8 + 8 * 7 + 9)) * 3 + 5 + (5 + 4 * 7 + 4 + 3 * 4) * 2
|
||||
5 * 5 * 3 * 9 + ((5 + 2 + 8) * 2 * 2)
|
||||
(9 + 5 * 7 + 8 * 5 * (2 * 6 * 8 + 3)) * 5
|
||||
5 * 7 * 4 * ((6 + 5) * 3)
|
||||
5 * 8 * ((3 + 2 + 8) + 2 + (7 * 2) + 3 * 9 * 9) + 5 * 8 + (5 + 8 + 2 * 6)
|
||||
2 + 2 * ((4 + 6 * 9) + 3 + 5 + 8)
|
||||
(5 * 6 + 8 + 5) + 7 * 5 * 8 * 2
|
||||
2 + (7 * 2 * (2 * 9) * 3) * (5 + 7) * 8
|
||||
((8 * 3 + 2 * 8) + 4) + 2 + 8 + 3 * 7 + 9
|
||||
2 + 3 + 3 * 9 + (4 + 6 + (6 + 8) + 5 * 5 * 5)
|
||||
9 * 8 * (2 * 3 + (4 * 8 * 7 + 9) * 7 + (6 + 7 + 9)) * 7
|
||||
6 * (8 * (4 * 3 + 9 + 7 + 2) * 8 + (6 + 4 + 9 + 7) + 3)
|
||||
(5 * 8 * (2 * 8) + 7 * 4) + 3 + (7 + 6) * 3
|
||||
(5 + 4) * 3 + ((9 * 2) + 3 + 5) * 2
|
||||
(2 * 6 * (8 * 5) + 9 * 5) + (3 * 9 + (2 + 5 + 6))
|
||||
6 * (5 + 3 * 3 * (2 * 6 * 4 + 6 * 4 + 6) + 4) + 5 + 2 * 4
|
||||
(9 + 3 * 8 + 8) + 3 + 3 + 9
|
||||
3 * ((8 * 4 + 4 + 9) * 7) + 8 * 3 * 7
|
||||
5 * 2 + 9 * 7 + 4
|
||||
5 * 5 + 7 * 6
|
||||
2 * 7 + ((2 * 8 + 4 + 4 + 2 + 4) * 9 * 2 * (9 + 7 + 8 * 9)) * 5 + 8
|
||||
4 + 6 + ((2 * 3) + 2) * 4 + 9
|
||||
2 * ((6 * 6 * 5 * 6 * 3 * 9) * 6) * 4
|
||||
((4 * 8) * 3 * (9 * 2 * 5 * 3 * 3 * 2) + (6 * 7 + 3 + 9) + (3 + 5) * (6 * 4)) * 4 * 8
|
||||
5 * 3 + (9 + 4) + 3 + 9 * 6
|
||||
(5 * 8 + 5 * 2 + (7 * 5 + 4)) + 5 * 9 * 7
|
||||
(6 * 2 + 9 * 5 * 5) + 2 + 2 * 5
|
||||
3 * (4 + 7 + 2 * (7 * 9 + 5 * 6 * 6)) * 6 + 8
|
||||
6 + 9 + (4 * 4 + 6 * 7 + 6) * 5 + 8 + 6
|
||||
8 + ((2 + 5 + 4) * 9 * 5)
|
||||
4 * (9 + 5 + 7 * (6 + 8 * 7 * 2) * 4 + (9 * 8 * 7))
|
||||
5 * 5 + (9 * 4 * 5) + 2
|
||||
(4 + 3 * (5 + 9 + 8 + 4) + 4 * 4) + 2 * 2 * (5 * (3 + 9) * (4 * 9 * 8) * (2 + 8 + 3 + 5 * 4 + 4) * 6)
|
||||
7 * 2 * 3 + 2 + 9
|
||||
(9 + 5 * (8 * 2 * 5) * 9) + 7
|
||||
8 + 3 + (8 * 2 * 6 * (8 * 2) * 4 + 3) * 2
|
||||
(3 + 6 * 3) + 9 * (7 * 6)
|
||||
5 + (6 * 3 + 6 * 3 * 7) + 4 + 9
|
||||
9 + (7 * 5 * 8 * (8 * 2 * 5 + 5 * 3) * 3 * 5) * 2 * 4
|
||||
4 * ((6 + 7 * 9) * (9 * 2 + 2)) + ((2 + 3 + 5 + 6 + 9) * 9) + 6
|
||||
9 * 3 + (4 * 7 + (9 + 8 + 5)) + 4 + 4
|
||||
((3 * 4 + 6) * 9 + 8) * 4 * 3 * 2 + 7
|
||||
(6 * 9 + 3 * 5 + 2) + 2 * 5 + (8 * 8 * 7 + 6) + ((6 * 5 + 4 + 3 * 9 + 7) + 3 + 4 * 3 * 9) + 5
|
||||
7 * (8 + (7 * 2 * 7 + 5 * 4) + 7 + 4 + 7 + 2) * 2 * 4
|
||||
3 + (7 * 8 + (3 * 9 * 9 * 6 * 6)) + ((7 * 8 + 8 * 9) + 5 + 2 * 9 * 6 + 8) + 3 * 6 + (8 * 8 + 2 * 8)
|
||||
4 * 4 * 5
|
||||
(3 + 8) + 4 + 6 * 8 * 5
|
||||
4 * (8 + 9 * 2 * (5 * 9) + (2 + 8)) * 5 + 8
|
||||
(3 * (6 * 4 + 9 + 8 * 5 * 3) * (7 + 4) + (7 * 2 + 4 * 7 + 5) + 7 * 4) + 9 + 2 * 5 * 8
|
||||
3 * 8 + 6 + 6 * 4 * 9
|
||||
4 * 5 * 2 * (2 * 5 * 4 + 5 * 4 * 2)
|
||||
((3 * 9 * 9) + 4 + 7 * 4 * (8 + 2 * 4 + 3 + 3) + 8) * 8 * (6 * (5 * 8 + 9 + 9 + 3 * 8) * 7 * 5 * 2)
|
||||
(5 * 3 + (6 * 6 + 3 + 7 * 6 * 9)) * 9 * 2 * 5 + 3
|
||||
9 + (7 * (7 + 9) + 3 * 2)
|
||||
2 + 5 * ((3 + 4 + 5) * 6) * 9 + ((6 * 6) + 5)
|
||||
5 + (5 + 2) + (3 + 8 + 4) + 6 * 4 + 8
|
||||
(6 + 5 + 7 + 3) * 5 + ((6 + 7 + 5 + 3) + (2 * 6 + 9 + 2 * 8) + 4) * ((7 * 7 + 8 + 8) + 4 * 7 * 8 * 2 + (4 + 5)) + (7 + (5 * 9 * 6 * 5) * 9 * (7 + 2) + 7 * (8 * 6 + 9))
|
||||
(9 * 8 * 5 + 8 + 9 + (6 * 9 + 4)) + (6 * 4 * 8 + 3 + 4 * 5) + 8 + 5
|
||||
5 * 2 * (4 + 5 * 6) + 5 + 9 + (9 * 9 + 2 + 3 + (3 + 2 * 4 * 6 * 3))
|
||||
3 + 2 + (7 * 9 + (4 + 8 * 2)) + 3 * ((7 + 9) * 9 + 8 * 8)
|
||||
(5 * 7 * 4 + 3 * 2) + 9
|
||||
7 * (5 + (7 * 4 + 6 + 7)) + 2 + 3
|
||||
(4 + 4 * 7) * 2 * (7 + (8 + 8 * 8 + 2 + 7) * 2)
|
||||
(6 + (4 * 2)) + 5 * 8
|
||||
6 + (5 + 2 * 7 + 4 * (8 * 7 + 3 + 3 + 9 * 9)) * 6
|
||||
4 * 9 * (9 * 8 * 4 + 2 + (5 * 6 + 7) * (7 + 5 * 7 * 4 + 8)) + 9 + 2 + (4 * 8)
|
||||
((9 + 7 * 7 * 3 * 6) * (9 + 6 * 2 * 7 * 6 + 6) + 2 + 3 * (8 * 8 * 5) + 8) + 6 + 5 * 4
|
||||
(6 + (5 * 2) + 9 + 6) + 2 * 8 * 8
|
||||
8 * 2 * 5 * 8 * 4 + ((2 + 6 * 6 + 4 + 4) + 7 + 6 * 5 + 6 * 5)
|
||||
4 * 5 * ((8 * 5 * 6) + 2 + (5 + 8 + 3 * 9 * 9) + 8 * 2)
|
||||
2 * ((2 * 9 * 8 * 7) + (2 + 2 * 6 + 6) * 2)
|
||||
9 + 3
|
||||
3 * (5 + 2 + 6 + 5 * 6 + (3 + 7 + 4 + 7 * 8 * 5)) * 9 + 7 + 7
|
||||
2 + (7 * 5 * (4 * 5 * 5)) + (7 * 7 * 3 * 3 * 7)
|
||||
8 + (4 + (6 + 3 * 9 + 2 + 8) * 6 * 5) + 3 + (3 + 8 * 3 * 3 + (7 + 9 * 3) + 4)
|
||||
((9 * 4 + 5 * 2 * 4) * 4 + 8 * (9 * 8 + 7 * 7) * 9) * 8 + 4 * 2 * 2 + 4
|
||||
3 * 6 + (4 * 7 + (4 + 8 + 7 + 7) * (9 * 4) + 4) + 3 * 7 + 7
|
||||
7 * (8 + 8 + 2 + 4 + 6) + 7 + (8 + 3) + 3
|
||||
(3 + (9 + 3 + 8 * 8 + 2 + 2)) + 2 + 9 * 2 + 5 + 4
|
||||
5 * 3 * 8 + 7 + (3 + 4 * 9 + 7 * 7)
|
||||
3 * 2 * (2 + (3 * 5 + 3 * 3) * (9 + 6) + (5 + 5 + 5 * 4)) * 4
|
||||
(3 * 5 * 9 + 4) + 8 * (5 + 7 + 6 + 4)
|
||||
2 * 9
|
||||
8 + 2 + 5 + ((8 + 3) * 4 + 6) * 4 * 6
|
||||
8 + (5 * 7 * 2 + (6 * 6 * 2 * 5) * 5 * 5) + (5 + 3 + (7 * 5) * 5) * (5 * 7 * 6 + 3 * 2 + 3) + 7 + 5
|
||||
2 + (5 * 8 + 9) * 7 * 7 + 8
|
||||
(6 + 6 + (6 * 7 * 6 + 4 + 2)) + 8 * 5 + 9 + 7 * 5
|
||||
6 + (3 * 9) + 9
|
||||
6 * (5 + 6 * 9 * 8 * 5 * 6)
|
||||
6 * 4 * (4 * (7 + 4 * 9 + 4 * 3) * 4 + 5) + (4 + 6 * (5 + 4 * 9) * (8 + 7 * 8 + 9 * 2))
|
||||
4 + 7
|
||||
((5 + 4 * 3 * 7 + 2 * 3) * (8 + 5 * 4 + 3 + 6) + 7 + 9 * 2 * 9) * 7 + 6 + 7 + 7
|
||||
(5 * 9 + 2 * 6 * 4) + 8 + 7 * 3 * 2
|
||||
2 * (8 * (2 * 2 + 6)) * 3
|
||||
9 + (9 * 7 + 3 + 5 + 2 + 3) * 2 * 2
|
||||
(8 + 4 * (2 * 5 * 6) + 9) * 8 * 6
|
||||
7 * 2 * (6 + 4 + 3 + 9) * 7 + 4
|
||||
2 * 3 + 8 * ((5 + 9 + 6) * 5 * (7 * 4 * 5)) * 8
|
||||
3 + ((2 + 3 * 2 * 9 * 3 * 4) + 6 * 5 * 2 * 2)
|
||||
7 * ((5 + 7 * 9 + 9 + 3 + 2) * 5 * 6 * 8 + 6 + (9 + 9 + 7 * 8 * 2 + 3)) * 3 * 4 * 6
|
||||
3 + 3 + (6 + 6 * 6 + 7 * 9 * 4) * 8
|
||||
3 + 4 * (4 + 5 + 8 * 4) * (3 + 7 * 6 * 7 + (9 + 4)) * (2 + 8 + 5) + 6
|
||||
5 * 9 + (4 * 6 + 7 * 5 + 8) + (2 + 4) * 4
|
||||
(6 * 2 * 7 * 8 * 9 + 7) * 9
|
||||
9 + (5 + 2 + 8 + (6 * 9 * 7 + 2)) + 9
|
||||
7 + (7 * 9 + 8 * 5 + 2 * 2) + 8 + 6 * 5
|
||||
(6 + 6 * 8) + (5 * 5 + 6 + (9 * 2 * 6 * 3) + 2 * 7) + 8
|
||||
(2 * (5 * 8 + 5 + 5) + 7) + 5 * 8 * 6 * 8 + 2
|
||||
(8 * (7 * 7 * 3 * 4 + 9 * 4) * (9 * 3 + 8) + 6) * 7 * 6 * 2 * 8
|
||||
9 * ((9 + 7 + 3 * 5 * 3 * 5) + 6 * 7 * 3) * (6 + 6 + 6 * 2 + 9 + 5) + 4 * 9
|
||||
4 * 3 * 8 + ((9 + 3 * 2) * 9 + 2 + 2)
|
||||
3 + 6 * ((6 * 2) + 2 * 3 + 6 * 5)
|
||||
7 * (2 * 5 * 2) * 5
|
||||
(8 + 2) + (6 + 9) * 6
|
||||
((2 * 3) * (8 * 7 * 4) * 4 + 8) * 9 * 9 + (7 * (4 * 2 + 2 * 7) + 4) * (9 + 3 * 6 + 6 + 8 + 7)
|
||||
5 * 5 + (8 + 7 + 4 * 2) * 7 + 9 * 2
|
||||
5 + (2 * 7 * 3) * 9 * 9
|
||||
3 + (3 * (6 * 2)) + 6 + (3 + (7 * 7 * 6 * 3 + 4) * 9 + (9 + 9 * 5 * 2 + 9 * 4) * 6 * 6) + 9 * 6
|
||||
2 + 9 * (6 * 6 * 3 * 4)
|
||||
8 * 6 + (3 * 9 * 9 * 4 * (8 * 2 * 2)) + 8 + 5
|
||||
(2 + (7 + 3 + 2 * 6 * 8)) + 4 * ((5 + 4 * 7 * 2) * 8 * 5 + (5 + 8 + 9 * 9)) + 8 + 6 * (8 + 7 * (7 + 3 * 4 * 7) * 4 + (9 * 8 + 3) + 3)
|
||||
(4 * (8 * 8 * 6 * 2) * 7 + (8 + 3) + 7 + (6 * 4)) * 3 * 8 * 2 * 9
|
||||
3 + (4 * 3 + 3 * 2) * 7 * 3
|
||||
(4 + 2 + 8) * 2 * 6 + 8 + 9
|
||||
7 * (8 * (8 * 7 * 6 * 5) + 8 * 6 + 6)
|
||||
(7 + (6 + 3 * 5) + 2 + 4 * (5 + 9 * 7 * 5 + 7) * (2 * 4 + 6 * 5 + 2 * 3)) + 9 * 7
|
||||
5 * (5 * 5 * 4 * 2) + 3
|
||||
(5 + 8 * 8) * (5 + 5 * 7) * 3 * 5
|
||||
8 + (7 + 6 * 3 * 4) + 5 * 4 * 3 + 8
|
||||
3 * 5 * ((4 + 2 + 5) * 8 * 3 * 4 + 5) + 4 + 9 + 4
|
||||
(9 * (7 + 2 + 6 + 4 + 4 * 2) * 8 + 6 * 8) + 3 + 9 * 3
|
||||
9 + 8
|
||||
6 + 6 * (7 + 9 + 7 + 3 + 4) + 6 + 7
|
||||
7 + (6 + 2 + 6 + 7)
|
||||
6 + (9 * (6 + 2 + 6 * 9 * 2) * 7 * (9 + 6 * 7 * 3 + 5 + 2))
|
||||
3 * 7 + 2 * 9
|
||||
9 * 7 + 9 * (2 * (2 * 6 + 6 * 6) + 8 * 9 * 2)
|
||||
((7 * 9 + 7 + 7) * 6 * 5) + 4
|
||||
2 * (7 + 4 + 3 * 5 * 6 + 3) * 5 * ((6 * 6 * 9 + 3 + 2 + 9) + 5 * 3 + 3 + 5 * 3) * 7 + (8 + 4)
|
||||
(7 * 6 * 9 * 3 + 8 + 4) + 6 * 7 * 6 + 3 + 4
|
||||
2 + 6 * 7 * 5 + (7 * (2 * 3 + 4 + 6) + (3 * 3 + 7 * 4) * (3 + 8 + 7 + 6 + 4 + 4))
|
||||
(8 * 3 + (7 + 4 + 5 + 5)) + (3 + 3 + 7 * (9 + 2 * 9))
|
||||
8 * 4 + (9 + (7 * 3 * 9 + 4 * 7) + 6 + 9 + 5 + 6)
|
||||
2 + 4 + 2 + 4 * 7
|
||||
((7 + 5 + 5 + 3) * 3) + (5 + 6 + (3 + 8) * 2 + 4) + (6 + 2 * (5 + 6 + 9 + 8 + 5) + (9 * 9) + 3 * 6) * 3
|
||||
(5 * 7) * 6 + (8 + 4) * 6
|
||||
(2 * 4 * (8 * 6) * 2) + 5 + 8 * 9 * 7
|
||||
((5 + 5) * 5) * 9 + (5 + 4) + 4 * 6
|
||||
5 * (8 + (4 * 5 + 7 + 5) + (8 + 4 + 6)) + 9 + 7
|
||||
2 * 8 + 7 + (3 + (8 + 8 * 5 * 5 * 8 * 5) + 9 + 9) + 7 + (7 * 8 + (3 + 5 + 8 * 7 * 8 * 8))
|
||||
(9 + 7 * (7 + 6 + 8 + 2 * 5 * 2)) * 9
|
||||
4 + (2 * 5) * (4 * (8 + 5 * 4) * 9 * 4 + 9)
|
||||
4 + (8 + 8 + 8) + 3 * 2 + (2 + (5 * 6 * 7)) + 7
|
||||
((5 * 3 * 6 * 6 + 7) + 2 + 2 + 2 * 8 + (6 + 3 + 2 * 4 + 8)) + 4 + 3 * (4 + 6) * 9 * 3
|
||||
5 + 9 + 7 + 4 * ((2 + 5) * 4 + 9 * 9 + 4)
|
||||
6 * 7 + 4 * 5 + (4 * 7 * 8 * (2 * 4 * 9 + 9 + 5) * 6)
|
||||
6 * 9 + (3 * 9) * 8 + (4 * (8 * 3 * 2 * 2 + 3) * 4 * 8 * 7 * (4 + 5 + 7 * 3 + 4 * 3))
|
||||
8 + (4 + 2) * (8 * 8 + 9 + 5)
|
||||
((6 * 8 + 3 * 2 * 6 * 9) + 7 + 8 + 4) * 4
|
||||
4 + (2 * 3 + 3 * 7) + 2 * (2 * 5 + 7 * 6) + 8 + 6
|
||||
8 + 7 + ((3 + 2 + 4 * 5 * 3 * 2) + (2 + 4) * 8 + 5 * (7 * 2 * 9) + 3) * 2
|
||||
8 + 6 + (7 + 6 * 7 * 8 + 4)
|
||||
(7 * 9 + (2 + 6)) + 5 + 3 * 8 + 7 * 3
|
||||
(6 * 9 + 6 + 3 + 5 + 4) * 8 * 4 * ((8 * 4 + 7) + 2 + 9 + (3 + 4 + 8 + 6 * 2 + 7) + (3 + 2 + 7 + 5 * 7) + 2)
|
||||
8 * 8 + 2 * (8 * (8 + 6 + 6 + 5 * 6)) + (2 + 6 * 3 * 5)
|
||||
8 * 3 * 3 + (3 * (4 + 6 + 6 * 4 * 2) + 4 + (7 + 3 * 3 * 9) + 6)
|
||||
5 + 7 + (3 * 8 + 8 + 2 + 4 + 9)
|
||||
(3 * (5 * 3 + 2 * 8) + 8) * 7 + 5 + (8 * 5 + 3 * (6 * 9 * 5 + 9 * 6)) + 4
|
||||
6 + (6 * (3 * 2 * 4 * 7 + 4 + 5) * 4) * 5 + 8 + 3 + 5
|
||||
(8 * (2 + 8) + 9 + 7 + 8 * (3 * 6 + 7 * 6 + 5 + 7)) * (2 + 9 * (4 * 7 + 3 + 4 + 6 * 5)) * ((2 + 9 + 6 * 3 * 8) * 5 * 4) * 7
|
||||
5 * 7 + 2 + 7 * (5 * 8 * 5 * 4 * 2 + 3) + 8
|
||||
2 * 6 + 2 + 8 * 6 * 6
|
||||
4 * 4 * (9 * 8)
|
||||
8 * (2 * 8) + 5 * 5
|
||||
2 + 4 * 3 * 8
|
||||
8 * (5 + (8 + 9 + 8) * 8) * ((3 + 9 + 8 + 2 + 7 * 2) * 8 * 5 + 8) * 7 + 2
|
||||
(2 * 3) + 3
|
||||
4 + 4 + 2 + 5 + ((9 + 2 * 2 + 6 + 6) * 4)
|
||||
7 * 9 + (9 + 4 * (4 * 2 * 7 * 6 * 2 + 4))
|
||||
8 + (6 + 8) + 3 + 2 + 3
|
||||
(3 * 4) + 8 + 3 + (3 + 5 * 3 * (4 + 8 * 7 + 2) * (4 + 7) * 5) * 3 + 2
|
||||
3 + (6 * 3 + 2) + 6 * (6 + 4 * 8) + 7
|
||||
6 * 7 * 9 + 8 * 6 * (4 * 4 + 8 + 3 + 7)
|
||||
8 * 9 + 9 + (7 + 5) + 8 * 6
|
||||
(4 * 3 + 2 * 7) * 3 * 4 * 6 * 2 + 5
|
||||
(8 * (4 + 9 * 5) * 5 * (4 * 9 + 8 + 6 * 7)) + 6
|
||||
6 + 8 * 9 * (9 + (4 * 6 + 2) + 8 + 8 + 8)
|
||||
4 + 4 * ((3 + 4 + 5) * (3 * 6 + 2) * 4 + 4 + 9) + 4 + 7
|
||||
3 * 3 * 4 * (6 * 6 + 4 + 2 * (7 * 5 * 7)) * 3 * (4 + 4 * 3 * 4)
|
||||
2 + (5 * 9 * 2 * 8 * 4 * 6) + 8
|
||||
6 + (6 * 2 * 9 * 4 + (5 + 8 * 7) + 4) + (5 + 9 * 5 * 7 + (5 * 9 + 6)) + 3 * 3 + 8
|
||||
2 + (4 + (9 * 6 + 2 * 6) * 2 + 7 * (4 * 4)) * 7 + 2 + 3 + 7
|
||||
(4 + 4 + 8 * 9 * 2) * (9 + 5 + (6 + 4) * 4 + (6 + 3 + 7 * 9 * 3) * 7)
|
||||
8 * 9 * (7 + (7 * 4 + 7 * 2 + 7)) * 9
|
||||
(9 * 6 * 8 * 6) + (3 * 4 * 5 * 8) * 6 + (9 * 5 + 6 + (3 * 2) + (5 + 8 * 5 + 6 * 9 + 5)) * 7
|
||||
7 + 3 * 2 + (5 + (5 + 8 * 9 * 3 + 3) * 9 * 9) + 2
|
||||
7 + 7 * 4 * (8 * (9 * 8 * 9 * 8 + 3) + 6 * (2 + 7 * 8 + 8) * 3 * 2)
|
||||
8 + ((4 + 2 * 4 * 7 * 2) + 2 * 9 + 9 + 7) * 9 + 9 * 3
|
||||
(8 + (5 + 5 + 2) * 8 + (8 + 6 + 4 * 7 * 2)) + 2 + 9
|
||||
(6 * 3 + (9 + 6) + 8 + 3) * 5 + 6 * 7 + (5 * 9) + 9
|
||||
2 + ((3 * 2 + 6) * (6 * 5) + 6) + 6 + 4
|
||||
6 + 6 * 7 * (3 * 8 + 8) + 2
|
||||
((8 * 9) + 3 * 7 * 4) + (3 * 7 * 5 * 6)
|
||||
(3 * (8 + 6 + 3 * 9 * 3 * 4) * 9) + 2
|
||||
((7 * 9 + 7 * 2) * 2 * 3 + 6) * 5 * 4 * 9 + 5
|
||||
5 + (5 + 6 + 7 + 2 + 6 + 6) * 9 * (5 + 4 + 3) * 6 * 9
|
||||
(9 * 9 + 8 * 5 + 4 * 5) + 9 * (3 + 3 + 8) + 2
|
||||
6 + 5 * (5 * 9 + (6 + 4 * 5 + 2 + 7 * 6) + 5 + (9 * 9)) * 4 * 5
|
||||
(2 + 2 * 7 + 6 + (5 + 3)) * 7 * 4
|
||||
((4 * 3) * 8 * 2 * 7 * 3 * 2) * 4 * 2 + 8 * (5 + 6 + (9 * 6 + 2 * 4) + 4 + 7 + 9) * 8
|
||||
3 + 4 + 7 + (2 * 7 + (2 + 9 + 3 + 6) + (2 * 2 + 4 + 3 + 2 * 5) + (3 * 8 + 4 + 4 * 9 * 4)) * 5
|
||||
8 * 6 * 2 * ((6 * 7 * 4) + 6 * 9)
|
||||
5 * 5 * 6 * (7 + (4 + 2 * 6 * 6)) + 9 + 7
|
||||
4 + (5 + (2 * 3) * 8 * 3 + 8 + 5)
|
||||
(5 * 9 * (3 * 6 * 9 * 4) + 4) * 9 + 5
|
||||
(5 * (5 + 3 + 8 + 9) * 3) + 6
|
||||
(7 + 9 + 3 + (7 + 3 + 5 * 2) + 9 * 5) + 8 + 8 + (3 + 8 * 9 * 9 + (7 * 7 + 2 + 5 * 6 + 4) * 7)
|
||||
((9 * 9 * 3 * 4 + 9) * 5) * 7
|
||||
4 + 3 + 7 * 6 * (6 + 2 * 6 + 9) * 6
|
||||
8 * 2 + 7 + (9 + (6 + 7 * 8 + 5 + 2) * 3 + 4 + (8 * 4)) * 2 + 6
|
||||
3 + 5 * 6 * 2 + (9 + 3)
|
||||
(7 * 2 + 4 * 3 + 2 * (6 + 4 * 8 * 2 * 9 + 9)) * 7
|
||||
(8 + 9) * 8 + 7 + 5
|
||||
2 * 6 * 7 + (5 * 9) * 5
|
||||
(5 + (4 + 7 * 9 * 3) * 8 + 3 * 2 + 3) + 8 * 9 + (4 + 3 * (2 + 4 + 4) + (3 * 3 + 8 * 6) + 5 * 8) * 4
|
||||
9 * 8 + (6 * 5) * (6 + 7)
|
||||
(3 * (2 * 4 + 9 * 5) + 2 * 5) * ((5 + 9) * 2 + 2)
|
||||
2 * (2 + (2 * 9 + 7 * 6 + 8))
|
||||
(5 + 2 + 6 + 2 + 6) + (2 * 6 + 4 * 3 + 9 * 4) * (2 + 9 * 7 + 6) + (5 + 5) * (2 + 5 + 7) * 6
|
||||
5 + 4 + 3 + 2 + (3 + 4 + 3)
|
||||
((6 * 9 + 7 + 7) * 9 * 7 + 7 * 6 + 6) * 2 * 9 + ((5 * 6) * 3 * 3 * 8)
|
||||
5 * 8 + (7 + 2 + 6) * (8 + 2 + 8 + 4 + 9) + (5 * 6 * 6 * 3) + 8
|
||||
6 + (7 * 4 + 4 * 7 + 3 * 7) + 9 + 5 * 7 * 5
|
||||
3 + 2 + 8 + (4 + 9 * 4 * 2 + (9 * 9 + 9 + 5) * 5) + 6
|
||||
3 * 9 * 4 * (5 * 4 * (8 + 3))
|
64
2020/day19/day19.rkt
Normal file
64
2020/day19/day19.rkt
Normal file
|
@ -0,0 +1,64 @@
|
|||
#lang racket
|
||||
|
||||
(module+ test
|
||||
(require rackunit))
|
||||
|
||||
(define (read-input filename)
|
||||
(define file-str (string-split (file->string filename) "\n\n"))
|
||||
(define rules (for/hash ([str (string-split (car file-str) "\n")])
|
||||
(define rule (string-split str ": "))
|
||||
(values (string->number (car rule))
|
||||
(string-split (cadr rule)))))
|
||||
(define messages (string-split (cadr file-str) "\n"))
|
||||
(values rules messages))
|
||||
|
||||
(define (rule->str rules idx)
|
||||
(match (hash-ref rules idx)
|
||||
[(list (regexp #rx"\"(.)\"" (list _ x))) x]
|
||||
[(list x ... "|" y ...)
|
||||
(string-append "(?:"
|
||||
(apply string-append
|
||||
(map (λ (s) (rule->str rules (string->number s))) x))
|
||||
"|"
|
||||
(apply string-append
|
||||
(map (λ (s) (rule->str rules (string->number s))) y))
|
||||
")")]
|
||||
[(list x ...) (apply string-append
|
||||
(map (λ (s) (rule->str rules (string->number s))) x))]))
|
||||
|
||||
(define (part1 filename)
|
||||
(define-values (rules messages) (read-input filename))
|
||||
(define rule0 (regexp (rule->str rules 0)))
|
||||
(length (for/list ([msg (in-list messages)]
|
||||
#:when (regexp-match-exact? rule0 msg))
|
||||
msg)))
|
||||
|
||||
(module+ test
|
||||
(check-equal? (part1 "test") 2))
|
||||
|
||||
(module+ main
|
||||
(displayln (part1 "input")))
|
||||
|
||||
(define (part2 filename)
|
||||
(define-values (rules messages) (read-input filename))
|
||||
;; Rule 0 is just "8 11", rule 8 is just "(rule42)+", and rule 11
|
||||
;; matches "(rule42)+(rule31)+" with the same repetition. Thus we
|
||||
;; only need to check that rule 42 matches more times than rule 31.
|
||||
(define rule42 (rule->str rules 42))
|
||||
(define rule31 (rule->str rules 31))
|
||||
(define rule0 (regexp (string-append "(" rule42 ")+(" rule31 ")+")))
|
||||
(for/sum ([msg (in-list messages)]
|
||||
#:when (regexp-match-exact? rule0 msg))
|
||||
(define n31 (length
|
||||
(regexp-match* rule31
|
||||
(cadr (regexp-split (regexp (string-append "^(" rule42 ")+")) msg)))))
|
||||
(define n42 (length
|
||||
(regexp-match* rule42
|
||||
(car (regexp-split (regexp (string-append "(" rule31 ")+$")) msg)))))
|
||||
(if (> n42 n31) 1 0)))
|
||||
|
||||
(module+ test
|
||||
(check-equal? (part2 "test2") 12))
|
||||
|
||||
(module+ main
|
||||
(displayln (part2 "input")))
|
587
2020/day19/input
Normal file
587
2020/day19/input
Normal file
|
@ -0,0 +1,587 @@
|
|||
105: 12 | 69
|
||||
42: 69 48 | 12 41
|
||||
66: 69 69 | 12 12
|
||||
91: 69 38 | 12 26
|
||||
75: 105 105
|
||||
39: 69 119 | 12 124
|
||||
88: 12 87 | 69 133
|
||||
7: 69 55 | 12 84
|
||||
55: 12 12
|
||||
31: 116 69 | 125 12
|
||||
100: 96 69 | 87 12
|
||||
40: 49 12 | 66 69
|
||||
58: 69 71 | 12 57
|
||||
122: 12 34 | 69 17
|
||||
65: 12 98 | 69 124
|
||||
2: 69 49 | 12 84
|
||||
111: 20 69 | 54 12
|
||||
64: 12 51 | 69 108
|
||||
9: 98 69 | 82 12
|
||||
38: 55 69 | 84 12
|
||||
71: 59 12 | 100 69
|
||||
120: 86 12 | 30 69
|
||||
6: 12 87 | 69 124
|
||||
63: 12 124 | 69 49
|
||||
129: 12 52 | 69 103
|
||||
0: 8 11
|
||||
69: "a"
|
||||
35: 111 12 | 58 69
|
||||
32: 69 3 | 12 46
|
||||
78: 69 37 | 12 87
|
||||
93: 69 82 | 12 49
|
||||
99: 2 12 | 61 69
|
||||
16: 12 133 | 69 98
|
||||
37: 12 69
|
||||
115: 12 119 | 69 66
|
||||
21: 117 69 | 124 12
|
||||
119: 69 69 | 12 69
|
||||
8: 42
|
||||
84: 69 105 | 12 12
|
||||
83: 69 49 | 12 117
|
||||
130: 12 56 | 69 21
|
||||
132: 66 69 | 98 12
|
||||
124: 69 12
|
||||
24: 12 113 | 69 123
|
||||
53: 12 93 | 69 83
|
||||
117: 69 12 | 12 105
|
||||
18: 55 12 | 75 69
|
||||
68: 133 69
|
||||
17: 12 106 | 69 127
|
||||
56: 12 55 | 69 75
|
||||
112: 124 12 | 66 69
|
||||
57: 12 2 | 69 59
|
||||
30: 87 12 | 119 69
|
||||
12: "b"
|
||||
70: 96 69 | 101 12
|
||||
3: 75 12 | 119 69
|
||||
73: 69 29 | 12 130
|
||||
79: 12 85 | 69 81
|
||||
92: 69 55 | 12 87
|
||||
26: 12 124 | 69 96
|
||||
41: 12 35 | 69 89
|
||||
47: 87 12 | 124 69
|
||||
114: 69 47 | 12 16
|
||||
28: 91 12 | 45 69
|
||||
11: 42 31
|
||||
22: 133 69 | 55 12
|
||||
72: 39 12 | 70 69
|
||||
118: 75 105
|
||||
52: 69 134 | 12 80
|
||||
131: 12 66 | 69 37
|
||||
13: 76 12 | 27 69
|
||||
4: 69 75 | 12 87
|
||||
27: 12 63 | 69 7
|
||||
113: 69 114 | 12 79
|
||||
80: 12 5 | 69 118
|
||||
125: 12 126 | 69 129
|
||||
51: 112 12 | 15 69
|
||||
33: 69 131 | 12 59
|
||||
101: 12 69 | 69 105
|
||||
10: 69 23 | 12 25
|
||||
77: 69 33 | 12 104
|
||||
20: 69 102 | 12 18
|
||||
25: 59 12 | 60 69
|
||||
126: 12 13 | 69 64
|
||||
116: 69 122 | 12 19
|
||||
97: 69 117 | 12 55
|
||||
87: 12 69 | 69 12
|
||||
109: 98 69 | 75 12
|
||||
96: 12 12 | 105 69
|
||||
15: 12 101 | 69 119
|
||||
107: 69 96 | 12 87
|
||||
14: 12 10 | 69 1
|
||||
108: 12 59 | 69 94
|
||||
123: 95 69 | 32 12
|
||||
46: 87 69 | 98 12
|
||||
86: 82 12 | 124 69
|
||||
61: 117 12 | 49 69
|
||||
121: 117 12 | 98 69
|
||||
74: 96 12 | 124 69
|
||||
59: 124 12 | 84 69
|
||||
102: 82 12 | 84 69
|
||||
135: 62 69 | 38 12
|
||||
34: 99 12 | 67 69
|
||||
95: 74 12 | 65 69
|
||||
5: 37 69 | 96 12
|
||||
81: 49 12 | 98 69
|
||||
98: 69 69 | 69 12
|
||||
89: 69 73 | 12 44
|
||||
48: 12 14 | 69 24
|
||||
110: 69 133 | 12 37
|
||||
67: 121 12 | 78 69
|
||||
82: 69 69
|
||||
62: 84 69
|
||||
134: 132 12 | 110 69
|
||||
43: 88 12 | 97 69
|
||||
50: 84 12 | 37 69
|
||||
94: 101 12 | 98 69
|
||||
103: 12 120 | 69 90
|
||||
104: 6 69 | 40 12
|
||||
60: 87 69 | 124 12
|
||||
49: 12 12 | 69 12
|
||||
29: 22 12 | 4 69
|
||||
76: 12 63 | 69 109
|
||||
133: 12 69 | 12 12
|
||||
90: 50 69 | 36 12
|
||||
19: 77 69 | 28 12
|
||||
106: 69 107 | 12 88
|
||||
45: 92 69 | 110 12
|
||||
1: 12 53 | 69 72
|
||||
54: 12 18 | 69 68
|
||||
23: 9 69
|
||||
128: 49 12 | 84 69
|
||||
85: 66 69 | 75 12
|
||||
44: 69 43 | 12 135
|
||||
127: 115 12 | 128 69
|
||||
36: 55 69 | 55 12
|
||||
|
||||
babababbabaababbaaabababbaabaaabaaabbbbb
|
||||
abaabbaaaaababbbabbbaaaa
|
||||
bbbbbabbbbbabbaabaabaabbaabaabaa
|
||||
ababbbbbabbaabaabbabbaaabbbbabbbaabaaaababaaaabb
|
||||
aabaaaabbabababaabbababa
|
||||
abbbababbbaabababbaababaabbabbbbabaabaab
|
||||
bbabaaaabbbbaabaabbbaabb
|
||||
bbbaaaabaaababaaaaaaaaabbbaababababbbbaabbbabbba
|
||||
abbbaaabbbbaabbaabbbaaabaabbbabbabaabbaaabaaabaa
|
||||
aaaaabbbaababbbaabaabbab
|
||||
ababbbbbabbbaaabbabaaaaa
|
||||
aabbbaabbbbbabbabbabbabbbaaabbaabbababba
|
||||
bbaaaababbbbbabbbababaaa
|
||||
abbbabbabbabaabbabaaababbbbbabab
|
||||
babbbbbbbbbaabaaaabbbbaa
|
||||
bbbaabaabbaabbbaabbbabba
|
||||
ababaabbbbbbaaabaaabbaaa
|
||||
baaabbabbaabaabaaaabbbbabbbbaaaabbbabbbb
|
||||
aaabababbbbbbababbbaaabbaabbbbaaabbbaaaa
|
||||
bbbbbbabbbabbababaaabaabbbaaababaaabaaba
|
||||
babaabbbabaaababbbaaabbb
|
||||
abbbabaababbaaaaabaabbab
|
||||
aaaaabaaabbbbabaabbbbbba
|
||||
bababbbaabaabababbabbbaa
|
||||
bbabbabaabaaaaaaabbaaabaabaabaabbbbaabbbbababaabbbbbaaaaababbabb
|
||||
abaababaabaaaaabaaaababaaaaababaabbbaaaa
|
||||
bbbabaabbaababaabaaababb
|
||||
aaabababaaababbbbbabaaaaaaaaabbabbbaaabaabbbbaab
|
||||
aaabaabbabbaabaabbabbaaabbaabbaaabbabbbbbbabbbabbabbaabaabaaabaa
|
||||
abababbabbabbabbabbbbbaa
|
||||
abbbababbabaababbbbabbba
|
||||
ababaabbbbbaaabbbababbbaaaaabbbbbaaabaaabbbaaaba
|
||||
aaababbaababbbaabbababbb
|
||||
abaaaabaabaaabbabbaaaabababbabbbabbbaaba
|
||||
bbabbaaaababababbaaaabaa
|
||||
abbaabaaaaaabbbabababababbbaabbbbababaabbbbbabaaaaaabbabbbaaaabbaabaaaba
|
||||
babbbbabbbbbbbbaaaaaaaaa
|
||||
bbbbbabaaabbbabbaaaaaaba
|
||||
baaaabbaaababaaaabababaa
|
||||
bbaaaabbbabbababbbababbaaabbabba
|
||||
abbabaabbbaaaaaabbababbbabaabbaabababaababaabbaa
|
||||
bbbbbababbbbaaabbaaaaaaababbabbbaabaabab
|
||||
babbabbbbabaaababbbabaaa
|
||||
bbaaaaabaaabbaababbbaaabbbaabbba
|
||||
babaabbbbbaaaaabbaabaaab
|
||||
babbbbbbabbbabaaabaaaaabbbaaabbb
|
||||
bbbaaabababbaabbbbbbbaababbabbaaabbabbabbbabababababbbbababbababababaabb
|
||||
bbbaabbababbbbbbbaaaaaaa
|
||||
aaabababbaabaabbbaabbababbbbbbbaabababbbaaabbaab
|
||||
baaaaabababbabbbaaababbbbbaabaabbabbbabbbbababba
|
||||
abaabaaaaabaaabbbabaaabb
|
||||
bbbaaaaaaaaaabbbbababaaa
|
||||
bbbababbababbbabbbababab
|
||||
abbbabbaaababbbbaabbbbbbbaabababaaabbbab
|
||||
abaabbaabaabbabaababbaaababbbbaababbabaaaabababa
|
||||
abababbbababbaaabaaabbba
|
||||
baabbababaabbaaaababaaba
|
||||
bbbbbababbbaaaaabababaaa
|
||||
babbaabbbbbababbaaabbaba
|
||||
baabbbbabaabababbbbabbaaaabaabaaaaabaabaabababbabbaababababaaaaabbababaababbbbbbaabbbbbb
|
||||
aaaabaababbbbbabaabaabaa
|
||||
bbabbababbbbbaabaaabbbaa
|
||||
bbaabbaaabaabbaabaababbb
|
||||
aabaaabaaaabbaabbbbbbbabaabbbbbbbbbbbabaabbbabaaabbaabbb
|
||||
abbaaabaabaababbabbbaaabbbaaabba
|
||||
babbbbaaabbaabaabbbababbbababbaa
|
||||
bbabaaaabaaaaaaaaabaaaab
|
||||
abaabbababbabababaabbbabaabaaaababbbbbbb
|
||||
abbbbbabbaaaaaaababbbaba
|
||||
baabbbbbbbbabbbbbbabbbaa
|
||||
bbababaaaabbbbbbabbaabab
|
||||
babbbbbbaaaabaabaaaabaabaabbbbaaaaaaabab
|
||||
aabbbaabbbaabbabbbababbaaabbbabbbbbbababbaabaabaabbaaaaaaabaaabbabaaaabaabbbababbbbbaaba
|
||||
bababbabbbabaabbbaaaabab
|
||||
abaabababaaabbaaabbbaaaa
|
||||
bbababbababbababbbabaabaaabbaaab
|
||||
bbbaabbaaaabababbbbaabab
|
||||
bbbbbabaaaabbbabbaaabababbbbaaaabbabaabaaabababbaaabbaaaabbaabbbaaaaabbababbaaabaabbabaaabbbbabb
|
||||
abababbaaabaabababaaabbb
|
||||
aaaaaaabbabbabbbaaaabaababababababbabaabbbaaabba
|
||||
bbbaaaabaaaababbabaabbab
|
||||
abaabbaabbbbbbababaabbaabbbabaaaabaabbba
|
||||
bbbaabbaabbaaaaabaaaabaababbaaba
|
||||
bbbaabaabaaabaababaabaab
|
||||
babbabaababbbbabababaaaa
|
||||
aabbbaababababbabbabaabbbbbbabab
|
||||
bbbbbbbbabbaabbbbbaababaaaabbaaaaabbaaaabaaabbaabaabbabbabaabbbabbbabaaa
|
||||
abbaabbbbabbabbaaabaaaaabaaaabbabaaabbaaabbaababaaaaaaabbbaababbbbbaaaba
|
||||
aaababababbaabaabbbaaabbbbaaabba
|
||||
aabbbbbbaabbbbabbbbaabababaaaabbabaaaabbbaabbababaabbbaa
|
||||
abbbabbabbabaaaabababaab
|
||||
babaababbbababaabaabaabbabababaabaaabbba
|
||||
aabaaabababbbbbbbababbbb
|
||||
abbaaaababaabaabbbaaabbaabbabaabaabbbabbabaaaaabbbbaabbb
|
||||
babbaaaababaabbababbbabb
|
||||
baaaabaaaaaaabbabaabbabbbaabbababbbaabaabbbbbaaabbbabbbb
|
||||
bbaaaababbbaaaaaaababaabbaabaaababbabaab
|
||||
aabaaabbaaababaaaaaaaabbaababbbabaaababaabbabbabbaabbbba
|
||||
aaabaabababbaaaabbaaaaaaaaaaaabbaabaabbbaabaaaababbabbbaaabbbbba
|
||||
bbbababbbaabbbaaabababbbbabbbaaababbbbaa
|
||||
bbaabaababaaabababaabbbb
|
||||
bbaabbbaabbbbaaabbaabbbb
|
||||
ababababbaaabbaaabbaabbb
|
||||
abaaabbaabaaabbaabbbababbbbababbabbabbababbbbaabababaababbaabaaaabbbbaba
|
||||
abbaabbaabbababbabbaabbbaabbaaabaabaaabaaabaabbbbbbaabbabababbab
|
||||
abbaabaaaabbaaaababbbbabaabbbabaabababaa
|
||||
baababbababaababbbaaabaa
|
||||
baaabbbbbaaaabbaabaabaaaabbbbbabaababaabaabaabbb
|
||||
babaabbbbbabaabbabaaaaabaaabababbbbbbbaaaaabbababbaabbab
|
||||
bbababaabbaabbbabaaaabbb
|
||||
ababaabbbaaababaaababbaa
|
||||
aabababaabaabbbbabbabbbaabaabbbb
|
||||
baabbaaaaababaabbabbbbba
|
||||
bbbbbbbbbaababaabbabbbaa
|
||||
ababbbabbbbbbaaaabaababb
|
||||
bbabbabbababababaabababa
|
||||
bbbbbbbbbaaaabbbabbaaababaabaaaaaaabbbaabbbaaabbabbbbabbbaabababbbabbbbb
|
||||
bbaababaaabbbbbabaaababb
|
||||
aabbabbbaabbbabbaaabaaba
|
||||
baabbaaaaaaaabbaabbaabab
|
||||
abbbabbabaababbaabaabbbb
|
||||
baaaaaaababbabbbbbabbbaa
|
||||
aabbaabbbaaabbbbbbbaabaabbabbababbaabaababbaababbbababba
|
||||
bbbbbbbaaaaaababbbababab
|
||||
aabbbbabababbaaaaaabbbab
|
||||
aaaaaaabbabbaaabbbabbbaaababbbba
|
||||
aabaaababaaabaababbabbabaaaabbabbbabaaba
|
||||
bbbaaaabaaaaaaabababbaaababaaaaa
|
||||
aaaaaaababaabaaababbbbba
|
||||
ababbbabbaabbabbbabbbbba
|
||||
babbbbabbbaaabbbbaabababbaaaabab
|
||||
abbbbaaaabaaaaabaababbaa
|
||||
abbaaaaabbaabbabbbabbbbabbbabaaaabbbbaaaabbabbbababababaababbbbb
|
||||
aaabaabbaaaababababbabab
|
||||
aabaaaabaabbabbaabababaabbbbabaa
|
||||
aaabaabbbabbaabbaabababa
|
||||
abbbaaabbbbaaaabaaabbbab
|
||||
abaaaaabaaaaabbaabbbaabb
|
||||
baababbabbbaaaaaaabaaabbaababbaababbbaaabbaaabba
|
||||
bababbbaaaaabbbbaabbaabbbbbababaabababaaababaaaa
|
||||
baaabbabbababbabaabaaaab
|
||||
bbbbaaaaaaaaaaabaaabaaabbaaaabbabaaabaabaabbbaaaabbabbabbabaaabbaabaabaaabaaabbb
|
||||
aaaaababbbaaababbabbabbabbaabbbbaaaabaaabbaababbaaaabaaa
|
||||
bbbabbbbaabbbbbabababbabbabbaaabbbaaabababbaabaabaabaaaababbbbabbbaaabbabbbaaaaaababbaab
|
||||
abababbababbabbbabaaabbaabaabbababbaabbb
|
||||
aabbbbababbbabbbbabbbabb
|
||||
bbabbaabbbbaaaabaaaabaabaabaaaaa
|
||||
aaaaabbaababbaaabbbaabba
|
||||
abbaabaaaaaaabaababbabab
|
||||
aaaababaaabbbabbbaabaaabaaabbbab
|
||||
aabbabbbaaaababbaabababa
|
||||
aaabababbaaaaaaababbabaaaabaaaab
|
||||
aabaabbabbbbbaaaababbabbabbbbaaababbbababbabbabbabababbaaaabaaababaabaababaababbbaaaabaaaabaabba
|
||||
abaaaaaabbbaabbaabbbbbbbbabbbbbabbabaaabaaabbbbaabaabbbabbbbabababbbbaab
|
||||
aabaabababbbabababbbbbaa
|
||||
bbabbababbbbbaababababbaaaaabbaa
|
||||
babaabbabaaaabaaaabaaabb
|
||||
abaababaabaaaaaababbbbbbbabbbababbabaaab
|
||||
bbaaababaaababaaababbbabbbaabbbaabaabaababbabaab
|
||||
abbaabaaaaabaaaaaaaaabba
|
||||
bababbbaabababbbbaaabbaababaaaaababbaaba
|
||||
aaaabaabaaaaabbaabbbbabb
|
||||
ababaabbbabbaaaabbabbbab
|
||||
babaabababbaaabaababbaab
|
||||
aaabababababbbbbbbaabbaaababbbbabaabbbba
|
||||
aaaaaaababaaaababbabaaba
|
||||
bbbbbabaaaaababbabaabbaabbbbaabbbbabaabbabaabbbbaaabbbabbbbabababaaaabbb
|
||||
aaabaabaaabababbbbbbbbaa
|
||||
bbbbaababbabaabbbaaabbabababababbbabbaababaabbbb
|
||||
baabbabbabaababbbaabbabbaaaababbabbbbbbb
|
||||
baabaababaaabbabaaabbabb
|
||||
bbbbbaabaabbaabbaababbbabababbaa
|
||||
bbbabbaaababaabbaabaababaaabbabb
|
||||
bbbaaabbaabbabbaabbbaaaa
|
||||
abbbbbabbbabaaabbaaaabababbbaabb
|
||||
aabbbaaabbbababbabaababaaababbbaababbaaabbbaaaaaabbabbbb
|
||||
aabaaaabbbbbbbbaabbabbbbbbabaabbbabbbaabbbaabbbabbbabbbaabbaaaaababbbabbbaabbbba
|
||||
aabaaababaaaaaaaaaabbaba
|
||||
babaabaabbbbbababbbabbbb
|
||||
bbabbbabbaaaababaabbbaababbaabaaaaabbbaabbbbaaabbbabaabaaaabbbbbbbaaabaabbbaaabbabbababbbaaaabbb
|
||||
aaabbaabbbbaabbaababaaabaaabbaba
|
||||
aaaabbbbaaabbbbaaabbbaababbaabaabaabbabbbbbbaaaababbbaaabbbbbabaaabaabbaabbabbaaaaaabaaa
|
||||
bbbbaababbbbaababaaaabab
|
||||
ababababbbbbbababbbbbbbbabbbbbba
|
||||
bbbababbbbaabbaaababbaba
|
||||
baabbbbbbbabbaaabaabbbabbbbabbaaaabbbbaaaaabbaabaaaaabaaababbbbabbbbaaababaaaaaa
|
||||
abaabaaaabaababbbbbabaaa
|
||||
bbbaabaabbbbabbababbaaba
|
||||
baabaaabbbaaaaaaaaaabbbaababaaaaabbabababbbaaabaabbaaaaabaababbaaabbabaaabaaabbbabbaabbb
|
||||
bbaabaababababbaabbababa
|
||||
bbabaabbaabbbaabbaaababb
|
||||
abababbbbbaabababababbbaabbababa
|
||||
aaaaaaabbaaaaaaaaabaaaaa
|
||||
aabbbbababbbaaabaaababbaababaabbaabaabbb
|
||||
aabbaababbabbaabbababbbb
|
||||
bababbbabbaabbbabbbbaaabaabbbbababaaabbb
|
||||
aaabbaababaaaababbbbabbbbbbababa
|
||||
aaaabaababaaabababaaababaaabaaab
|
||||
aaaababaabbbabaaaabaabababbbbaaabbabbaaaaabbbbbabbaaaabb
|
||||
aabbaababbbbbabaabaaabbb
|
||||
bbbabaabbaaaaaaaabababaa
|
||||
bbbbabbababbabbbbbaabbaabaababbabbbaabab
|
||||
aaaaabbabaabbbbbabaaaaaaaaaabbababbababb
|
||||
bbabbababaaabaabbaababbb
|
||||
ababaabbbabbbbabbbaabbab
|
||||
babaaabababbaabbbaabbaabbbbaaaba
|
||||
abaabaaababaabbabbbabbbb
|
||||
bababbbaababbbaaaabbaaaabbabbbababbaaaaabbbbaababaabbbaa
|
||||
aaaabaababbbbbabbaaaabab
|
||||
abbababbbbabbbaaabbabbab
|
||||
abbababbaabbbbaabbbbaabbabaaabababbabbaaabbbaaaabbabaabbbbbaaaba
|
||||
aabbbbbabaaabbbbaabaaaaa
|
||||
bbbbabbabaabbabaababaaba
|
||||
baaabbbbbbaababaaaaaaaaaaabaabbaaaaabbabaaababab
|
||||
ababaabbaabbaabbbabbbbab
|
||||
bbbaaaaaabbbababbabbbbabaaababbabaabbbbaabbabbabaaabbbbbaaabbaaaaabbabaaabaabaaa
|
||||
aaabbbabaaabaababbbbaabaabaaaabbaaaaabaaababbbbababaabaa
|
||||
aaabaabbaaaabababaaaabab
|
||||
bbabaaaaaaabbbbabbabbaabaaaaaabbbbbbbbaa
|
||||
abaaaabaabbaaaaaaaaababbbbbaabbaaabaabba
|
||||
bbaabbbababbbbababbbaaba
|
||||
aaabbaabaabbaaaabbbbbaaabbabbababbbbbaab
|
||||
abbbabbbbbbbbbabaaaaabbaaabaaaababbbaaba
|
||||
bbbaaabaaaabaababbbabaababbbaaabbaabbaabbbbbbaaabbababab
|
||||
aaabbaabbbabbabbababbbaa
|
||||
abaaabbaabaaaaabbabaaaab
|
||||
baabbbbbbabaababbaabaaaa
|
||||
baabbaabababbbababbabbab
|
||||
bbbbaabbabbbabaaaaaababbabaaababbabbabaabbbbababbabbbabaabbabaaa
|
||||
bbaabaabbbbaaaababababbbaabaabba
|
||||
aaababbbbbbaabaabababaaa
|
||||
babababbbbbbabaabaabbaababaaabbabbbbabbbbaaaabbb
|
||||
baabbabbaaaaabbabbbabaaa
|
||||
abbaaaaabbababaabaaaaabb
|
||||
bbabaabbbaaabaaaaabbbbabbbaabbbaaaabaaabaabbabab
|
||||
abababbababbbbaaabbaabba
|
||||
aabbbbabbbbbbaababbbababbaabbbbbabaababaaabaaaab
|
||||
bbbaaabbbaabbabbabababbababbaaaabbbbbaabaaabbbbabaabbbabaabaabbbbbbababaababbbaa
|
||||
babababbaaababaabaabbbbbbaabbaabbbaabbbb
|
||||
baaabbababaabbaaabbbbbaa
|
||||
aabbbbbabbaabaabaaabaaaaaaabbbaa
|
||||
bbaabaabbbababbbabaabaab
|
||||
aababaabaabaaabbaaababbbbbbabbbbaabaabba
|
||||
bbbaaabbbabbbbabaabbbaaaabaababaabbbbbaa
|
||||
bababbababababbaaaaaaaba
|
||||
aabbbaabbbabbaaababbbbabbabbbbbbbabbbaaa
|
||||
bbbaaaaaaaabaaaabaaababb
|
||||
bbaaababbbbbbabaabbbbaba
|
||||
baaabbbbbbbabbaaabbabbaa
|
||||
abaababbabaaaaaaaaabaaaabaaaaabaaaaabbabbbbababa
|
||||
baabaaabbbbbababaaabbbabbbaaaaab
|
||||
aaababaababbbbaaabaababa
|
||||
aababaabaaaaaaaaabbababaaaababbbbbbbbabb
|
||||
baaabababbbabaababbbbbbb
|
||||
babababbaabbbbabbabaaabb
|
||||
bababbbabababbbabaabbbab
|
||||
baaabbaabbbbbbabbaabbbab
|
||||
ababbbbbbabbaaaabbbbabaa
|
||||
baabbbbabbbbbbaabababbabaababababababbaaababbaaaabbbabbabbabbaaabbbababa
|
||||
babaabbabbabbaaabbabbabbbabbababbbbbbbaa
|
||||
aaaababababaaabaaabaaaabaababaaabbaabbbabbbabbaaaaaabbbbbbbabbabbbabaabaaaababbbabababaaaabaabaa
|
||||
abbbbaaabbbbbababaaaabbabaaabaabbabbbaab
|
||||
aaaaaabbbbaaaaaabaaaaabb
|
||||
aaaaabbabbaabbbbaabbbbaabbabaabbaabababbaaaaabbbbbaaaaaabbbbaabbabbabbababbaabaa
|
||||
babababbabababbbaaabbaba
|
||||
bbabbaabbbbbbaaabbaabbbaababbaab
|
||||
bbaabbaaaabbbbbbaabbaabbbabbbaaa
|
||||
abbaabaaabaaababbbaaabba
|
||||
abaaaaaababaabaaababbabb
|
||||
baaabaabbbbabbaabaabaaab
|
||||
babbabbbaaaaaaabbbbaaaba
|
||||
aaabaabbbaaababaaabaaabaaabbabbababaaaab
|
||||
bbbaaaabbbbaabbbbaabbabaababbbbaaaaaabbabbaabbbabbbbabab
|
||||
abaaabbaabbbbbababbabaaa
|
||||
aaababaabbbaabbaaaaaabaaabbabbba
|
||||
ababbaaabbabbaaabaabaabbaaabaaaaabbaabba
|
||||
ababbbbbbbaabaabaaabaabbabbaababbbbaabbb
|
||||
babbbbbbaababbbbbabbaaba
|
||||
bbbaaaabbabababbabababbb
|
||||
babbbbaabababbbaabababbababaabaabaaaabbbbbaaaabbaabbabab
|
||||
abbbbababbbbbbbabbbbaaababbbbababbbbabbaaabbabbbbaababbabbabababbbabbabbabaaabbabbbbbaaa
|
||||
abbbabbaaaababababaabbaabbaababaabbaaabbabbaabbb
|
||||
aaababaaaaabbaabbbaaababbaabbbbbbbaabaaababaaaab
|
||||
aabbaabbabbbbaaababaaaaa
|
||||
bbbaabbaabababbababbabbbbaaaaabbbbaaaabb
|
||||
aabbaaababaaabaaabaabbbbaaabbbab
|
||||
baaaabbabbaabababbaaabba
|
||||
aabbbaaaaababbbbbaaabaaa
|
||||
aababaababbaabaabbababaabbababbaaabbabba
|
||||
bbaabbaaababbaaababababa
|
||||
abaababbbabbabaaababaaaa
|
||||
aaaaabaaababbbabbbbbbaab
|
||||
bbbababbbbbbbbbabbabbbab
|
||||
bababbabbababbbaababbbbbaabbaaab
|
||||
aaaaaabbaaaabaabaabaabba
|
||||
babaabbabbaabababbbaabaaaaabbabb
|
||||
bbbaaabaabbabababbbaaaba
|
||||
aabbbbbbaabbbabbbbaaaaabbabbbaabababbaba
|
||||
abbbabbaabaabaabaaabaaaa
|
||||
abaabaaaaaabbbbaaaababaaaababbbabbaabaabababbaababbabbbbbbabaaba
|
||||
bbabbabbababbaaaabaabbbb
|
||||
aabbbababbbaaaaabbbabbaaaaabaaabaaabaaabbbaababbbaaabbaabbbbabaaaabbaaabbaaaababbaabbbbb
|
||||
ababaaabbababbabbabaaaaa
|
||||
abaaaaaaabbaabbbaabbaababbbbbbab
|
||||
aaababbabaabbbbbbbbaaabbbabbbaab
|
||||
aabbaabbbaaabbababaabababbaaabbbbbbaabab
|
||||
bbaaaaaabbbbbabaaabaaaaa
|
||||
abababbbaaaaabaabababaab
|
||||
abaaabbaaabbbbabaaaabbab
|
||||
abbabbaabbabbbbabaaabbabaaabaaababaaaaabaaaabababbabbaba
|
||||
bbbabbaaabaaabbaabbbabbababbaabb
|
||||
babbbabaababbabaaabababbbbabaaaabbbaababbaaababb
|
||||
aabaaabaaabbbaaaababababaaaabbab
|
||||
bbbaaaabbababbbaabbabaab
|
||||
aaabababaabaaabbbaabbbba
|
||||
baababaabaaabaabbaabbabaababaaaabbbbabab
|
||||
aabbbabbaabbbaaaaabbbbbababaaabababbbaaa
|
||||
abaaabababaaaabaaaabbaba
|
||||
aaaababbbaaaaaaaabaaaaaaaababbaaabbaaaab
|
||||
bbabaabbababbaababababaaabbbbabb
|
||||
ababaabbaaaaabbbbbaaabba
|
||||
ababaaabbaaabbaababbbbbbabbaabba
|
||||
bbbbbabbabbabbbabbabaababbbbabbabbbabababbaababbaabaaaaaabababaababababb
|
||||
abaaabbaabbaaaaaababaaaa
|
||||
baabaabbbabaabaabbbaabbabaabbbaabbaababbaaabaaab
|
||||
baaaabbaababbbbaababbaba
|
||||
aabaaabaabaaabbaaaabbbbaaabbbbaa
|
||||
baaababaaaabaaaababaaaab
|
||||
bbaababbabaabaabbbaabaabbbbaaabbabbabbbbbabbaabbbbbaaaababbbaabb
|
||||
bbbababbbbbaaabbbabbaaaababbbbbbaaabbbabaabbabaaaaabaaba
|
||||
bbabaabbbabaabbbaabbaababbbaabbbbbaaaabb
|
||||
abaabaaabbaabaababaabbbb
|
||||
abaaabaaaabbabbbbbabababbaabababbbbababbaababbbbaaaaaaaaaaabaaabbbaaaaababbababb
|
||||
bbbaabbabbbaabbbbabbabab
|
||||
bbbaaaaaaabbbabbaaaabbaa
|
||||
aaaabbbbababaaabbbbbbaabbabaabbabbaaabaaababaaaaaaaaaaaa
|
||||
bbaaababbaabaabbbaaabaabaabbbbaaababbaab
|
||||
aabbbaaabaaabbaabababbba
|
||||
bbaaababaaaababbbaaabaabbbbababa
|
||||
bbbaaaaabbbbbbabaabbabbbabbabbbb
|
||||
baaababaaaabababaaaabaaabaabbabbababbbabaaaababbaabaabbbaaababbbbbbaabaabbaababababbbbbb
|
||||
bbbbbabbaaaaabbaabbaaaaaabbbabaabbbbbbaa
|
||||
baaaabbabbabbaabbaabaaaa
|
||||
abbaaaaabbbbbbbabaaaabbaabaaaabb
|
||||
abbaabaabbaaabbaabbaaaabbaaaaabaaababbbbbbbabbbaaaabbbabbbbabaaababbabaaaabaabbbbbbababb
|
||||
baabaaaababaaaabbabbbabb
|
||||
baababbababaabbabbbabaaa
|
||||
bbaabbbaaaaaabaaabaaaaaabbbaaaaaabaababbababaaaaaaaabbabbababbaa
|
||||
bbbabbaaaabbbbababaaaaaaabaaaaaaabababbbbbbababa
|
||||
bbaabababbbaaaabaabbbbbabaabaabaabbbbabbabaaaabb
|
||||
abababababaaaaaababbbbaaaabbbbbbaababbbaaabaabbbaababbaaabababaa
|
||||
abaabbaababbaaaababbbaab
|
||||
abbbbaaaabababbabbabbaabababbaaabbaaabba
|
||||
bbaaaaabbabbabaabbabbaaaaabbabababbaaaabababbbbabbaaabbbbabababa
|
||||
bbbaabaabababbabaabbaaaababaaaabaabaaabaabbbaabbaababbababbbaaabbbaaaaba
|
||||
aaabbaabbaaabbbbbaabaabaaabbbaaabbaabbaabaaaaaaaabbaabba
|
||||
baaabbbbaabbaabaaaabbaaa
|
||||
bbabaaaabaabbababbbbbbbaaabbbaaaaabaabbbbabbbabb
|
||||
abbaaabaaababaabbabbbaba
|
||||
abbbaaabbaabbababbbbabab
|
||||
babaabaaabababababbaabba
|
||||
bbabaaaabaabbaaabaabbaaababaabaababbabbbbaaaabaaababbbaaabbaabbaaaabbabaababbababbbbbbaa
|
||||
babaaaaabababaaaabbbaabbaaababbbaabbabbbbaaaabba
|
||||
aabababaabbbaabbbabababbaabbbbbabaaaaababaaaabbbabaabaaaaaaaabaaaaaaaabb
|
||||
baabbbabaaabbaabbaaaababaabbabbbbbbaabbbbaaabbaaaaaababbbbabbbbabaabaaaabbaabbbaabaaaabbbbaabbbb
|
||||
aaabbaabbaababbaaabababa
|
||||
bbaaababbbaaababbbaaababaaababaabaaaaabaaabababbaababbababbabbba
|
||||
aabbabbbbabbbbaababbbaaa
|
||||
abaabaaabaaaaaaabbaabbabaaaaaaabbbbabbaabbabbbab
|
||||
ababaabbbabbabaaabbbaaaa
|
||||
abaabbaaabbaaabaaaaabaaa
|
||||
bbbaabaabbaabaabbaabbabbbbbaabbaaabaaaaa
|
||||
babbaaaabaabbaaaababbbbbbbbbaaaa
|
||||
bbaaaaabbbababaaaaaaaaaa
|
||||
abbbabbbbbabaaaaabababab
|
||||
baabaabbbaaabababababaaa
|
||||
aabaabaaabbbbaababbaaabbbbaaabbbabbbbabaabbbaaba
|
||||
babbaaaaaaabaabbbbbbabaa
|
||||
ababaaababaabbbbbaabbbbabbabaababaabaaaa
|
||||
abbbabaaaabbaaaabbbbbbbabbaababb
|
||||
bbbabbbbaaabbabbbabbabba
|
||||
baababbaababbaaaaaabbbbb
|
||||
abaabaaaaaaaaabbbbaababaabaaaaaaaaabaaba
|
||||
baaabbbbaabbabbbbbbbbaabbaaababbaabbabab
|
||||
bbbabbaababaaababbaabaaa
|
||||
abbabbaaabbbaabaaabaabaa
|
||||
ababaaabbaaabbaabaaaabbb
|
||||
abaabbaaabaaababaaaabbaa
|
||||
baababaaaababbbbabbabbaa
|
||||
bbbbaababbababaaabbbbaab
|
||||
aababbbabbbaaabbaabbabbbaaababbabbabbbba
|
||||
abababbaababbaaabbbaabaababababbbaaabbaabbaaaaaaaabbaaababbbbbba
|
||||
aaaaaabbbaaababaaaabbaaa
|
||||
abaabbaaaababaabbababbbabbbbabbb
|
||||
aabbabbbaababbbbbbbbaabbbabbabbbbaaababb
|
||||
babababbaaabbbbabbbababa
|
||||
aababaaabaabaabbbabbaaaababaaabb
|
||||
bbbbbaaababaabaababaaababaaaabbaaaabbabb
|
||||
bbbaaabbbbabbabababaabbbbbaaaaaaababbbababbbbbaaabaabbbabbbaaaba
|
||||
aaaababaaabbbabbabaabbbb
|
||||
babaaabaabababbaababaaaa
|
||||
abbaabaabbbbbaabbaaaaabb
|
||||
abbbbabaaabaaaabbabbaabaaaaabbab
|
||||
abaaabbaaabaaabaababbabb
|
||||
abbbbbabaabaababbaababbaaaabaaab
|
||||
bbabbababbaababbbbabbbbabbabaabbbbaabbabbbabbabbaabaabbbabaaaaababbababbaaababababbabbab
|
||||
bbbbbaaaabaabbaaabaaaabaaaaaaabbbaaaabaaabbababbaaabaaba
|
||||
bababaaabbbbabbaababaaabbbababbaababbaaaabbaabbaaaabbbab
|
||||
bbabbabaaaabaabbbabbabbbabbbaaba
|
||||
ababaaabbaababaaaaaaabbabaaaaabaaabbabab
|
||||
bbbaabbaababbbbbaabbbaabbbbaabba
|
||||
baaabaabaaaababbabaaabaababbaabaabaabbbaabbaabbb
|
||||
abaaabbaabaaabaabaabababaaaabbababaabbabababbaabbaaabaab
|
||||
abbaaaabaababbabababaaba
|
||||
bbbabbbabaababaaaaaabbababbabbbaaaabbbab
|
||||
bababbabbbabbabaaabbbbbabaabaaaa
|
||||
abababababaabaaabbabaabbababbbaa
|
||||
bbbbaabbaabbaabaabbbabaabbabbaaabbaaabaa
|
||||
aaababaaaaabbbbabaabbbba
|
||||
babbbbabbbaaaabaabbababa
|
||||
abaababbaabbaaaaaabaabaa
|
||||
abaabbaabbabaabbbbaabbbaaaaaabbbbaabaaabbababbaa
|
||||
abbaaaaaaabbbbababababbbaaaaaaaa
|
||||
baaaabaabbabbbaaaaaaaabaaaabaabaaabbbabbaaaabbbb
|
||||
aaaababaabbbabbabaabbaaabbbabbbababbbaab
|
||||
bbaabaababaabaaaabbbabaaabbabbab
|
||||
bbbbabaababbbaaaabbaaabaaabababababaaababbaaaabbbaaababa
|
||||
abaabaaaaababbbbbaaabbba
|
||||
baabbabbbabbbbabbbbbbbbbaaaaabbaabaaabbabbbabbba
|
||||
babaabbaabbbbbaababbbabbaabaabbaaabbabaa
|
||||
abbbbbabaaaabaabbbbaaaaaabbbababbaabaabababaaabbaaaaaaaaabbbbabb
|
||||
ababababbaaabbbbbbbbabaa
|
||||
abaaaababbbabbaaabbabbab
|
||||
aabbaabbbbbaabaabbbababa
|
||||
baabbaabbabbbbaaaabababa
|
||||
babbaabbbbbbababaabbbbabaabaabbaabbbaaaaabaabbab
|
||||
abbabbbaabbaabbababbbaababbbbaab
|
||||
bbbbbbbaaabbabbbaaabbaba
|
||||
babbaabbabbbaaabbbaabbbaabababbbaabaaabbaaabbabb
|
||||
bbaaaababbbbbaaabbaaabba
|
||||
aaaabababaabbaabbabaaaaa
|
||||
bbabaaaaaabbbaabbabbbbbbbbbabbaabaaaaabbaabaabbb
|
||||
aabbbbabbabbbbaabaaabbbbababaabaabaabbbbbaabbbba
|
||||
aaababaabbbababbbbababab
|
||||
baaabbbabaaabaaaaababbaabbaaabba
|
||||
baabaabaababbaaabababbbb
|
||||
baababbabaaaaabaaaaabaabababaaabbabbbbabaaaaaabaaaaaababaabaabba
|
||||
aabaaabbaababaabaaabaaab
|
||||
babababbbbaaaabaabbaaaab
|
||||
bbbaaabbbbabaabaaaaabbab
|
12
2020/day19/test
Normal file
12
2020/day19/test
Normal file
|
@ -0,0 +1,12 @@
|
|||
0: 4 1 5
|
||||
1: 2 3 | 3 2
|
||||
2: 4 4 | 5 5
|
||||
3: 4 5 | 5 4
|
||||
4: "a"
|
||||
5: "b"
|
||||
|
||||
ababbb
|
||||
bababa
|
||||
abbbab
|
||||
aaabbb
|
||||
aaaabbb
|
47
2020/day19/test2
Normal file
47
2020/day19/test2
Normal file
|
@ -0,0 +1,47 @@
|
|||
42: 9 14 | 10 1
|
||||
9: 14 27 | 1 26
|
||||
10: 23 14 | 28 1
|
||||
1: "a"
|
||||
11: 42 31
|
||||
5: 1 14 | 15 1
|
||||
19: 14 1 | 14 14
|
||||
12: 24 14 | 19 1
|
||||
16: 15 1 | 14 14
|
||||
31: 14 17 | 1 13
|
||||
6: 14 14 | 1 14
|
||||
2: 1 24 | 14 4
|
||||
0: 8 11
|
||||
13: 14 3 | 1 12
|
||||
15: 1 | 14
|
||||
17: 14 2 | 1 7
|
||||
23: 25 1 | 22 14
|
||||
28: 16 1
|
||||
4: 1 1
|
||||
20: 14 14 | 1 15
|
||||
3: 5 14 | 16 1
|
||||
27: 1 6 | 14 18
|
||||
14: "b"
|
||||
21: 14 1 | 1 14
|
||||
25: 1 1 | 1 14
|
||||
22: 14 14
|
||||
8: 42
|
||||
26: 14 22 | 1 20
|
||||
18: 15 15
|
||||
7: 14 5 | 1 21
|
||||
24: 14 1
|
||||
|
||||
abbbbbabbbaaaababbaabbbbabababbbabbbbbbabaaaa
|
||||
bbabbbbaabaabba
|
||||
babbbbaabbbbbabbbbbbaabaaabaaa
|
||||
aaabbbbbbaaaabaababaabababbabaaabbababababaaa
|
||||
bbbbbbbaaaabbbbaaabbabaaa
|
||||
bbbababbbbaaaaaaaabbababaaababaabab
|
||||
ababaaaaaabaaab
|
||||
ababaaaaabbbaba
|
||||
baabbaaaabbaaaababbaababb
|
||||
abbbbabbbbaaaababbbbbbaaaababb
|
||||
aaaaabbaabaaaaababaa
|
||||
aaaabbaaaabbaaa
|
||||
aaaabbaabbaaaaaaabbbabbbaaabbaabaaa
|
||||
babaaabbbaaabaababbaabababaaab
|
||||
aabbbbbaabbbaaaaaabbbbbababaaaaabbaaabba
|
107
2020/day20/day20.rkt
Normal file
107
2020/day20/day20.rkt
Normal file
|
@ -0,0 +1,107 @@
|
|||
#lang racket
|
||||
|
||||
(module+ test
|
||||
(require rackunit))
|
||||
|
||||
(define (read-input filename)
|
||||
(define tiles-str (string-split (file->string filename) "\n\n"))
|
||||
(for/hash ([str tiles-str])
|
||||
(parse-tile str)))
|
||||
|
||||
(define (parse-tile str)
|
||||
(define tile-id
|
||||
(string->number (cadr (string-split (car (string-split str ":\n"))))))
|
||||
(define tile (string-split (cadr (string-split str ":\n"))))
|
||||
(values tile-id
|
||||
(for/set ([s (in-list tile)]
|
||||
[i (in-range 10)]
|
||||
#:when #t
|
||||
[x (in-string s)]
|
||||
[j (in-range 10)]
|
||||
#:when (eq? x #\#))
|
||||
(list i j))))
|
||||
|
||||
(define (get-tile-edges tile)
|
||||
(define edges-lists
|
||||
(list (for/list ([k (in-range 10)])
|
||||
(if (set-member? tile (list 0 k)) #\1 #\0))
|
||||
(for/list ([k (in-range 10)])
|
||||
(if (set-member? tile (list k 0)) #\1 #\0))
|
||||
(for/list ([k (in-range 10)])
|
||||
(if (set-member? tile (list 9 k)) #\1 #\0))
|
||||
(for/list ([k (in-range 10)])
|
||||
(if (set-member? tile (list k 9)) #\1 #\0))))
|
||||
(define reversed-edges-lists (map reverse edges-lists))
|
||||
(map (λ (lst) (string->number (list->string lst) 2)) (append edges-lists reversed-edges-lists)))
|
||||
|
||||
(define (get-neighbours tiles)
|
||||
(define neighbours (make-hash))
|
||||
(for* ([(tile1-idx tile1) (in-hash tiles)]
|
||||
[(tile2-idx tile2) (in-hash tiles)]
|
||||
#:unless (= tile1-idx tile2-idx)
|
||||
#:when (not (set-empty? (set-intersect (get-tile-edges tile1) (get-tile-edges tile2)))))
|
||||
(hash-update! neighbours tile1-idx (λ (ns) (set-add ns tile2-idx)) (set))
|
||||
(hash-update! neighbours tile2-idx (λ (ns) (set-add ns tile1-idx)) (set)))
|
||||
neighbours)
|
||||
|
||||
(define (part1 filename)
|
||||
(define tiles (read-input filename))
|
||||
(define neighbours (get-neighbours tiles))
|
||||
(for/product ([(tile-idx tile) (in-hash tiles)]
|
||||
#:when (= 2 (set-count (hash-ref neighbours tile-idx))))
|
||||
tile-idx))
|
||||
|
||||
(module+ test
|
||||
(check-equal? (part1 "test") 20899048083289))
|
||||
|
||||
(module+ main
|
||||
(displayln (part1 "input")))
|
||||
|
||||
(define (display-tile tile)
|
||||
(for* ([j (in-range 10)]
|
||||
[i (in-range 10)])
|
||||
(when (= i 0)
|
||||
(printf "\n"))
|
||||
(if (set-member? tile (list i j))
|
||||
(printf "#")
|
||||
(printf "."))))
|
||||
|
||||
(define (rotate tile)
|
||||
(for/set ([x (in-set tile)])
|
||||
(list (- 9 (cadr x)) (car x))))
|
||||
|
||||
(define (flipx tile)
|
||||
(for/set ([x (in-set tile)])
|
||||
(list (- 9 (car x)) (cadr x))))
|
||||
|
||||
(define (flipy tile)
|
||||
(for/set ([x (in-set tile)])
|
||||
(list (car x) (- 9 (cadr x)))))
|
||||
|
||||
(define (all-transformations tiles)
|
||||
(define r1 (set-map (hash-values tiles) rotate))
|
||||
(define r2 (set-map r1 rotate))
|
||||
(define r3 (set-map r2 rotate))
|
||||
(define s (set-union (hash-values tiles) r1 r2 r3))
|
||||
(list->set (set-union s
|
||||
(set-map s flipx)
|
||||
(set-map s flipy))))
|
||||
|
||||
(define (edge tile side)
|
||||
(define side-fn (match side
|
||||
[1 (λ (k) (make-rectangular 0 k))]
|
||||
[-1 (λ (k) (make-rectangular 9 k))]
|
||||
[0+1i (λ (k) (make-rectangular k 0))]
|
||||
[0-1i (λ (k) (make-rectangular k 9))]))
|
||||
(string->number
|
||||
(list->string (for/list ([k (in-range 10)])
|
||||
(if (set-member? tile (side-fn k)) #\1 #\0))) 2))
|
||||
|
||||
(define (find-corner tiles)
|
||||
(define neighbours (get-neighbours tiles))
|
||||
(define corner (for/first ([(tile-idx tile) (in-hash tiles)]
|
||||
#:when (= 2 (set-count (hash-ref neighbours tile-idx))))
|
||||
tile))
|
||||
corner)
|
||||
|
||||
;; Too boring, cheated
|
1728
2020/day20/input
Normal file
1728
2020/day20/input
Normal file
File diff suppressed because it is too large
Load diff
107
2020/day20/test
Normal file
107
2020/day20/test
Normal file
|
@ -0,0 +1,107 @@
|
|||
Tile 2311:
|
||||
..##.#..#.
|
||||
##..#.....
|
||||
#...##..#.
|
||||
####.#...#
|
||||
##.##.###.
|
||||
##...#.###
|
||||
.#.#.#..##
|
||||
..#....#..
|
||||
###...#.#.
|
||||
..###..###
|
||||
|
||||
Tile 1951:
|
||||
#.##...##.
|
||||
#.####...#
|
||||
.....#..##
|
||||
#...######
|
||||
.##.#....#
|
||||
.###.#####
|
||||
###.##.##.
|
||||
.###....#.
|
||||
..#.#..#.#
|
||||
#...##.#..
|
||||
|
||||
Tile 1171:
|
||||
####...##.
|
||||
#..##.#..#
|
||||
##.#..#.#.
|
||||
.###.####.
|
||||
..###.####
|
||||
.##....##.
|
||||
.#...####.
|
||||
#.##.####.
|
||||
####..#...
|
||||
.....##...
|
||||
|
||||
Tile 1427:
|
||||
###.##.#..
|
||||
.#..#.##..
|
||||
.#.##.#..#
|
||||
#.#.#.##.#
|
||||
....#...##
|
||||
...##..##.
|
||||
...#.#####
|
||||
.#.####.#.
|
||||
..#..###.#
|
||||
..##.#..#.
|
||||
|
||||
Tile 1489:
|
||||
##.#.#....
|
||||
..##...#..
|
||||
.##..##...
|
||||
..#...#...
|
||||
#####...#.
|
||||
#..#.#.#.#
|
||||
...#.#.#..
|
||||
##.#...##.
|
||||
..##.##.##
|
||||
###.##.#..
|
||||
|
||||
Tile 2473:
|
||||
#....####.
|
||||
#..#.##...
|
||||
#.##..#...
|
||||
######.#.#
|
||||
.#...#.#.#
|
||||
.#########
|
||||
.###.#..#.
|
||||
########.#
|
||||
##...##.#.
|
||||
..###.#.#.
|
||||
|
||||
Tile 2971:
|
||||
..#.#....#
|
||||
#...###...
|
||||
#.#.###...
|
||||
##.##..#..
|
||||
.#####..##
|
||||
.#..####.#
|
||||
#..#.#..#.
|
||||
..####.###
|
||||
..#.#.###.
|
||||
...#.#.#.#
|
||||
|
||||
Tile 2729:
|
||||
...#.#.#.#
|
||||
####.#....
|
||||
..#.#.....
|
||||
....#..#.#
|
||||
.##..##.#.
|
||||
.#.####...
|
||||
####.#.#..
|
||||
##.####...
|
||||
##..#.##..
|
||||
#.##...##.
|
||||
|
||||
Tile 3079:
|
||||
#.#.#####.
|
||||
.#..######
|
||||
..#.......
|
||||
######....
|
||||
####.#..#.
|
||||
.#...#.##.
|
||||
#.#####.##
|
||||
..#.###...
|
||||
..#.......
|
||||
..#.###...
|
59
2020/day21/day21.rkt
Normal file
59
2020/day21/day21.rkt
Normal file
|
@ -0,0 +1,59 @@
|
|||
#lang racket
|
||||
|
||||
(module+ test
|
||||
(require rackunit))
|
||||
|
||||
(define (read-input filename)
|
||||
(map parse-food (file->lines filename)))
|
||||
|
||||
(define (parse-food str)
|
||||
(define match (regexp-match #px"(.+)\\(contains (.+)\\)" str))
|
||||
(list (string-split (cadr match))
|
||||
(string-split (caddr match) ", ")))
|
||||
|
||||
(define (find-allergens foods)
|
||||
(define h (make-hash))
|
||||
(for* ([food (in-list foods)]
|
||||
[allergen (in-list (cadr food))])
|
||||
(define s (hash-ref h allergen (list->set (car food))))
|
||||
(hash-set! h allergen (set-intersect s (list->set (car food)))))
|
||||
(unique-allergens h))
|
||||
|
||||
(define (unique-allergens h)
|
||||
(if (for/and ([(k v) (in-hash h)]) (= 1 (set-count v)))
|
||||
(for/hash ([(k v) (in-hash h)]) (values k (set-first v)))
|
||||
(begin
|
||||
(for ([(k v) (in-hash h)]
|
||||
#:when (= 1 (set-count v))
|
||||
[(other-k other-v) (in-hash h)]
|
||||
#:unless (equal? other-k k))
|
||||
(hash-set! h other-k (set-remove other-v (set-first v))))
|
||||
(unique-allergens h))))
|
||||
|
||||
(define (part1 filename)
|
||||
(define foods (read-input filename))
|
||||
(define allergens (find-allergens foods))
|
||||
(define all-ingredients (apply append (map car foods)))
|
||||
(define allergen-ingredients (hash-values allergens))
|
||||
(length (for/list ([ingredient (in-list all-ingredients)]
|
||||
#:unless (set-member? allergen-ingredients ingredient))
|
||||
ingredient)))
|
||||
|
||||
(module+ test
|
||||
(check-equal? (part1 "test") 5))
|
||||
|
||||
(module+ main
|
||||
(displayln (part1 "input")))
|
||||
|
||||
(define (part2 filename)
|
||||
(define foods (read-input filename))
|
||||
(define allergens (find-allergens foods))
|
||||
(define allergen-ingredients (for/list ([allergen (sort (hash-keys allergens) string<=?)])
|
||||
(hash-ref allergens allergen)))
|
||||
(string-join allergen-ingredients ","))
|
||||
|
||||
(module+ test
|
||||
(check-equal? (part2 "test") "mxmxvkd,sqjhc,fvjkl"))
|
||||
|
||||
(module+ main
|
||||
(displayln (part2 "input")))
|
36
2020/day21/input
Normal file
36
2020/day21/input
Normal file
|
@ -0,0 +1,36 @@
|
|||
smfnh svztk rqqf sfhvsx xctnhp bvn krv gkcplx ngpq hmhll dq mqr vnvgrb xbp dqsbql dlx mgvr cqvpp nqfjgtsj zscj jbndg gz xrkckp srzsljf mzmph gbxk mvqkdj frkpm vnhn sjfcj rgfx fjbqn lvrsl dvvsn rgpbkp vhdzgz pvq ktlh pzvvlgt knpp sbpkr bbzn rrjjt tsfx brnsf gfxb qmcj fdfr glllxz cmkqcs fctjm fmrdsr xmrd bpdfhd cjxgg gszbq gtqsr ftds qrdtdv vjmfl phbhgqh nbhpx sjlk xhzj kmfj xdsxjv hcrz xzxth xxcq kpnl pbhvldj msfmt sttj fdrzd bprg jdbpd hbhsx dfllj frvs fltn xxgp vlhnhf ggsz dmxdkc qbrqsr cgbgf gbgf szp zrtfglg (contains nuts)
|
||||
msfmt vcnrl tsfx dqsbql hcxhl nbhpx vjmfl fltn gfxb cmkqcs knpp lcqn srnbhq zrtr xg gspk gvnj mvqkdj vhchvg ggsz bpxggt kmfj gkcplx nlh xjggx jbndg fjbqn dq svztk lcrpq xhksjm sqzhc rgfx gbxk lttlx ssbrn xlkm fcps kkkt ppdplc lxkbs frkpm fjvf hbhsx hnxc (contains soy)
|
||||
gz fjbqn xqxgc xbp lcrpq vnhn ftds gszbq qbrqsr nkmxp zjg hnxc hbhsx sjfcj svztk ggsz nvsd rgfx mzmph tllxsfs dvvsn mvqkdj brnsf rqlljq rqqf vbn jbndg tclx ppdplc lxkbs szp gkcplx sqzfbq sqxsf mqr fmrdsr ktv hcxhl jbmlk ktlh ppskx kkkt cbpx zsxfl cdrm tbhxh drnrd nx gspk nmdv kvgbhx fjvf xjggx dqsbql lvrsl ndtf zbjtv (contains fish, eggs)
|
||||
gbgf xhksjm xg zscj nbhpx xzxth sqzfbq sfhvsx vnvgrb phbhgqh kctf tsfx fkfr pzvvlgt nqfjgtsj bhtxd qmcj hbhsx zbjtv jbndg xxgp smscxzt gfjqxx cbpx zsxfl tfd qbrqsr phbrht nmdv zgvqnlv ppdplc bxpdm xbsps rrjjt cqvpp zrtr xvrvnt vdnvf lttlx qjjxv mvqkdj ndtf prrpm tmkc tllxsfs cgbgf fjbqn hnxc frkpm gszbq rqlljq lhtqk ngqg ppskx knpp xqxgc fnmx msfmt gvnj pbhvldj kmfj rqqf hdmpps ktlh glllxz ssbrn zrtfglg hcrz dqsbql frvs cjcvh vnhn ggsz fdfr vhchvg tclx fjvf (contains soy)
|
||||
sbpkr hbhsx gszbq lgxx hmhll tsfx cqvpp gkphjq nvsd tfd fzrfrs fvgpcjh dfllj drnrd xg hcxhl vjmfl mvqkdj ndtf dvvsn ngpq gkcplx fkfr xmrd lttlx qmcj dqsbql fdfr msfmt sqxsf sttj nkmxp nbhpx pvq cjxgg jbmlk xjggx xhzj fdrzd ktv kmfj vhchvg frkpm mqr rgfx mzmph srnbhq pbcptj zscj cgbgf sqzhc ppdplc xvrvnt ssbrn tmsn ktlh bprg cmkqcs lcqn cdvdt lvrsl rgpbkp smscxzt cdrm tclx xzxth xbsps xlkm srzsljf tmkc zrtfglg gvnj krv gxgbkd dfkt npjrb xbp vdnvf zgvqnlv pbhvldj (contains dairy, fish, eggs)
|
||||
vdnvf kkxq sttj mhzdcc srnbhq krtlhc fjbqn fjvf mvvbb vhchvg lgxx cqvpp lxkbs ggsz xjggx jbndg rqqf qrdtdv lttlx bhtxd xdsxjv nbhpx mvqkdj dfllj ndtf hcrz gtqsr ftds fnmx rrjjt fvgpcjh szp tmkc brnsf vbn frxfc zscj bxpdm dqsbql xhzj bpdfhd kddggl fhhq sjlk prrpm hdmpps msfmt gbxk phbhgqh xmrd vpsv zsxfl xzxth xvrvnt gkcplx kctf xxgp xg fzrfrs fspk kvgbhx cjcvh lcqn ppskx zrtfglg drnrd dfkt hnxc fdfr rqlljq tclx gszbq cbpx hbhsx gspk ngpq bpxggt ktlh gbgf xqxgc kxmgm (contains wheat, fish, soy)
|
||||
fdfr vpsv kkkt kctf kkxq drnrd prrpm kmfj gz qjjxv vhdzgz dqsbql bxpdm fqrtvrv qbrqsr dfllj cdrm vlhnhf tclx ktlh sjlk lhtqk vhchvg pzvvlgt pvjd lttlx tllxsfs sqzhc bvn xdsxjv mzmph cmkqcs xxcq blbl sqzfbq frkpm ggsz fkfr jdbpd cqvpp zjg vjmfl gbxk mvvbb mhzdcc ngqg ndtf llhld cjxgg pbcptj fmrdsr ppdplc msfmt dlx zrtfglg mvqkdj ccxlqzv gkcplx brjx fspk fvgpcjh jsmpg pvq fdrzd smscxzt xvrvnt rgpbkp gtqsr lpgptlj hdmpps fzrfrs zgvqnlv (contains shellfish)
|
||||
gspk vdnvf lcqn fqxcjh jdbpd tsfx kkxq hmhll vhchvg gxgbkd xzxth krtlhc krv jbndg fdfr ggsz dqsbql xqxgc fkfr mgvr zscj sqzhc svztk gkphjq vpsv glllxz srnbhq ngqg gkcplx kvgbhx cbpx zrtr hpqf hdmpps cmkqcs ppdplc srzsljf gcch sqzfbq fctjm pvjd qfktb cdrm cgbgf xbp cjxgg kkkt lttlx vnvgrb xxgp hrbbhg msfmt mvqkdj dq gfjqxx ktv hcxhl tbhxh drnrd nmdv hcrz ktlh (contains dairy, eggs, sesame)
|
||||
sqzhc vdnvf krv nkmxp pvq dq fvgpcjh dfkt xmrd fjvf vpsv xdsxjv zrtr zjg xhzj zgvqnlv nbhpx fnmx tfd ppdplc xhksjm ktlh pzvvlgt msfmt xg dqsbql hrbbhg gszbq cjcvh rqqf mzq ndtf gtqsr cdvdt mvqkdj vnvgrb hpqf lpgptlj gkcplx srzsljf lcrpq jbndg gcch fltn gbgf fhhq hbhsx fqrtvrv xbsps gbxk vjmfl xbp hcxhl llhld rggl zsxfl kvgbhx frxfc xxgp (contains sesame, wheat)
|
||||
dnkcf fqrtvrv cmkqcs ktlh pbhvldj blbl nx xmrd vlhnhf rqqf gkcplx hcxhl nmdv brjx tllxsfs hbhsx frxfc hdmpps qfktb lcrpq mvqkdj smscxzt qjjxv zsxfl frkpm lttlx ppdplc vhdzgz fctjm ndtf kkxq gkphjq ggsz ktv xctnhp fkfr zscj dqsbql xzxth xbsps brnsf tclx tbhxh jsmpg vjmfl xxcq lgxx kvgbhx llhld (contains shellfish, sesame, fish)
|
||||
zrtr frxfc mvqkdj zrtfglg nx hbhsx phbrht nlh brjx ssbrn pvq sqxsf jbmlk jzjb jshns nkmxp fdrzd hcxhl pgtrjst mgvr qjjxv ggsz xlkm smfnh srzsljf vnhn fctjm rqlljq fqrtvrv lttlx bpdfhd sttj nmdv dfllj knpp ktlh frkpm zbjtv tllxsfs fjbqn fvgpcjh zscj fjvf vjmfl xxgp xg msfmt fnmx llhld vdnvf phbhgqh mhzdcc xzxth sqzhc xmrd hcrz xctnhp ktv vlhnhf gkcplx qvxntmh dqsbql tbhxh gcch hdmpps ngqg glllxz fmrdsr sfhvsx dmxdkc (contains eggs, soy)
|
||||
ccxlqzv ngpq qmcj hcrz nkmxp fspk rxtp gcch ktv vcnrl rgfx llhld sqzhc jbndg ssbrn pzvvlgt prrpm xqxgc rkgb lpgptlj srzsljf fltn srnbhq fjvf mqr krv dfkt fdfr glllxz jdbpd npjrb ktlh dnkcf pvjd hbhsx cjcvh dmxdkc xrkckp qfktb rqlljq dqsbql ggsz tmsn phbhgqh kctf mvqkdj szp gkcplx gbxk qvxntmh fnmx vnvgrb nqfjgtsj gvnj tfd nlh ppdplc pvq bbzn lttlx bpxggt lgxx xxgp hdmpps cjxgg gfxb kxmgm knpp brjx (contains wheat)
|
||||
nkmxp hbhsx frkpm tfd vlhnhf mgvr fdfr mqr zjg tsfx xdsxjv vnvgrb fqxcjh vcnrl llhld lpgptlj sfhvsx rgpbkp fzrfrs xrkckp qmcj bvn gkphjq lcqn pvq xhksjm smfnh ggsz vbn gfxb cqvpp bxpdm xmrd fcps pbhvldj msfmt qfktb mzq rggl fltn ppdplc fjbqn xzxth ppskx gfjqxx fdrzd nx gvnj ktlh srnbhq xbp fnmx qsx jbmlk hmhll vhchvg xbsps krv dqsbql sqzfbq xctnhp gkcplx lxkbs ssbrn szp pvjd blbl fhhq (contains wheat)
|
||||
fltn frxfc qrdtdv gkcplx jdbpd phbhgqh mhzdcc dfllj mvqkdj sfhvsx rggl zrtfglg nqfjgtsj gszbq hcrz sqxsf fzrfrs kpnl ppdplc pbhvldj llhld fjbqn kkxq ssbrn qsx phbrht gvnj cjcvh fcps fqrtvrv xctnhp hbhsx zscj smscxzt dlx fjvf msfmt vjmfl xvrvnt dqsbql gcch ndtf rxtp kmfj gspk dnkcf sjfcj lcqn ggsz zsxfl jshns (contains nuts)
|
||||
qfktb fqxcjh cjcvh cdvdt hcxhl mvvbb hcrz glllxz nqfjgtsj sqzhc nbhpx zjg xmrd pgtrjst tmkc vnvgrb cgbgf lttlx ppdplc sjfcj dvvsn gszbq dmxdkc kxmgm dq brnsf fjbqn vdnvf qrdtdv ggsz vcnrl cbpx phbhgqh pvq jsmpg sttj mvqkdj xbsps sqxsf ktlh xdsxjv bpdfhd vhchvg tfd lvrsl xzxth lcqn qbrqsr hpqf nlh krtlhc lgxx zbjtv ccxlqzv rxtp zrtfglg nmdv ftds msfmt xhksjm gkcplx dqsbql mzmph tbhxh srzsljf jzjb cmkqcs gbgf dlx srnbhq lpgptlj rrjjt (contains shellfish, eggs)
|
||||
dqsbql lcrpq ftds hbhsx brjx fqxcjh llhld msfmt drnrd gfxb xbsps nvsd gkcplx xvrvnt zscj gtqsr tfd qsx ngqg fqrtvrv phbhgqh dnkcf gz xg qjjxv sqzfbq jdbpd sbpkr mzmph ssbrn hmhll cqvpp xqxgc cjxgg krtlhc smscxzt gxgbkd mvqkdj xdsxjv brnsf vhchvg lcqn kxmgm qvxntmh pbhvldj ktlh cdvdt dq szp ppdplc dfllj fvgpcjh fdrzd knpp kpnl tmsn nqfjgtsj rggl jsmpg xzxth cdrm bpxggt vjmfl cgbgf rkgb xhksjm nlh dfkt sqxsf (contains fish, eggs)
|
||||
xrkckp nlh ktlh gfxb jbndg zscj rqlljq xctnhp nkmxp vhdzgz gfjqxx mgvr fdfr sqxsf bxpdm gkcplx fmrdsr msfmt smscxzt krv fqxcjh kpnl cgbgf npjrb prrpm qbrqsr ppskx gxgbkd mvvbb ggsz gcch ppdplc gszbq lttlx fspk dqsbql dfkt bpxggt szp rggl fltn tsfx bvn fnmx lpgptlj mzmph svztk gbgf mqr xg lcqn mvqkdj pgtrjst phbrht fhhq cbpx glllxz qjjxv kctf brnsf drnrd sjlk kkkt (contains sesame, shellfish, dairy)
|
||||
ngqg mvqkdj gkphjq dlx dqsbql ktlh rqlljq bpxggt vnhn srnbhq frxfc fspk frvs kctf lxkbs jzjb glllxz rgfx pbcptj fnmx xxcq bprg ppskx rqqf qvxntmh cmkqcs rggl jdbpd fjbqn frkpm mzq hpqf sqzfbq llhld xqxgc vnvgrb tllxsfs zscj lvrsl ngpq vhdzgz nlh ppdplc gz zgvqnlv bvn gspk jsmpg fzrfrs fkfr rrjjt msfmt cjxgg krv vhchvg ggsz npjrb smscxzt gtqsr kddggl hbhsx kpnl xg sbpkr tmsn nkmxp xjggx nbhpx jshns cjcvh (contains shellfish)
|
||||
ppdplc dqsbql brjx ktlh xrkckp kpnl zrtfglg svztk dfkt mhzdcc xmrd kddggl sjlk nkmxp jshns xvrvnt zbjtv xdsxjv mvqkdj glllxz vlhnhf hbhsx hrbbhg fdrzd xg pbcptj xbp rkgb ngpq msfmt lttlx fdfr llhld dmxdkc krv cdvdt rggl qjjxv xxgp vbn sbpkr gvnj vnvgrb pbhvldj vjmfl dq srnbhq mvvbb gkcplx vnhn bvn jbmlk xzxth krtlhc fjvf kxmgm dvvsn vpsv rxtp cgbgf nmdv (contains nuts)
|
||||
pgtrjst ktlh fmrdsr llhld pbhvldj dfllj lvrsl xqxgc ppdplc rqqf lcrpq nlh vnhn cdvdt msfmt hmhll zbjtv ktv fspk tclx fdfr prrpm lgxx sbpkr dfkt qrdtdv sjfcj vhdzgz dlx cqvpp xhzj vhchvg tllxsfs fctjm mvqkdj bbzn qjjxv vjmfl sttj ndtf nkmxp tsfx vnvgrb sjlk dqsbql ggsz sqxsf fjbqn qbrqsr vbn dnkcf gfxb lxkbs cmkqcs hbhsx kxmgm zgvqnlv vlhnhf xmrd gszbq srnbhq gxgbkd xhksjm xrkckp mvvbb gtqsr ccxlqzv jshns tmkc jbndg frxfc tfd zrtr fzrfrs (contains nuts, shellfish)
|
||||
nmdv svztk vpsv zsxfl gfxb fnmx pzvvlgt dlx rkgb tclx fdfr rqlljq lvrsl sfhvsx blbl kvgbhx jsmpg tfd xrkckp kkkt gkcplx cdvdt ppdplc fqxcjh brjx tmsn dq kxmgm bhtxd xvrvnt fspk sjfcj gcch xxgp hpqf mgvr srnbhq qvxntmh xzxth msfmt jbmlk dqsbql srzsljf ktlh zbjtv gz mvqkdj nkmxp rrjjt xqxgc cjcvh kctf mzq dfllj hbhsx fmrdsr fdrzd bpxggt kmfj gkphjq (contains wheat)
|
||||
rgfx fvgpcjh mzmph cqvpp ggsz gfjqxx kctf gspk zrtfglg gkphjq dmxdkc ktlh fdfr qfktb srnbhq xctnhp phbhgqh zgvqnlv xqxgc rqqf sfhvsx xbsps cjcvh kkkt nlh fhhq cdrm kddggl mvqkdj npjrb lhtqk hdmpps zbjtv nmdv lttlx vbn pzvvlgt lcrpq dvvsn cdvdt bpdfhd nkmxp hrbbhg ssbrn rggl dfllj vhchvg pbcptj dnkcf xjggx nbhpx fdrzd vhdzgz pbhvldj mvvbb qjjxv zscj hbhsx gxgbkd vnhn gz ppdplc cmkqcs hcrz bprg prrpm vnvgrb msfmt pvq gkcplx rkgb bxpdm (contains wheat, shellfish, soy)
|
||||
nkmxp xg vjmfl gspk gxgbkd ggsz cmkqcs fjbqn mvqkdj mgvr jdbpd hbhsx cjcvh zbjtv xxcq xqxgc gkcplx zgvqnlv gtqsr lgxx gfxb msfmt qjjxv pbcptj bpdfhd bvn xrkckp fzrfrs pgtrjst xmrd vpsv nx gz dfkt fcps xhksjm nlh bprg vhdzgz drnrd ngqg gkphjq dfllj rgpbkp fkfr fqxcjh xzxth kctf tbhxh mvvbb dq hpqf mzmph xctnhp dmxdkc lvrsl tmsn lxkbs fdrzd rxtp cgbgf nvsd gbgf krv rggl frvs gvnj vcnrl ppdplc sttj hrbbhg gszbq qmcj hcxhl fspk fnmx dqsbql nqfjgtsj kxmgm ccxlqzv zjg (contains nuts, sesame, eggs)
|
||||
npjrb xvrvnt sttj pvjd lvrsl pgtrjst fjbqn lcqn xxgp kvgbhx qvxntmh bvn cbpx gkphjq gkcplx gszbq rxtp mzmph lgxx zrtfglg gspk gbxk nvsd bpdfhd sjlk kctf qsx kddggl vhdzgz ktv xrkckp fqrtvrv jdbpd fltn fctjm frxfc svztk nx phbhgqh vpsv kxmgm hmhll ktlh xdsxjv phbrht zgvqnlv smfnh tbhxh sbpkr srzsljf xjggx mhzdcc xhzj fdrzd ccxlqzv cdrm dlx msfmt mgvr ppdplc qmcj lhtqk hcxhl gbgf fspk ngpq lpgptlj ftds jzjb cmkqcs ggsz rqqf mvqkdj cdvdt brnsf xzxth smscxzt fdfr tmsn ndtf brjx gfxb rrjjt sjfcj vhchvg dqsbql cqvpp qrdtdv (contains soy, dairy)
|
||||
lcrpq fmrdsr fdfr gtqsr nlh hnxc bprg dqsbql hmhll mvqkdj hbhsx sqxsf fdrzd szp bbzn pbcptj sbpkr qsx rgpbkp xctnhp rxtp bvn ktlh bxpdm zgvqnlv lhtqk bpdfhd sjfcj xdsxjv nmdv qjjxv ppdplc ggsz qfktb vhdzgz vlhnhf xhksjm nqfjgtsj vnvgrb mhzdcc msfmt jsmpg dfkt (contains fish)
|
||||
ppdplc rqqf vbn zjg xdsxjv msfmt nlh nkmxp mhzdcc glllxz bvn xjggx gfxb zrtfglg qvxntmh sqzfbq qfktb gz bpxggt fqxcjh phbhgqh bhtxd frkpm rqlljq dmxdkc lcqn vlhnhf vdnvf mzq sfhvsx svztk qbrqsr hnxc hbhsx brjx mvqkdj dq ktlh dqsbql dvvsn fzrfrs mvvbb tmkc vcnrl blbl gkcplx vhchvg (contains sesame)
|
||||
rrjjt zsxfl dqsbql dmxdkc vcnrl vhchvg vnhn mzmph ssbrn rgpbkp msfmt fvgpcjh lpgptlj gbgf xmrd frxfc ktv ggsz nqfjgtsj qjjxv xzxth lhtqk qfktb cdvdt ktlh xbsps ftds phbrht jsmpg jbndg zjg mvqkdj sqxsf brnsf ccxlqzv zrtr pvq bpdfhd frvs ppdplc vjmfl gbxk blbl kvgbhx sjfcj mvvbb xg gz kmfj xdsxjv nkmxp svztk lvrsl hbhsx bxpdm xxgp vpsv hcxhl (contains nuts, soy, wheat)
|
||||
nkmxp hnxc rqlljq knpp vnhn zjg rqqf rrjjt xlkm msfmt xbsps jshns vhdzgz gfxb brnsf qmcj fspk dmxdkc xzxth lcrpq phbhgqh ggsz bpxggt szp lxkbs sqxsf gszbq brjx ngqg qrdtdv dqsbql gkphjq bpdfhd ktlh mgvr ktv mvqkdj xctnhp ppdplc ndtf nqfjgtsj pzvvlgt jbmlk dlx lgxx rgfx fjvf gkcplx xhksjm kmfj llhld (contains fish)
|
||||
gvnj kkxq ktlh gkphjq tsfx svztk msfmt pvq lpgptlj gz gbgf fzrfrs hcxhl dnkcf xbp gfxb tllxsfs kpnl fjbqn zscj ppdplc lxkbs lcqn hcrz zjg kddggl gkcplx ngqg vnvgrb hbhsx hmhll rxtp bpdfhd frxfc fqxcjh pgtrjst qfktb fhhq xbsps xhzj srnbhq bhtxd vjmfl ggsz ktv phbhgqh fkfr dqsbql vbn jsmpg rgfx xrkckp sjfcj llhld nbhpx phbrht rggl tbhxh blbl vcnrl rgpbkp nqfjgtsj lvrsl dq nvsd mvvbb ngpq xxgp nkmxp xmrd gxgbkd fltn jbmlk rqlljq qvxntmh (contains dairy, sesame, eggs)
|
||||
nbhpx gcch fvgpcjh gtqsr srzsljf cgbgf nmdv cjxgg tsfx ngpq vbn rkgb dnkcf nqfjgtsj vnhn xqxgc ngqg dmxdkc vhdzgz fzrfrs glllxz kddggl dqsbql vhchvg xbp svztk mhzdcc ppdplc mzq qvxntmh phbhgqh frxfc pvq lxkbs bxpdm sqxsf kkxq gkcplx zrtr fnmx bvn kkkt pzvvlgt gz fdfr gfxb xhzj fltn vjmfl qsx sfhvsx hbhsx sttj ftds qmcj tmsn rgfx mzmph gfjqxx jbmlk qjjxv kxmgm fcps vnvgrb ggsz mvqkdj sjfcj nkmxp pbhvldj ktlh (contains eggs, dairy, fish)
|
||||
gkcplx xrkckp vbn smscxzt mhzdcc cjxgg kddggl zgvqnlv dqsbql ppdplc kkkt hbhsx gspk kvgbhx rqqf prrpm xxcq mzq srzsljf msfmt xbsps hpqf ngpq pbcptj mzmph xmrd gvnj ktlh cmkqcs dlx cbpx hmhll xlkm bhtxd mvqkdj gbxk nx (contains shellfish, fish)
|
||||
qsx zjg lcrpq glllxz zscj rggl dmxdkc jshns frvs sjfcj kddggl xlkm msfmt rxtp zsxfl ktlh kpnl frkpm sttj ngpq brjx brnsf hcrz fctjm fcps zbjtv nx cmkqcs mhzdcc kkxq vpsv pbcptj qrdtdv fltn llhld gkcplx mvvbb qmcj nkmxp szp rqqf dvvsn nvsd jzjb mzmph dlx gbgf mvqkdj dqsbql vjmfl gszbq phbhgqh ppdplc tbhxh xxgp fvgpcjh ccxlqzv ggsz lhtqk vcnrl bxpdm gtqsr jbmlk srzsljf bbzn lgxx rqlljq frxfc zrtfglg (contains dairy)
|
||||
ppdplc dmxdkc gtqsr fdfr srnbhq hnxc xvrvnt jbndg lxkbs bhtxd fzrfrs vpsv pzvvlgt dqsbql zrtfglg frkpm cqvpp zjg npjrb fvgpcjh vnvgrb fnmx pvjd fdrzd frxfc nmdv zbjtv tclx bxpdm phbhgqh krv ktv qrdtdv knpp sttj hbhsx sqxsf xqxgc vhdzgz gkcplx lcqn rrjjt tmkc xxgp rqlljq bbzn gszbq jzjb zscj fjvf ktlh vlhnhf mgvr xbp smfnh dlx rgpbkp lgxx msfmt lcrpq hcrz ggsz xhzj qvxntmh gxgbkd vnhn cgbgf xbsps xjggx gspk jshns ftds cdvdt rggl pvq xhksjm ndtf kkxq gz pbhvldj fmrdsr mzmph gfjqxx (contains fish, eggs, soy)
|
||||
kctf bxpdm tmsn cgbgf kpnl vnvgrb rggl bpxggt kddggl pvq msfmt xvrvnt lxkbs xxgp npjrb knpp svztk gz fvgpcjh ndtf fdrzd sqzhc gfxb fqxcjh sbpkr gbxk hcrz zsxfl zgvqnlv nx blbl llhld sjfcj rqqf cdrm ggsz xqxgc ftds sfhvsx fctjm krtlhc srzsljf jdbpd mvvbb dqsbql nvsd dmxdkc lcqn gkcplx fjbqn glllxz ktlh vhchvg ssbrn gxgbkd dvvsn kxmgm pbcptj xbp tmkc hbhsx mvqkdj (contains wheat, nuts, shellfish)
|
||||
fmrdsr gtqsr sqxsf fvgpcjh lpgptlj mvqkdj frvs nkmxp zrtr bxpdm ccxlqzv msfmt vjmfl dvvsn hnxc zgvqnlv nqfjgtsj mzmph rrjjt gkcplx pgtrjst mvvbb vbn tllxsfs bhtxd nlh qsx vpsv npjrb jbndg gxgbkd tclx xhksjm sjfcj ktv rxtp hcxhl xzxth qjjxv hbhsx ggsz xxgp tmsn ktlh dqsbql dlx kctf gszbq bbzn pzvvlgt gbgf cqvpp fqrtvrv szp pbhvldj (contains eggs, sesame)
|
||||
xhksjm mhzdcc kvgbhx ngpq rkgb nlh ppdplc qbrqsr gbxk ngqg drnrd phbrht zrtr dq rgfx qvxntmh dnkcf phbhgqh mvqkdj rrjjt fjbqn nkmxp xdsxjv cjxgg ktlh kctf xmrd zgvqnlv blbl msfmt fdfr cjcvh tsfx sjlk lgxx vhchvg ggsz sqzfbq svztk lhtqk zsxfl nvsd vhdzgz gkcplx ssbrn lcqn rqqf kmfj vcnrl mvvbb hbhsx pbhvldj gspk tmkc hpqf kddggl nmdv xbp cdvdt ktv xctnhp (contains eggs)
|
4
2020/day21/test
Normal file
4
2020/day21/test
Normal file
|
@ -0,0 +1,4 @@
|
|||
mxmxvkd kfcds sqjhc nhms (contains dairy, fish)
|
||||
trh fvjkl sbzzf mxmxvkd (contains dairy)
|
||||
sqjhc fvjkl (contains soy)
|
||||
sqjhc mxmxvkd sbzzf (contains fish)
|
59
2020/day22/day22.rkt
Normal file
59
2020/day22/day22.rkt
Normal file
|
@ -0,0 +1,59 @@
|
|||
#lang racket
|
||||
|
||||
(module+ test
|
||||
(require rackunit))
|
||||
|
||||
(define (read-input filename)
|
||||
(apply values
|
||||
(map (λ (s) (map string->number (cdr (string-split s "\n"))))
|
||||
(string-split (file->string filename) "\n\n"))))
|
||||
|
||||
(define (play p1 p2)
|
||||
(match (list p1 p2)
|
||||
[(list xs '()) (list xs '())]
|
||||
[(list '() ys) (list '() ys)]
|
||||
[(list (list-rest x xs) (list-rest y ys))
|
||||
(if (< x y)
|
||||
(play xs (append ys (list y x)))
|
||||
(play (append xs (list x y)) ys))]))
|
||||
|
||||
(define (play-recursive deck1 deck2)
|
||||
(define states (mutable-set))
|
||||
(let loop ([p1 deck1]
|
||||
[p2 deck2])
|
||||
(let/cc return
|
||||
(when (set-member? states (list p1 p2)) (return (list p1 '())))
|
||||
(set-add! states (list p1 p2))
|
||||
(match (list p1 p2)
|
||||
[(list xs '()) (list xs '())]
|
||||
[(list '() ys) (list '() ys)]
|
||||
[(list (list-rest x xs) (list-rest y ys))
|
||||
(if (and (<= x (length xs)) (<= y (length ys)))
|
||||
(if (empty? (cadr (play-recursive (take xs x) (take ys y))))
|
||||
(loop (append xs (list x y)) ys)
|
||||
(loop xs (append ys (list y x))))
|
||||
(if (> x y)
|
||||
(loop (append xs (list x y)) ys)
|
||||
(loop xs (append ys (list y x)))))]))))
|
||||
|
||||
(define (winning-score play-fn deck1 deck2)
|
||||
(define final-deck (apply append (play-fn deck1 deck2)))
|
||||
(for/sum ([x (in-list (reverse final-deck))]
|
||||
[i (in-naturals 1)])
|
||||
(* x i)))
|
||||
|
||||
(define (part1 filename)
|
||||
(define-values (deck1 deck2) (read-input filename))
|
||||
(winning-score play deck1 deck2))
|
||||
|
||||
(define (part2 filename)
|
||||
(define-values (deck1 deck2) (read-input filename))
|
||||
(winning-score play-recursive deck1 deck2))
|
||||
|
||||
(module+ test
|
||||
(check-equal? (part1 "test") 306)
|
||||
(check-equal? (part2 "test") 291))
|
||||
|
||||
(module+ main
|
||||
(displayln (part1 "input"))
|
||||
(displayln (part2 "input")))
|
53
2020/day22/input
Normal file
53
2020/day22/input
Normal file
|
@ -0,0 +1,53 @@
|
|||
Player 1:
|
||||
41
|
||||
33
|
||||
20
|
||||
32
|
||||
7
|
||||
45
|
||||
2
|
||||
12
|
||||
14
|
||||
29
|
||||
49
|
||||
37
|
||||
6
|
||||
11
|
||||
39
|
||||
46
|
||||
47
|
||||
38
|
||||
23
|
||||
22
|
||||
28
|
||||
10
|
||||
36
|
||||
35
|
||||
24
|
||||
|
||||
Player 2:
|
||||
17
|
||||
4
|
||||
44
|
||||
9
|
||||
27
|
||||
18
|
||||
30
|
||||
42
|
||||
21
|
||||
26
|
||||
16
|
||||
48
|
||||
8
|
||||
15
|
||||
34
|
||||
50
|
||||
19
|
||||
43
|
||||
25
|
||||
1
|
||||
13
|
||||
31
|
||||
3
|
||||
5
|
||||
40
|
13
2020/day22/test
Normal file
13
2020/day22/test
Normal file
|
@ -0,0 +1,13 @@
|
|||
Player 1:
|
||||
9
|
||||
2
|
||||
6
|
||||
3
|
||||
1
|
||||
|
||||
Player 2:
|
||||
5
|
||||
8
|
||||
4
|
||||
7
|
||||
10
|
133
2020/day23/day23.c
Normal file
133
2020/day23/day23.c
Normal file
|
@ -0,0 +1,133 @@
|
|||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
|
||||
#define TEST_INPUT 389125467UL
|
||||
#define TEST_RESULT_10 92658374UL
|
||||
#define TEST_RESULT_100 67384529UL
|
||||
#define TEST_RESULT_PART2 149245887792UL
|
||||
#define INPUT 198753462UL
|
||||
|
||||
void print_cups(unsigned long cups[static 1], unsigned long start) {
|
||||
printf("(%lu) ", start);
|
||||
unsigned long c = cups[start];
|
||||
while (c != start) {
|
||||
printf("%lu ", c);
|
||||
if (c == 0) {
|
||||
printf("\nreached zero, abort!\n");
|
||||
return;
|
||||
}
|
||||
c = cups[c];
|
||||
}
|
||||
printf("\n");
|
||||
}
|
||||
|
||||
unsigned long move(size_t size, unsigned long cups[size], unsigned long current) {
|
||||
/* print_cups(cups, current); */
|
||||
/* printf("current: %lu\n", current); */
|
||||
|
||||
unsigned long picked_up[3] = {0};
|
||||
unsigned long c = current;
|
||||
for (int i = 0; i < 3; ++i) {
|
||||
picked_up[i] = cups[c];
|
||||
c = cups[c];
|
||||
}
|
||||
/* printf("pick up: %lu, %lu, %lu\n", picked_up[0], picked_up[1],
|
||||
* picked_up[2]); */
|
||||
|
||||
unsigned long dest = current - 1;
|
||||
while ((dest == 0) || (dest == picked_up[0]) || (dest == picked_up[1]) ||
|
||||
(dest == picked_up[2])) {
|
||||
dest = (size + dest - 1) % size;
|
||||
}
|
||||
/* printf("destination: %lu\n", dest); */
|
||||
|
||||
cups[current] = cups[picked_up[2]];
|
||||
cups[picked_up[2]] = cups[dest];
|
||||
cups[dest] = picked_up[0];
|
||||
|
||||
return cups[current];
|
||||
}
|
||||
|
||||
unsigned long *play(size_t size, unsigned long cups[size], unsigned long start,
|
||||
unsigned long steps) {
|
||||
unsigned long current = start;
|
||||
for (size_t i = 0; i < steps; ++i) {
|
||||
/* printf("-- move %zu --\n", i+1); */
|
||||
current = move(size, cups, current);
|
||||
}
|
||||
|
||||
return cups;
|
||||
}
|
||||
|
||||
unsigned long *init_cups(unsigned long n, size_t size) {
|
||||
unsigned long *cups = calloc(size, sizeof(unsigned long));
|
||||
unsigned long start = n / 100000000;
|
||||
|
||||
unsigned long q = n;
|
||||
unsigned long r = start;
|
||||
while (q != 0) {
|
||||
cups[q % 10] = r;
|
||||
r = q % 10;
|
||||
q = q / 10;
|
||||
}
|
||||
|
||||
if (size > 10) {
|
||||
cups[n % 10] = 10;
|
||||
for (size_t i = 10; i < size - 1; ++i) {
|
||||
cups[i] = i + 1;
|
||||
}
|
||||
cups[size - 1] = start;
|
||||
}
|
||||
|
||||
return cups;
|
||||
}
|
||||
|
||||
unsigned long run_part(int part, unsigned long n, unsigned long steps) {
|
||||
size_t size = 0;
|
||||
if (part == 1) {
|
||||
size = 10;
|
||||
} else if (part == 2) {
|
||||
size = 1000001;
|
||||
}
|
||||
unsigned long *cups = init_cups(n, size);
|
||||
unsigned long start = n / 100000000;
|
||||
play(size, cups, start, steps);
|
||||
|
||||
unsigned long res = 0;
|
||||
if (part == 1) {
|
||||
unsigned long c = cups[1];
|
||||
while (c != 1) {
|
||||
res = 10 * res + c;
|
||||
c = cups[c];
|
||||
}
|
||||
} else if (part == 2) {
|
||||
res = cups[1] * cups[cups[1]];
|
||||
}
|
||||
|
||||
free(cups);
|
||||
return res;
|
||||
}
|
||||
|
||||
int main(int argc, char *argv[]) {
|
||||
unsigned long res = 0;
|
||||
|
||||
res = run_part(1, TEST_INPUT, 10);
|
||||
if (res != TEST_RESULT_10) {
|
||||
printf("Test 1: %lu (expected = %lu)\n", res, TEST_RESULT_10);
|
||||
}
|
||||
res = run_part(1, TEST_INPUT, 100);
|
||||
if (res != TEST_RESULT_100) {
|
||||
printf("Test 2: %lu (expected = %lu)\n", res, TEST_RESULT_100);
|
||||
}
|
||||
|
||||
printf("%lu\n", run_part(1, INPUT, 100));
|
||||
|
||||
res = run_part(2, TEST_INPUT, 10000000);
|
||||
if (res != TEST_RESULT_PART2) {
|
||||
printf("Test 3: %lu (expected = %lu)\n", res, TEST_RESULT_PART2);
|
||||
}
|
||||
|
||||
printf("%lu\n", run_part(2, INPUT, 10000000));
|
||||
|
||||
return EXIT_SUCCESS;
|
||||
}
|
71
2020/day23/day23.rkt
Normal file
71
2020/day23/day23.rkt
Normal file
|
@ -0,0 +1,71 @@
|
|||
#lang racket
|
||||
|
||||
(module+ test
|
||||
(require rackunit))
|
||||
|
||||
(define (labelling->cups num)
|
||||
(define cups (make-vector 10 0))
|
||||
(define start (quotient num 100000000))
|
||||
(let loop ([prev start]
|
||||
[n num])
|
||||
(define-values (q r) (quotient/remainder n 10))
|
||||
(vector-set! cups r prev)
|
||||
(if (= q 0)
|
||||
(values cups start)
|
||||
(loop r q))))
|
||||
|
||||
(define (cups->labelling cups)
|
||||
(let loop ([idx (vector-ref cups 1)]
|
||||
[num 0])
|
||||
(if (= 1 idx)
|
||||
num
|
||||
(loop (vector-ref cups idx) (+ (* 10 num) idx)))))
|
||||
|
||||
(define (move! cups current)
|
||||
(define picked-up (let loop ([idxs (list (vector-ref cups current))]
|
||||
[i 0])
|
||||
(if (>= i 2)
|
||||
idxs
|
||||
(loop (cons (vector-ref cups (car idxs)) idxs) (add1 i)))))
|
||||
(define destination (let loop ([d (sub1 current)])
|
||||
(if (or (= 0 d) (member d picked-up))
|
||||
(loop (modulo (sub1 d) (vector-length cups)))
|
||||
d)))
|
||||
(vector-set! cups current (vector-ref cups (car picked-up)))
|
||||
(vector-set! cups (car picked-up) (vector-ref cups destination))
|
||||
(vector-set! cups destination (last picked-up))
|
||||
(vector-ref cups current))
|
||||
|
||||
(define (play! cups start steps)
|
||||
(for/fold ([current start])
|
||||
([i (in-range steps)])
|
||||
(move! cups current)))
|
||||
|
||||
(define (part1 input steps)
|
||||
(define-values (cups start) (labelling->cups input))
|
||||
(play! cups start steps)
|
||||
(cups->labelling cups))
|
||||
|
||||
(module+ test
|
||||
(check-equal? (part1 389125467 10) 92658374)
|
||||
(check-equal? (part1 389125467 100) 67384529))
|
||||
|
||||
(module+ main
|
||||
(displayln (part1 198753462 100)))
|
||||
|
||||
(define (part2 input)
|
||||
(define-values (base-cups start) (labelling->cups input))
|
||||
(define cups (make-vector 1000001 0))
|
||||
(vector-copy! cups 0 base-cups)
|
||||
(vector-set! cups (remainder input 10) 10)
|
||||
(for ([i (in-range 10 1000000)])
|
||||
(vector-set! cups i (add1 i)))
|
||||
(vector-set! cups 1000000 start)
|
||||
(play! cups start 10000000)
|
||||
(* (vector-ref cups 1) (vector-ref cups (vector-ref cups 1))))
|
||||
|
||||
(module+ test
|
||||
(check-equal? (part2 389125467) 149245887792))
|
||||
|
||||
(module+ main
|
||||
(displayln (part2 198753462)))
|
80
2020/day24/day24.rkt
Normal file
80
2020/day24/day24.rkt
Normal file
|
@ -0,0 +1,80 @@
|
|||
#lang racket
|
||||
|
||||
(module+ test
|
||||
(require rackunit))
|
||||
|
||||
(define (read-input filename)
|
||||
(map string->tile (file->lines filename)))
|
||||
|
||||
(define (string->tile str)
|
||||
(path->tile (map string->symbol (regexp-match* #rx"(e|w|se|sw|ne|nw)" str))))
|
||||
|
||||
(define (path->tile path)
|
||||
(define-values (q r)
|
||||
(for/fold ([q 0]
|
||||
[r 0])
|
||||
([s (in-list path)])
|
||||
(match s
|
||||
['e (values (add1 q) r)]
|
||||
['ne (values (add1 q) (sub1 r))]
|
||||
['nw (values q (sub1 r))]
|
||||
['w (values (sub1 q) r)]
|
||||
['sw (values (sub1 q) (add1 r))]
|
||||
['se (values q (add1 r))])))
|
||||
(list q r))
|
||||
|
||||
(define (initial-grid tiles)
|
||||
(define grid (make-hash))
|
||||
(for ([tile (in-list tiles)])
|
||||
(hash-update! grid tile not #f))
|
||||
grid)
|
||||
|
||||
(define (count-alive grid)
|
||||
(for/sum ([(k v) (in-hash grid)]
|
||||
#:when v)
|
||||
1))
|
||||
|
||||
(define (part1 filename)
|
||||
(define tiles (read-input filename))
|
||||
(count-alive (initial-grid tiles)))
|
||||
|
||||
(module+ test
|
||||
(check-equal? (part1 "test") 10))
|
||||
|
||||
(module+ main
|
||||
(displayln (part1 "input")))
|
||||
|
||||
(define (count-alive-neighbours grid tile)
|
||||
(define q (car tile))
|
||||
(define r (cadr tile))
|
||||
(for*/sum ([i (in-range -1 2)]
|
||||
[j (in-range -1 2)]
|
||||
#:unless (= 0 i j)
|
||||
#:unless (= 2 (abs (+ i j)))
|
||||
#:when (hash-ref grid (list (+ q i) (+ r j)) #f))
|
||||
1))
|
||||
|
||||
(define (step grid)
|
||||
(define size (+ 2 (apply max (flatten (hash-keys grid)))))
|
||||
(for*/hash ([q (in-range (- size) size)]
|
||||
[r (in-range (- size) size)])
|
||||
(define color (hash-ref grid (list q r) #f))
|
||||
(define n (count-alive-neighbours grid (list q r)))
|
||||
(values (list q r)
|
||||
(cond
|
||||
[(and color (or (= 0 n) (> n 2))) #f]
|
||||
[(and (not color) (= 2 n)) #t]
|
||||
[else color]))))
|
||||
|
||||
(define (part2 filename)
|
||||
(define tiles (read-input filename))
|
||||
(count-alive
|
||||
(for/fold ([grid (initial-grid tiles)])
|
||||
([i (in-range 100)])
|
||||
(step grid))))
|
||||
|
||||
(module+ test
|
||||
(check-equal? (part2 "test") 2208))
|
||||
|
||||
(module+ main
|
||||
(displayln (part2 "input")))
|
561
2020/day24/input
Normal file
561
2020/day24/input
Normal file
|
@ -0,0 +1,561 @@
|
|||
wwwnewnwwnwewswnwsenwwwnwnwwwnww
|
||||
wewswseswnwwwwenwnewnwswenwsenee
|
||||
sesesesesesenewsesesesesesesesesesesese
|
||||
swnenewneneeeseeswnenweswsenenwnenene
|
||||
eneeeenenesweneseneeeenew
|
||||
neseneseewenewswnwsesenwwnenenwene
|
||||
nwwsewwwnwnwnenwwwenwwwnwwnwswse
|
||||
nwnenwnewnwsenwnwnwnwnwsenwwnwnwnwnwnwnwnw
|
||||
seseseseseeseseseseswseseseseswswsenwse
|
||||
eeweseseeeeenwneewweeseeee
|
||||
seseeseseseseseweseseneseseseseseesee
|
||||
seseseseeseseeweseseseneeseseesese
|
||||
swwnwwwnwnwwnwnwenwnwnwnwwwnwwnwnw
|
||||
eewsenwseneseseswseenwsesenwseesewsw
|
||||
wswwwswswswwswswwwwswswweswww
|
||||
nwnwnwnwwnwnwewnwnwnwseswewnwwnwnwnw
|
||||
wwswswswswwneswswswwseswwnewwswswsw
|
||||
swsenwswswswswswwsesweeswsese
|
||||
eseesenwesesewweeeneeneenewenew
|
||||
eenwswnwnwnwnwswnwnwnwenwwnwnenewsw
|
||||
wweweswnwwweswswnwwwwwswwww
|
||||
swneswwswswswswswseswswswnwswsweseswswsw
|
||||
wswseseswsesenesesesesewseswseseswnesese
|
||||
nenwnwwwnwswewnwwwnwwwswnwnwnwnwnw
|
||||
seseseswswswsenwswswne
|
||||
swswwnewneswswswswneseswsesese
|
||||
seswseswseswswsenwseswsewswseswswseesw
|
||||
wsewwwwwwwswwnewwwwwwwww
|
||||
sesesesesesenesesesewseseseseseseseswse
|
||||
enwseswswseswswswswswswswseswseswsesesw
|
||||
nenenenwneenwneenenenwnwnenenenwswnwsw
|
||||
enwseeeeeneswseewswnwnenewwe
|
||||
eewnenwwswswneneeewweeseenesene
|
||||
eswswnwnwnenwenwneswnwnwnwnenwnwnwnwne
|
||||
wwseeesenwnwneeewwseweewneesw
|
||||
seesenwneeseesweseeeeeseseseseese
|
||||
wwwswswswwswswweswswwswswwswsww
|
||||
nwnweseswswswswswswswseswseswswswswswsw
|
||||
eneseneneneeenenenenwnenenwneeneese
|
||||
senwsenenewnwseewnesesenwsesesesesew
|
||||
neeeeneneneeneeneeeeweeneesene
|
||||
swenwsweswsweseswweenwnww
|
||||
nwnwwwnwwnwwwwwwwnwwnewswwnw
|
||||
eesenweseeeeswsesese
|
||||
swseseeseesenwseseseswseswseswsesesew
|
||||
nenwnewwenenwwswseswesewnenwenwene
|
||||
wwswwwnwwnwnwnwwwwnwwneww
|
||||
seneeeeeneenwnwsweseeneeneeweee
|
||||
nenwswnwswswnwnwnwwnwwnwnenenwnwnwesenwse
|
||||
neneeswneneeeeneeeneeneneeneeswne
|
||||
wswsenenwneseswswwnwwweseneswswsene
|
||||
seseseseseseseswseseneseseswsenewsesesesw
|
||||
wswseswsesenwneswnwsewwneeswse
|
||||
swnwswwswswswwswseeswesweeneswswnw
|
||||
swswneswswswswenwswwswswseswswseswswsw
|
||||
esesewseeweswsesenwswswswneseswseswse
|
||||
nwwneswswswswswnweeenwnenwnwnenesewe
|
||||
seeseewseeseewseseeeseeeseese
|
||||
newsenwseseseswseesenenewseseseseesesww
|
||||
wneswswwswswswwswswwswswswswsewswsww
|
||||
wesesesewewseseewwseseseseeseese
|
||||
enenwnwnwnwnwnenewnwnwneswenwwnwnwne
|
||||
seeeseseeseseeeseeeesesesew
|
||||
swnwnenwnwswnenwnwenwnenwnenwnwnenenwnwnw
|
||||
nenenenenewneenwneeswswnene
|
||||
enwnwwnwnwnwswesenwnwswseeewewse
|
||||
swwnwenenewwnwseeneswenwsewenene
|
||||
seeseeweesenesenweeeeesesesee
|
||||
nwnwnwnwnwnwneswwnwnwwnenwnwwsenwnwenw
|
||||
wswswseseseswswswseneseseswsenenwswseswse
|
||||
wwwsewwwwswwwwwnwwnewwww
|
||||
wnwnwwwswewswwswwweww
|
||||
nwswswswseseeseseseseseseseseseswnesese
|
||||
eeeeweneneeneeewe
|
||||
swswswsewswswswsesenwswnwseswswseeew
|
||||
nwnwnwnwwnwswenwenwneswwnwnwnwnwnwswnwnw
|
||||
nwnwnwnwnwsenwwnwnwwnenwnwnwnwnwnwnwnwnw
|
||||
nwneswneswnwswenwneneeneseenewnwnenwse
|
||||
neewswswswseneseneseswsesewsewswsesww
|
||||
enwneneneneneneeeeneneseneneneneene
|
||||
eneeseseeeeseeeeeeeeeswee
|
||||
seeseeeseneseeeeesesesweseseswnwsee
|
||||
newnesewswneewnwneeneeneseneenenew
|
||||
ewsenwnwsweenwnesewnwseseseswsewsenw
|
||||
ewseseseseseseseseeeeeeseeseewse
|
||||
wwswswwewwnwwwwwwwwswwwnewsw
|
||||
eeswneeswnwenwenweseeneesesesenwe
|
||||
eswswswswnewwnwseswwseseneswnenenwswsw
|
||||
sesesesenwsenwneseseseneswnenwsewwsenww
|
||||
neeeeeneeeneseeneeeenweneee
|
||||
nenwwswwwwwnwwwwwwnww
|
||||
nwnenwnenwnenwnenenwnwnwnwnenwnwsenewnene
|
||||
nwwwneswwswswswsweswsewswwswswswswswsw
|
||||
nenwnwnwnwnwsenwnwsenwnwnwnw
|
||||
seeeeeeeeeeeeeweesee
|
||||
nwnwnwnwnwnwnenwnwnwsenenwnwnwnwnenwewnw
|
||||
eenesesweeeseeneenweswseeeeee
|
||||
neswsenewnenesenenenesenwneneneneneswwne
|
||||
sesesewsenwseseseseseseseseseseesesese
|
||||
seseseseesesesesesesesesesesenwseswsesese
|
||||
enwswseesewsesesewnesesesewnwseseesw
|
||||
seseswseneseseseseseseseseseseswsesesese
|
||||
nwsenwnwnwswwnwnwnwnenwsewnwnewnwnwwe
|
||||
wesenweswswneneewnenwswswswnwesew
|
||||
seseseseeseseswseseseseswswsesesenwsesw
|
||||
wnwswneeneswwnwwswenwnwswnwnenwnesenw
|
||||
swnenenwnwnwnenwnwnwswnenenesene
|
||||
neneewnesenenewnewsenwnenenwnwnenenenene
|
||||
swewwnwwnwwnwwwnewwwswwnw
|
||||
senwsewswesesenwnesesesesesesesweseswse
|
||||
seseeeenwseeseseneesewseeew
|
||||
wnweswnesenewwseswsewwnwwwnese
|
||||
eeeeseeweseseneeseseeseseneesesw
|
||||
senewesenewnwswwwnesenwewwnesw
|
||||
nwnwnwnwnwnwwnwnwnwnwnenwnwnenwe
|
||||
eeneewneesenenenenenenenenenenenene
|
||||
sweeneneneswneeneneswneneswnenenwswene
|
||||
wswwswswweswwswswwnesweswswwsw
|
||||
eeeeneeenwneneeeeewnesenenenee
|
||||
sweswswswswswswswswswswwnwswswswswswsw
|
||||
sesewseseeseenweseeseeeseseesese
|
||||
swnwswswseswseswswswseseseswswsesenw
|
||||
sesewsesesenwseseseseseseewneseesese
|
||||
swwswswswswswswswwswwwswswneswswswsw
|
||||
eenwseeeeenwneeenwsewswseeswee
|
||||
swswseseseseseseswseneswswswswseswswsesenw
|
||||
wwswswnwewwwswswesw
|
||||
neneneneenwswnenenwwnenwnenw
|
||||
seswseswswsweswswswwnwswseswseswswswsese
|
||||
seseseeweseenweseeseesweeneeese
|
||||
swswwwwwwswwwswwwswwnenwewww
|
||||
swwwewnewwwwwenewswwwww
|
||||
eeenenesenwseeneeeew
|
||||
wwwwnwswswswwwewwwwwwswwswe
|
||||
seenwseseseseseeneseseeseswseseswsesese
|
||||
sesewnwesenwnewseswwneneseswseswew
|
||||
swswswswsweseswswseswswswseseseswswsew
|
||||
eneenwneenwseeseneeeenwswweswsww
|
||||
seewneseseseesesesenesenwsesewseeee
|
||||
sweeesewneweweeeese
|
||||
nwnwnwnenwnwnwnwnwnenwnwnwnwsenwnwnwnew
|
||||
wwswswneneswswswswseswswswswswswewswnwsw
|
||||
wwnwwwwswwnewnewwwsewwwwwnw
|
||||
sewsesesenweseswsesewswseseneeswsese
|
||||
seswswswswswswswswswswneswswswswswwsesesw
|
||||
eeseenesenwsewseneeesenweswnweesw
|
||||
swseesenwewneseseeseswswnewewnesw
|
||||
nenesweeeenenewnwneeeneneswnewsene
|
||||
swwseswsweswseswsesesenwseeswswseswsw
|
||||
nwnwneswweswesenwnwnwwnwnwnwnenenwwwse
|
||||
wwwwswwwwnwswwwwwwwewww
|
||||
eseseneeseswwneweeswswnenwnwneswese
|
||||
senwwnwnwenenenwsenew
|
||||
swswswswseswswswneswswswswswswswswseswnw
|
||||
seswsesenwswseseswseswswswseseswswswswsw
|
||||
enweenenweesewneeeeeseeswseenenw
|
||||
neneneneeseweeneneneeeneneneeene
|
||||
esesenesenwseswseseswseseneseseseseww
|
||||
eswswsenewseswseswenweswwnwseseswsenw
|
||||
seseneseseseseseseseseseseewseesesese
|
||||
nenenenenenenesenenewnenene
|
||||
swswswswwswswswneswenewswswwswseswwsesw
|
||||
nwnwwenenwsenwnenwwnenwsenenw
|
||||
seeneseseesewsewnweneesesewesese
|
||||
neseeseenweneeeneneweesweeenww
|
||||
swsesenwseseseseseswsesesesesesesesesese
|
||||
swwseneseswsewseseseneswseswswseswseeswse
|
||||
nwnwneewnenwnwnwwwnwnwwnwswwswsese
|
||||
wwewwwsweswwwnww
|
||||
swnwnwnwnwnwwnwewnwnwneenwnwnwwswnw
|
||||
swwwwswwwseneswswwswwwswwswwww
|
||||
neeseseseseewsesewseenesesesesenenwwse
|
||||
nwnwwnwnwnwnwnwnwnwnwnwnwsenwwnwnwnwnw
|
||||
eeweneeeeeeeeeneseeeeee
|
||||
enwwesweeeneeneneeeseneenenenew
|
||||
swswsenwswwswweswwswwswswwwwswne
|
||||
wewnwwnewnwwnwnwnwwnwnwwnwswwswnw
|
||||
nenwneneneseneeneneeneeneeenenenene
|
||||
nwwswnewsewnwwwwwnewwww
|
||||
eneneneesenwneneeneeeswswnesweenwne
|
||||
wwwwwwwwwwwnwwwwsenwwenww
|
||||
swswnwesewwswswwwwswswwwwnewswwsw
|
||||
wwnwwwwwwnwnwnwwwenwwnwww
|
||||
seesenwseseseseseswswseswseswwnwseswsw
|
||||
nwnwnwnwnwneneneneswswnenwnenwenwnwnenenw
|
||||
sewwwsewnewnwnwsenwwnenwnwswnwnwnew
|
||||
neneseeneeeneneneneeneenwneneneee
|
||||
sweswewswwswnwnwswswswswsesweswnwwsw
|
||||
wwnenwenwsenwnwwnwnwwnwnwnwnwwwnw
|
||||
eneeneweeesewneneeeeneneeeee
|
||||
swswnewswswswseseseswswswswneswseswswsw
|
||||
wwnewwswnwewsw
|
||||
neenwneeeswenweneseneeeneenenese
|
||||
seswswnwsesesenwswseswseswseeswswswseswse
|
||||
neneswswswswseswswwswneswswwswsweseneswne
|
||||
sesewnwwnwnenwnwnwenwnwnewneenwnenw
|
||||
wswsenwewnewewwswswwswswwswswwwne
|
||||
senwnwsesesweswswnesewseseseeesee
|
||||
eeswneneneeneenenenenenenenenenenene
|
||||
swwseswswswswswswswneswswseseswnewswswswne
|
||||
eswseswswswswswwswseswswseswneswswnesw
|
||||
swsesenwwnwswsenwseseeswsesenenenwwse
|
||||
seesewseseseeeseseseseeeeseeese
|
||||
swseseswswneswseswswswseseseseswswswsesw
|
||||
wwwnwwwewnwnwwwwwwwwwswww
|
||||
nwnenwnenenenenenenenwneneswnenenenwswene
|
||||
neseneneneseenwnenenenewnewnwnwnenwnww
|
||||
wwnwweenwwwwwwnwnwwwswwwwnw
|
||||
wnwwsenwsenewnewnwwnwnwwnwwnwww
|
||||
wnwwwwnwnwwwwwnwnwwswwnwweww
|
||||
wswswwwswswwswwwneswwseweswwe
|
||||
seeneseeeseseweeee
|
||||
senwnwnwenwnwnwswwnwnwenwnw
|
||||
eneneeneenwneeswnenenenenewnenenee
|
||||
swwweeseseeseeeneneseseseseeeene
|
||||
seseeseseeseeseseseseneseseseseswese
|
||||
neswsenwswsesesesesenwseseseseeseesesw
|
||||
senwswnenwnenenenwewnwnwnenwnwnwne
|
||||
nweenwswseswnwneseneseseswnewseswnwwne
|
||||
swwwsewwwewwswwwwnwswwwwswnwsw
|
||||
wnwnwnwenenenenwnwsenwneenwneseswnwswnwnw
|
||||
neswnenenwneneenenenenwneseweswnenwsene
|
||||
wwswneneswnwsenewneeneeeenenewsw
|
||||
eseneeeseeeseseseswseseneewseewe
|
||||
nwnenwnenwnwnwnwwnwsenenenwsenwnwneswne
|
||||
wwwsewwwenewwsw
|
||||
nwnwnenwnesenwwwwwnwnwwnwsewewnw
|
||||
nwnwenwnwnwnwnwnwnwnwsewnwnwswnwnwnwnww
|
||||
swnenwnewwnweswswenwnwnwsenwwnwenw
|
||||
nwnwnwnwnwwenwnwwewwnw
|
||||
swswnwnewnenenwseswnenenenenenenenwswesene
|
||||
swswsweeswsewseswsesesesesesewswswsenw
|
||||
wnwwswswwwswsewswneewswswswwneww
|
||||
eweeeeweneenee
|
||||
seeswseneneseneswsewneswsewswswwsese
|
||||
nenesenwneneneneewneeneeee
|
||||
wswswwsenewswswewnwwwswsw
|
||||
wneenenwnwnenwnesenwnwnenwnwnwnwnwwnw
|
||||
enwseewenwswswnwnwseswswnweswsesenwnw
|
||||
nwswswsesenenwnwwnenesenwnew
|
||||
neswwsewwneewswswnewswwnwnwwsesw
|
||||
nwnenenenwneneeswnenenwnenwneswnwnwnene
|
||||
neesewnwnwwwwnw
|
||||
seeseseseweseneeeseesenewseseese
|
||||
sweneneneneswsweeeesenwnenww
|
||||
neneneneneneneseneneneneneewenene
|
||||
seseseenweseseseeseseseseseenwse
|
||||
seswswswswwwswwwswswswneswswswwnwswsw
|
||||
swswwswswswnwswsweswswewswswswswweswsw
|
||||
senenenewnwnenwsene
|
||||
swnenwnwneswnwnwnenweenwnw
|
||||
sewwwseseesenesesenwwswseesesenesese
|
||||
nwnwsenenwnwnwnwwnenwnwnenwnesenwsenenenw
|
||||
eeeseseeeseseeseeeenweseseee
|
||||
neseseseswnwsenwsenwsesesenenwsewsesese
|
||||
eeeeeneeseseseseesewesweeneesese
|
||||
nwwwwswnewwwwwewenenesesewsenw
|
||||
wnenenwnwnenesenwnwnenwswnwnenwneeswnwnw
|
||||
seeswswnwseenesenwsesesenwwenwswwswse
|
||||
seseseneseseseswseseseneseneseseseswwse
|
||||
nwnwnwnwnweswenwnwnwnwswnwnwseswewnwse
|
||||
eeswneeeneeeweeneeenweenenew
|
||||
swneswswwwnwswwwswnewswseswwewswne
|
||||
sesenwseseseseseseesesenwsesesesesese
|
||||
enwseneswwswewwswwewwwwswnenwnww
|
||||
wwnewwwwwwnwwwwnwsewwwnwwnw
|
||||
nwswwwswwswwseswswswwwswwwswww
|
||||
eewnwsweeeeeenweeeenesweseee
|
||||
seeeseeeeeeseseeseseseseeesenw
|
||||
neseswsenewseseeswswsewne
|
||||
nwseseseseseseseswneesewseswswseswsese
|
||||
swnwnwnwwnesesenww
|
||||
senwnwwnwneweswnwwsenesewwnewwne
|
||||
eenwsweeeseeeseseeeeseeseesee
|
||||
eeseswneseeseeeswesenwseseeseese
|
||||
eeeseseneesesweeseenweseeesewew
|
||||
wwwswnweswwswswswswnwswnewseswswsw
|
||||
nwwswnewseswswswnewwswewwwswseww
|
||||
swnwswswwsesweswswswswswswswswswswswswse
|
||||
nwswwswneswnwwweswwwseswwwwswwwsw
|
||||
ewwnwswwnwnewseww
|
||||
wwwwwsesewwwwnenwewwnwwseww
|
||||
seseseesenweseseeseseenwsesenwseswnwswnw
|
||||
swswsewswswwswnew
|
||||
neneneneneneneneneswnenenenenenenenenene
|
||||
wnwswwewwnwsewweneswwwwswweww
|
||||
seseseseesewswseseseseenenesesesesese
|
||||
ewswswwswwswwewswwwwnwwsweww
|
||||
nwnwnwnwwsewnwnwnwnwnenwnwnwnwnwsenewnwnw
|
||||
seseswswswswnweswsenesesesesenwsesese
|
||||
nenenwnwwnesenesenwswnenwnwnweewnese
|
||||
wwwswswswwwewwswwwwwwwswsw
|
||||
nesewweenwswnesewsewnewnwenwsewse
|
||||
swnwwwnwwewwewseswwswwswwsww
|
||||
eseeeeseseeswneseeeesenwse
|
||||
swswswsesweswswswswswswswswswnwswswnwswswsw
|
||||
newwneswwwwsewwwswsewwwseneesw
|
||||
senwswseneeswseseesenwwnesesesweseesese
|
||||
nwenewneenesenenwneswnwnwsenwnwnenwwnw
|
||||
eeeeneesweeeenwneweeeneeee
|
||||
wewwwwwwsewwwwswwswwwneww
|
||||
nenenwneswewswneneswsenesenew
|
||||
nwneswnwnwnwneenenenwsenwnwne
|
||||
nwseweenwnweweeeeswsesenwwee
|
||||
enwseswwwswwwwnewwwswswswwswswsew
|
||||
nenewneeneneenenesenenenesenenewnene
|
||||
seswsweeseswswsewseswswsewnwswsw
|
||||
nwnwnwnwnwnwneenwnenwnwnwnwnwnwwnwnwnw
|
||||
eeeneeeeeeswneenwneeeeeswe
|
||||
senwnenwnwnwnwnwnwnwwnwnenwneenwwnenwse
|
||||
swwwnwnwwwswwnenwwnwneenweseseew
|
||||
sesenesewsewneswsesesesenwwesenwsese
|
||||
newwnwneewsewwswwnwnwwwnwwswnw
|
||||
nenwwswwnwwwwnw
|
||||
nenenenwneswneeeenwenenesweneswnenene
|
||||
nwwswwswwwnesewwwwswwswse
|
||||
sesenwseswswswseswswswswsw
|
||||
eesweeeeneee
|
||||
swewswswsesesweswswswseseseswswswsenw
|
||||
swswswseseswsenwseseseswsweswswseseswsesw
|
||||
wwnwenwnwwwsewwewwnwwnwwww
|
||||
swswswwswswswwswswneswswswwseswswswsw
|
||||
wewseseenesenwsenwnenwnwnwnwsenwnwnwnw
|
||||
neneswnenwnenenenenenwneswnenwne
|
||||
seswweswswseseseswseswswsweseswswswswswnw
|
||||
swswswwswswwwswwwneswswseswswswswsw
|
||||
eneneeweeseeeneneewe
|
||||
nwnwnewseneneeneneseswswnenenenenwnwnenw
|
||||
wneeeneneneneseneneeswnewneeweese
|
||||
nwsenwnewnenwnwnwnenwsenenwnesenwnewnwnwnw
|
||||
eesweeseeeeenweeeeeweeee
|
||||
nwnwnwwwnwwwnwnewwse
|
||||
wseseenwnwsenwnwnwnwnenenwnwnwnwswnwnwnw
|
||||
wnwsenwwnwsewnwnewnwnwwwwwneww
|
||||
nwsenwnenesenenenwnenenenwnwwnwwnenenenwse
|
||||
neeseseenesewsewnwnesweeewwneeee
|
||||
swseseseseseseseeeseseseseesesesesene
|
||||
eweeeseeneeseeseeseweseesesw
|
||||
wwnwsenwneswnenenwnenweseneneswnwswne
|
||||
neewwnesenesenewenenenenenenenenenene
|
||||
nwnenwnwnwenwnwwnwwswnwnenwnwswswsew
|
||||
esenenenenenenenenenenenewneneneneseewne
|
||||
senwseswseswswseeseswseseseseseswsesesese
|
||||
wnwewwnwwnewsewnwww
|
||||
seewwseseseseswswseseeseswswseseseswnw
|
||||
seneseeswnwsesesesesenweesesenwwsee
|
||||
wwwswwwwweswswww
|
||||
sesesesewnwsenwsweseweseseeseseenesese
|
||||
swwwseseseswnwwnenwnwswsw
|
||||
swseseseesenwswnewsenwseswseseseswnesesw
|
||||
swswswwwswewswwnwswwwwwswswswsw
|
||||
neneswseswswnwneswnwswswswswsewswsesw
|
||||
eeeewenenweeeeesenwseeeew
|
||||
swseswseswswnwswswseswsweswswswwswswsw
|
||||
nenenewnwnenenwnenwnenwnenenesenenenenenw
|
||||
wwwwnewnwwsewwnwwwwwsewnewwnw
|
||||
nwswswseswswswsenwseswswseswswswswnwsene
|
||||
nenenwsweneneneeneneewneneewseswnenwne
|
||||
seseswswseswseswswneswsweswnwenwseswswsw
|
||||
nwneswnewnwnwseewewneeneswnwnwenesw
|
||||
senwnwnwnwnwnwnwwswenwnwnewnenwwnwsee
|
||||
nenenenenenenenwnenenenenenenesenesenewnw
|
||||
eenenwenweeneneswneneesw
|
||||
newwwwswnewwnwwwsewwwsewwse
|
||||
enwnwnesenenwenweswsewseweswnewswse
|
||||
nwnwnwnwnwnenwnenenwnwnenwnwnwswnwswnenwenw
|
||||
nenenweeneneneeeneeeneneseenene
|
||||
eswwsweswsweswswswwswswwsw
|
||||
eeneneenenenenwneeneneneneeneeneesw
|
||||
wwwswnwwewwnwnwnwnwnwnwenwnwwnw
|
||||
swswnwswswswwwswswneswseeswswswswswww
|
||||
eeneneseneneneneneswnwneeseneenenwne
|
||||
nwwwseenwnwnwwsww
|
||||
nwesesenwnwsesweeseseseeseeseesee
|
||||
weweeeweeneeseeeswseeenwew
|
||||
wswwwwwwwwsewwewwswwnenew
|
||||
wewneeeeeesweeeeewswenene
|
||||
nwwneewsesewswwwnwewwsewnwnwnw
|
||||
seeseswenwneseeeeeseneseewnwwwnw
|
||||
neneneswnenenenwnenenenenenenenenenenene
|
||||
sewnwnwnwwwswnwewnwneswwnesenww
|
||||
neswsesewswwsenwswnwnweswne
|
||||
eneeneswneeneeweeeene
|
||||
swnwsenwnwnwnwnwnwnwnwnwnwnwewnwnwnwnw
|
||||
eseseseseseseeeesenwseseeseseewse
|
||||
nwnwnwnwsenwwwnwwwnwnwnenwswnwnesenw
|
||||
neswneswneseneneneswenenenenenenenewnenw
|
||||
seenwenweeseswesweeeeeeeese
|
||||
wnenweswwnwneneneenenenwnwesewnenw
|
||||
neneneeswenenenenenenenenenwnenenenenene
|
||||
weneeswnweeweeeseseeeese
|
||||
wwwwwnewwwswnwwwwwwwwww
|
||||
nwsenwsesesenwwwnwnwwewnwnwsenwnwnenw
|
||||
nwnenwwsenenwesenwnwwsewnwnwnenewsw
|
||||
nwnwnwnenwnwnenwswnwneneneenwsenenwnwnew
|
||||
neneneneneneneneneneneneneseewnenenenwne
|
||||
nenewnenwneneeseeewseenenwnenesesw
|
||||
enewswswswswswswweswswwseswwswswenww
|
||||
wswswswswswswswswswsweswswneneswswswne
|
||||
wnwnwnwnwenwswnwwnwwwwnwnwwenwnwnw
|
||||
seseseewesesenwseseeeseese
|
||||
nwnesenwnenwnwnenwnwenenwnenwneswnwnenwsw
|
||||
wesenwneswwswwswnewwswwwewww
|
||||
sewewnwwewsewnenenwseswwwswweswsw
|
||||
eswswswseswswwewwwwnenwwnewsww
|
||||
wnwswwswnwneseswseswswsesesweeesesenene
|
||||
seseswneneseswseseswnewseseseseswsesew
|
||||
wwwnwwwwwwwneewnwwwsew
|
||||
esenewsewseswnese
|
||||
wnwnwswnwwnewnwwnwnwwnwnwnwwnwww
|
||||
sewseseswseswneeswseseesesesewsese
|
||||
wwwswewnwwwwenwnwwnwew
|
||||
neneseeneeneneneeeneswwnwnwneneeenene
|
||||
eeeeeneeeeeeeeesweeeene
|
||||
wwwwswwwwwnwwwsewwnewwwwne
|
||||
swsenwswsewneswswswswswswseneswswsw
|
||||
nenewweneeseenesenwnenwwneeeseswsene
|
||||
swswwwswswswwneswswswweswswwswwsw
|
||||
sweneewwswwswswswneswswwnwwswwswse
|
||||
wseneneswneswnenenenenenwenwnwswswsenenee
|
||||
wswwswwwneswwswseswswswwwswswene
|
||||
enweeeeeeeeeeeeeeeswee
|
||||
enwseseeeeneeewenweeeesewe
|
||||
nenwnwnenenwnwneenenwnwnwnenenwswnwnene
|
||||
nenenewneswneeesenwneneneneewenenene
|
||||
nenwneneneneneneneneseswnewneseenenenenew
|
||||
nwnwnwnenwnwnwnwnwswnwnenwnwnwnwnwenwnenw
|
||||
seeswnwseseseswseswseseswswswswswswsesw
|
||||
nwewewnwnwnwewnwwsewnwwswweww
|
||||
nwnwnwnwenwnwnwnwnwswnwnwnwnwnwnwnwnwnw
|
||||
seseseneswwsweesesewseseseswseswwne
|
||||
wseneseseeswswswsewseswswseswswwese
|
||||
wwnwswwwnwnwsewwwenwnwnwww
|
||||
wseswseseseeseseseseseseseseswsesesese
|
||||
swsesenwswwswsweswneswswnwswswswswsesw
|
||||
weeeenenenwseewnesweneeeneswnene
|
||||
eenwnenenenenenenwneesenenesenenwnwsesw
|
||||
swesweswnwnewenwnwnwwnwwenwwwnwnw
|
||||
seewsenwswswswseseseseseseseswseswswsese
|
||||
neeenewsewneneneseweeneneenenwne
|
||||
nenwnwnwnwneeenwnenwnenenwswnenenwwne
|
||||
swswwswswewswswwswswswswswswswswswsw
|
||||
eseseseseseseesewenwseswseeesesese
|
||||
nwnwnwsenwnenwnwwnwnwnwnwnwnenwnenene
|
||||
esweenwneeeeseenw
|
||||
sesenwseseesesesesesesesesesesesesesenw
|
||||
wwwwnwwnewwwwwwwnwwse
|
||||
swnwewnwneeswweneeeseeenenenenene
|
||||
newenewnenesewswnenwsenenwsenwenenw
|
||||
seneseseseseseeswseseseswseswnwswseseswse
|
||||
nwwwwwwwwwwswwwnewwwnwwnw
|
||||
eenwsweewswnwewnwseswswswwwsesw
|
||||
eeneneneeneenenesweneneeeeenwne
|
||||
nenewnenewneneneneneneseenenwnenwnenene
|
||||
weeenweneeneeeneneeneeeeesee
|
||||
nenwneneeesenwswsewnewwnesweenesene
|
||||
wswnewneseswsenwsesewnwswsenenesewsw
|
||||
swswswnwnwwswsewnenewnesesww
|
||||
nwwenwnwwnwnwwnwseneenwwnwsew
|
||||
seeseseseseswseseseseseseseswsesenwswnwnw
|
||||
sewwwwswwewwwwswwwswwneswsewne
|
||||
seneseneneenenesenwnenesenwnenewwenene
|
||||
nenenenenenenwnesenenenenw
|
||||
swwswswswswweweswwswswswwwwwenw
|
||||
wwwsenwswswswwewwwswwwswwneww
|
||||
wwwwwsewsewwswnwwnwwnwsewwww
|
||||
eeneswswnwewweeneesweee
|
||||
eneswswwswswswswswswwnwswwswwwswse
|
||||
swseseseseswnwseseseseneswswswswsesesesw
|
||||
swseseseseswsewswseseswsesenesesesesese
|
||||
neeeweeneeenesweeneeewesenene
|
||||
nwswswswseswswswseswsenwseseswseseswswsw
|
||||
swneeseneneneenwenweeeeewnenene
|
||||
wwsesweswnwwwwwwenwwsewnwnwne
|
||||
swswseseswswsewswseeswsese
|
||||
wwwwswswswwwswswnwewwswswwwsw
|
||||
swwsweswwswewewwwswnwewwww
|
||||
esenwsewsenesweseesenweesee
|
||||
eneeeeseeseeeneswweneseenewwe
|
||||
swnwswswswswswswswswswswswswswswswswswesw
|
||||
eneeseeesesesenwwenwsese
|
||||
neeneneeesweeneeneneeeneeenenenw
|
||||
wsenwwwswwwwnwnewwnwnwwwnwwww
|
||||
neseeneneneeneneneneneenweneeeee
|
||||
nwneswwswwswnwenwwneneseeseseswwswnw
|
||||
nwnwnwnenwnwnwewnwwsenwnwnwnwnwnwnwnwne
|
||||
ewwnewseenwwnwew
|
||||
nwnenenenenewnenwnenwneneenenwnenenwnw
|
||||
nenwnwnewnwnwnwwsewsew
|
||||
eseeseeeeeeseeeeew
|
||||
seseeseeseseswnwsenwsesenwsesesesenwsenwse
|
||||
wnwenwnwenwnwsewnwnewnwneswwewswsw
|
||||
neneneneneneswnenenewnenwnenenenwnesene
|
||||
sesesesesesesenweswseseseseseesesesesese
|
||||
enweeeeeeseseeeeenweeeeese
|
||||
sesesesenewseseneseseneseseseswsesesewse
|
||||
seswswseweswnwswnweseswneswwswswswse
|
||||
wsenwwnwwwwww
|
||||
nwsewwnwwswwnewnewwwwwswww
|
||||
newwwsewwnwnewwwswswwwswwwsw
|
||||
sesenwneneswseswesewseseeneseeswnwnw
|
||||
nwseseseeseswseseeeseseswsenwesenese
|
||||
nwnwswswswewswewsewswwsw
|
||||
sesenwseseseseneseseeswseneseswseswwsese
|
||||
ewwwsewwwwewwnwwwnwwwww
|
||||
eeswneenweeenwseeeesweenweee
|
||||
wswseesweswswnwswwwswewswneswswsw
|
||||
swseseseswsweswwseeseseswswnwsenweswse
|
||||
seseswwseseswseswswseseseswnesesesesesesw
|
||||
swneswswnewenwnesewnesewnenenwseeene
|
||||
nwenwnwnwnwwnwnwnwswnwnwsenwnwnwnwsenw
|
||||
wnwenwneswseesee
|
||||
eeeenweseseeesweeeeeeenwnw
|
||||
swswswswswswsesweswswswswnwswswswswswswsw
|
||||
nwwewwwwwwewwwwwew
|
||||
nenenwnwswnwnwnwnwnwnenenenwnwnwenwnenwnw
|
||||
neewnenewnwnenenwsenwe
|
||||
sesewsenwseseenwnwswene
|
||||
nenwnwenenesenenewneswnenenenesenw
|
||||
eeeseeesenweeenwenweeeneese
|
||||
wnewswnwwwwwswwswseswswnewwwnew
|
||||
sesesesesewseseesenesesesw
|
||||
nenenesenenenenenenwneenene
|
||||
swsesesesenesewseseseseswsesesesesesene
|
||||
neeneeeneeneneenenweeeesee
|
||||
senwnwnwnwenenenwnwnwswnw
|
||||
swswneswswneswswwwswwswswswswswwsww
|
||||
wwwwwwsewwwwwwwwwnewnwsew
|
||||
eeseesesewneeeseseseseeeeesesese
|
||||
neswnenwswswwswsenesweswwswswsweswswsw
|
||||
swseswwwwnwswsenwwwwewwwnesww
|
||||
neeseeswnwnwsweswe
|
||||
wenwnwnewnwnwsenwnenenwnwsenwnwswnwnwne
|
||||
eweswneeesesesenwneeseeesesesewsee
|
||||
nwneswneenwnwnenwnwnwnenwnwnwnwnwnwnenw
|
||||
swseseseswswneswnwwseseseseswsesesesesese
|
||||
nenwnewenenwneswsenenenenwnenewsenenenw
|
||||
nwnwnenwnwnwnwwnwnwnwnenwnwse
|
||||
esesewsenweseseseeneseee
|
||||
swsesenweeeeeenwneeeeesweeswe
|
||||
nwnwnwwswewsewwwwnwsewwwnwwe
|
||||
nwnwenwnwwnwnwnwnwnwwnwnwnwnwwwwwe
|
||||
nwwesweewsesenwsenewnwswnwsenwswsesw
|
||||
nesenenwnenenenenenwswnenenwnwnenwnew
|
||||
seneewnwnesweseneenwnenewnenenene
|
||||
nenenenwneswnwnenenwnwwenwenenenwnwnenw
|
||||
nwnwenwnwnwnwnwnwnwnwnwnwnwnwnwswnwww
|
||||
nenenenenenenenenewneswneneneenenene
|
||||
swnwenwnwnwswnenwnenewwweseeseewswne
|
||||
eeenweeneesweeeeeeeneeee
|
||||
eeneeneweneee
|
||||
wseswenewseeneenwneneseenwwesesw
|
||||
nwnwnwnwnwenwwnwnwnwwwnwwnwnwnwwnw
|
||||
nesewswswsesewesweswswseseswswnwnene
|
||||
nwswswnwwnewwwsesesenwesewswnese
|
||||
wwwsewnenwsewwswswswwnwwsewewsw
|
||||
eswsesewseseneswwseesenenwnwnweswseswse
|
||||
swswwswswseswswswswswswswswswswswswneswsw
|
||||
nwneseseswwnesewsenwswnenewsene
|
||||
wswswswnwswswswswswswswswsweswswseswnesw
|
||||
senesenesewseeewseseswsesesesenesesese
|
Some files were not shown because too many files have changed in this diff Show more
Loading…
Add table
Add a link
Reference in a new issue