Compare commits
5 Commits
e8e253128f
...
master
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
1f855400aa | ||
|
|
1c22f73a2b | ||
|
|
23d9bd4106 | ||
|
|
6646cf557f | ||
|
|
4427590639 |
BIN
day18/c/day18
Executable file
BIN
day18/c/day18
Executable file
Binary file not shown.
369
day18/c/day18.c
Normal file
369
day18/c/day18.c
Normal file
@@ -0,0 +1,369 @@
|
|||||||
|
#include <stdio.h>
|
||||||
|
#include <stdlib.h>
|
||||||
|
#include <string.h>
|
||||||
|
#include <stdint.h>
|
||||||
|
#include <limits.h>
|
||||||
|
|
||||||
|
#define LINE_MAX_LENGTH 256
|
||||||
|
#define MAX_ENTRIES 2048
|
||||||
|
#define MAX_QUEUE_LEN 256
|
||||||
|
#define MAX_EDGES 1024
|
||||||
|
#define MAX_BREAKPOINTS 512
|
||||||
|
#define min(a,b) ((a) < (b) ? (a) : (b))
|
||||||
|
#define max(a,b) ((a) > (b) ? (a) : (b))
|
||||||
|
|
||||||
|
typedef struct entry {
|
||||||
|
char direction;
|
||||||
|
long long count;
|
||||||
|
char rgb_string[10];
|
||||||
|
} entry_t;
|
||||||
|
|
||||||
|
typedef struct zone {
|
||||||
|
long long upper_left_corner[2];
|
||||||
|
long long lower_right_corner[2];
|
||||||
|
uint8_t outside;
|
||||||
|
} zone_t;
|
||||||
|
|
||||||
|
int cmp(const void* a, const void* b);
|
||||||
|
int on_edge(long long edges[MAX_EDGES][2][2], int edges_num, long long side[2][2]);
|
||||||
|
unsigned long long lake_volume(entry_t entries[], int entries_num);
|
||||||
|
void decode_rgbs(entry_t entries[], int entries_num);
|
||||||
|
|
||||||
|
int main() {
|
||||||
|
char *p, *buf, c;
|
||||||
|
|
||||||
|
buf = (char *)malloc(LINE_MAX_LENGTH);
|
||||||
|
memset(buf, 0, LINE_MAX_LENGTH);
|
||||||
|
p = buf;
|
||||||
|
|
||||||
|
entry_t entries[MAX_ENTRIES];
|
||||||
|
memset(entries, 0, MAX_ENTRIES * sizeof(entry_t));
|
||||||
|
int entries_num = 0;
|
||||||
|
|
||||||
|
while ((c = getchar()) != EOF) {
|
||||||
|
*p++ = c;
|
||||||
|
if (c == '\n') {
|
||||||
|
sscanf(buf, "%c %lli %s", &entries[entries_num].direction, &entries[entries_num].count, entries[entries_num].rgb_string);
|
||||||
|
entries_num++;
|
||||||
|
memset(buf, 0, LINE_MAX_LENGTH);
|
||||||
|
p = buf;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
unsigned long long part1 = lake_volume(entries, entries_num);
|
||||||
|
|
||||||
|
decode_rgbs(entries, entries_num);
|
||||||
|
|
||||||
|
unsigned long long part2 = lake_volume(entries, entries_num);
|
||||||
|
|
||||||
|
printf("%llu\n", part1);
|
||||||
|
printf("%llu\n", part2);
|
||||||
|
|
||||||
|
free(buf);
|
||||||
|
}
|
||||||
|
|
||||||
|
int cmp(const void* a, const void* b) {
|
||||||
|
return *(long long*)a - *(long long*)b;
|
||||||
|
}
|
||||||
|
|
||||||
|
int on_edge(long long edges[MAX_EDGES][2][2], int edges_num, long long side[2][2]) {
|
||||||
|
for (int i = 0; i < edges_num; i++) {
|
||||||
|
if (edges[i][0][0] == side[0][0] && edges[i][0][0] == edges[i][1][0] && side[0][0] == side[1][0] && edges[i][0][1] <= side[0][1] && edges[i][1][1] >= side[1][1]) {
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
if (edges[i][0][1] == side[0][1] && edges[i][0][1] == edges[i][1][1] && side[0][1] == side[1][1] && edges[i][0][0] <= side[0][0] && edges[i][1][0] >= side[1][0]) {
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
unsigned long long lake_volume(entry_t entries[], int entries_num) {
|
||||||
|
long long x = 0, y = 0, dir[2];
|
||||||
|
|
||||||
|
long long edges[MAX_EDGES][2][2];
|
||||||
|
memset(edges, 0, MAX_EDGES * 2 * 2 * sizeof(long long));
|
||||||
|
int edges_num = 0;
|
||||||
|
|
||||||
|
for (int i = 0; i < entries_num; i++) {
|
||||||
|
switch (entries[i].direction) {
|
||||||
|
case 'R':
|
||||||
|
dir[0] = 1;
|
||||||
|
dir[1] = 0;
|
||||||
|
edges[edges_num][0][0] = x;
|
||||||
|
edges[edges_num][0][1] = y;
|
||||||
|
edges[edges_num][1][0] = x + entries[i].count * dir[0];
|
||||||
|
edges[edges_num][1][1] = y + entries[i].count * dir[1];
|
||||||
|
edges_num++;
|
||||||
|
break;
|
||||||
|
case 'L':
|
||||||
|
dir[0] = -1;
|
||||||
|
dir[1] = 0;
|
||||||
|
edges[edges_num][1][0] = x;
|
||||||
|
edges[edges_num][1][1] = y;
|
||||||
|
edges[edges_num][0][0] = x + entries[i].count * dir[0];
|
||||||
|
edges[edges_num][0][1] = y + entries[i].count * dir[1];
|
||||||
|
edges_num++;
|
||||||
|
break;
|
||||||
|
case 'U':
|
||||||
|
dir[0] = 0;
|
||||||
|
dir[1] = -1;
|
||||||
|
edges[edges_num][1][0] = x;
|
||||||
|
edges[edges_num][1][1] = y;
|
||||||
|
edges[edges_num][0][0] = x + entries[i].count * dir[0];
|
||||||
|
edges[edges_num][0][1] = y + entries[i].count * dir[1];
|
||||||
|
edges_num++;
|
||||||
|
break;
|
||||||
|
case 'D':
|
||||||
|
dir[0] = 0;
|
||||||
|
dir[1] = 1;
|
||||||
|
edges[edges_num][0][0] = x;
|
||||||
|
edges[edges_num][0][1] = y;
|
||||||
|
edges[edges_num][1][0] = x + entries[i].count * dir[0];
|
||||||
|
edges[edges_num][1][1] = y + entries[i].count * dir[1];
|
||||||
|
edges_num++;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
x += entries[i].count * dir[0];
|
||||||
|
y += entries[i].count * dir[1];
|
||||||
|
}
|
||||||
|
|
||||||
|
// Find smallest and largest x and y
|
||||||
|
long long min_x = LLONG_MAX, max_x = LLONG_MIN, min_y = LLONG_MAX, max_y = LLONG_MIN;
|
||||||
|
for (int i = 0; i < edges_num; i++) {
|
||||||
|
if (edges[i][0][0] < min_x) {
|
||||||
|
min_x = edges[i][0][0];
|
||||||
|
}
|
||||||
|
if (edges[i][1][0] > max_x) {
|
||||||
|
max_x = edges[i][1][0];
|
||||||
|
}
|
||||||
|
if (edges[i][0][1] < min_y) {
|
||||||
|
min_y = edges[i][0][1];
|
||||||
|
}
|
||||||
|
if (edges[i][1][1] > max_y) {
|
||||||
|
max_y = edges[i][1][1];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// X breakpoints
|
||||||
|
long long x_breakpoints[MAX_BREAKPOINTS], x_breakpoints_num = 0;
|
||||||
|
for (int i = 0; i < edges_num; i++) {
|
||||||
|
int found = 0;
|
||||||
|
for (int j = 0; j < x_breakpoints_num; j++) {
|
||||||
|
if (edges[i][0][0] == x_breakpoints[j]) {
|
||||||
|
found = 1;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (!found) {
|
||||||
|
x_breakpoints[x_breakpoints_num] = edges[i][0][0];
|
||||||
|
x_breakpoints_num++;
|
||||||
|
}
|
||||||
|
found = 0;
|
||||||
|
for (int j = 0; j < x_breakpoints_num; j++) {
|
||||||
|
if (edges[i][1][0] == x_breakpoints[j]) {
|
||||||
|
found = 1;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (!found) {
|
||||||
|
x_breakpoints[x_breakpoints_num] = edges[i][1][0];
|
||||||
|
x_breakpoints_num++;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
qsort(x_breakpoints, x_breakpoints_num, sizeof(x_breakpoints[0]), &cmp);
|
||||||
|
|
||||||
|
// Y breakpoints
|
||||||
|
long long y_breakpoints[MAX_BREAKPOINTS], y_breakpoints_num = 0;
|
||||||
|
for (int i = 0; i < edges_num; i++) {
|
||||||
|
int found = 0;
|
||||||
|
for (int j = 0; j < y_breakpoints_num; j++) {
|
||||||
|
if (edges[i][0][1] == y_breakpoints[j]) {
|
||||||
|
found = 1;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (!found) {
|
||||||
|
y_breakpoints[y_breakpoints_num] = edges[i][0][1];
|
||||||
|
y_breakpoints_num++;
|
||||||
|
}
|
||||||
|
found = 0;
|
||||||
|
for (int j = 0; j < y_breakpoints_num; j++) {
|
||||||
|
if (edges[i][1][1] == y_breakpoints[j]) {
|
||||||
|
found = 1;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (!found) {
|
||||||
|
y_breakpoints[y_breakpoints_num] = edges[i][1][1];
|
||||||
|
y_breakpoints_num++;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
qsort(y_breakpoints, y_breakpoints_num, sizeof(y_breakpoints[0]), &cmp);
|
||||||
|
|
||||||
|
zone_t **zones = (zone_t**)malloc((x_breakpoints_num - 1) * sizeof(zone_t*));
|
||||||
|
for (int i = 0; i < x_breakpoints_num - 1; i++) {
|
||||||
|
zones[i] = (zone_t*)malloc((y_breakpoints_num - 1) * sizeof(zone_t));
|
||||||
|
memset(zones[i], 0, (y_breakpoints_num - 1) * sizeof(zone_t));
|
||||||
|
}
|
||||||
|
zone_t *curr;
|
||||||
|
|
||||||
|
for (int i = 0; i < y_breakpoints_num - 1; i++) {
|
||||||
|
for (int j = 0; j < x_breakpoints_num - 1; j++) {
|
||||||
|
curr = &zones[j][i];
|
||||||
|
curr->upper_left_corner[0] = x_breakpoints[j];
|
||||||
|
curr->upper_left_corner[1] = y_breakpoints[i];
|
||||||
|
curr->lower_right_corner[0] = x_breakpoints[j + 1];
|
||||||
|
curr->lower_right_corner[1] = y_breakpoints[i + 1];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Mark zones as outside
|
||||||
|
int found = 1;
|
||||||
|
while (found) {
|
||||||
|
found = 0;
|
||||||
|
for (int i = 0; i < y_breakpoints_num - 1; i++) {
|
||||||
|
for (int j = 0; j < x_breakpoints_num - 1; j++) {
|
||||||
|
if (zones[j][i].outside) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
// LEFT
|
||||||
|
long long side[2][2];
|
||||||
|
side[0][0] = zones[j][i].upper_left_corner[0];
|
||||||
|
side[0][1] = zones[j][i].upper_left_corner[1];
|
||||||
|
side[1][0] = zones[j][i].upper_left_corner[0];
|
||||||
|
side[1][1] = zones[j][i].lower_right_corner[1];
|
||||||
|
if (j == 0 && !on_edge(edges, edges_num, side)) {
|
||||||
|
zones[j][i].outside = 1;
|
||||||
|
found = 1;
|
||||||
|
}
|
||||||
|
if (j > 0 && zones[j-1][i].outside && !on_edge(edges, edges_num, side)) {
|
||||||
|
zones[j][i].outside = 1;
|
||||||
|
found = 1;
|
||||||
|
}
|
||||||
|
// RIGHT
|
||||||
|
side[0][0] = zones[j][i].lower_right_corner[0];
|
||||||
|
side[0][1] = zones[j][i].upper_left_corner[1];
|
||||||
|
side[1][0] = zones[j][i].lower_right_corner[0];
|
||||||
|
side[1][1] = zones[j][i].lower_right_corner[1];
|
||||||
|
if (j == x_breakpoints_num - 2 && !on_edge(edges, edges_num, side)) {
|
||||||
|
zones[j][i].outside = 1;
|
||||||
|
found = 1;
|
||||||
|
}
|
||||||
|
if (j < x_breakpoints_num - 2 && zones[j+1][i].outside && !on_edge(edges, edges_num, side)) {
|
||||||
|
zones[j][i].outside = 1;
|
||||||
|
found = 1;
|
||||||
|
}
|
||||||
|
// UP
|
||||||
|
side[0][0] = zones[j][i].upper_left_corner[0];
|
||||||
|
side[0][1] = zones[j][i].upper_left_corner[1];
|
||||||
|
side[1][0] = zones[j][i].lower_right_corner[0];
|
||||||
|
side[1][1] = zones[j][i].upper_left_corner[1];
|
||||||
|
if (i == 0 && !on_edge(edges, edges_num, side)) {
|
||||||
|
zones[j][i].outside = 1;
|
||||||
|
found = 1;
|
||||||
|
}
|
||||||
|
if (i > 0 && zones[j][i-1].outside && !on_edge(edges, edges_num, side)) {
|
||||||
|
zones[j][i].outside = 1;
|
||||||
|
found = 1;
|
||||||
|
}
|
||||||
|
// DOWN
|
||||||
|
side[0][0] = zones[j][i].upper_left_corner[0];
|
||||||
|
side[0][1] = zones[j][i].lower_right_corner[1];
|
||||||
|
side[1][0] = zones[j][i].lower_right_corner[0];
|
||||||
|
side[1][1] = zones[j][i].lower_right_corner[1];
|
||||||
|
if (i == y_breakpoints_num - 2 && !on_edge(edges, edges_num, side)) {
|
||||||
|
zones[j][i].outside = 1;
|
||||||
|
found = 1;
|
||||||
|
}
|
||||||
|
if (i < y_breakpoints_num - 2 && zones[j][i+1].outside && !on_edge(edges, edges_num, side)) {
|
||||||
|
zones[j][i].outside = 1;
|
||||||
|
found = 1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
unsigned long long sum = 0;
|
||||||
|
unsigned long long out = 0;
|
||||||
|
for (int i = 0; i < y_breakpoints_num - 1; i++) {
|
||||||
|
for (int j = 0; j < x_breakpoints_num - 1; j++) {
|
||||||
|
if (zones[j][i].outside) {
|
||||||
|
out++;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
for (int i = 0; i < y_breakpoints_num - 1; i++) {
|
||||||
|
for (int j = 0; j < x_breakpoints_num - 1; j++) {
|
||||||
|
if (zones[j][i].outside) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
sum += (zones[j][i].lower_right_corner[0] - zones[j][i].upper_left_corner[0] - 1) * (zones[j][i].lower_right_corner[1] - zones[j][i].upper_left_corner[1] - 1);
|
||||||
|
// RIGHT
|
||||||
|
long long side[2][2];
|
||||||
|
side[0][0] = zones[j][i].lower_right_corner[0];
|
||||||
|
side[0][1] = zones[j][i].upper_left_corner[1];
|
||||||
|
side[1][0] = zones[j][i].lower_right_corner[0];
|
||||||
|
side[1][1] = zones[j][i].lower_right_corner[1];
|
||||||
|
if (!on_edge(edges, edges_num, side)) {
|
||||||
|
sum += side[1][1] - side[0][1] - 1;
|
||||||
|
}
|
||||||
|
// DOWN
|
||||||
|
side[0][1] = zones[j][i].lower_right_corner[1];
|
||||||
|
side[0][0] = zones[j][i].upper_left_corner[0];
|
||||||
|
side[1][0] = zones[j][i].lower_right_corner[0];
|
||||||
|
side[1][1] = zones[j][i].lower_right_corner[1];
|
||||||
|
if (!on_edge(edges, edges_num, side)) {
|
||||||
|
sum += side[1][0] - side[0][0] - 1;
|
||||||
|
}
|
||||||
|
// CORNER
|
||||||
|
side[0][1] = zones[j][i].lower_right_corner[1];
|
||||||
|
side[0][0] = zones[j][i].lower_right_corner[0];
|
||||||
|
side[1][0] = zones[j][i].lower_right_corner[0];
|
||||||
|
side[1][1] = zones[j][i].lower_right_corner[1];
|
||||||
|
if (!on_edge(edges, edges_num, side)) {
|
||||||
|
sum++;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
for (int i = 0; i < edges_num; i++) {
|
||||||
|
sum += (edges[i][1][0] - edges[i][0][0]) + (edges[i][1][1] - edges[i][0][1]);
|
||||||
|
}
|
||||||
|
|
||||||
|
for (int i = 0; i < x_breakpoints_num - 1; i++) {
|
||||||
|
free(zones[i]);
|
||||||
|
}
|
||||||
|
free(zones);
|
||||||
|
|
||||||
|
return sum;
|
||||||
|
}
|
||||||
|
|
||||||
|
void decode_rgbs(entry_t entries[], int entries_num) {
|
||||||
|
for (int i = 0; i < entries_num; i++) {
|
||||||
|
char value[6], *p;
|
||||||
|
memset(value, 0, 6);
|
||||||
|
p = entries[i].rgb_string;
|
||||||
|
while(*p != '#') p++;
|
||||||
|
p++;
|
||||||
|
strncpy(value, p, 5);
|
||||||
|
sscanf(value, "%llx", &entries[i].count);
|
||||||
|
switch(entries[i].rgb_string[7]) {
|
||||||
|
case '0':
|
||||||
|
entries[i].direction = 'R';
|
||||||
|
break;
|
||||||
|
case '1':
|
||||||
|
entries[i].direction = 'D';
|
||||||
|
break;
|
||||||
|
case '2':
|
||||||
|
entries[i].direction = 'L';
|
||||||
|
break;
|
||||||
|
case '3':
|
||||||
|
entries[i].direction = 'U';
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
660
day18/input.txt
Normal file
660
day18/input.txt
Normal file
@@ -0,0 +1,660 @@
|
|||||||
|
L 3 (#07b412)
|
||||||
|
D 5 (#713ad1)
|
||||||
|
L 2 (#11e6d2)
|
||||||
|
D 4 (#6ba7d3)
|
||||||
|
L 3 (#7cfca2)
|
||||||
|
U 5 (#0a85c3)
|
||||||
|
L 2 (#3a5282)
|
||||||
|
U 4 (#6f91a3)
|
||||||
|
L 3 (#32c2f0)
|
||||||
|
U 6 (#2dd7b3)
|
||||||
|
L 6 (#848c30)
|
||||||
|
U 7 (#077a43)
|
||||||
|
R 5 (#ba4692)
|
||||||
|
U 6 (#49b551)
|
||||||
|
R 3 (#14d162)
|
||||||
|
U 8 (#397871)
|
||||||
|
R 5 (#1c73f2)
|
||||||
|
D 8 (#7130e1)
|
||||||
|
R 4 (#c84852)
|
||||||
|
U 2 (#203b91)
|
||||||
|
R 3 (#288e30)
|
||||||
|
U 5 (#91ba91)
|
||||||
|
R 4 (#5dda70)
|
||||||
|
U 3 (#91ba93)
|
||||||
|
R 4 (#732500)
|
||||||
|
U 4 (#0676f1)
|
||||||
|
L 9 (#6701a2)
|
||||||
|
U 4 (#5c38c1)
|
||||||
|
L 7 (#0f7480)
|
||||||
|
U 4 (#921b21)
|
||||||
|
L 6 (#83d9e0)
|
||||||
|
U 2 (#28c691)
|
||||||
|
L 7 (#1b6de0)
|
||||||
|
U 2 (#02cee1)
|
||||||
|
L 4 (#5b66b0)
|
||||||
|
U 4 (#bdb093)
|
||||||
|
L 6 (#75eb20)
|
||||||
|
U 4 (#928251)
|
||||||
|
L 4 (#6bb430)
|
||||||
|
D 7 (#44ad91)
|
||||||
|
L 2 (#806b50)
|
||||||
|
U 7 (#7d1391)
|
||||||
|
L 4 (#7a3652)
|
||||||
|
U 5 (#9cbf41)
|
||||||
|
L 5 (#905712)
|
||||||
|
U 2 (#70beb3)
|
||||||
|
L 2 (#bede02)
|
||||||
|
U 7 (#70beb1)
|
||||||
|
R 3 (#a2c232)
|
||||||
|
U 5 (#7b0ad1)
|
||||||
|
R 5 (#01d012)
|
||||||
|
U 5 (#2b1901)
|
||||||
|
R 7 (#698c32)
|
||||||
|
U 4 (#a19d91)
|
||||||
|
R 4 (#7dbb92)
|
||||||
|
U 3 (#8feb41)
|
||||||
|
R 5 (#021ab2)
|
||||||
|
U 3 (#42a773)
|
||||||
|
R 6 (#99c6c2)
|
||||||
|
D 7 (#8f7b33)
|
||||||
|
R 5 (#01fd82)
|
||||||
|
D 5 (#8e7263)
|
||||||
|
R 2 (#37e492)
|
||||||
|
U 5 (#10bff3)
|
||||||
|
R 5 (#a09242)
|
||||||
|
U 7 (#126723)
|
||||||
|
R 3 (#864230)
|
||||||
|
D 8 (#70bc43)
|
||||||
|
R 5 (#7cf4a0)
|
||||||
|
D 2 (#8135d3)
|
||||||
|
R 6 (#144b70)
|
||||||
|
U 5 (#0c51e3)
|
||||||
|
L 6 (#00e590)
|
||||||
|
U 4 (#44ba73)
|
||||||
|
L 2 (#4177e2)
|
||||||
|
U 4 (#a4c5b1)
|
||||||
|
L 6 (#6f2f12)
|
||||||
|
U 3 (#9a4ce1)
|
||||||
|
L 4 (#979402)
|
||||||
|
D 7 (#2a0ce1)
|
||||||
|
L 3 (#0c1b70)
|
||||||
|
U 7 (#58ca71)
|
||||||
|
L 3 (#95d640)
|
||||||
|
U 4 (#549241)
|
||||||
|
R 10 (#a1f1b2)
|
||||||
|
U 3 (#1753b1)
|
||||||
|
L 5 (#1d32d2)
|
||||||
|
U 5 (#9a58d3)
|
||||||
|
L 5 (#4dc1b2)
|
||||||
|
U 6 (#1ab693)
|
||||||
|
L 4 (#5e8df2)
|
||||||
|
U 3 (#4dabf3)
|
||||||
|
R 6 (#972492)
|
||||||
|
U 5 (#3198c3)
|
||||||
|
R 4 (#972490)
|
||||||
|
U 3 (#54b613)
|
||||||
|
R 6 (#4a8bb2)
|
||||||
|
U 2 (#a4c5b3)
|
||||||
|
R 3 (#126042)
|
||||||
|
U 9 (#54acc3)
|
||||||
|
L 5 (#2b4682)
|
||||||
|
U 4 (#88f453)
|
||||||
|
L 4 (#2b4680)
|
||||||
|
U 8 (#4a4283)
|
||||||
|
L 2 (#8bfdf0)
|
||||||
|
U 2 (#a76851)
|
||||||
|
L 4 (#0a9b30)
|
||||||
|
U 6 (#43a141)
|
||||||
|
L 3 (#14fd80)
|
||||||
|
U 3 (#7e5391)
|
||||||
|
L 6 (#43ba40)
|
||||||
|
D 2 (#146e93)
|
||||||
|
L 4 (#9c71b0)
|
||||||
|
D 7 (#5ae483)
|
||||||
|
L 5 (#0bcd70)
|
||||||
|
U 6 (#52a1c3)
|
||||||
|
L 4 (#3307f0)
|
||||||
|
U 4 (#1da3f3)
|
||||||
|
L 3 (#7a8c80)
|
||||||
|
D 5 (#89c463)
|
||||||
|
L 2 (#2984e0)
|
||||||
|
D 2 (#828673)
|
||||||
|
L 6 (#2cf252)
|
||||||
|
U 7 (#500061)
|
||||||
|
L 4 (#a07ff2)
|
||||||
|
U 3 (#565f21)
|
||||||
|
R 3 (#09ef22)
|
||||||
|
U 3 (#a65f83)
|
||||||
|
R 5 (#410672)
|
||||||
|
U 4 (#24fe73)
|
||||||
|
L 5 (#b6ed72)
|
||||||
|
U 8 (#4574d3)
|
||||||
|
L 6 (#2e3142)
|
||||||
|
D 8 (#7ba311)
|
||||||
|
L 3 (#1bc442)
|
||||||
|
U 6 (#38b161)
|
||||||
|
L 4 (#8ada92)
|
||||||
|
U 2 (#24cdf1)
|
||||||
|
L 3 (#37b3e2)
|
||||||
|
U 3 (#3a3ec1)
|
||||||
|
R 5 (#242ea2)
|
||||||
|
U 2 (#1fe073)
|
||||||
|
R 5 (#9ad182)
|
||||||
|
U 6 (#4a9193)
|
||||||
|
R 6 (#34c480)
|
||||||
|
U 2 (#9ff123)
|
||||||
|
R 5 (#34c482)
|
||||||
|
U 4 (#08fe03)
|
||||||
|
R 3 (#46d292)
|
||||||
|
D 10 (#19fca3)
|
||||||
|
R 3 (#1ea7d2)
|
||||||
|
D 6 (#c2d531)
|
||||||
|
R 8 (#614f82)
|
||||||
|
D 6 (#c2d533)
|
||||||
|
R 6 (#777202)
|
||||||
|
D 2 (#38f573)
|
||||||
|
R 3 (#84e142)
|
||||||
|
D 3 (#036d11)
|
||||||
|
R 5 (#113352)
|
||||||
|
D 5 (#036d13)
|
||||||
|
R 3 (#7ad752)
|
||||||
|
U 4 (#969de3)
|
||||||
|
R 7 (#7887d0)
|
||||||
|
U 3 (#31aa61)
|
||||||
|
R 4 (#affca0)
|
||||||
|
U 6 (#31aa63)
|
||||||
|
R 2 (#374010)
|
||||||
|
U 6 (#574d53)
|
||||||
|
L 4 (#4edbd2)
|
||||||
|
U 2 (#2271c1)
|
||||||
|
L 7 (#595d32)
|
||||||
|
U 3 (#2271c3)
|
||||||
|
R 3 (#2c6532)
|
||||||
|
U 5 (#2754d3)
|
||||||
|
R 8 (#8b2652)
|
||||||
|
U 4 (#b27ab3)
|
||||||
|
R 6 (#824b80)
|
||||||
|
D 4 (#587173)
|
||||||
|
R 4 (#3715b0)
|
||||||
|
D 5 (#8f0b61)
|
||||||
|
R 3 (#6a2ac0)
|
||||||
|
D 3 (#1e0b21)
|
||||||
|
R 5 (#29a290)
|
||||||
|
D 3 (#8850b3)
|
||||||
|
R 5 (#9013e0)
|
||||||
|
D 3 (#24c5d3)
|
||||||
|
R 5 (#2b12d0)
|
||||||
|
U 6 (#4090a3)
|
||||||
|
R 3 (#9cddd0)
|
||||||
|
D 6 (#a93843)
|
||||||
|
R 4 (#6fff30)
|
||||||
|
D 4 (#3f1121)
|
||||||
|
L 7 (#76f2c0)
|
||||||
|
D 4 (#4f9e11)
|
||||||
|
L 3 (#76f2c2)
|
||||||
|
D 8 (#480d31)
|
||||||
|
L 6 (#694740)
|
||||||
|
D 5 (#177e81)
|
||||||
|
L 9 (#692aa2)
|
||||||
|
D 3 (#10b971)
|
||||||
|
R 9 (#42f012)
|
||||||
|
D 3 (#10b973)
|
||||||
|
R 3 (#2c6202)
|
||||||
|
D 8 (#851881)
|
||||||
|
R 3 (#04ae62)
|
||||||
|
D 2 (#470d81)
|
||||||
|
R 4 (#155e10)
|
||||||
|
U 3 (#01b053)
|
||||||
|
R 2 (#c55dd0)
|
||||||
|
U 5 (#01b051)
|
||||||
|
R 9 (#026f30)
|
||||||
|
D 2 (#113081)
|
||||||
|
R 2 (#694742)
|
||||||
|
D 4 (#22d821)
|
||||||
|
L 5 (#03eb80)
|
||||||
|
D 5 (#3bc5d1)
|
||||||
|
L 4 (#69bf90)
|
||||||
|
D 3 (#3fdce3)
|
||||||
|
L 4 (#2d1350)
|
||||||
|
D 2 (#3fdce1)
|
||||||
|
L 3 (#65f500)
|
||||||
|
U 4 (#bd7f81)
|
||||||
|
L 8 (#8382e0)
|
||||||
|
D 4 (#160053)
|
||||||
|
L 7 (#5ff9f0)
|
||||||
|
D 4 (#ab40d3)
|
||||||
|
R 6 (#5ff9f2)
|
||||||
|
D 2 (#58d1b3)
|
||||||
|
R 2 (#6bcc80)
|
||||||
|
D 6 (#b187c3)
|
||||||
|
R 6 (#73b290)
|
||||||
|
D 3 (#9fbf43)
|
||||||
|
R 4 (#630f00)
|
||||||
|
D 2 (#4f1b13)
|
||||||
|
R 7 (#543b30)
|
||||||
|
D 7 (#114c43)
|
||||||
|
R 6 (#629ac0)
|
||||||
|
D 6 (#1bedb3)
|
||||||
|
R 4 (#016f50)
|
||||||
|
D 2 (#285e31)
|
||||||
|
R 3 (#611460)
|
||||||
|
D 7 (#0dfd61)
|
||||||
|
R 2 (#75f3e0)
|
||||||
|
D 2 (#1e79b1)
|
||||||
|
R 4 (#144e90)
|
||||||
|
U 5 (#d16ff1)
|
||||||
|
R 4 (#144e92)
|
||||||
|
U 6 (#113511)
|
||||||
|
R 5 (#610450)
|
||||||
|
U 3 (#1291c1)
|
||||||
|
R 2 (#328eb0)
|
||||||
|
U 5 (#2f3f73)
|
||||||
|
R 9 (#126af2)
|
||||||
|
U 4 (#946843)
|
||||||
|
L 6 (#126af0)
|
||||||
|
U 5 (#866453)
|
||||||
|
L 7 (#352e70)
|
||||||
|
U 4 (#5f8413)
|
||||||
|
L 7 (#c618e2)
|
||||||
|
U 3 (#6c2813)
|
||||||
|
L 2 (#c618e0)
|
||||||
|
U 3 (#1d3db3)
|
||||||
|
R 8 (#37e470)
|
||||||
|
U 2 (#1705b3)
|
||||||
|
R 6 (#6ab412)
|
||||||
|
U 6 (#961873)
|
||||||
|
R 3 (#6ab410)
|
||||||
|
U 8 (#30e6f3)
|
||||||
|
R 5 (#3308e0)
|
||||||
|
U 3 (#1fc8c1)
|
||||||
|
R 3 (#3450a0)
|
||||||
|
D 8 (#9d4391)
|
||||||
|
R 3 (#6a9c70)
|
||||||
|
D 2 (#25d071)
|
||||||
|
R 4 (#3e5330)
|
||||||
|
D 6 (#401381)
|
||||||
|
R 5 (#399052)
|
||||||
|
D 3 (#ab9e81)
|
||||||
|
R 4 (#2622a2)
|
||||||
|
D 4 (#68c4c3)
|
||||||
|
R 4 (#2c5f92)
|
||||||
|
D 3 (#8021d3)
|
||||||
|
R 5 (#75bd02)
|
||||||
|
D 3 (#1885a1)
|
||||||
|
R 3 (#67b420)
|
||||||
|
D 3 (#7df001)
|
||||||
|
R 6 (#67b422)
|
||||||
|
D 2 (#5270f1)
|
||||||
|
R 3 (#2bbed2)
|
||||||
|
D 9 (#863371)
|
||||||
|
L 3 (#45ba70)
|
||||||
|
D 6 (#49f553)
|
||||||
|
L 2 (#693800)
|
||||||
|
D 6 (#49f551)
|
||||||
|
L 7 (#450b90)
|
||||||
|
D 7 (#3b7aa1)
|
||||||
|
R 5 (#399050)
|
||||||
|
D 2 (#0b37f1)
|
||||||
|
R 4 (#5cbff0)
|
||||||
|
U 4 (#573103)
|
||||||
|
R 3 (#3668c0)
|
||||||
|
U 9 (#573101)
|
||||||
|
R 4 (#7d0a50)
|
||||||
|
U 7 (#316341)
|
||||||
|
R 3 (#4cbab0)
|
||||||
|
U 8 (#5c0f21)
|
||||||
|
R 3 (#22b3a2)
|
||||||
|
U 3 (#804941)
|
||||||
|
R 4 (#22b3a0)
|
||||||
|
U 7 (#173641)
|
||||||
|
R 5 (#1b7230)
|
||||||
|
U 3 (#8a0511)
|
||||||
|
R 4 (#1a5f82)
|
||||||
|
D 5 (#52eda1)
|
||||||
|
R 4 (#1a5f80)
|
||||||
|
U 5 (#38db21)
|
||||||
|
R 5 (#2f4720)
|
||||||
|
U 2 (#2a75c1)
|
||||||
|
R 9 (#aa4d40)
|
||||||
|
U 3 (#538141)
|
||||||
|
L 3 (#7ad770)
|
||||||
|
U 5 (#66ec01)
|
||||||
|
L 5 (#53e812)
|
||||||
|
U 3 (#539a81)
|
||||||
|
L 4 (#53e810)
|
||||||
|
U 5 (#413821)
|
||||||
|
L 5 (#618330)
|
||||||
|
D 5 (#a4bf71)
|
||||||
|
L 6 (#56e4b2)
|
||||||
|
U 3 (#acf591)
|
||||||
|
L 2 (#890732)
|
||||||
|
U 8 (#2a62d1)
|
||||||
|
R 4 (#458e22)
|
||||||
|
U 5 (#2ef8e3)
|
||||||
|
R 4 (#273c60)
|
||||||
|
U 4 (#439bc3)
|
||||||
|
R 2 (#273c62)
|
||||||
|
D 4 (#64c3c3)
|
||||||
|
R 5 (#0e0c12)
|
||||||
|
D 5 (#9481d1)
|
||||||
|
R 3 (#5321d2)
|
||||||
|
U 4 (#5d6361)
|
||||||
|
R 7 (#531760)
|
||||||
|
U 7 (#068711)
|
||||||
|
R 7 (#216570)
|
||||||
|
U 7 (#a20e51)
|
||||||
|
L 3 (#216572)
|
||||||
|
D 3 (#46afb1)
|
||||||
|
L 8 (#4e8f70)
|
||||||
|
D 6 (#1261b1)
|
||||||
|
L 5 (#3840e0)
|
||||||
|
U 6 (#7b0901)
|
||||||
|
L 3 (#75cf00)
|
||||||
|
U 3 (#b56e51)
|
||||||
|
L 7 (#43b850)
|
||||||
|
U 3 (#01dfc1)
|
||||||
|
L 6 (#067e40)
|
||||||
|
U 7 (#613913)
|
||||||
|
R 5 (#30ff10)
|
||||||
|
U 7 (#285d33)
|
||||||
|
R 5 (#72e5c0)
|
||||||
|
D 7 (#285d31)
|
||||||
|
R 3 (#3fdcf0)
|
||||||
|
U 6 (#601d03)
|
||||||
|
R 4 (#312812)
|
||||||
|
U 4 (#4ea643)
|
||||||
|
R 6 (#8253e2)
|
||||||
|
D 7 (#4ea641)
|
||||||
|
R 2 (#3045d2)
|
||||||
|
U 7 (#8362b3)
|
||||||
|
R 7 (#631a70)
|
||||||
|
U 4 (#ba56c3)
|
||||||
|
R 6 (#28e520)
|
||||||
|
U 2 (#568a53)
|
||||||
|
R 3 (#c1d452)
|
||||||
|
U 2 (#3e2a33)
|
||||||
|
R 5 (#c1d450)
|
||||||
|
U 5 (#0f6e43)
|
||||||
|
R 4 (#c65ae0)
|
||||||
|
U 3 (#790e83)
|
||||||
|
R 2 (#012b40)
|
||||||
|
U 7 (#2ea6b3)
|
||||||
|
R 4 (#358722)
|
||||||
|
D 2 (#7b3bf3)
|
||||||
|
R 6 (#adbd32)
|
||||||
|
D 4 (#4f7b63)
|
||||||
|
R 5 (#0d26f2)
|
||||||
|
U 5 (#47f363)
|
||||||
|
R 2 (#4c6160)
|
||||||
|
D 5 (#70ff63)
|
||||||
|
R 5 (#284290)
|
||||||
|
D 3 (#231103)
|
||||||
|
L 7 (#540e80)
|
||||||
|
D 2 (#8b51b3)
|
||||||
|
L 5 (#662c40)
|
||||||
|
D 4 (#22e7e3)
|
||||||
|
R 7 (#1d46a0)
|
||||||
|
D 3 (#343a43)
|
||||||
|
L 6 (#4d7d90)
|
||||||
|
D 4 (#31a643)
|
||||||
|
L 10 (#4e6b30)
|
||||||
|
U 4 (#31a641)
|
||||||
|
L 4 (#5abc90)
|
||||||
|
D 3 (#799953)
|
||||||
|
L 4 (#9e4ed0)
|
||||||
|
D 5 (#3b73e3)
|
||||||
|
R 7 (#390760)
|
||||||
|
D 3 (#bd3533)
|
||||||
|
L 7 (#390762)
|
||||||
|
D 5 (#075bd3)
|
||||||
|
L 3 (#1b7350)
|
||||||
|
D 3 (#a01d23)
|
||||||
|
R 4 (#a56752)
|
||||||
|
D 2 (#6a4313)
|
||||||
|
R 5 (#529462)
|
||||||
|
D 4 (#843c43)
|
||||||
|
R 4 (#829482)
|
||||||
|
U 4 (#7914e3)
|
||||||
|
R 3 (#2f0b90)
|
||||||
|
U 7 (#5f3d53)
|
||||||
|
R 6 (#114980)
|
||||||
|
D 7 (#60b7e3)
|
||||||
|
R 4 (#b9b2f0)
|
||||||
|
D 4 (#60b7e1)
|
||||||
|
R 5 (#2143f0)
|
||||||
|
D 3 (#2f86d3)
|
||||||
|
L 7 (#5f4440)
|
||||||
|
D 4 (#366293)
|
||||||
|
L 5 (#5baae0)
|
||||||
|
U 8 (#80a9a3)
|
||||||
|
L 3 (#61f680)
|
||||||
|
D 8 (#80a9a1)
|
||||||
|
L 5 (#8bdce0)
|
||||||
|
U 4 (#46e4d1)
|
||||||
|
L 5 (#120950)
|
||||||
|
D 8 (#7c15b1)
|
||||||
|
L 4 (#641450)
|
||||||
|
D 2 (#047bf1)
|
||||||
|
L 2 (#3b00c0)
|
||||||
|
D 7 (#a18c33)
|
||||||
|
L 3 (#543b70)
|
||||||
|
D 2 (#a18c31)
|
||||||
|
L 7 (#466150)
|
||||||
|
D 4 (#5c3ad1)
|
||||||
|
R 4 (#5caa80)
|
||||||
|
D 2 (#230201)
|
||||||
|
R 6 (#955102)
|
||||||
|
D 6 (#b200c1)
|
||||||
|
R 7 (#955100)
|
||||||
|
D 3 (#1d8ff1)
|
||||||
|
R 3 (#26f9d0)
|
||||||
|
D 8 (#160d71)
|
||||||
|
R 2 (#483920)
|
||||||
|
D 4 (#4577c3)
|
||||||
|
R 8 (#92ef90)
|
||||||
|
D 5 (#a57e83)
|
||||||
|
R 7 (#0715a0)
|
||||||
|
D 3 (#1da9e3)
|
||||||
|
L 2 (#627970)
|
||||||
|
D 6 (#573ee1)
|
||||||
|
L 8 (#006f30)
|
||||||
|
D 4 (#735da1)
|
||||||
|
L 4 (#006f32)
|
||||||
|
D 4 (#266951)
|
||||||
|
R 3 (#9745a0)
|
||||||
|
D 6 (#412bb1)
|
||||||
|
R 7 (#83f8f2)
|
||||||
|
D 2 (#6c4d31)
|
||||||
|
R 4 (#6a7e72)
|
||||||
|
D 3 (#578921)
|
||||||
|
L 7 (#6c5d92)
|
||||||
|
D 2 (#5485c1)
|
||||||
|
L 5 (#300852)
|
||||||
|
D 4 (#cdf091)
|
||||||
|
L 2 (#544dd2)
|
||||||
|
D 3 (#1259f1)
|
||||||
|
L 7 (#882292)
|
||||||
|
D 6 (#03e4b1)
|
||||||
|
R 7 (#cdf192)
|
||||||
|
D 3 (#5f3c41)
|
||||||
|
R 4 (#c836b0)
|
||||||
|
D 5 (#4cfdc1)
|
||||||
|
L 2 (#36a590)
|
||||||
|
D 4 (#244753)
|
||||||
|
L 2 (#73bd60)
|
||||||
|
D 3 (#244751)
|
||||||
|
L 7 (#72cc90)
|
||||||
|
U 4 (#0e0d21)
|
||||||
|
L 5 (#21ce60)
|
||||||
|
D 4 (#523dd1)
|
||||||
|
L 9 (#041252)
|
||||||
|
D 3 (#8cfc81)
|
||||||
|
R 5 (#041250)
|
||||||
|
D 5 (#365031)
|
||||||
|
R 6 (#21ce62)
|
||||||
|
U 5 (#17b3e1)
|
||||||
|
R 5 (#75a900)
|
||||||
|
D 3 (#8d4fe1)
|
||||||
|
R 4 (#75a902)
|
||||||
|
D 3 (#342091)
|
||||||
|
R 5 (#8d5570)
|
||||||
|
D 5 (#a6f9a3)
|
||||||
|
R 5 (#59f560)
|
||||||
|
D 4 (#49ae63)
|
||||||
|
R 5 (#59f562)
|
||||||
|
D 5 (#2dc6c3)
|
||||||
|
R 4 (#8fb550)
|
||||||
|
U 6 (#884bf3)
|
||||||
|
R 3 (#17ea50)
|
||||||
|
U 4 (#560143)
|
||||||
|
R 5 (#623ad0)
|
||||||
|
D 8 (#5dfc41)
|
||||||
|
R 5 (#ca0040)
|
||||||
|
D 2 (#5bc201)
|
||||||
|
R 4 (#ca0042)
|
||||||
|
D 3 (#7008b1)
|
||||||
|
R 7 (#b87530)
|
||||||
|
U 4 (#5e8821)
|
||||||
|
R 4 (#817080)
|
||||||
|
U 7 (#69e951)
|
||||||
|
R 2 (#518e30)
|
||||||
|
U 4 (#0e9831)
|
||||||
|
R 5 (#29ea82)
|
||||||
|
D 4 (#26f041)
|
||||||
|
R 9 (#6a1862)
|
||||||
|
D 4 (#8d3971)
|
||||||
|
L 4 (#6a1860)
|
||||||
|
D 4 (#215e71)
|
||||||
|
L 5 (#29ea80)
|
||||||
|
D 3 (#282e61)
|
||||||
|
R 3 (#bc6172)
|
||||||
|
D 8 (#17c4f1)
|
||||||
|
L 6 (#1abf10)
|
||||||
|
U 5 (#1a15e1)
|
||||||
|
L 3 (#2ed960)
|
||||||
|
D 5 (#24f4f3)
|
||||||
|
L 4 (#9d6b00)
|
||||||
|
D 6 (#24f4f1)
|
||||||
|
L 2 (#704c40)
|
||||||
|
D 4 (#45b0c1)
|
||||||
|
L 5 (#93a182)
|
||||||
|
D 6 (#53b3b1)
|
||||||
|
L 5 (#5f72d2)
|
||||||
|
U 6 (#76a9f1)
|
||||||
|
L 4 (#643b62)
|
||||||
|
D 3 (#3f41f1)
|
||||||
|
L 6 (#691122)
|
||||||
|
D 2 (#606491)
|
||||||
|
L 5 (#4c5b02)
|
||||||
|
D 5 (#6d1fa1)
|
||||||
|
L 2 (#bf6472)
|
||||||
|
D 6 (#6d1fa3)
|
||||||
|
L 6 (#989bb2)
|
||||||
|
U 4 (#606493)
|
||||||
|
L 3 (#348412)
|
||||||
|
U 6 (#9e4561)
|
||||||
|
L 4 (#9b1742)
|
||||||
|
U 8 (#42a901)
|
||||||
|
L 5 (#09f8f2)
|
||||||
|
U 3 (#63a8c3)
|
||||||
|
R 8 (#591640)
|
||||||
|
U 4 (#2dcda3)
|
||||||
|
L 8 (#591642)
|
||||||
|
U 4 (#4f7803)
|
||||||
|
L 2 (#3e5fe2)
|
||||||
|
U 5 (#0b9e93)
|
||||||
|
L 3 (#cae6b2)
|
||||||
|
U 4 (#7399f3)
|
||||||
|
L 7 (#28c482)
|
||||||
|
U 6 (#d2ee83)
|
||||||
|
L 3 (#28c480)
|
||||||
|
U 6 (#2f0423)
|
||||||
|
L 3 (#320f52)
|
||||||
|
U 2 (#5f4ab1)
|
||||||
|
L 4 (#8d6672)
|
||||||
|
U 6 (#b09261)
|
||||||
|
L 6 (#718952)
|
||||||
|
D 8 (#750591)
|
||||||
|
L 4 (#33df82)
|
||||||
|
D 5 (#1052a1)
|
||||||
|
L 4 (#9a90e2)
|
||||||
|
U 6 (#8eb861)
|
||||||
|
L 2 (#0c1e92)
|
||||||
|
U 4 (#53b871)
|
||||||
|
L 4 (#0739f2)
|
||||||
|
U 4 (#76cfb1)
|
||||||
|
L 6 (#9b6922)
|
||||||
|
U 7 (#76cfb3)
|
||||||
|
L 5 (#846eb2)
|
||||||
|
D 4 (#53b873)
|
||||||
|
L 3 (#6b7ae2)
|
||||||
|
D 4 (#59dd21)
|
||||||
|
L 2 (#60b0b2)
|
||||||
|
D 6 (#a53b01)
|
||||||
|
R 5 (#767632)
|
||||||
|
D 4 (#6c6bb1)
|
||||||
|
L 4 (#b3a932)
|
||||||
|
D 3 (#0660a1)
|
||||||
|
L 5 (#12b390)
|
||||||
|
U 4 (#9c9d01)
|
||||||
|
L 4 (#12b392)
|
||||||
|
U 3 (#910691)
|
||||||
|
L 4 (#8dec12)
|
||||||
|
U 6 (#65ba53)
|
||||||
|
L 3 (#1e02b2)
|
||||||
|
U 2 (#b05803)
|
||||||
|
L 2 (#1e02b0)
|
||||||
|
U 8 (#8a5d93)
|
||||||
|
L 2 (#3bea42)
|
||||||
|
U 5 (#032da3)
|
||||||
|
R 8 (#0aabc2)
|
||||||
|
U 3 (#4a0a13)
|
||||||
|
L 8 (#9f1c02)
|
||||||
|
U 4 (#58a0f3)
|
||||||
|
L 3 (#9f1c00)
|
||||||
|
D 3 (#3a2cf3)
|
||||||
|
L 7 (#169b22)
|
||||||
|
D 2 (#004253)
|
||||||
|
L 2 (#841fd2)
|
||||||
|
D 9 (#0b8473)
|
||||||
|
L 4 (#3f85a2)
|
||||||
|
D 6 (#134bd3)
|
||||||
|
L 2 (#17f832)
|
||||||
|
D 5 (#8870f3)
|
||||||
|
L 2 (#87cf62)
|
||||||
|
D 3 (#8b9fa3)
|
||||||
|
L 2 (#6ca082)
|
||||||
|
D 3 (#9a6ea3)
|
||||||
|
L 7 (#60cbc2)
|
||||||
|
D 4 (#9a6ea1)
|
||||||
|
L 2 (#296752)
|
||||||
|
D 3 (#b0d5c3)
|
||||||
|
L 8 (#0e0100)
|
||||||
|
D 5 (#218503)
|
||||||
|
L 6 (#36a620)
|
||||||
|
D 7 (#071463)
|
||||||
|
L 3 (#669dd0)
|
||||||
|
D 3 (#3099a1)
|
||||||
|
L 7 (#385d40)
|
||||||
|
D 5 (#3099a3)
|
||||||
|
L 7 (#3c66b0)
|
||||||
|
D 3 (#8fec33)
|
||||||
|
L 2 (#4ce142)
|
||||||
|
D 4 (#4b7051)
|
||||||
|
L 8 (#55b322)
|
||||||
|
D 3 (#4b7053)
|
||||||
|
L 7 (#38cd62)
|
||||||
|
D 3 (#668b13)
|
||||||
|
L 4 (#36a622)
|
||||||
|
D 2 (#581f83)
|
||||||
|
L 4 (#0e0102)
|
||||||
|
D 7 (#356bd3)
|
||||||
|
L 5 (#3eb472)
|
||||||
|
D 3 (#4ca003)
|
||||||
|
L 3 (#6afe62)
|
||||||
|
D 5 (#4ca001)
|
||||||
|
L 5 (#536dd2)
|
||||||
|
U 8 (#978bb3)
|
||||||
|
L 5 (#6118d2)
|
||||||
|
U 7 (#aec403)
|
||||||
14
day18/sample.txt
Normal file
14
day18/sample.txt
Normal file
@@ -0,0 +1,14 @@
|
|||||||
|
R 6 (#70c710)
|
||||||
|
D 5 (#0dc571)
|
||||||
|
L 2 (#5713f0)
|
||||||
|
D 2 (#d2c081)
|
||||||
|
R 2 (#59c680)
|
||||||
|
D 2 (#411b91)
|
||||||
|
L 5 (#8ceee2)
|
||||||
|
U 2 (#caa173)
|
||||||
|
L 1 (#1b58a2)
|
||||||
|
U 2 (#caa171)
|
||||||
|
R 2 (#7807d2)
|
||||||
|
U 3 (#a77fa3)
|
||||||
|
L 2 (#015232)
|
||||||
|
U 2 (#7a21e3)
|
||||||
BIN
day19/c/day19
Executable file
BIN
day19/c/day19
Executable file
Binary file not shown.
303
day19/c/day19.c
Normal file
303
day19/c/day19.c
Normal file
@@ -0,0 +1,303 @@
|
|||||||
|
#include <stdio.h>
|
||||||
|
#include <stdlib.h>
|
||||||
|
#include <string.h>
|
||||||
|
|
||||||
|
#define LINE_MAX_LENGTH 256
|
||||||
|
#define MAX_INSTRUCTIONS 16
|
||||||
|
#define MAX_WORKFLOWS 1024
|
||||||
|
#define MAX_PARTS 2048
|
||||||
|
#define NUM_0_CHARCODE 48
|
||||||
|
#define NUM_9_CHARCODE NUM_0_CHARCODE + 9
|
||||||
|
#define MAX_BREAKPOINTS 1024
|
||||||
|
|
||||||
|
typedef struct instruction {
|
||||||
|
char category;
|
||||||
|
char operator;
|
||||||
|
int value;
|
||||||
|
char destination[16];
|
||||||
|
int destination_length;
|
||||||
|
} instruction_t;
|
||||||
|
|
||||||
|
typedef struct workflow {
|
||||||
|
char name[16];
|
||||||
|
int name_length;
|
||||||
|
instruction_t instructions[MAX_INSTRUCTIONS];
|
||||||
|
int instructions_num;
|
||||||
|
char default_action[16];
|
||||||
|
int default_action_length;
|
||||||
|
} workflow_t;
|
||||||
|
|
||||||
|
typedef struct part {
|
||||||
|
int x;
|
||||||
|
int m;
|
||||||
|
int a;
|
||||||
|
int s;
|
||||||
|
} part_t;
|
||||||
|
|
||||||
|
typedef struct breakpoints {
|
||||||
|
int x[MAX_BREAKPOINTS];
|
||||||
|
int x_num;
|
||||||
|
int m[MAX_BREAKPOINTS];
|
||||||
|
int m_num;
|
||||||
|
int a[MAX_BREAKPOINTS];
|
||||||
|
int a_num;
|
||||||
|
int s[MAX_BREAKPOINTS];
|
||||||
|
int s_num;
|
||||||
|
} breakpoints_t;
|
||||||
|
|
||||||
|
int cmp(const void *a, const void *b);
|
||||||
|
char get_workflow_result(workflow_t workflows[], int workflows_num, part_t part, workflow_t in);
|
||||||
|
|
||||||
|
int main() {
|
||||||
|
char *p, *q, *buf, c;
|
||||||
|
|
||||||
|
buf = (char *)malloc(LINE_MAX_LENGTH);
|
||||||
|
memset(buf, 0, LINE_MAX_LENGTH);
|
||||||
|
p = buf;
|
||||||
|
|
||||||
|
int first = 1;
|
||||||
|
workflow_t *workflows = (workflow_t*)malloc(MAX_WORKFLOWS * sizeof(workflow_t));
|
||||||
|
memset(workflows, 0, MAX_WORKFLOWS * sizeof(workflow_t));
|
||||||
|
int workflows_num = 0;
|
||||||
|
|
||||||
|
part_t *parts = (part_t*)malloc(MAX_PARTS * sizeof(part_t));
|
||||||
|
memset(parts, 0, MAX_PARTS * sizeof(part_t));
|
||||||
|
int parts_num = 0;
|
||||||
|
|
||||||
|
while ((c = getchar()) != EOF) {
|
||||||
|
*p++ = c;
|
||||||
|
if (c == '\n') {
|
||||||
|
if (buf[0] == '\n') {
|
||||||
|
first = 0;
|
||||||
|
} else {
|
||||||
|
p = buf;
|
||||||
|
if (first) {
|
||||||
|
while (*p != '{') p++;
|
||||||
|
strncpy(workflows[workflows_num].name, buf, p - buf);
|
||||||
|
workflows[workflows_num].name_length = p - buf;
|
||||||
|
p++;
|
||||||
|
while(*p != '\n') {
|
||||||
|
q = p;
|
||||||
|
while(*p != '<' && *p != '>' && *p != '}') p++;
|
||||||
|
// Default action
|
||||||
|
if (*p == '}') {
|
||||||
|
strncpy(workflows[workflows_num].default_action, q, p - q);
|
||||||
|
workflows[workflows_num].default_action_length = p - q;
|
||||||
|
} else {
|
||||||
|
workflows[workflows_num].instructions[workflows[workflows_num].instructions_num].category = *q;
|
||||||
|
workflows[workflows_num].instructions[workflows[workflows_num].instructions_num].operator = *p;
|
||||||
|
p++;
|
||||||
|
sscanf(p, "%i", &workflows[workflows_num].instructions[workflows[workflows_num].instructions_num].value);
|
||||||
|
while (*p != ':') p++;
|
||||||
|
p++;
|
||||||
|
q = p;
|
||||||
|
while (*p != ',') p++;
|
||||||
|
strncpy(workflows[workflows_num].instructions[workflows[workflows_num].instructions_num].destination, q, p - q);
|
||||||
|
workflows[workflows_num].instructions[workflows[workflows_num].instructions_num].destination_length = p - q;
|
||||||
|
workflows[workflows_num].instructions_num++;
|
||||||
|
}
|
||||||
|
p++;
|
||||||
|
}
|
||||||
|
workflows_num++;
|
||||||
|
} else {
|
||||||
|
while (*p < NUM_0_CHARCODE || *p > NUM_9_CHARCODE) p++;
|
||||||
|
sscanf(p, "%i", &parts[parts_num].x);
|
||||||
|
while (*p != ',') p++;
|
||||||
|
while (*p < NUM_0_CHARCODE || *p > NUM_9_CHARCODE) p++;
|
||||||
|
sscanf(p, "%i", &parts[parts_num].m);
|
||||||
|
while (*p != ',') p++;
|
||||||
|
while (*p < NUM_0_CHARCODE || *p > NUM_9_CHARCODE) p++;
|
||||||
|
sscanf(p, "%i", &parts[parts_num].a);
|
||||||
|
while (*p != ',') p++;
|
||||||
|
while (*p < NUM_0_CHARCODE || *p > NUM_9_CHARCODE) p++;
|
||||||
|
sscanf(p, "%i", &parts[parts_num].s);
|
||||||
|
parts_num++;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
memset(buf, 0, LINE_MAX_LENGTH);
|
||||||
|
p = buf;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Find start
|
||||||
|
workflow_t *start;
|
||||||
|
for (int i = 0; i < workflows_num; i++) {
|
||||||
|
if (!strcmp(workflows[i].name, "in")) {
|
||||||
|
start = &workflows[i];
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
int part1 = 0;
|
||||||
|
for (int i = 0; i < parts_num; i++) {
|
||||||
|
char result = get_workflow_result(workflows, workflows_num, parts[i], *start);
|
||||||
|
if (result == 'A') {
|
||||||
|
part1 += parts[i].x + parts[i].m + parts[i].a + parts[i].s;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
printf("%i\n", part1);
|
||||||
|
|
||||||
|
breakpoints_t breakpoints;
|
||||||
|
memset(&breakpoints, 0, sizeof(breakpoints_t));
|
||||||
|
|
||||||
|
for (int i = 0; i < workflows_num; i++) {
|
||||||
|
for (int j = 0; j < workflows[i].instructions_num; j++) {
|
||||||
|
if (workflows[i].instructions[j].category == 'x') {
|
||||||
|
int value = workflows[i].instructions[j].operator == '<' ? workflows[i].instructions[j].value : workflows[i].instructions[j].value + 1;
|
||||||
|
int found = 0;
|
||||||
|
for (int k = 0; k < breakpoints.x_num; k++) {
|
||||||
|
if (breakpoints.x[k] == value) {
|
||||||
|
found = 1;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (!found) {
|
||||||
|
breakpoints.x[breakpoints.x_num] = value;
|
||||||
|
breakpoints.x_num++;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (workflows[i].instructions[j].category == 'm') {
|
||||||
|
int value = workflows[i].instructions[j].operator == '<' ? workflows[i].instructions[j].value : workflows[i].instructions[j].value + 1;
|
||||||
|
int found = 0;
|
||||||
|
for (int k = 0; k < breakpoints.m_num; k++) {
|
||||||
|
if (breakpoints.m[k] == value) {
|
||||||
|
found = 1;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (!found) {
|
||||||
|
breakpoints.m[breakpoints.m_num] = value;
|
||||||
|
breakpoints.m_num++;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (workflows[i].instructions[j].category == 'a') {
|
||||||
|
int value = workflows[i].instructions[j].operator == '<' ? workflows[i].instructions[j].value : workflows[i].instructions[j].value + 1;
|
||||||
|
int found = 0;
|
||||||
|
for (int k = 0; k < breakpoints.a_num; k++) {
|
||||||
|
if (breakpoints.a[k] == value) {
|
||||||
|
found = 1;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (!found) {
|
||||||
|
breakpoints.a[breakpoints.a_num] = value;
|
||||||
|
breakpoints.a_num++;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (workflows[i].instructions[j].category == 's') {
|
||||||
|
int value = workflows[i].instructions[j].operator == '<' ? workflows[i].instructions[j].value : workflows[i].instructions[j].value + 1;
|
||||||
|
int found = 0;
|
||||||
|
for (int k = 0; k < breakpoints.s_num; k++) {
|
||||||
|
if (breakpoints.s[k] == value) {
|
||||||
|
found = 1;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (!found) {
|
||||||
|
breakpoints.s[breakpoints.s_num] = value;
|
||||||
|
breakpoints.s_num++;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
qsort(breakpoints.x, breakpoints.x_num, sizeof(breakpoints.x[0]), &cmp);
|
||||||
|
qsort(breakpoints.m, breakpoints.m_num, sizeof(breakpoints.m[0]), &cmp);
|
||||||
|
qsort(breakpoints.a, breakpoints.a_num, sizeof(breakpoints.a[0]), &cmp);
|
||||||
|
qsort(breakpoints.s, breakpoints.s_num, sizeof(breakpoints.s[0]), &cmp);
|
||||||
|
|
||||||
|
double part2 = 0;
|
||||||
|
#pragma omp parallel for schedule(dynamic)
|
||||||
|
for (int i = 0; i < breakpoints.x_num + 1; i++) {
|
||||||
|
for (int j = 0; j < breakpoints.m_num + 1; j++) {
|
||||||
|
for (int k = 0; k < breakpoints.a_num + 1; k++) {
|
||||||
|
for (int l = 0; l < breakpoints.s_num + 1; l++) {
|
||||||
|
unsigned long x0 = i == 0 ? 1 : breakpoints.x[i - 1];
|
||||||
|
unsigned long x1 = i == breakpoints.x_num ? 4001 : breakpoints.x[i];
|
||||||
|
unsigned long m0 = j == 0 ? 1 : breakpoints.m[j - 1];
|
||||||
|
unsigned long m1 = j == breakpoints.m_num ? 4001 : breakpoints.m[j];
|
||||||
|
unsigned long a0 = k == 0 ? 1 : breakpoints.a[k - 1];
|
||||||
|
unsigned long a1 = k == breakpoints.a_num ? 4001 : breakpoints.a[k];
|
||||||
|
unsigned long s0 = l == 0 ? 1 : breakpoints.s[l - 1];
|
||||||
|
unsigned long s1 = l == breakpoints.s_num ? 4001 : breakpoints.s[l];
|
||||||
|
part_t metapart = {
|
||||||
|
.x = x0,
|
||||||
|
.m = m0,
|
||||||
|
.a = a0,
|
||||||
|
.s = s0,
|
||||||
|
};
|
||||||
|
char result = get_workflow_result(workflows, workflows_num, metapart, *start);
|
||||||
|
#pragma omp critical
|
||||||
|
if (result == 'A') {
|
||||||
|
part2 += (double)(x1 - x0) * (double)(m1 - m0) * (double)(a1 - a0) * (double)(s1 - s0);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
printf("%f\n", part2);
|
||||||
|
|
||||||
|
free(buf);
|
||||||
|
free(workflows);
|
||||||
|
}
|
||||||
|
|
||||||
|
int cmp(const void *a, const void *b) {
|
||||||
|
return *(int*)a - *(int*)b;
|
||||||
|
}
|
||||||
|
|
||||||
|
char get_workflow_result(workflow_t workflows[], int workflows_num, part_t part, workflow_t in) {
|
||||||
|
for (int i = 0; i < in.instructions_num; i++) {
|
||||||
|
int value;
|
||||||
|
switch (in.instructions[i].category) {
|
||||||
|
case 'x':
|
||||||
|
value = part.x;
|
||||||
|
break;
|
||||||
|
case 'm':
|
||||||
|
value = part.m;
|
||||||
|
break;
|
||||||
|
case 'a':
|
||||||
|
value = part.a;
|
||||||
|
break;
|
||||||
|
case 's':
|
||||||
|
value = part.s;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
int matches;
|
||||||
|
switch (in.instructions[i].operator) {
|
||||||
|
case '<':
|
||||||
|
matches = value < in.instructions[i].value;
|
||||||
|
break;
|
||||||
|
case '>':
|
||||||
|
matches = value > in.instructions[i].value;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
if (matches) {
|
||||||
|
if (!strcmp(in.instructions[i].destination, "A")) {
|
||||||
|
return 'A';
|
||||||
|
}
|
||||||
|
if (!strcmp(in.instructions[i].destination, "R")) {
|
||||||
|
return 'R';
|
||||||
|
}
|
||||||
|
for (int j = 0; j < workflows_num; j++) {
|
||||||
|
if (!strcmp(workflows[j].name, in.instructions[i].destination)) {
|
||||||
|
return get_workflow_result(workflows, workflows_num, part, workflows[j]);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!strcmp(in.default_action, "A")) {
|
||||||
|
return 'A';
|
||||||
|
}
|
||||||
|
if (!strcmp(in.default_action, "R")) {
|
||||||
|
return 'R';
|
||||||
|
}
|
||||||
|
for (int i = 0; i < workflows_num; i++) {
|
||||||
|
if (!strcmp(workflows[i].name, in.default_action)) {
|
||||||
|
return get_workflow_result(workflows, workflows_num, part, workflows[i]);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return 'F';
|
||||||
|
}
|
||||||
769
day19/input.txt
Normal file
769
day19/input.txt
Normal file
@@ -0,0 +1,769 @@
|
|||||||
|
mxf{m<2310:phv,zs}
|
||||||
|
zjr{s>1167:zqt,skq}
|
||||||
|
hm{x>2975:rkl,x>2818:vhs,a>1062:bkc,kjg}
|
||||||
|
dkl{m>2321:ctj,x>3530:A,gj}
|
||||||
|
zk{s<1218:R,A}
|
||||||
|
zkd{m>864:A,a>488:R,jcp}
|
||||||
|
zdl{m>3429:A,m>2961:R,R}
|
||||||
|
xmd{a<576:A,a<1045:R,a<1386:R,A}
|
||||||
|
kzz{m>1106:R,a<508:R,x>2970:A,R}
|
||||||
|
gdr{x<139:R,x<183:A,s<222:A,R}
|
||||||
|
rb{m<3239:R,a<3546:A,A}
|
||||||
|
xns{x<621:vrz,gm}
|
||||||
|
nd{s>2927:xnx,x<3488:A,a<434:pg,A}
|
||||||
|
fl{s<3624:qg,m>952:qf,kjt}
|
||||||
|
vhm{x<3815:R,s>1774:A,m>643:R,A}
|
||||||
|
krp{a<2439:R,m>298:R,x<1440:R,R}
|
||||||
|
njj{x<2856:cjc,x<2936:R,a>598:R,kzz}
|
||||||
|
jp{m>1745:R,x<1239:A,a<625:lt,qbq}
|
||||||
|
rhd{a<3515:R,a<3543:A,s<3959:R,R}
|
||||||
|
htm{a>284:R,m<1961:R,s<2226:R,A}
|
||||||
|
kjj{a>704:fcn,s<439:lq,R}
|
||||||
|
jkk{s>1376:R,a<341:A,A}
|
||||||
|
jt{s<3384:A,x<3143:R,xgd}
|
||||||
|
bcm{a<1408:R,m<425:R,A}
|
||||||
|
hc{s>1126:A,m>1159:A,R}
|
||||||
|
jff{a>3411:A,s<804:jn,A}
|
||||||
|
knh{s>2643:szq,A}
|
||||||
|
klj{x>1392:A,a<2628:R,R}
|
||||||
|
kfx{a>1268:R,A}
|
||||||
|
cxd{a>1275:A,s>1768:R,R}
|
||||||
|
clq{a>1293:R,x>3243:R,R}
|
||||||
|
mpc{a<2362:R,R}
|
||||||
|
ng{a>578:A,x>1430:A,R}
|
||||||
|
hh{a>2697:A,s<1336:R,a<2167:A,A}
|
||||||
|
cjc{a<661:R,s>1113:A,x<2787:A,A}
|
||||||
|
fgv{m>3553:R,m<3400:A,m>3492:A,A}
|
||||||
|
pqk{m<110:R,A}
|
||||||
|
zqt{m<1713:mg,s>1555:jfx,s<1309:zm,A}
|
||||||
|
jrz{a<665:nh,tgp}
|
||||||
|
vsf{s<2496:R,R}
|
||||||
|
xdc{a>2214:R,A}
|
||||||
|
kkm{s>3217:A,x<3895:R,a<857:A,R}
|
||||||
|
sbh{s>1082:ct,sgx}
|
||||||
|
kcn{x<3313:A,x<3389:mmt,phd}
|
||||||
|
sgg{a<817:rf,s>2209:nhz,R}
|
||||||
|
jd{s>2746:R,a>2645:R,R}
|
||||||
|
pb{x>2553:A,qb}
|
||||||
|
hq{a<1200:A,a<1322:A,m<968:R,R}
|
||||||
|
kfz{x<3631:A,R}
|
||||||
|
fvf{a>917:drd,s>3325:qt,kcn}
|
||||||
|
ctj{m>2668:R,A}
|
||||||
|
tbl{x>2400:ql,m<2122:cs,m>2504:rq,tpp}
|
||||||
|
kn{m<1806:R,a<588:R,x>3133:R,A}
|
||||||
|
sv{a<1325:R,a>1460:R,m>1718:R,A}
|
||||||
|
rkl{x>3112:A,s>3342:R,R}
|
||||||
|
mg{m>1291:R,A}
|
||||||
|
tm{x>1917:bs,A}
|
||||||
|
rkq{a<2465:bxc,x>1862:nxc,sp}
|
||||||
|
tk{a<1228:A,a<1455:R,A}
|
||||||
|
vts{s>3466:jq,xns}
|
||||||
|
nh{x<2134:rr,x<2484:pbv,m<976:lvp,mv}
|
||||||
|
sz{x<3075:R,m>359:R,R}
|
||||||
|
btr{x>3197:qkh,ph}
|
||||||
|
ff{m>1946:A,s<2407:zc,A}
|
||||||
|
cmk{s>2606:R,A}
|
||||||
|
jr{a>804:A,a<475:R,R}
|
||||||
|
rf{x<415:A,s>2228:R,a<735:R,R}
|
||||||
|
drd{s>3365:tk,s<3276:bcm,A}
|
||||||
|
hvq{s<2401:hsn,s>3374:fl,xdl}
|
||||||
|
vpn{s<1325:fvm,m<689:R,R}
|
||||||
|
vj{s<1347:A,x>673:R,R}
|
||||||
|
tnz{s>999:A,x>2657:gk,A}
|
||||||
|
rft{a<401:pqp,qdm}
|
||||||
|
gkm{m>430:A,m>196:A,s>3374:R,A}
|
||||||
|
vhs{m>623:R,R}
|
||||||
|
zzt{x>3410:A,m>2991:R,m<2312:A,A}
|
||||||
|
pth{x<3816:A,s>3893:A,R}
|
||||||
|
vmd{s>3539:zr,gr}
|
||||||
|
dlh{x<3015:R,A}
|
||||||
|
lv{a<2026:A,m<292:R,x>588:R,A}
|
||||||
|
pr{x>3172:rjk,a<1192:R,m<595:A,A}
|
||||||
|
dzq{a<812:bgx,s>1212:nhn,nnd}
|
||||||
|
kxf{x>3058:R,A}
|
||||||
|
tgp{a>1311:kkg,a>960:jx,hmf}
|
||||||
|
npv{s<668:A,x>1167:A,R}
|
||||||
|
pd{a<1327:A,a<1446:rp,R}
|
||||||
|
krf{m>228:A,A}
|
||||||
|
cg{m<3308:nr,a>1054:fxs,cgf}
|
||||||
|
qd{a>2742:qmb,x>1719:mt,s>818:nrs,mpc}
|
||||||
|
bsc{x>1586:R,a<1207:R,R}
|
||||||
|
kcb{a<1236:A,s<1368:A,A}
|
||||||
|
mf{a<2852:zv,m<2664:prx,rb}
|
||||||
|
pnj{a<754:R,rcb}
|
||||||
|
zr{x>1721:A,x>683:R,x>265:R,A}
|
||||||
|
bn{s>1397:A,a<219:R,R}
|
||||||
|
hx{a>953:A,a>428:A,x>539:R,R}
|
||||||
|
jv{s<837:pr,fsl}
|
||||||
|
qmb{s<1185:R,A}
|
||||||
|
zcf{x>784:A,R}
|
||||||
|
jpf{s<2409:A,s<2671:A,x<1126:A,R}
|
||||||
|
kj{a>836:jv,x>3467:tjj,rl}
|
||||||
|
cnc{s<3455:A,s<3662:R,a>1191:A,R}
|
||||||
|
vbg{s>2501:R,x<3479:xhj,x>3748:R,R}
|
||||||
|
in{a>1666:mb,x<1861:dql,sl}
|
||||||
|
xg{x<749:dgs,A}
|
||||||
|
pj{m<830:R,R}
|
||||||
|
jb{m>3287:A,m>3057:gfh,A}
|
||||||
|
zdp{a>3403:R,a>3071:R,m>808:R,A}
|
||||||
|
ggc{x>1433:A,s>2595:R,R}
|
||||||
|
pxr{s<3463:R,m<792:R,A}
|
||||||
|
lk{x<724:R,s<3706:A,trm}
|
||||||
|
mjv{s<3762:A,bxn}
|
||||||
|
hl{a>556:ks,s<2836:A,m<1771:kc,kjd}
|
||||||
|
gf{x>1994:R,m<3457:xkg,s>3446:R,A}
|
||||||
|
bxz{m<718:R,A}
|
||||||
|
bv{s<2868:ggc,R}
|
||||||
|
pg{a<269:A,x>3764:R,m>3066:R,R}
|
||||||
|
vxn{s>1686:R,a>1312:R,m<2228:A,A}
|
||||||
|
jj{a>673:A,R}
|
||||||
|
zsx{x>3204:R,A}
|
||||||
|
cs{s<1229:A,R}
|
||||||
|
qdm{a<550:A,m>833:R,A}
|
||||||
|
vkl{s>365:A,x<236:gdr,s<161:zt,vxr}
|
||||||
|
cb{x<1464:A,x<1513:R,m<1814:R,R}
|
||||||
|
fn{m>2717:A,s>3698:A,R}
|
||||||
|
jzq{x>330:A,m>2865:R,A}
|
||||||
|
gn{a<1001:A,R}
|
||||||
|
cvv{m>817:fr,x<1974:mrv,m<316:vd,kh}
|
||||||
|
spl{a<1511:R,A}
|
||||||
|
qg{a<3083:csf,a>3444:mz,vmd}
|
||||||
|
tf{x>3535:R,a<669:gxm,s>2146:clq,A}
|
||||||
|
sg{s<463:lx,s<936:tq,R}
|
||||||
|
pnb{s<1080:R,m<3125:A,m<3446:A,R}
|
||||||
|
phd{x<3427:A,R}
|
||||||
|
hmf{a>804:gsn,s<1343:btv,vsf}
|
||||||
|
cdj{a>358:mdl,a<238:A,nk}
|
||||||
|
xs{x>2559:A,m>1333:A,A}
|
||||||
|
phv{m<2219:R,m<2257:R,x<565:A,A}
|
||||||
|
rx{s<2069:nvr,m>2736:qr,R}
|
||||||
|
vld{x>969:A,s>1063:A,m<689:R,A}
|
||||||
|
drn{s>1516:kx,m<611:kbn,jff}
|
||||||
|
jlg{s<2849:tgr,qlb}
|
||||||
|
nrn{a<1365:xmh,a>1565:A,x<1595:R,fgv}
|
||||||
|
fx{x>3184:R,a<1161:R,x<2964:A,R}
|
||||||
|
nfm{m<3293:R,m<3660:A,A}
|
||||||
|
cft{a<735:A,a>1165:jdq,m<1013:ctl,xdg}
|
||||||
|
grs{x<630:chb,bp}
|
||||||
|
tsq{s<3424:klj,s>3632:rkq,tj}
|
||||||
|
ll{a<566:R,R}
|
||||||
|
zc{m<1722:A,x>1506:A,x>1464:R,A}
|
||||||
|
tmx{s>3389:A,x>2770:A,R}
|
||||||
|
jdq{s>1592:A,R}
|
||||||
|
hhb{m<728:R,s<3217:bf,kfz}
|
||||||
|
chb{s>1613:A,A}
|
||||||
|
zcv{m<1690:A,a>1254:cb,R}
|
||||||
|
gdt{s<2338:R,a>529:R,A}
|
||||||
|
lrd{s>1816:A,s<1737:R,x>3648:vhm,mxs}
|
||||||
|
dl{s>1645:A,A}
|
||||||
|
rdr{m<3263:lmt,nrn}
|
||||||
|
dbp{x>1326:R,A}
|
||||||
|
vr{m<2215:R,A}
|
||||||
|
dqb{m>1367:A,s>3854:A,A}
|
||||||
|
mj{x<3291:xmd,m<1474:A,x>3594:fp,mk}
|
||||||
|
cvq{s<3167:vz,x>3484:dzt,m>1895:qsk,dj}
|
||||||
|
hrq{m>912:zn,s<2570:pk,x<3198:A,A}
|
||||||
|
tq{m<525:A,A}
|
||||||
|
cx{s>971:xbb,a>2286:R,s>558:lv,R}
|
||||||
|
vlz{s<432:bdx,m>419:R,m<201:fh,cm}
|
||||||
|
hsm{x>3894:psb,s>3500:A,zh}
|
||||||
|
pmv{m>1260:xn,x<1634:tkk,A}
|
||||||
|
mt{m<3482:lps,R}
|
||||||
|
qs{x>214:R,m<2255:A,A}
|
||||||
|
pf{m>399:R,x>3064:R,R}
|
||||||
|
fd{s>3477:A,R}
|
||||||
|
cmp{a>553:A,R}
|
||||||
|
gbx{s>657:R,m>939:A,m<824:A,A}
|
||||||
|
hsn{a>2953:drn,m>656:kzh,x<1575:xm,vpx}
|
||||||
|
vmr{a<696:A,m>594:R,s<2925:A,R}
|
||||||
|
hv{m>2584:R,m>2556:A,R}
|
||||||
|
gq{m<3154:A,x>3367:hmd,rsn}
|
||||||
|
tpc{x>3467:A,m>1865:A,m<1087:R,R}
|
||||||
|
vf{x>567:A,R}
|
||||||
|
xq{s>2490:ll,jj}
|
||||||
|
dx{m<213:mx,x<981:qtt,a<1191:A,ktx}
|
||||||
|
sq{s<518:jtt,a<1365:fbb,spl}
|
||||||
|
ds{m<1024:R,x<1332:A,A}
|
||||||
|
nn{m<337:srx,tx}
|
||||||
|
xf{a>645:cnc,R}
|
||||||
|
ltv{m<3188:cp,pt}
|
||||||
|
gjp{a<3444:R,A}
|
||||||
|
tbx{a>2651:bv,zx}
|
||||||
|
qf{a<3156:cmf,s>3778:gkk,x<1377:lk,jqq}
|
||||||
|
qdf{m>3031:A,s>3921:cqp,fg}
|
||||||
|
zx{s>2703:R,s<2561:gts,a>2305:A,snk}
|
||||||
|
xlj{a<240:R,R}
|
||||||
|
rl{x>3006:cdj,a>458:njj,vpn}
|
||||||
|
psq{a>939:tnp,m<1665:mnk,rpj}
|
||||||
|
bc{a<486:knh,m<3114:gth,lcr}
|
||||||
|
zq{x<1396:R,x<1668:A,R}
|
||||||
|
xm{x<973:cx,llb}
|
||||||
|
fzx{x>1946:A,x>1916:A,s>2523:dgq,bz}
|
||||||
|
gr{s<3443:A,R}
|
||||||
|
rsh{m<2322:A,R}
|
||||||
|
lzn{m<3606:A,m<3836:vql,a<423:R,R}
|
||||||
|
rsn{s<2344:A,a>1284:A,m<3610:A,A}
|
||||||
|
rg{m<752:A,s<3018:A,s<3072:R,R}
|
||||||
|
drs{a>2000:A,A}
|
||||||
|
ctl{s<1467:R,x>675:R,a<885:R,A}
|
||||||
|
fvm{a>168:A,s>868:R,R}
|
||||||
|
mtn{a>310:R,R}
|
||||||
|
rbt{x>3216:R,A}
|
||||||
|
dzt{m<1618:prn,zxd}
|
||||||
|
cp{x>616:A,m<2469:qs,R}
|
||||||
|
zkk{a>806:R,s<1275:A,a>636:A,R}
|
||||||
|
jrp{a>1285:A,A}
|
||||||
|
crv{m>183:R,x>1678:mbr,A}
|
||||||
|
mk{m>2781:R,x<3408:R,x<3508:A,A}
|
||||||
|
qvp{x<2839:R,s>2645:A,R}
|
||||||
|
tj{m>3041:jxs,m<2346:R,A}
|
||||||
|
gj{s<1310:R,R}
|
||||||
|
dd{a>700:dx,s<1439:xg,rfd}
|
||||||
|
ptj{m>919:cft,a<819:bq,grs}
|
||||||
|
qbq{a>1005:A,x>1477:A,A}
|
||||||
|
nmh{a>884:R,a>308:R,s<2046:R,hnp}
|
||||||
|
lx{a<901:A,m>593:R,R}
|
||||||
|
pqd{x>1493:A,x<1235:A,A}
|
||||||
|
bnh{m<1280:R,s<3302:R,R}
|
||||||
|
tv{a<332:zg,gdt}
|
||||||
|
rnd{a<1518:R,a>1596:A,A}
|
||||||
|
jlb{a>2132:R,s>736:R,x<1111:A,R}
|
||||||
|
mmz{x>992:R,a<1403:R,x<929:A,R}
|
||||||
|
qfp{m>1069:R,A}
|
||||||
|
pt{s>1650:vf,s>1452:R,x<446:A,vj}
|
||||||
|
tkk{s<1160:A,m>1174:R,a<673:R,A}
|
||||||
|
kx{x>2642:R,s<1888:A,R}
|
||||||
|
dq{x<1992:sc,x>2131:mjs,cmp}
|
||||||
|
xbb{s>1608:A,a<2166:A,s<1285:R,A}
|
||||||
|
btv{s>646:R,A}
|
||||||
|
br{a<1023:kxf,sds}
|
||||||
|
nr{m>2923:R,s>3647:R,m>2756:R,R}
|
||||||
|
nhn{x<1067:ltv,rdr}
|
||||||
|
mbr{x>3214:A,A}
|
||||||
|
mrv{m>400:R,m<212:A,A}
|
||||||
|
vpx{a>2478:tnz,s>821:nn,a<2119:vlz,vkv}
|
||||||
|
hn{x>2956:A,A}
|
||||||
|
jz{a<775:R,A}
|
||||||
|
pqp{m>731:A,A}
|
||||||
|
gbf{a>1519:pvj,m>715:gbx,rm}
|
||||||
|
mz{m>549:R,x<2243:krf,a>3781:R,jm}
|
||||||
|
gth{m>2216:brs,m>1852:xxk,a>662:R,A}
|
||||||
|
bmn{s<892:A,R}
|
||||||
|
pgh{s<2509:A,m<3134:R,R}
|
||||||
|
kqd{s<2377:A,A}
|
||||||
|
nhq{x>538:A,s<315:R,m<296:R,R}
|
||||||
|
zhr{m>2625:kqd,tp}
|
||||||
|
nrt{s<1274:A,x<1313:A,A}
|
||||||
|
mp{a>2286:jd,psr}
|
||||||
|
zn{m>1099:A,R}
|
||||||
|
vkv{m>221:pf,s<542:qm,m<110:A,A}
|
||||||
|
xdl{a<2851:nqc,s<2936:cvv,x>1808:kp,km}
|
||||||
|
kfs{a>1392:bcv,s>2659:A,R}
|
||||||
|
rcl{s>3400:R,m<528:A,R}
|
||||||
|
fsl{s>1571:cxd,m>988:jrp,A}
|
||||||
|
bd{m<486:R,R}
|
||||||
|
sr{x<445:A,zdl}
|
||||||
|
qt{s<3423:gkm,x<3311:A,m>745:R,bqz}
|
||||||
|
zfp{x>1123:nqq,A}
|
||||||
|
gbd{a>1434:A,x<2274:A,m>947:R,R}
|
||||||
|
kbn{x<1675:R,sz}
|
||||||
|
mb{m<1446:hvq,ch}
|
||||||
|
bcg{a>2036:A,a<1912:A,R}
|
||||||
|
mv{s<2113:jkk,s>2853:fd,xs}
|
||||||
|
dgq{a<1317:R,m>2464:R,m<2017:A,A}
|
||||||
|
dt{s<2641:R,m<702:A,R}
|
||||||
|
stf{m<199:A,R}
|
||||||
|
sh{m>261:R,a<915:A,R}
|
||||||
|
dv{a>2613:A,R}
|
||||||
|
zd{a<554:cdx,a<841:kjj,x<798:mlm,sg}
|
||||||
|
jn{a<3252:A,x<2123:R,A}
|
||||||
|
lvp{a>277:A,nf}
|
||||||
|
fh{m>123:R,A}
|
||||||
|
lt{x>1632:R,s<654:R,a<325:R,R}
|
||||||
|
lcr{a<720:A,m>3584:A,R}
|
||||||
|
jfx{s>1699:R,x>616:A,A}
|
||||||
|
hg{s<2617:xmj,a<850:R,s>2800:A,A}
|
||||||
|
vpd{m<2602:R,a<1388:R,x<2900:rnd,A}
|
||||||
|
mc{x<1595:A,x<1769:R,x>1809:A,A}
|
||||||
|
hnq{x>2458:A,s<1704:R,A}
|
||||||
|
bp{x<1089:A,x<1479:A,R}
|
||||||
|
lps{x>2602:R,A}
|
||||||
|
gmh{m<2825:R,A}
|
||||||
|
dmp{a<1343:dl,x<2089:A,x>2165:A,R}
|
||||||
|
bbg{x<415:A,m<580:A,a>1069:mdk,nj}
|
||||||
|
qlb{m<838:nl,m<1169:pq,x<799:pl,dxj}
|
||||||
|
ms{s<3815:hn,a<1068:lqt,qdf}
|
||||||
|
lh{s<885:vkl,m>1432:pn,a>1109:pd,vb}
|
||||||
|
fg{s<3875:R,m<2292:A,x>2987:A,R}
|
||||||
|
sgx{x>2162:R,x>2109:A,R}
|
||||||
|
fb{x>2219:bc,sx}
|
||||||
|
gh{a<2425:R,R}
|
||||||
|
zj{s<1096:xlj,R}
|
||||||
|
rc{a>1099:R,m>1634:jpf,x<1066:A,R}
|
||||||
|
lxp{a>1410:tpc,s>2961:qgx,R}
|
||||||
|
rsc{m<134:A,m>220:A,R}
|
||||||
|
xr{s<789:pj,m>812:hq,s<967:xvt,vld}
|
||||||
|
jq{a<892:zcf,m<3084:fn,R}
|
||||||
|
jx{m<668:bzx,a>1083:R,A}
|
||||||
|
ft{s>2537:R,x>3546:R,x>3014:A,pgh}
|
||||||
|
db{a<998:R,s<1612:R,x>2784:A,R}
|
||||||
|
vd{s>2660:pqk,a<3336:rsc,a>3760:hvb,A}
|
||||||
|
cn{s>2852:R,m>2099:rsh,dxk}
|
||||||
|
tjz{x<3743:R,s>3348:ssv,s>3252:R,kkm}
|
||||||
|
nlt{a<205:R,x>1400:R,a<276:A,A}
|
||||||
|
xvt{m>687:R,x<799:A,A}
|
||||||
|
hp{m>1850:hg,m<1700:rc,s>2663:hl,jr}
|
||||||
|
kch{m>1902:A,R}
|
||||||
|
llb{s<1505:R,x<1208:R,x>1337:krp,R}
|
||||||
|
tmk{x<647:tcj,x<1410:hp,x>1663:xq,cgj}
|
||||||
|
psj{x<2003:hnh,R}
|
||||||
|
szq{x<2455:A,x>2571:R,R}
|
||||||
|
nxc{s<3784:A,s<3926:A,x>3006:A,A}
|
||||||
|
ph{x>2866:ts,ngq}
|
||||||
|
zh{a>920:A,R}
|
||||||
|
md{x>809:hf,x<467:lh,zjr}
|
||||||
|
kd{a<1002:jt,x<3170:vpd,pfg}
|
||||||
|
sc{x<1928:A,a<406:R,m>2129:R,A}
|
||||||
|
vg{a<2146:R,m<798:R,s>1349:R,A}
|
||||||
|
clg{s<1574:A,A}
|
||||||
|
gd{a<1867:R,s>1838:R,m>3359:R,A}
|
||||||
|
dxk{a<463:A,s<2763:R,s<2797:R,R}
|
||||||
|
prx{a>3468:vk,m<2059:rbt,x>3171:hk,qvp}
|
||||||
|
fcn{x<1040:R,s>626:R,x<1572:A,A}
|
||||||
|
srx{m>147:R,m<80:A,R}
|
||||||
|
dzv{x>2236:zhr,a<1268:zll,tt}
|
||||||
|
bx{s>2165:A,x<3424:A,s<2155:A,R}
|
||||||
|
sx{m<2846:dq,s<2128:mq,s>3114:gf,lzn}
|
||||||
|
mmt{m>667:R,R}
|
||||||
|
zll{s>2412:sfz,x>2017:sbh,tm}
|
||||||
|
hnp{s>2072:R,R}
|
||||||
|
pl{x>413:R,m<1336:R,x<211:R,jz}
|
||||||
|
dr{a>1530:R,A}
|
||||||
|
qzf{s>2145:bx,a<1033:R,kfx}
|
||||||
|
rj{a<3192:A,s>3193:R,m>697:A,A}
|
||||||
|
fnd{x>449:A,s>115:R,R}
|
||||||
|
vk{m<2203:A,s>2735:R,x>3249:R,A}
|
||||||
|
vxh{m>559:bxz,x<777:R,R}
|
||||||
|
tpp{x<1376:hh,bmn}
|
||||||
|
nk{s<810:R,a>313:A,a>264:R,A}
|
||||||
|
nvr{s>792:A,x>1945:R,R}
|
||||||
|
zxd{x<3810:xf,m<2542:hsm,cg}
|
||||||
|
kz{s<606:R,m>1077:A,A}
|
||||||
|
bkc{x>2757:A,R}
|
||||||
|
xnx{m>3422:A,a>711:R,s<3019:R,A}
|
||||||
|
tjf{a<744:R,a>1261:A,a>1039:fx,zsx}
|
||||||
|
kc{m>1735:R,A}
|
||||||
|
tgr{x>786:xjb,bbg}
|
||||||
|
td{a>3522:xqd,x>2536:R,x<2142:dlg,rj}
|
||||||
|
zrh{m>1071:md,s<1184:kg,jrv}
|
||||||
|
gsn{a<885:A,a>912:R,R}
|
||||||
|
ldb{a>254:R,R}
|
||||||
|
qx{a>982:A,m<2418:R,R}
|
||||||
|
kp{s<3127:rg,s>3291:pb,x<3205:td,hhb}
|
||||||
|
rr{s<2162:R,R}
|
||||||
|
sj{m<572:R,A}
|
||||||
|
st{x<2946:A,x>3298:A,a<700:R,R}
|
||||||
|
sp{m<2339:R,s>3855:A,R}
|
||||||
|
zzx{m<3186:dm,xl}
|
||||||
|
bcv{s<2617:A,a>1559:R,x>1488:A,A}
|
||||||
|
xhj{s>2477:A,R}
|
||||||
|
fp{x>3859:R,R}
|
||||||
|
nx{m<1903:A,bsc}
|
||||||
|
gpf{m<821:A,m>1201:R,s<3661:R,R}
|
||||||
|
bxc{x>1591:R,A}
|
||||||
|
mx{m>85:R,R}
|
||||||
|
dql{s>1910:lpf,m>2088:dzq,zrh}
|
||||||
|
fvx{a<1533:A,A}
|
||||||
|
snb{m>1043:A,s<1569:vg,m<829:A,mh}
|
||||||
|
rp{x<289:A,A}
|
||||||
|
xxk{m<1974:A,s<1985:A,R}
|
||||||
|
qr{s<3186:A,a>1382:R,s>3578:A,A}
|
||||||
|
jrv{m<380:dd,m<830:hhr,ptj}
|
||||||
|
skq{x>635:A,hx}
|
||||||
|
rpj{s>3338:kn,a>391:A,R}
|
||||||
|
zs{m>2355:R,a>863:A,s<3650:A,A}
|
||||||
|
rvd{s>1220:R,s<494:jzq,s<762:nlj,A}
|
||||||
|
qm{x<2515:R,R}
|
||||||
|
sqt{a<1023:A,R}
|
||||||
|
lcl{m<2710:A,m<3464:R,m<3759:R,R}
|
||||||
|
gkk{s<3899:R,a>3581:A,a<3426:R,rhd}
|
||||||
|
fr{s<2683:njl,R}
|
||||||
|
nhz{a<947:A,m>1908:R,m>1673:A,A}
|
||||||
|
rlp{s<774:A,R}
|
||||||
|
bf{s<3175:A,R}
|
||||||
|
psr{x>1061:R,a<1875:A,x>357:R,A}
|
||||||
|
nqs{x<319:A,s<3699:A,x>463:kch,R}
|
||||||
|
fxs{s<3617:R,a<1444:A,A}
|
||||||
|
dxj{m>1297:gn,flt}
|
||||||
|
mhl{m>1106:R,s>1412:A,s<1288:R,R}
|
||||||
|
cgf{x<3874:R,m>3565:A,A}
|
||||||
|
qtt{x<603:A,m<300:R,x>743:R,R}
|
||||||
|
sd{x<3134:A,x>3645:qfp,x<3407:hc,R}
|
||||||
|
lpf{m>2444:cz,m<1547:jlg,s<3133:tmk,bt}
|
||||||
|
bbp{a>1097:lxp,m<2430:mvh,nd}
|
||||||
|
kkg{s>1504:fvx,s>961:gbd,x<2356:dr,A}
|
||||||
|
vxr{m<1531:A,m<1719:R,x<357:R,R}
|
||||||
|
mvh{m<1146:vmr,a<380:R,R}
|
||||||
|
csf{x>2650:pxr,a<2576:R,vv}
|
||||||
|
qzs{m<868:R,x<471:A,R}
|
||||||
|
sl{x<2677:hrh,s>1997:cvq,xpq}
|
||||||
|
hnh{s<2435:A,a<1516:A,a>1606:R,R}
|
||||||
|
bq{x<943:qzs,m>870:cr,mvd}
|
||||||
|
rq{a>2886:nrt,m>2662:gh,hv}
|
||||||
|
dm{a<495:mtn,a>678:bpt,ng}
|
||||||
|
mxs{a>470:R,x>3575:A,A}
|
||||||
|
gxm{m>1455:A,a>431:R,R}
|
||||||
|
bzx{a>1117:R,s<2331:A,A}
|
||||||
|
tcj{a>1108:jkx,s>2661:cn,a>647:sgg,htm}
|
||||||
|
zl{x<1326:R,a<186:R,A}
|
||||||
|
bqz{a>544:A,a<307:R,A}
|
||||||
|
xkg{x<1915:A,A}
|
||||||
|
cdx{a>339:rlp,x<772:A,a>152:npv,jk}
|
||||||
|
bz{a>1306:R,x<1884:R,x<1901:R,A}
|
||||||
|
hd{x>441:A,m>802:A,A}
|
||||||
|
kh{x>3037:R,cmk}
|
||||||
|
mn{a<482:A,A}
|
||||||
|
pk{s<2557:A,R}
|
||||||
|
nqq{a>559:A,s<3600:A,x>1458:A,R}
|
||||||
|
nrs{a>2275:R,a>2016:R,gd}
|
||||||
|
rpk{s<2091:nmh,s>2183:mj,m<2279:tf,qzf}
|
||||||
|
mlm{x<388:R,m>571:A,s<752:nhq,sh}
|
||||||
|
jxs{a>2736:A,R}
|
||||||
|
ks{x<974:A,a>1269:A,x>1159:R,R}
|
||||||
|
xmh{m<3623:A,m<3765:A,R}
|
||||||
|
hrh{m<1654:jrz,a<980:fb,dzv}
|
||||||
|
tp{m<2079:hnq,kcb}
|
||||||
|
fv{m>1406:ft,s<2551:vbg,hrq}
|
||||||
|
bpt{a<758:A,m<2540:A,R}
|
||||||
|
vql{x<1984:A,a>515:A,a<192:A,A}
|
||||||
|
bs{m>2823:A,A}
|
||||||
|
nf{m>644:R,R}
|
||||||
|
ssv{s<3440:A,A}
|
||||||
|
rfd{s<1718:clg,s>1797:stf,m<251:R,A}
|
||||||
|
lq{a>646:R,x>1191:R,R}
|
||||||
|
rv{a<531:zj,rvd}
|
||||||
|
tz{s>403:A,s>222:R,A}
|
||||||
|
gk{a<2728:R,x<3291:A,a>2857:R,R}
|
||||||
|
vjj{x>745:zfp,nqs}
|
||||||
|
cqp{x>2993:A,m<2484:R,a<1361:A,A}
|
||||||
|
xqd{s>3201:A,R}
|
||||||
|
cr{s>1438:A,a<283:A,x<1533:A,A}
|
||||||
|
xdg{s>1494:A,R}
|
||||||
|
xjb{s<2508:pqd,s>2732:xcm,s>2589:dt,ds}
|
||||||
|
nnd{a>1189:sq,dck}
|
||||||
|
brs{s<1860:A,x>2522:R,A}
|
||||||
|
jm{s<3472:A,m>227:A,m<99:A,A}
|
||||||
|
mh{m<948:A,m>1009:R,R}
|
||||||
|
lm{s<2631:A,A}
|
||||||
|
qgx{m>1733:A,a<1279:A,s>3061:R,A}
|
||||||
|
kjg{m>757:tmx,A}
|
||||||
|
njl{a<3412:R,s>2568:R,s>2458:R,A}
|
||||||
|
mnk{m>1403:phx,m>1317:R,a>417:st,bnh}
|
||||||
|
vb{a>478:zkk,bn}
|
||||||
|
tnp{x<3103:A,x>3353:dkv,m<1534:A,sv}
|
||||||
|
plz{a<2245:A,A}
|
||||||
|
hhr{s>1496:vxh,sj}
|
||||||
|
nv{m>3730:R,R}
|
||||||
|
km{x<978:hd,rqf}
|
||||||
|
dgs{m<245:A,s<1274:A,R}
|
||||||
|
tnb{s>3817:pth,x>3774:A,gpf}
|
||||||
|
cq{a<1034:mn,mmz}
|
||||||
|
dck{s>410:cxs,m<2779:qx,jb}
|
||||||
|
cm{a>1896:R,A}
|
||||||
|
kms{a>2292:R,x<1613:drs,m>1261:bcg,A}
|
||||||
|
bdx{m>310:R,s<240:A,s>356:R,A}
|
||||||
|
rqf{s>3178:A,zdp}
|
||||||
|
xmj{m>2206:A,R}
|
||||||
|
hf{m>1482:jp,x<1267:cq,pmv}
|
||||||
|
vv{s<3498:A,x>954:A,x>375:A,R}
|
||||||
|
bxn{m>622:A,x<3163:A,A}
|
||||||
|
lqt{m<3266:A,a<374:A,a<656:R,A}
|
||||||
|
kjd{a>215:R,A}
|
||||||
|
lvs{s<2888:lm,A}
|
||||||
|
jcz{x>988:xd,mxf}
|
||||||
|
bt{m<2092:vjj,jcz}
|
||||||
|
gm{a>795:A,m>3022:R,R}
|
||||||
|
prn{s>3549:tnb,tjz}
|
||||||
|
tjj{s<1166:zkd,s>1652:lrd,x<3663:sxt,rft}
|
||||||
|
tt{a>1417:psj,x>2002:dmp,a>1352:rx,fzx}
|
||||||
|
nj{m<1121:R,R}
|
||||||
|
qkh{m>3145:pnj,dkl}
|
||||||
|
ch{s>2396:dg,cv}
|
||||||
|
zm{x>625:A,x<542:A,m>1927:A,R}
|
||||||
|
lmt{m>2506:R,s<1559:R,m>2329:mc,vxn}
|
||||||
|
fbb{a<1249:R,s<765:A,R}
|
||||||
|
nlj{s<671:R,x<425:R,R}
|
||||||
|
frt{m<454:srz,a>1436:gbf,xr}
|
||||||
|
cv{m>2927:qd,tbl}
|
||||||
|
vz{s>2596:bbp,s<2247:rpk,s>2462:fv,ssd}
|
||||||
|
pbv{s>1407:ldb,s>929:A,kz}
|
||||||
|
bgx{x<941:rv,zzx}
|
||||||
|
pfg{x>3349:zzt,nfm}
|
||||||
|
ssd{m<2231:tjf,a>683:gq,tv}
|
||||||
|
cmf{s<3771:xj,m<1213:plz,dqb}
|
||||||
|
qsk{s<3510:kd,ms}
|
||||||
|
mjs{s<1429:A,A}
|
||||||
|
dj{s>3501:br,m>1254:psq,x<3181:hm,fvf}
|
||||||
|
hmd{m<3500:R,m>3704:R,A}
|
||||||
|
tx{x>2397:R,x<1870:A,s<1560:A,R}
|
||||||
|
ts{a<1021:A,x>2977:R,lcl}
|
||||||
|
sfz{m>2706:A,s>3253:A,A}
|
||||||
|
vrz{m>3406:R,m<2945:A,A}
|
||||||
|
psb{x>3943:R,R}
|
||||||
|
hvb{m>189:A,m<82:R,A}
|
||||||
|
xk{x<1541:dbp,m<3333:xpg,s<2457:R,nv}
|
||||||
|
jkx{s<2566:R,A}
|
||||||
|
trm{a>3458:A,A}
|
||||||
|
xl{a>319:A,m>3484:zl,nlt}
|
||||||
|
mvd{a>391:A,m>852:R,A}
|
||||||
|
mdk{m<1132:R,m>1384:A,R}
|
||||||
|
ql{a>2685:dlh,xdc}
|
||||||
|
tg{x>1137:xk,sr}
|
||||||
|
xcm{s>2808:A,R}
|
||||||
|
dkv{m>1597:A,a<1295:R,m>1451:A,A}
|
||||||
|
pq{x>685:zq,A}
|
||||||
|
hcq{m<1264:A,a>3456:R,x<3097:R,R}
|
||||||
|
gfh{a<942:R,s>187:A,m>3151:A,R}
|
||||||
|
nqc{m>952:kms,m<498:crv,x<1886:mp,lvs}
|
||||||
|
zv{a<2363:A,s>2848:A,dv}
|
||||||
|
kg{a<990:zd,frt}
|
||||||
|
sxt{x>3571:mhl,s>1399:R,R}
|
||||||
|
rcb{s>831:R,R}
|
||||||
|
ct{m<2782:R,x<2144:R,R}
|
||||||
|
jk{x>1280:R,a<62:R,a<97:A,A}
|
||||||
|
xpg{s<2389:R,x>1653:R,x>1605:A,A}
|
||||||
|
rm{s>756:R,s<272:A,A}
|
||||||
|
zt{m<1571:R,x>357:R,s<90:R,R}
|
||||||
|
kzh{x>2664:sd,s<1123:jlb,snb}
|
||||||
|
hk{a>3113:A,m<2299:R,R}
|
||||||
|
xgd{s>3436:A,s<3413:A,m<2980:A,R}
|
||||||
|
xn{a<733:A,x>1650:R,a<1166:A,R}
|
||||||
|
zg{a>211:R,R}
|
||||||
|
phx{m>1520:R,s<3316:R,A}
|
||||||
|
nl{x>1066:rcl,R}
|
||||||
|
gts{a<2156:R,A}
|
||||||
|
cz{s<3196:tg,vts}
|
||||||
|
flt{x<1306:R,m>1253:A,s<3466:R,R}
|
||||||
|
mq{m<3476:R,a>643:R,m>3779:A,zk}
|
||||||
|
xpq{m>1741:btr,kj}
|
||||||
|
dlg{s<3232:R,s>3262:R,R}
|
||||||
|
jcp{m<292:A,x<3654:A,a<245:A,A}
|
||||||
|
sds{a>1440:A,x<3037:R,A}
|
||||||
|
kjt{x<2493:bd,mjv}
|
||||||
|
xd{x>1460:R,vr}
|
||||||
|
dg{s>3110:tsq,x>2350:mf,tbx}
|
||||||
|
snk{a>2064:A,m>2299:R,A}
|
||||||
|
xj{s<3720:R,a>2638:A,A}
|
||||||
|
cgj{a<890:ff,x>1546:nx,m<1898:zcv,kfs}
|
||||||
|
srz{a>1345:A,A}
|
||||||
|
pn{s<1253:A,R}
|
||||||
|
ktx{a<1448:A,a<1571:A,A}
|
||||||
|
mdl{s<786:R,m<811:A,A}
|
||||||
|
jqq{s>3703:gjp,hcq}
|
||||||
|
rjk{s>459:A,x>3536:A,A}
|
||||||
|
cxs{s>846:pnb,s>638:R,A}
|
||||||
|
jtt{s>281:gmh,x<928:fnd,s<175:A,A}
|
||||||
|
ngq{s>979:db,x<2798:tz,m>2572:R,sqt}
|
||||||
|
qb{m>669:R,A}
|
||||||
|
pvj{m>712:R,x>690:R,a>1577:R,A}
|
||||||
|
|
||||||
|
{x=396,m=612,a=2012,s=177}
|
||||||
|
{x=39,m=25,a=812,s=272}
|
||||||
|
{x=1930,m=15,a=99,s=905}
|
||||||
|
{x=373,m=1162,a=3153,s=1794}
|
||||||
|
{x=1045,m=108,a=1143,s=639}
|
||||||
|
{x=2178,m=621,a=580,s=172}
|
||||||
|
{x=1292,m=1910,a=122,s=2528}
|
||||||
|
{x=275,m=192,a=83,s=2992}
|
||||||
|
{x=2218,m=157,a=99,s=545}
|
||||||
|
{x=822,m=2795,a=82,s=150}
|
||||||
|
{x=2178,m=12,a=1672,s=1504}
|
||||||
|
{x=2463,m=620,a=882,s=1746}
|
||||||
|
{x=1025,m=1370,a=21,s=45}
|
||||||
|
{x=3161,m=944,a=884,s=1590}
|
||||||
|
{x=285,m=849,a=595,s=2630}
|
||||||
|
{x=423,m=480,a=177,s=2385}
|
||||||
|
{x=2022,m=777,a=1166,s=371}
|
||||||
|
{x=195,m=1446,a=1622,s=727}
|
||||||
|
{x=1831,m=1163,a=710,s=98}
|
||||||
|
{x=2054,m=767,a=416,s=462}
|
||||||
|
{x=814,m=1038,a=1871,s=118}
|
||||||
|
{x=2109,m=136,a=69,s=265}
|
||||||
|
{x=30,m=745,a=2265,s=2135}
|
||||||
|
{x=92,m=1923,a=1269,s=62}
|
||||||
|
{x=2952,m=875,a=82,s=199}
|
||||||
|
{x=1527,m=550,a=926,s=34}
|
||||||
|
{x=84,m=1894,a=1418,s=3020}
|
||||||
|
{x=1419,m=2050,a=2634,s=992}
|
||||||
|
{x=19,m=1722,a=207,s=2292}
|
||||||
|
{x=122,m=3195,a=179,s=979}
|
||||||
|
{x=970,m=3603,a=193,s=1431}
|
||||||
|
{x=515,m=681,a=501,s=459}
|
||||||
|
{x=682,m=2621,a=1754,s=649}
|
||||||
|
{x=1972,m=2722,a=215,s=2720}
|
||||||
|
{x=358,m=2273,a=248,s=1091}
|
||||||
|
{x=103,m=468,a=48,s=467}
|
||||||
|
{x=111,m=251,a=199,s=55}
|
||||||
|
{x=1536,m=541,a=1850,s=1349}
|
||||||
|
{x=318,m=1491,a=1124,s=1821}
|
||||||
|
{x=2441,m=1571,a=981,s=1207}
|
||||||
|
{x=639,m=2165,a=588,s=658}
|
||||||
|
{x=704,m=1423,a=2397,s=1207}
|
||||||
|
{x=51,m=161,a=833,s=1036}
|
||||||
|
{x=375,m=188,a=1668,s=681}
|
||||||
|
{x=141,m=744,a=732,s=77}
|
||||||
|
{x=341,m=1182,a=1040,s=249}
|
||||||
|
{x=265,m=873,a=281,s=1691}
|
||||||
|
{x=1022,m=37,a=1865,s=338}
|
||||||
|
{x=1580,m=137,a=283,s=1031}
|
||||||
|
{x=1361,m=1432,a=1179,s=2447}
|
||||||
|
{x=617,m=1360,a=305,s=54}
|
||||||
|
{x=235,m=733,a=60,s=2192}
|
||||||
|
{x=362,m=181,a=1297,s=835}
|
||||||
|
{x=133,m=132,a=1327,s=64}
|
||||||
|
{x=573,m=263,a=741,s=98}
|
||||||
|
{x=799,m=898,a=2180,s=732}
|
||||||
|
{x=186,m=517,a=681,s=1168}
|
||||||
|
{x=47,m=2806,a=3577,s=578}
|
||||||
|
{x=3218,m=1130,a=1204,s=414}
|
||||||
|
{x=2468,m=2891,a=900,s=2094}
|
||||||
|
{x=215,m=1069,a=1689,s=1228}
|
||||||
|
{x=372,m=937,a=725,s=412}
|
||||||
|
{x=1434,m=1549,a=1539,s=1007}
|
||||||
|
{x=3222,m=841,a=1854,s=1272}
|
||||||
|
{x=2326,m=1637,a=1918,s=30}
|
||||||
|
{x=1248,m=266,a=750,s=2521}
|
||||||
|
{x=110,m=1288,a=364,s=749}
|
||||||
|
{x=752,m=803,a=257,s=316}
|
||||||
|
{x=1777,m=1615,a=942,s=110}
|
||||||
|
{x=227,m=1524,a=1800,s=309}
|
||||||
|
{x=105,m=246,a=1723,s=3455}
|
||||||
|
{x=713,m=1172,a=833,s=804}
|
||||||
|
{x=3026,m=39,a=376,s=71}
|
||||||
|
{x=946,m=3437,a=1461,s=149}
|
||||||
|
{x=1878,m=303,a=207,s=1081}
|
||||||
|
{x=2982,m=2510,a=14,s=3078}
|
||||||
|
{x=818,m=1042,a=943,s=958}
|
||||||
|
{x=2349,m=7,a=802,s=822}
|
||||||
|
{x=140,m=473,a=2454,s=3331}
|
||||||
|
{x=1014,m=796,a=1453,s=348}
|
||||||
|
{x=1578,m=2615,a=539,s=294}
|
||||||
|
{x=993,m=276,a=564,s=2618}
|
||||||
|
{x=2908,m=327,a=705,s=1430}
|
||||||
|
{x=46,m=361,a=291,s=1076}
|
||||||
|
{x=2267,m=212,a=952,s=365}
|
||||||
|
{x=677,m=2277,a=550,s=1061}
|
||||||
|
{x=226,m=1391,a=653,s=2321}
|
||||||
|
{x=1654,m=15,a=27,s=421}
|
||||||
|
{x=974,m=241,a=255,s=283}
|
||||||
|
{x=202,m=84,a=1805,s=81}
|
||||||
|
{x=337,m=529,a=254,s=42}
|
||||||
|
{x=765,m=2055,a=473,s=413}
|
||||||
|
{x=1731,m=81,a=370,s=133}
|
||||||
|
{x=2839,m=739,a=513,s=990}
|
||||||
|
{x=376,m=660,a=924,s=65}
|
||||||
|
{x=627,m=1486,a=1422,s=2326}
|
||||||
|
{x=2688,m=2,a=659,s=347}
|
||||||
|
{x=1388,m=1650,a=1875,s=363}
|
||||||
|
{x=305,m=1406,a=1285,s=50}
|
||||||
|
{x=1095,m=382,a=2098,s=1120}
|
||||||
|
{x=1172,m=402,a=1935,s=1646}
|
||||||
|
{x=27,m=357,a=714,s=355}
|
||||||
|
{x=42,m=45,a=217,s=1134}
|
||||||
|
{x=22,m=415,a=624,s=358}
|
||||||
|
{x=324,m=3057,a=221,s=3288}
|
||||||
|
{x=540,m=179,a=1033,s=568}
|
||||||
|
{x=7,m=999,a=453,s=316}
|
||||||
|
{x=231,m=428,a=1092,s=8}
|
||||||
|
{x=2221,m=3036,a=22,s=735}
|
||||||
|
{x=247,m=516,a=339,s=1756}
|
||||||
|
{x=3140,m=2229,a=1643,s=2012}
|
||||||
|
{x=1248,m=500,a=624,s=779}
|
||||||
|
{x=1245,m=1806,a=579,s=2269}
|
||||||
|
{x=989,m=442,a=671,s=419}
|
||||||
|
{x=266,m=1547,a=992,s=664}
|
||||||
|
{x=1078,m=24,a=1069,s=1848}
|
||||||
|
{x=908,m=1979,a=1027,s=956}
|
||||||
|
{x=78,m=719,a=1328,s=105}
|
||||||
|
{x=901,m=601,a=3503,s=1239}
|
||||||
|
{x=949,m=851,a=356,s=1086}
|
||||||
|
{x=315,m=565,a=1868,s=857}
|
||||||
|
{x=1426,m=1398,a=918,s=1629}
|
||||||
|
{x=1286,m=2229,a=500,s=16}
|
||||||
|
{x=360,m=481,a=2006,s=991}
|
||||||
|
{x=1514,m=2442,a=1921,s=183}
|
||||||
|
{x=2155,m=1924,a=616,s=986}
|
||||||
|
{x=2121,m=1323,a=352,s=958}
|
||||||
|
{x=756,m=2750,a=543,s=2608}
|
||||||
|
{x=833,m=168,a=2410,s=232}
|
||||||
|
{x=3,m=810,a=451,s=40}
|
||||||
|
{x=1151,m=452,a=1642,s=965}
|
||||||
|
{x=560,m=2062,a=2265,s=846}
|
||||||
|
{x=1,m=246,a=905,s=323}
|
||||||
|
{x=1642,m=193,a=448,s=25}
|
||||||
|
{x=86,m=486,a=588,s=75}
|
||||||
|
{x=2360,m=5,a=417,s=2689}
|
||||||
|
{x=676,m=947,a=402,s=355}
|
||||||
|
{x=1869,m=44,a=944,s=1139}
|
||||||
|
{x=36,m=1033,a=588,s=391}
|
||||||
|
{x=63,m=31,a=608,s=817}
|
||||||
|
{x=1115,m=2098,a=617,s=702}
|
||||||
|
{x=2117,m=848,a=2371,s=3170}
|
||||||
|
{x=270,m=2617,a=393,s=330}
|
||||||
|
{x=325,m=3377,a=870,s=1077}
|
||||||
|
{x=275,m=139,a=876,s=648}
|
||||||
|
{x=657,m=231,a=2197,s=915}
|
||||||
|
{x=1934,m=1410,a=1965,s=1574}
|
||||||
|
{x=251,m=841,a=480,s=24}
|
||||||
|
{x=771,m=479,a=107,s=2259}
|
||||||
|
{x=1364,m=166,a=27,s=664}
|
||||||
|
{x=774,m=303,a=909,s=93}
|
||||||
|
{x=264,m=164,a=3471,s=176}
|
||||||
|
{x=681,m=2247,a=1660,s=837}
|
||||||
|
{x=1348,m=204,a=990,s=219}
|
||||||
|
{x=650,m=1469,a=1269,s=1160}
|
||||||
|
{x=1121,m=534,a=2270,s=927}
|
||||||
|
{x=322,m=1871,a=693,s=170}
|
||||||
|
{x=540,m=462,a=929,s=99}
|
||||||
|
{x=3015,m=915,a=808,s=3661}
|
||||||
|
{x=248,m=383,a=471,s=106}
|
||||||
|
{x=1536,m=1350,a=2067,s=804}
|
||||||
|
{x=1656,m=56,a=1629,s=995}
|
||||||
|
{x=17,m=236,a=288,s=218}
|
||||||
|
{x=663,m=1611,a=317,s=1272}
|
||||||
|
{x=630,m=2397,a=1538,s=805}
|
||||||
|
{x=211,m=2,a=137,s=514}
|
||||||
|
{x=2340,m=191,a=173,s=618}
|
||||||
|
{x=2154,m=6,a=42,s=884}
|
||||||
|
{x=526,m=1292,a=694,s=1722}
|
||||||
|
{x=606,m=355,a=1532,s=1351}
|
||||||
|
{x=1405,m=543,a=126,s=3}
|
||||||
|
{x=548,m=429,a=1382,s=572}
|
||||||
|
{x=95,m=1008,a=1790,s=42}
|
||||||
|
{x=1796,m=1272,a=188,s=201}
|
||||||
|
{x=1437,m=3161,a=754,s=4}
|
||||||
|
{x=891,m=447,a=1389,s=145}
|
||||||
|
{x=183,m=894,a=821,s=1455}
|
||||||
|
{x=457,m=79,a=1586,s=1179}
|
||||||
|
{x=1631,m=828,a=2697,s=73}
|
||||||
|
{x=56,m=506,a=1988,s=448}
|
||||||
|
{x=3408,m=971,a=2130,s=1899}
|
||||||
|
{x=347,m=1915,a=193,s=1460}
|
||||||
|
{x=308,m=3,a=1189,s=191}
|
||||||
|
{x=2,m=354,a=2761,s=287}
|
||||||
|
{x=634,m=864,a=101,s=233}
|
||||||
|
{x=632,m=91,a=1935,s=202}
|
||||||
|
{x=27,m=1364,a=2765,s=2}
|
||||||
|
{x=367,m=510,a=473,s=132}
|
||||||
|
{x=987,m=2516,a=1834,s=1121}
|
||||||
|
{x=626,m=845,a=176,s=265}
|
||||||
|
{x=577,m=823,a=2129,s=23}
|
||||||
|
{x=802,m=295,a=389,s=226}
|
||||||
|
{x=844,m=301,a=549,s=126}
|
||||||
|
{x=1139,m=235,a=9,s=1183}
|
||||||
|
{x=663,m=2444,a=554,s=1516}
|
||||||
|
{x=1244,m=355,a=252,s=1023}
|
||||||
|
{x=151,m=2238,a=392,s=93}
|
||||||
|
{x=99,m=1911,a=362,s=1272}
|
||||||
|
{x=71,m=146,a=46,s=1359}
|
||||||
|
{x=1140,m=650,a=75,s=1458}
|
||||||
17
day19/sample.txt
Normal file
17
day19/sample.txt
Normal file
@@ -0,0 +1,17 @@
|
|||||||
|
px{a<2006:qkq,m>2090:A,rfg}
|
||||||
|
pv{a>1716:R,A}
|
||||||
|
lnx{m>1548:A,A}
|
||||||
|
rfg{s<537:gd,x>2440:R,A}
|
||||||
|
qs{s>3448:A,lnx}
|
||||||
|
qkq{x<1416:A,crn}
|
||||||
|
crn{x>2662:A,R}
|
||||||
|
in{s<1351:px,qqz}
|
||||||
|
qqz{s>2770:qs,m<1801:hdj,R}
|
||||||
|
gd{a>3333:R,R}
|
||||||
|
hdj{m>838:A,pv}
|
||||||
|
|
||||||
|
{x=787,m=2655,a=1222,s=2876}
|
||||||
|
{x=1679,m=44,a=2067,s=496}
|
||||||
|
{x=2036,m=264,a=79,s=2244}
|
||||||
|
{x=2461,m=1339,a=466,s=291}
|
||||||
|
{x=2127,m=1623,a=2188,s=1013}
|
||||||
BIN
day20/c/day20
Executable file
BIN
day20/c/day20
Executable file
Binary file not shown.
204
day20/c/day20.c
Normal file
204
day20/c/day20.c
Normal file
@@ -0,0 +1,204 @@
|
|||||||
|
#include <stdio.h>
|
||||||
|
#include <stdlib.h>
|
||||||
|
#include <string.h>
|
||||||
|
|
||||||
|
#define LINE_MAX_LENGTH 256
|
||||||
|
#define MAX_CONNECTED 16
|
||||||
|
#define MAX_MODULES 128
|
||||||
|
#define MAX_QUEUE 1024
|
||||||
|
|
||||||
|
typedef enum module_type {
|
||||||
|
FLIPFLOP,
|
||||||
|
CONJUNCTION,
|
||||||
|
BROADCAST,
|
||||||
|
} module_type_t;
|
||||||
|
|
||||||
|
typedef struct module {
|
||||||
|
module_type_t type;
|
||||||
|
char name[16];
|
||||||
|
int name_length;
|
||||||
|
int state;
|
||||||
|
struct module *inputs[MAX_CONNECTED];
|
||||||
|
int input_memory[MAX_CONNECTED];
|
||||||
|
int input_num;
|
||||||
|
struct module *outputs[MAX_CONNECTED];
|
||||||
|
int output_num;
|
||||||
|
char output_names[MAX_CONNECTED][16];
|
||||||
|
int output_name_lengths[MAX_CONNECTED];
|
||||||
|
} module_t;
|
||||||
|
|
||||||
|
typedef struct signal {
|
||||||
|
int value;
|
||||||
|
module_t *module;
|
||||||
|
module_t *source;
|
||||||
|
} signal_t;
|
||||||
|
|
||||||
|
int main() {
|
||||||
|
char *p, *buf, c, *q;
|
||||||
|
|
||||||
|
buf = (char *)malloc(LINE_MAX_LENGTH);
|
||||||
|
memset(buf, 0, LINE_MAX_LENGTH);
|
||||||
|
p = buf;
|
||||||
|
|
||||||
|
module_t *modules = (module_t*)malloc(MAX_MODULES * sizeof(module_t));
|
||||||
|
memset(modules, 0, MAX_MODULES * sizeof(module_t));
|
||||||
|
int modules_num = 0;
|
||||||
|
|
||||||
|
while ((c = getchar()) != EOF) {
|
||||||
|
*p++ = c;
|
||||||
|
if (c == '\n') {
|
||||||
|
p = buf;
|
||||||
|
|
||||||
|
if (*p == '%' || *p == '&' || *p == '#') {
|
||||||
|
switch (*p) {
|
||||||
|
case '%':
|
||||||
|
modules[modules_num].type = FLIPFLOP;
|
||||||
|
break;
|
||||||
|
case '&':
|
||||||
|
modules[modules_num].type = CONJUNCTION;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
p++;
|
||||||
|
} else {
|
||||||
|
modules[modules_num].type = BROADCAST;
|
||||||
|
}
|
||||||
|
q = p;
|
||||||
|
while(*p != ' ') p++;
|
||||||
|
strncpy(modules[modules_num].name, q, p - q);
|
||||||
|
modules[modules_num].name_length = p - q;
|
||||||
|
p++;
|
||||||
|
while(*p != ' ') p++;
|
||||||
|
p++;
|
||||||
|
// Read outputs
|
||||||
|
while(*p != '\0') {
|
||||||
|
q = p;
|
||||||
|
while (*p != '\n' && *p != ',') p++;
|
||||||
|
strncpy(modules[modules_num].output_names[modules[modules_num].output_num], q, p - q);
|
||||||
|
modules[modules_num].output_name_lengths[modules[modules_num].output_num] = p - q;
|
||||||
|
modules[modules_num].output_num++;
|
||||||
|
p+=2;
|
||||||
|
}
|
||||||
|
|
||||||
|
modules_num++;
|
||||||
|
memset(buf, 0, LINE_MAX_LENGTH);
|
||||||
|
p = buf;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Link up modules
|
||||||
|
for (int i = 0; i < modules_num; i++) {
|
||||||
|
// Link outputs
|
||||||
|
int found = 0;
|
||||||
|
for (int j = 0; j < modules[i].output_num; j++) {
|
||||||
|
for (int k = 0; k < modules_num; k++) {
|
||||||
|
if (!strcmp(modules[k].name, modules[i].output_names[j])) {
|
||||||
|
modules[i].outputs[j] = &modules[k];
|
||||||
|
found++;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
// Link inputs
|
||||||
|
for (int j = 0; j < modules_num; j++) {
|
||||||
|
for (int k = 0; k < modules[j].output_num; k++) {
|
||||||
|
if (!strcmp(modules[i].name, modules[j].output_names[k])) {
|
||||||
|
modules[i].inputs[modules[i].input_num] = &modules[j];
|
||||||
|
modules[i].input_num++;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Find start
|
||||||
|
module_t *broadcast;
|
||||||
|
for (int i = 0; i < modules_num; i++) {
|
||||||
|
if (modules[i].type == BROADCAST) {
|
||||||
|
broadcast = &modules[i];
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
signal_t signal_queue[MAX_QUEUE];
|
||||||
|
unsigned long low_pulses = 0, high_pulses = 0;
|
||||||
|
|
||||||
|
int turned_on = 0;
|
||||||
|
#ifdef PART2
|
||||||
|
for(unsigned long l = 0; !turned_on; l++) {
|
||||||
|
#else
|
||||||
|
for (unsigned long l = 0; l < 1000; l++) {
|
||||||
|
#endif
|
||||||
|
memset(signal_queue, 0, MAX_QUEUE * sizeof(signal_t));
|
||||||
|
int signal_queue_length = 1;
|
||||||
|
signal_queue[0].value = 0;
|
||||||
|
signal_queue[0].module = broadcast;
|
||||||
|
signal_queue[0].source = NULL;
|
||||||
|
while (signal_queue_length > 0) {
|
||||||
|
// Pop first
|
||||||
|
signal_t signal = signal_queue[0];
|
||||||
|
for (int i = 0; i < signal_queue_length - 1; i++) {
|
||||||
|
memcpy(&signal_queue[i], &signal_queue[i+1], sizeof(signal_t));
|
||||||
|
}
|
||||||
|
signal_queue_length--;
|
||||||
|
int output;
|
||||||
|
if (signal.value) {
|
||||||
|
high_pulses++;
|
||||||
|
} else {
|
||||||
|
low_pulses++;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (signal.module == NULL) {
|
||||||
|
if (signal.value == 0) {
|
||||||
|
printf("Machine turn on: %lu\n", l+1);
|
||||||
|
turned_on = 1;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
switch (signal.module->type) {
|
||||||
|
case FLIPFLOP:
|
||||||
|
if (signal.value == 0) {
|
||||||
|
signal.module->state = !signal.module->state;
|
||||||
|
output = signal.module->state;
|
||||||
|
} else {
|
||||||
|
output = -1;
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case BROADCAST:
|
||||||
|
output = signal.value;
|
||||||
|
break;
|
||||||
|
case CONJUNCTION:
|
||||||
|
// Update input memory
|
||||||
|
for (int i = 0; i < signal.module->input_num; i++) {
|
||||||
|
if (signal.module->inputs[i] == signal.source) {
|
||||||
|
signal.module->input_memory[i] = signal.value;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
int all_high = 1;
|
||||||
|
for (int i = 0; i < signal.module->input_num; i++) {
|
||||||
|
if (signal.module->input_memory[i] == 0) {
|
||||||
|
all_high = 0;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
output = !all_high;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (output != -1) {
|
||||||
|
for (int i = 0; i < signal.module->output_num; i++) {
|
||||||
|
signal_queue[signal_queue_length].value = output;
|
||||||
|
signal_queue[signal_queue_length].module = signal.module->outputs[i];
|
||||||
|
signal_queue[signal_queue_length].source = signal.module;
|
||||||
|
signal_queue_length++;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
printf("%lu\n", high_pulses * low_pulses);
|
||||||
|
|
||||||
|
free(buf);
|
||||||
|
free(modules);
|
||||||
|
}
|
||||||
58
day20/input.txt
Normal file
58
day20/input.txt
Normal file
@@ -0,0 +1,58 @@
|
|||||||
|
%db -> cq
|
||||||
|
%rj -> gp, nd
|
||||||
|
%ff -> bk
|
||||||
|
%rc -> gp
|
||||||
|
%bk -> tv
|
||||||
|
%xz -> tf, bn
|
||||||
|
%gs -> bn
|
||||||
|
%ps -> rs, gp
|
||||||
|
%jr -> gp, cg
|
||||||
|
&pm -> vf
|
||||||
|
%pn -> pp, rt
|
||||||
|
%nv -> jr
|
||||||
|
%rs -> nv
|
||||||
|
%kz -> mj
|
||||||
|
%nd -> rc, gp
|
||||||
|
%nm -> rt, db
|
||||||
|
%dg -> rt, xl
|
||||||
|
%vg -> gn
|
||||||
|
%hc -> vr
|
||||||
|
%ft -> lf, bn
|
||||||
|
%mj -> hc, cz
|
||||||
|
%vb -> ft
|
||||||
|
%qd -> cz, sz
|
||||||
|
%pp -> rt
|
||||||
|
%cq -> rt, vg
|
||||||
|
%sr -> vb
|
||||||
|
%lf -> vx, bn
|
||||||
|
%lh -> pn, rt
|
||||||
|
%ls -> sl, cz
|
||||||
|
%tv -> gp, rj
|
||||||
|
%tf -> sr, bn
|
||||||
|
&mk -> vf
|
||||||
|
%bs -> rt, lh
|
||||||
|
%vx -> bn, gs
|
||||||
|
&bn -> fs, bv, vb, mk, sr, bz, cf
|
||||||
|
%rr -> ls
|
||||||
|
%bv -> xz
|
||||||
|
%hp -> bs, rt
|
||||||
|
&pk -> vf
|
||||||
|
%cg -> rq
|
||||||
|
%gn -> rt, dg
|
||||||
|
&cz -> hc, kz, rr, hf, sh
|
||||||
|
%sl -> cz, kz
|
||||||
|
broadcaster -> sh, nm, ps, fs
|
||||||
|
%cf -> bv
|
||||||
|
&vf -> rx
|
||||||
|
&rt -> pk, xl, nm, vg, db
|
||||||
|
%xl -> hp
|
||||||
|
%sh -> rr, cz
|
||||||
|
%bz -> cf
|
||||||
|
%fz -> dn, cz
|
||||||
|
&gp -> rs, nv, pm, cg, ff, bk, ps
|
||||||
|
%fs -> bz, bn
|
||||||
|
&hf -> vf
|
||||||
|
%vr -> cz, qd
|
||||||
|
%rq -> gp, ff
|
||||||
|
%sz -> cz, fz
|
||||||
|
%dn -> cz
|
||||||
5
day20/sample.txt
Normal file
5
day20/sample.txt
Normal file
@@ -0,0 +1,5 @@
|
|||||||
|
broadcaster -> a, b, c
|
||||||
|
%a -> b
|
||||||
|
%b -> c
|
||||||
|
%c -> inv
|
||||||
|
&inv -> a
|
||||||
5
day20/sample2.txt
Normal file
5
day20/sample2.txt
Normal file
@@ -0,0 +1,5 @@
|
|||||||
|
broadcaster -> a
|
||||||
|
%a -> inv, con
|
||||||
|
&inv -> b
|
||||||
|
%b -> con
|
||||||
|
&con -> output
|
||||||
BIN
day21/c/day21
Executable file
BIN
day21/c/day21
Executable file
Binary file not shown.
102
day21/c/day21.c
Normal file
102
day21/c/day21.c
Normal file
@@ -0,0 +1,102 @@
|
|||||||
|
#include <stdio.h>
|
||||||
|
#include <stdlib.h>
|
||||||
|
#include <string.h>
|
||||||
|
|
||||||
|
#define LINE_MAX_LENGTH 256
|
||||||
|
|
||||||
|
typedef enum tile_type {
|
||||||
|
GARDEN_PLOT,
|
||||||
|
ROCK,
|
||||||
|
WALKED,
|
||||||
|
} tile_type_t;
|
||||||
|
|
||||||
|
int main(int argc, char *argv[]) {
|
||||||
|
if (argc != 2) {
|
||||||
|
fprintf(stderr, "Please specify the step number\n");
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
int step_number = 0;
|
||||||
|
sscanf(argv[1], "%i", &step_number);
|
||||||
|
char *p, *buf, c;
|
||||||
|
|
||||||
|
tile_type_t map[LINE_MAX_LENGTH][LINE_MAX_LENGTH];
|
||||||
|
int x = 0, y = 0;
|
||||||
|
|
||||||
|
buf = (char *)malloc(LINE_MAX_LENGTH);
|
||||||
|
memset(buf, 0, LINE_MAX_LENGTH);
|
||||||
|
p = buf;
|
||||||
|
|
||||||
|
int start[2];
|
||||||
|
|
||||||
|
while ((c = getchar()) != EOF) {
|
||||||
|
*p++ = c;
|
||||||
|
if (c == '\n') {
|
||||||
|
p = buf;
|
||||||
|
x = 0;
|
||||||
|
while (*p != '\n') {
|
||||||
|
switch (*p) {
|
||||||
|
case '.':
|
||||||
|
map[x][y] = GARDEN_PLOT;
|
||||||
|
break;
|
||||||
|
case '#':
|
||||||
|
map[x][y] = ROCK;
|
||||||
|
break;
|
||||||
|
case 'S':
|
||||||
|
map[x][y] = GARDEN_PLOT;
|
||||||
|
start[0] = x;
|
||||||
|
start[1] = y;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
x++;
|
||||||
|
p++;
|
||||||
|
}
|
||||||
|
y++;
|
||||||
|
memset(buf, 0, LINE_MAX_LENGTH);
|
||||||
|
p = buf;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
tile_type_t walked_curr[LINE_MAX_LENGTH][LINE_MAX_LENGTH], walked_next[LINE_MAX_LENGTH][LINE_MAX_LENGTH];
|
||||||
|
memcpy(walked_curr, map, sizeof(map));
|
||||||
|
walked_curr[start[0]][start[1]] = WALKED;
|
||||||
|
|
||||||
|
for (int i = 0; i < step_number; i++) {
|
||||||
|
memcpy(walked_next, map, sizeof(map));
|
||||||
|
for (int j = 0; j < y; j++) {
|
||||||
|
for (int k = 0; k < x; k++) {
|
||||||
|
if (walked_curr[k][j] == WALKED) {
|
||||||
|
// UP
|
||||||
|
if (j > 0 && walked_next[k][j-1] == GARDEN_PLOT) {
|
||||||
|
walked_next[k][j-1] = WALKED;
|
||||||
|
}
|
||||||
|
// LEFT
|
||||||
|
if (k > 0 && walked_next[k-1][j] == GARDEN_PLOT) {
|
||||||
|
walked_next[k-1][j] = WALKED;
|
||||||
|
}
|
||||||
|
// DOWN
|
||||||
|
if (j < y - 1 && walked_next[k][j+1] == GARDEN_PLOT) {
|
||||||
|
walked_next[k][j+1] = WALKED;
|
||||||
|
}
|
||||||
|
// RIGHT
|
||||||
|
if (k < x - 1 && walked_next[k+1][j] == GARDEN_PLOT) {
|
||||||
|
walked_next[k+1][j] = WALKED;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
memcpy(walked_curr, walked_next, sizeof(map));
|
||||||
|
}
|
||||||
|
|
||||||
|
int part1 = 0;
|
||||||
|
|
||||||
|
for (int i = 0; i < y; i++) {
|
||||||
|
for (int j = 0; j < x; j++) {
|
||||||
|
if (walked_curr[j][i] == WALKED) {
|
||||||
|
part1++;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
printf("%i\n", part1);
|
||||||
|
free(buf);
|
||||||
|
}
|
||||||
131
day21/input.txt
Normal file
131
day21/input.txt
Normal file
@@ -0,0 +1,131 @@
|
|||||||
|
...................................................................................................................................
|
||||||
|
...##......#....#...#.....#.#....#...#...#...#......#........................##......#..#..#.#........#....................##......
|
||||||
|
...#.......#..........#..#....#................#...##.....##...................#..........###......#.....#.........#....#.#........
|
||||||
|
........#..##.............#..#...##...#..#...##...............................#.........................#..........................
|
||||||
|
..............#............#..#..........#.#.#....#...#......................#..#......#.##...#............................#.......
|
||||||
|
..##...............#...#...#......#.......................................#..............##...............#.....#...........#...#..
|
||||||
|
.##............#.................#...#..#......#...................................#.......#.#..#......##................##........
|
||||||
|
......###...#...#........#..............#....#.......##.......................##.......#..#.......#.........#...................#..
|
||||||
|
.................#...........................................#......................#.....#.....##...........#...............#.....
|
||||||
|
..#...#....#.......##...........#..#.............#............................##........#.......#...#...#...#....#....##...........
|
||||||
|
..............#..#.....#.....#.........#..#..#..#..#.......#.#..#....##........#.....#.........#..............#........#..#...#....
|
||||||
|
...##...............#...#.#....#............##..#.......................................#.......#...........#..#...........##....#.
|
||||||
|
.......................................#......#...........#..........#.............#..........##.............#....#..##....#.......
|
||||||
|
..................................#.............#........#...#.##.....................#....................#.##....#.............#.
|
||||||
|
.#......##...#......#..#...#...........#...#.............#.............#..#.........#..#.#........#.#...........#..................
|
||||||
|
............#............#..........#........#..........#.....#.#...#.......#........#.#...........#....#.............#.........#..
|
||||||
|
.....#.......##............#...#.#.#...#...#..............##..#....#......#......................#...#...#..........#......#.#.....
|
||||||
|
........#....#....#......#..........#........................#.....#....................................#.....#....#..##.##....#...
|
||||||
|
............#.................#.##.........#.........#.....#........#.........#........#....###...........#.............#..........
|
||||||
|
....##....#..#............#...#.#..#.........................#.#....##.....................#........#.........#....#....#........#.
|
||||||
|
...#...#...........#..#..................#.......#.#..#............................................##................#.............
|
||||||
|
...........#......#....#........#.#..........................#.#......#......##.............#..#...#...#.#..................#..#...
|
||||||
|
.............................#........#............#........#........#.#.......#...............##....#........#...#..#..#..........
|
||||||
|
..................................#...........................#.#..#.........................#...#.#......#..............##.....##.
|
||||||
|
........................#..........................#..................#...#............................#.......#...........#...##..
|
||||||
|
.......#.#.....#....#.....#................................##...#.........##..#.....................#..............................
|
||||||
|
......#........##..........#.................#..##......#..#.......#..........#....................................................
|
||||||
|
....#..........#......................................................##.#..#.#.##..................#......#............##...#.....
|
||||||
|
.............#..........#.#..............................................#.#........#....#...........#.......................#.....
|
||||||
|
..#.............#....#........#.#..............#.......#......#.#..#......#.#...........................................##.........
|
||||||
|
..#.....#.....#....#...#....#..........#......#..............................#...........#............#..#.....##..........#.......
|
||||||
|
......#.#.#...#........................#..........#.#......#............#......................................#...................
|
||||||
|
.#...........#...#....................#..#..#....#.#........................................................................#.#....
|
||||||
|
........#.#...........................#...#......#.#.#..#......##..#.#..#..#...#.#.#..................#.......##.#....#........#...
|
||||||
|
......#......#......#.....#..............#.#.........##.................#....................#............#....##........#.........
|
||||||
|
........#.............#..#............#......#........#....#............#.....#...........#..#...............###........#.....#....
|
||||||
|
.....#.........##....#..................#..#...........#.#....##...........................#.............#..##..#.........#........
|
||||||
|
............#....#..#.................#.............#..#.....##.....#.....#.........#........#............#........#.........##....
|
||||||
|
.#.......#.#..........#...............#..............#.....#........#...#......#......##...........................#..#.#......##..
|
||||||
|
.##.#.........#.............................#............................#.#..#...#.............#...#.........#...#......#.........
|
||||||
|
................................#........#..#..........##......#..................................#................#.#...#...#.....
|
||||||
|
.........#........#...........#........................#.#.##.........#.....#..#................................#.............##...
|
||||||
|
.........#.#....#..#.........#.#....#.......#.............#........#............#...#..........#...##..........#........#........#.
|
||||||
|
..............................###.....#......#......#...#....#...........#...#...............#.....##.#.....................#..#...
|
||||||
|
..........................#......#...#..............................##.#.......#........##..........#................#...##.....#..
|
||||||
|
...........#............................#..................#...#..#.....................#...#.................................#....
|
||||||
|
..#.#...............................................#..........#..........#..............#............##...........................
|
||||||
|
........#...#..................#.........#............#...............#.#..#.........#....#...............#.............##.........
|
||||||
|
............................##....................##......#..#....#.......#....#........................#...#.........#.....#....#.
|
||||||
|
.....#.#...............#....#..#....#...........#........#.#..................#.....##....#.......#......#......................#..
|
||||||
|
...........#.........#.#.......#......#.#.#.......#.#...#...................#...#......#..............#...#....#.................#.
|
||||||
|
...#..#...........#.............#..........##..............................###...........#.#.....##.......#.............#..........
|
||||||
|
...##.....................##...#..#.....#.........#.#....#.#.....................#..............#.#...#...#......#..............#..
|
||||||
|
......##................#.................#.#........#.#..#................#............#......#.#..............#...............#..
|
||||||
|
.......#...........#.................................##..................#...#........#.......#..##...##...........#.........#.....
|
||||||
|
..............#........#.............#..........#...............#..#.......#.........#..#...............#......#..#.........##.#...
|
||||||
|
.....#..........................................#...............#....#......#..#................................#...............#..
|
||||||
|
...............#.......#..#.........#......#..................#........#................#.#...........#....##......#............#..
|
||||||
|
...........................#.....##.........#...#...........#........#..#................#.#.#............#..#...#.....#...........
|
||||||
|
................#.....#..#.#......#.............#.....#...........##....#...#.#.....#.........#....................................
|
||||||
|
....................................#...........#..............#................#............#..#...............#.##..#.##.........
|
||||||
|
.........#.#..............#........#.........#..#...#........#............##......##.......#....##.............#...................
|
||||||
|
..........##.....................#................#...#....#........#.....#..........#........#................#..###..............
|
||||||
|
......................#............................#........................#.#..#..........#......................................
|
||||||
|
........#...........#.#....#.........#.....#..........#..#.#..............#.......................#..#................#.#..........
|
||||||
|
.................................................................S.................................................................
|
||||||
|
.........#.....#..#..........#.....#...........#...............##..#...............#.##....#...........#........#.#....#....#......
|
||||||
|
.........##...#......#..#.#................#...........#..#...........#...#....#..............#......#..#.................##.......
|
||||||
|
.....................##.....................##...#.......#......#.............................#..#.................................
|
||||||
|
........................#..............#....#.................#....#...........#.................#...#.........#........#..........
|
||||||
|
.........#..#.#...#.#..................#..............#.#...###....#......#......#.#....#..##..............#............#..........
|
||||||
|
..#.......#...#..............#...#..##............#.........#......#.#....#.#..........................#......#..#.....#...........
|
||||||
|
..#........#......##.............................#..............#..#....................##.......#....#..#..#..........#...........
|
||||||
|
.....................#.....#...........#.##................#.#....#.#.#............#...#..##.............#.....##..................
|
||||||
|
..##............#........#........#...#......#..........##.................#...#.#..........#...................................##.
|
||||||
|
...#.............#....#...#..#........#.........#......#..................#..#..#..........#.....#........#.#....##............#...
|
||||||
|
...#.............#...............................#.......#....#..........#..........................##......##...#.............#...
|
||||||
|
....#................#..#.#................#.....#.......#..................#.......................#.#............................
|
||||||
|
....#.#..............#..#.........#..#..#................#..#...#.#..............#......#...................#......................
|
||||||
|
.#......#....................#.................#........##......#......##..........#...............#..##.#.....#.............#.....
|
||||||
|
...##................#..........#......##.....#........#...#..................#........#......#....#..#.....#......................
|
||||||
|
......#..................#......#.......#.......#..............#......#.........#.......#..#.#.#...##.....#.............#..........
|
||||||
|
.#...................#...#....#......#.#.....#.....#..................#.#......#.......#.....#..#......................#.....#.....
|
||||||
|
...#......................#.......#..#.........#............#...#......##..........#...............................................
|
||||||
|
...#..#........#........#...........#.#...#...#.#..#.#...#..................#........#........#.#.##...#...........#...............
|
||||||
|
........#.......................#.............#....#...##.........#....................................#..............#...#........
|
||||||
|
...#...........##........#..#.......#...............................#..................#.....#.......#.#.........#.................
|
||||||
|
..........#...............#.###...................#..................................#.....#...#................##...............#.
|
||||||
|
..#......#..........................#...........................#..................#..#........#....##...................##......#.
|
||||||
|
....#...........#..#..........................#......###................#...........................#.........#.#........#.#.......
|
||||||
|
...#...#..#........#...............#...........#.......#........................##..#...............#............#...........#.....
|
||||||
|
.....#..........................#..#........#.......#......#......#..........#..#.....#.....#..#.................#........#........
|
||||||
|
....#...##.......................#...#.....#.....................................##.#..#....#....#................#................
|
||||||
|
..#.....##.........#..............#.#................#.........#...#.................#.........#..............................#....
|
||||||
|
............#...........#........#........................#.#.......#..#..#.........##...................#......##.#.......#.......
|
||||||
|
.........#......#......#............#.....#...##...#...............................#.....#..............##............#..#.....##..
|
||||||
|
...........................#.................#...........#.........#....#.#.#....#......#..#....................#......#...........
|
||||||
|
....#.#..............................#......#..........#...........#....#.............#.#..............................#.....#..#..
|
||||||
|
...........#...........#.............##....#......#.........#................#........#...............................#............
|
||||||
|
...#........#.#....#.....................#..........#.......#...#.........#..........................##........#.#.#...##..........
|
||||||
|
....#.#....#.........#.......#....................#...........#..........#....#......................#.............#.....#..#....#.
|
||||||
|
..........#................................#......#....#......#.................................................#..................
|
||||||
|
.............#................................#...#.##.#.....#.......#....#............###.......#........##.......................
|
||||||
|
..........#......##.............#.........#............................#.#..#.......................................#.....#......#.
|
||||||
|
...#.....#.......#............#.............#.#...#.....#.............#..#..........##.......................#.....................
|
||||||
|
..........................#......#..................#..#........#............#.......##......................###.......#.....#.....
|
||||||
|
............#.#....#.#................................##......#..............#..#.#........................#......#...#...#........
|
||||||
|
......##..........#......###...#......................#.........#.#............#..............#......#..............#.......#......
|
||||||
|
............#........#.....#........#..#.......#...#...................#.....#..................##.............#.................#.
|
||||||
|
........#.#........##..................................#......#......................................#.....................#.#...#.
|
||||||
|
.#.......##......#.....#..........#................#...................##..#...............#.......##....................#.........
|
||||||
|
...#..#..#.............................#...................#................#....................................#........#........
|
||||||
|
.....#....................................#.........##.............#...........................#...................................
|
||||||
|
............................#....#......#...................#..................................#...........................##......
|
||||||
|
...............#...#..#...#.###.#...........#..............#..........#...............##........#.##.#....#.#.............##.....#.
|
||||||
|
...........#.##......#...#.#.........#.#.#...#.........................................#..........#.............#.#.............#..
|
||||||
|
........#...............#........#........................#.#......#......#......................#...........#.........#.#...#.....
|
||||||
|
....#..#.............#......................#...................#.....##...............#...#........#.................#............
|
||||||
|
............#......#...#.....#..........#....#...............##.....##..#.........#....#..#.......#...#..#.........................
|
||||||
|
......#...........#.......#...#.#.....#...#......#...........#......#................#................#....#.#...#.................
|
||||||
|
.......#.#...#.......#......#.................................#..............................#...........#.............#.........#.
|
||||||
|
...................................#.....#.........#.............................#..#............#...................#...#.........
|
||||||
|
...............#......#...........................#................#...............##...........#......#........#....##......#.#...
|
||||||
|
...............#....................##....#...#.....#.................................#..#.............#.#..#.....#..#.#...........
|
||||||
|
.............................#......##..#........................................##....#.................#......#....#...#.........
|
||||||
|
......#.#.#...............#.......#............................................................#................#..........#..#....
|
||||||
|
...#.#...........#..#......#....###...............#..#..#......................#....#..............#......#................#.......
|
||||||
|
.......................#....#.....#..#.##.#..........#.....................#..................................#....####.##.........
|
||||||
|
......#..........##...#...........................#....#.................#........#.......................#.................#..#...
|
||||||
|
.................#..#...................#..#...#...##...#..................#..........#.#....#..#...........................#....#.
|
||||||
|
...................................................................................................................................
|
||||||
11
day21/sample.txt
Normal file
11
day21/sample.txt
Normal file
@@ -0,0 +1,11 @@
|
|||||||
|
...........
|
||||||
|
.....###.#.
|
||||||
|
.###.##..#.
|
||||||
|
..#.#...#..
|
||||||
|
....#.#....
|
||||||
|
.##..S####.
|
||||||
|
.##..#...#.
|
||||||
|
.......##..
|
||||||
|
.##.#.####.
|
||||||
|
.##..##.##.
|
||||||
|
...........
|
||||||
BIN
day22/c/day22
Executable file
BIN
day22/c/day22
Executable file
Binary file not shown.
140
day22/c/day22.c
Normal file
140
day22/c/day22.c
Normal file
@@ -0,0 +1,140 @@
|
|||||||
|
#include <stdio.h>
|
||||||
|
#include <stdlib.h>
|
||||||
|
#include <string.h>
|
||||||
|
#include <omp.h>
|
||||||
|
|
||||||
|
#define LINE_MAX_LENGTH 256
|
||||||
|
#define MAX_BRICKS 2048
|
||||||
|
#define NUM_0_CHARCODE 48
|
||||||
|
#define NUM_9_CHARCODE NUM_0_CHARCODE + 9
|
||||||
|
#define max(a,b) ((a) > (b) ? (a) : (b))
|
||||||
|
#define min(a,b) ((a) < (b) ? (a) : (b))
|
||||||
|
#define in_range(c,a,b) ((c) <= max(a,b) && (c) >= min(a,b))
|
||||||
|
|
||||||
|
typedef struct corner {
|
||||||
|
int x;
|
||||||
|
int y;
|
||||||
|
int z;
|
||||||
|
} corner_t;
|
||||||
|
|
||||||
|
typedef struct brick {
|
||||||
|
corner_t corners[2];
|
||||||
|
int fallen;
|
||||||
|
} brick_t;
|
||||||
|
|
||||||
|
int fall(brick_t bricks[], int bricks_num);
|
||||||
|
int intersect(brick_t brick_a, brick_t brick_b);
|
||||||
|
|
||||||
|
int main() {
|
||||||
|
char *p, *buf, c;
|
||||||
|
|
||||||
|
buf = (char *)malloc(LINE_MAX_LENGTH);
|
||||||
|
memset(buf, 0, LINE_MAX_LENGTH);
|
||||||
|
p = buf;
|
||||||
|
|
||||||
|
brick_t bricks[MAX_BRICKS];
|
||||||
|
int bricks_num = 0;
|
||||||
|
|
||||||
|
while ((c = getchar()) != EOF) {
|
||||||
|
*p++ = c;
|
||||||
|
if (c == '\n') {
|
||||||
|
p = buf;
|
||||||
|
sscanf(p, "%i", &bricks[bricks_num].corners[0].x);
|
||||||
|
while (*p != ',') p++;
|
||||||
|
p++;
|
||||||
|
sscanf(p, "%i", &bricks[bricks_num].corners[0].y);
|
||||||
|
while (*p != ',') p++;
|
||||||
|
p++;
|
||||||
|
sscanf(p, "%i", &bricks[bricks_num].corners[0].z);
|
||||||
|
while (*p != '~') p++;
|
||||||
|
p++;
|
||||||
|
sscanf(p, "%i", &bricks[bricks_num].corners[1].x);
|
||||||
|
while (*p != ',') p++;
|
||||||
|
p++;
|
||||||
|
sscanf(p, "%i", &bricks[bricks_num].corners[1].y);
|
||||||
|
while (*p != ',') p++;
|
||||||
|
p++;
|
||||||
|
sscanf(p, "%i", &bricks[bricks_num].corners[1].z);
|
||||||
|
bricks_num++;
|
||||||
|
memset(buf, 0, LINE_MAX_LENGTH);
|
||||||
|
p = buf;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
while (fall(bricks, bricks_num));
|
||||||
|
for (int i = 0; i < bricks_num; i++) {
|
||||||
|
bricks[i].fallen = 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
int part1 = 0;
|
||||||
|
int part2 = 0;
|
||||||
|
#pragma omp parallel for schedule(dynamic)
|
||||||
|
for (int i = 0; i < bricks_num; i++) {
|
||||||
|
brick_t bricks_copy[MAX_BRICKS];
|
||||||
|
memcpy(bricks_copy, bricks, sizeof(bricks));
|
||||||
|
bricks_copy[i].corners[0].z = 0;
|
||||||
|
bricks_copy[i].corners[1].z = 0;
|
||||||
|
int fallen = 0;
|
||||||
|
while (fall(bricks_copy, bricks_num));
|
||||||
|
for (int j = 0; j < bricks_num; j++) {
|
||||||
|
fallen += bricks_copy[j].fallen;
|
||||||
|
}
|
||||||
|
#pragma omp critical
|
||||||
|
{
|
||||||
|
if (fallen == 0) {
|
||||||
|
part1++;
|
||||||
|
}
|
||||||
|
part2 += fallen;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
printf("%i\n", part1);
|
||||||
|
printf("%i\n", part2);
|
||||||
|
|
||||||
|
free(buf);
|
||||||
|
}
|
||||||
|
|
||||||
|
int fall(brick_t bricks[], int bricks_num) {
|
||||||
|
int result = 0;
|
||||||
|
for (int i = 0; i < bricks_num; i++) {
|
||||||
|
int fallen = 0;
|
||||||
|
for (;;) {
|
||||||
|
bricks[i].corners[0].z--;
|
||||||
|
bricks[i].corners[1].z--;
|
||||||
|
if (bricks[i].corners[0].z <= 0 || bricks[i].corners[1].z <= 0) {
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
int collision = 0;
|
||||||
|
for (int j = 0; j < bricks_num; j++) {
|
||||||
|
if (i == j) continue;
|
||||||
|
if (intersect(bricks[i], bricks[j])) {
|
||||||
|
collision = 1;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (collision) {
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
bricks[i].fallen = 1;
|
||||||
|
fallen = 1;
|
||||||
|
}
|
||||||
|
bricks[i].corners[0].z++;
|
||||||
|
bricks[i].corners[1].z++;
|
||||||
|
result += fallen;
|
||||||
|
}
|
||||||
|
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
int intersect(brick_t brick_a, brick_t brick_b) {
|
||||||
|
if (
|
||||||
|
(in_range(brick_b.corners[0].x, brick_a.corners[0].x, brick_a.corners[1].x) || in_range(brick_b.corners[1].x, brick_a.corners[0].x, brick_a.corners[1].x) || in_range(brick_a.corners[1].x, brick_b.corners[0].x, brick_b.corners[1].x) || in_range(brick_a.corners[0].x, brick_b.corners[0].x, brick_b.corners[1].x)) &&
|
||||||
|
(in_range(brick_b.corners[0].y, brick_a.corners[0].y, brick_a.corners[1].y) || in_range(brick_b.corners[1].y, brick_a.corners[0].y, brick_a.corners[1].y) || in_range(brick_a.corners[1].y, brick_b.corners[0].y, brick_b.corners[1].y) || in_range(brick_a.corners[0].y, brick_b.corners[0].y, brick_b.corners[1].y)) &&
|
||||||
|
(in_range(brick_b.corners[0].z, brick_a.corners[0].z, brick_a.corners[1].z) || in_range(brick_b.corners[1].z, brick_a.corners[0].z, brick_a.corners[1].z) || in_range(brick_a.corners[1].z, brick_b.corners[0].z, brick_b.corners[1].z) || in_range(brick_a.corners[0].z, brick_b.corners[0].z, brick_b.corners[1].z))
|
||||||
|
) {
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
1439
day22/input.txt
Normal file
1439
day22/input.txt
Normal file
File diff suppressed because it is too large
Load Diff
7
day22/sample.txt
Normal file
7
day22/sample.txt
Normal file
@@ -0,0 +1,7 @@
|
|||||||
|
1,0,1~1,2,1
|
||||||
|
0,0,2~2,0,2
|
||||||
|
0,2,3~2,2,3
|
||||||
|
0,0,4~0,2,4
|
||||||
|
2,0,5~2,2,5
|
||||||
|
0,1,6~2,1,6
|
||||||
|
1,1,8~1,1,9
|
||||||
BIN
day23/c/day23
Executable file
BIN
day23/c/day23
Executable file
Binary file not shown.
219
day23/c/day23.c
Normal file
219
day23/c/day23.c
Normal file
@@ -0,0 +1,219 @@
|
|||||||
|
#include <stdio.h>
|
||||||
|
#include <stdlib.h>
|
||||||
|
#include <string.h>
|
||||||
|
#include <stdint.h>
|
||||||
|
|
||||||
|
#define LINE_MAX_LENGTH 256
|
||||||
|
#define MAX_QUEUE 256*256
|
||||||
|
#define cmp(a,b) ((a)[0] == (b)[0] && (a)[1] == (b)[1])
|
||||||
|
#define abs(a) ((a) < 0 ? -(a) : (a))
|
||||||
|
|
||||||
|
typedef enum tile_type {
|
||||||
|
PATH,
|
||||||
|
FOREST,
|
||||||
|
SLOPE_UP,
|
||||||
|
SLOPE_DOWN,
|
||||||
|
SLOPE_LEFT,
|
||||||
|
SLOPE_RIGHT,
|
||||||
|
} tile_type_t;
|
||||||
|
|
||||||
|
int check_direction(int curr[2], int dir[2], uint8_t **visited, tile_type_t map[LINE_MAX_LENGTH][LINE_MAX_LENGTH]);
|
||||||
|
int highest_cost(int curr[2], tile_type_t map[LINE_MAX_LENGTH][LINE_MAX_LENGTH], int x, int y, uint8_t **visited, int cost, int finish[2], int ignore_slopes, int walkable);
|
||||||
|
|
||||||
|
int curr_max = 0;
|
||||||
|
|
||||||
|
int directions[4][2] = {
|
||||||
|
{0, -1},
|
||||||
|
{0, 1},
|
||||||
|
{-1, 0},
|
||||||
|
{1, 0}
|
||||||
|
};
|
||||||
|
|
||||||
|
int main() {
|
||||||
|
char *p, *buf, c;
|
||||||
|
|
||||||
|
buf = (char *)malloc(LINE_MAX_LENGTH);
|
||||||
|
memset(buf, 0, LINE_MAX_LENGTH);
|
||||||
|
p = buf;
|
||||||
|
|
||||||
|
tile_type_t map[LINE_MAX_LENGTH][LINE_MAX_LENGTH];
|
||||||
|
int x = 0, y = 0;
|
||||||
|
int walkable = 0;
|
||||||
|
|
||||||
|
while ((c = getchar()) != EOF) {
|
||||||
|
*p++ = c;
|
||||||
|
if (c == '\n') {
|
||||||
|
p = buf;
|
||||||
|
x = 0;
|
||||||
|
while (*p != '\n') {
|
||||||
|
switch (*p) {
|
||||||
|
case '.':
|
||||||
|
map[x][y] = PATH;
|
||||||
|
walkable++;
|
||||||
|
break;
|
||||||
|
case '#':
|
||||||
|
map[x][y] = FOREST;
|
||||||
|
break;
|
||||||
|
case '^':
|
||||||
|
map[x][y] = SLOPE_UP;
|
||||||
|
walkable++;
|
||||||
|
break;
|
||||||
|
case 'v':
|
||||||
|
map[x][y] = SLOPE_DOWN;
|
||||||
|
walkable++;
|
||||||
|
break;
|
||||||
|
case '<':
|
||||||
|
map[x][y] = SLOPE_LEFT;
|
||||||
|
walkable++;
|
||||||
|
break;
|
||||||
|
case '>':
|
||||||
|
map[x][y] = SLOPE_RIGHT;
|
||||||
|
walkable++;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
x++;
|
||||||
|
p++;
|
||||||
|
}
|
||||||
|
y++;
|
||||||
|
memset(buf, 0, LINE_MAX_LENGTH);
|
||||||
|
p = buf;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
int start[2], finish[2];
|
||||||
|
start[1] = 0;
|
||||||
|
finish[1] = y - 1;
|
||||||
|
|
||||||
|
// Find start and finish
|
||||||
|
for (int i = 0; i < x; i++) {
|
||||||
|
if (map[i][0] == PATH) {
|
||||||
|
start[0] = i;
|
||||||
|
}
|
||||||
|
if (map[i][y - 1] == PATH) {
|
||||||
|
finish[0] = i;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
uint8_t **visited = (uint8_t**)malloc(x * sizeof(uint8_t*));
|
||||||
|
for (uint8_t i = 0; i < x; i++) {
|
||||||
|
visited[i] = (uint8_t*)malloc(y * sizeof(uint8_t));
|
||||||
|
memset(visited[i], 0, y * sizeof(uint8_t));
|
||||||
|
}
|
||||||
|
|
||||||
|
printf("Part 1: %i\n", highest_cost(start, map, x, y, visited, 0, finish, 0, walkable));
|
||||||
|
|
||||||
|
for (uint8_t i = 0; i < x; i++) {
|
||||||
|
memset(visited[i], 0, y * sizeof(uint8_t));
|
||||||
|
}
|
||||||
|
|
||||||
|
printf("Part 2: %i\n", highest_cost(start, map, x, y, visited, 0, finish, 1, walkable));
|
||||||
|
|
||||||
|
free(buf);
|
||||||
|
for (int i = 0; i < y; i++) {
|
||||||
|
free(visited[i]);
|
||||||
|
}
|
||||||
|
free(visited);
|
||||||
|
}
|
||||||
|
|
||||||
|
int highest_cost(int curr[2], tile_type_t map[LINE_MAX_LENGTH][LINE_MAX_LENGTH], int x, int y, uint8_t **visited, int cost, int finish[2], int ignore_slopes, int walkable) {
|
||||||
|
if (cmp(curr, finish)) {
|
||||||
|
return cost;
|
||||||
|
}
|
||||||
|
|
||||||
|
// We will never reach the end
|
||||||
|
if ((walkable - cost) < (abs(finish[0] - curr[0]) + abs(finish[1] - curr[1])) || visited[finish[0]][finish[1]-1]) {
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
|
||||||
|
visited[curr[0]][curr[1]] = 1;
|
||||||
|
|
||||||
|
int *options[4], options_num = 0, *dir, max = 0;
|
||||||
|
|
||||||
|
if (map[curr[0]][curr[1]] == SLOPE_UP && !ignore_slopes) {
|
||||||
|
dir = directions[0];
|
||||||
|
if (check_direction(curr, dir, visited, map)) {
|
||||||
|
options[0] = dir;
|
||||||
|
options_num = 1;
|
||||||
|
}
|
||||||
|
} else if (map[curr[0]][curr[1]] == SLOPE_DOWN && !ignore_slopes) {
|
||||||
|
dir = directions[1];
|
||||||
|
if (check_direction(curr, dir, visited, map)) {
|
||||||
|
options[0] = dir;
|
||||||
|
options_num = 1;
|
||||||
|
}
|
||||||
|
} else if (map[curr[0]][curr[1]] == SLOPE_LEFT && !ignore_slopes) {
|
||||||
|
dir = directions[2];
|
||||||
|
if (check_direction(curr, dir, visited, map)) {
|
||||||
|
options[0] = dir;
|
||||||
|
options_num = 1;
|
||||||
|
}
|
||||||
|
} else if (map[curr[0]][curr[1]] == SLOPE_RIGHT && !ignore_slopes) {
|
||||||
|
dir = directions[3];
|
||||||
|
if (check_direction(curr, dir, visited, map)) {
|
||||||
|
options[0] = dir;
|
||||||
|
options_num = 1;
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
for (int i = 0; i < 4; i++) {
|
||||||
|
int *dir = directions[i];
|
||||||
|
if (check_direction(curr, dir, visited, map)) {
|
||||||
|
options[options_num] = dir;
|
||||||
|
options_num++;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (options_num == 0) {
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
uint8_t ***visited_copies = (uint8_t***)malloc(options_num * sizeof(uint8_t**));
|
||||||
|
for (uint8_t i = 0; i < options_num - 1; i++) {
|
||||||
|
visited_copies[i] = (uint8_t**)malloc(x * sizeof(uint8_t*));
|
||||||
|
for (uint8_t j = 0; j < y; j++) {
|
||||||
|
visited_copies[i][j] = (uint8_t*)malloc(y * sizeof(uint8_t));
|
||||||
|
memcpy(visited_copies[i][j], visited[j], y * sizeof(uint8_t));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
for (int i = 0; i < options_num; i++) {
|
||||||
|
int next[2];
|
||||||
|
next[0] = curr[0] + options[i][0];
|
||||||
|
next[1] = curr[1] + options[i][1];
|
||||||
|
int c;
|
||||||
|
if (i != options_num - 1) {
|
||||||
|
c = highest_cost(next, map, x, y, visited_copies[i], cost + 1, finish, ignore_slopes, walkable);
|
||||||
|
} else {
|
||||||
|
c = highest_cost(next, map, x, y, visited, cost + 1, finish, ignore_slopes, walkable);
|
||||||
|
}
|
||||||
|
if (c > max) {
|
||||||
|
max = c;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
for (int i = 0; i < options_num - 1; i++) {
|
||||||
|
for (int j = 0; j < y; j++) {
|
||||||
|
free(visited_copies[i][j]);
|
||||||
|
}
|
||||||
|
free(visited_copies[i]);
|
||||||
|
}
|
||||||
|
free(visited_copies);
|
||||||
|
|
||||||
|
if (max > curr_max) {
|
||||||
|
curr_max = max;
|
||||||
|
printf("Current best: %i\n", curr_max);
|
||||||
|
}
|
||||||
|
|
||||||
|
return max;
|
||||||
|
}
|
||||||
|
|
||||||
|
int check_direction(int curr[2], int dir[2], uint8_t **visited, tile_type_t map[LINE_MAX_LENGTH][LINE_MAX_LENGTH]) {
|
||||||
|
int next_x = curr[0] + dir[0];
|
||||||
|
int next_y = curr[1] + dir[1];
|
||||||
|
if (next_y > 0 && !visited[next_x][next_y] && map[next_x][next_y] != FOREST) {
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
141
day23/input.txt
Normal file
141
day23/input.txt
Normal file
@@ -0,0 +1,141 @@
|
|||||||
|
#.###########################################################################################################################################
|
||||||
|
#.#...#...#.....###...#.......###...#####...#...#...#...#...#...#.......#...#.....#.....#.......#...#...#...###...#.....#.....#.............#
|
||||||
|
#.#.#.#.#.#.###.###.#.#.#####.###.#.#####.#.#.#.#.#.#.#.#.#.#.#.#.#####.#.#.#.###.#.###.#.#####.#.#.#.#.#.#.###.#.#.###.#.###.#.###########.#
|
||||||
|
#.#.#.#.#.#.#...#...#.#...#...#...#...#...#...#.#.#.#.#.#.#...#...#.....#.#.#...#.#.#...#.....#.#.#...#.#.#...#.#.#.#...#...#.#.....#.....#.#
|
||||||
|
#.#.#.#.#.#.#.###.###.###.#.###.#####.#.#######.#.#.#.#.#.#########.#####.#.###.#.#.#.#######.#.#.#####.#.###.#.#.#.#.#####.#.#####.#.###.#.#
|
||||||
|
#...#.#.#.#.#...#.#...###.#...#.#...#.#.....#...#.#...#.#.#.........#.....#...#.#.#.#...#...#.#.#.#.....#.#...#.#.#.#...#...#.#.....#...#...#
|
||||||
|
#####.#.#.#.###.#.#.#####.###.#.#.#.#.#####.#.###.#####.#.#.#########.#######.#.#.#.###.#.#.#.#.#.#.#####.#.###.#.#.###.#.###.#.#######.#####
|
||||||
|
#.....#.#.#.###...#.#...#.#...#.#.#...#.....#.#...#...#.#.#.###.....#.....#...#.#.#.#...#.#.#.#.#.#...###.#...#.#.#...#...#...#.....#...#...#
|
||||||
|
#.#####.#.#.#######.#.#.#.#.###.#.#####.#####.#.###.#.#.#.#.###.###.#####.#.###.#.#.#.###.#.#.#.#.###.###.###.#.#.###.#####.#######.#.###.#.#
|
||||||
|
#.#...#.#...#.....#.#.#.#.#...#.#.>.>.#.....#.#.#...#...#.#...#.#...###...#.#...#...#.#...#...#.#.#...#...#...#.#.###.#.....#...#...#...#.#.#
|
||||||
|
#.#.#.#.#####.###.#v#.#.#.###.#.###v#.#####.#.#.#.#######.###.#.#.#####.###.#.#######.#.#######.#.#.###.###.###.#.###.#.#####.#.#.#####.#.#.#
|
||||||
|
#...#...#...#.#...#.>.#.#.###.#.#...#.......#.#.#.#.>.>.#.#...#.#...#...#...#.#.....#.#.....#...#.#.###...#.#...#...#.#.#...#.#.#...#...#.#.#
|
||||||
|
#########.#.#.#.###v###.#.###.#.#.###########.#.#.#.#v#.#.#.###.###.#.###.###.#.###.#.#####.#.###.#.#####.#.#.#####.#.#.#.#.#.#.###.#.###.#.#
|
||||||
|
###.....#.#...#.#...###.#.#...#.#...###...###...#...#.#.#.#...#...#.#.#...###...#...#.#...#.#...#.#.>.>...#.#.#.....#.#.#.#.#.#.#...#.....#.#
|
||||||
|
###.###.#.#####.#.#####.#.#.###.###.###.#.###########.#.#.###.###.#.#.#.#########.###.#.#.#.###.#.###v#####.#.#.#####.#.#.#.#.#.#.#########.#
|
||||||
|
#...#...#.....#.#.....#.#.#.....###...#.#.....#.......#...###...#.#.#.#.#.>.>.#...#...#.#.#.#...#.###.#.....#.#.#...#.#.#.#.#.#.#.#.........#
|
||||||
|
#.###.#######.#.#####.#.#.###########.#.#####.#.###############.#.#.#.#.#.#v#.#.###.###.#.#.#.###.###.#.#####.#.#.#.#.#.#.#.#.#.#.#.#########
|
||||||
|
#...#.........#.....#.#.#.#...........#.###...#.......###.......#.#.#.#...#.#.#...#.#...#...#...#.#...#.#...#.#.#.#.#.#.#.#.#.#.#.#.#...#...#
|
||||||
|
###.###############.#.#.#.#.###########.###.#########.###.#######.#.#.#####.#.###.#.#.#########.#.#.###.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#
|
||||||
|
###...............#.#.#.#.#...#.......#...#.#...#...#...#...#...#.#...###...#.....#...#...#.....#.#...#.#.#.#.#.#.#.#.#.#.#.#.#.#.#...#.#.#.#
|
||||||
|
#################.#.#.#.#.###.#.#####.###.#.#.#.#.#.###.###.#.#.#.#######.#############.#.#.#####.###.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#####.#.#.#
|
||||||
|
#.................#...#...###.#.#.....#...#...#.#.#.#...###...#.#.#.......#...#...#.....#.#.#.....#...#...#...#.#.#...#.#.#...#...#...#...#.#
|
||||||
|
#.###########################.#.#.#####.#######.#.#.#.#########.#.#.#######.#.#.#.#.#####.#.#.#####.###########.#.#####.#.#########.#.#####.#
|
||||||
|
#.................###...#####...#.....#.#.......#.#...#...#.....#.#...#...#.#...#.#.#.....#...#.....#...###...#.#.....#...###...#...#.#...#.#
|
||||||
|
#################.###.#.#############.#.#.#######.#####.#.#.#####.###.#.#.#.#####.#.#.#########.#####.#.###.#.#.#####.#######.#.#.###.#.#.#.#
|
||||||
|
#.......#...#...#.#...#...#...#.....#...#.....###.....#.#.#.....#...#...#.#.#.....#.#.#.....#...#...#.#...#.#.#.......#...#...#.#.###...#...#
|
||||||
|
#.#####.#.#.#.#.#.#.#####.#.#.#.###.#########.#######.#.#.#####.###.#####.#.#.#####.#.#.###.#.###.#.#.###.#.#.#########.#.#.###.#.###########
|
||||||
|
#.#...#...#...#...#.#.....#.#.#...#.###.......#.......#.#...###.....###...#.#.#.....#.#.#...#.....#...###...#...###...#.#.#...#.#...........#
|
||||||
|
#.#.#.#############.#.#####.#.###.#.###.#######.#######.###.###########.###.#.#.#####.#.#.#####################.###.#.#.#.###.#.###########.#
|
||||||
|
#...#.#...#...#...#.#...#...#...#.#.....#.....#...#...#.#...#.........#.....#.#.#.....#.#.#...#.......#.........#...#.#.#.#...#...#.......#.#
|
||||||
|
#####.#.#.#.#.#.#.#.###.#.#####.#.#######.###.###.#.#.#.#.###.#######.#######.#.#.#####.#.#.#.#.#####.#.#########.###.#.#.#.#####.#.#####.#.#
|
||||||
|
#.....#.#.#.#.#.#.#...#.#.#.....#...#...#.#...###...#...#.#...#.......###...#...#...#...#.#.#.#...#...#.#.......#...#...#...#####...#...#.#.#
|
||||||
|
#.#####.#.#.#v#.#.###.#.#.#.#######.#.#.#.#.#############.#.###.#########.#.#######.#.###.#.#.###.#.###.#.#####.###.#################.#.#.#.#
|
||||||
|
#.......#...#.>.#...#.#.#.#...#...#...#...#.###...###.....#...#.#...#.....#.#.......#...#.#.#.....#...#...#...#...#.#...............#.#.#...#
|
||||||
|
#############v#####.#.#.#.###.#.#.#########.###.#.###v#######.#.#.#.#.#####.#.#########.#.#.#########.#####.#.###.#.#.#############.#.#.#####
|
||||||
|
#.........###.....#...#...#...#.#.......#...#...#.#.>.>.#...#.#.#.#.#.....#.#.#...#...#.#.#.......#...#...#.#...#.#.#.#.............#.#.....#
|
||||||
|
#.#######.#######.#########.###.#######.#.###.###.#.#v#.#.#.#.#.#.#.#####.#.#.#.#.#.#.#.#.#######.#.###.#.#v###.#.#.#.#.#############.#####.#
|
||||||
|
#.......#.#.....#.....#.....###.......#.#...#...#...#.#.#.#.#.#.#.#...###.#.#...#.#.#.#.#...#...#.#...#.#.>.>.#...#...#...............#...#.#
|
||||||
|
#######.#.#.###.#####.#.#############.#.###v###.#####.#.#.#.#.#.#.###.###.#.#####v#.#.#.###.#.#.#.###.#.###v#.#########################.#.#.#
|
||||||
|
#...###.#.#...#.#.....#.#.....#...#...#.#.>.>...#.....#...#.#.#...###...#.#.#...>.>.#...###.#.#.#.#...#.#...#.#...#...#...#.........#...#.#.#
|
||||||
|
#.#.###.#.###.#.#.#####.#.###.#.#.#.###.#.#v#####.#########.#.#########.#.#.#.###v#########.#.#.#.#.###.#.###.#.#.#.#.#.#.#v#######.#.###.#.#
|
||||||
|
#.#...#.#.###.#.#.....#.#.###.#.#...###...#.....#...#...###...#.......#.#.#.#...#.#...#...#.#.#.#.#.#...#.###.#.#.#.#.#.#.>.###...#...###...#
|
||||||
|
#.###.#.#.###.#.#####.#.#.###.#.###############.###.#.#.#######.#####.#.#.#.###.#.#.#.#.#.#.#.#.#.#.#.###.###.#.#.#.#.#.###v###.#.###########
|
||||||
|
#...#.#.#...#.#.......#.#.#...#.###...###...#...###...#.........#.....#...#.....#...#...#.#.#.#.#.#.#.###...#...#.#.#.#.###.....#.#...#...###
|
||||||
|
###.#.#.###.#.#########.#.#.###.###.#.###.#.#.###################.#######################.#.#.#.#.#.#.#####.#####.#.#.#.#########.#.#.#.#.###
|
||||||
|
#...#.#...#.#.#.......#.#.#...#.#...#.#...#.#.#.................#.....#.................#.#...#...#...#.....#...#...#...#.........#.#...#...#
|
||||||
|
#.###.###.#.#.#.#####.#.#.###.#.#.###.#.###.#.#.###############.#####.#.###############.#.#############.#####.#.#########.#########.#######.#
|
||||||
|
#...#.....#...#.#.....#...#...#.#...#...###...#...#...#.......#.#.....#...........#...#...#...###.....#.....#.#.###...###.........#.#.......#
|
||||||
|
###.###########.#.#########.###.###.#############.#.#.#.#####.#.#.###############.#.#.#####.#.###.###.#####.#.#.###.#.###########.#.#.#######
|
||||||
|
###.............#.....#...#.....###...#...###...#...#...#.....#...#...#...#...###...#...#...#...#...#.#.....#.#.#...#...#.........#.#.#...###
|
||||||
|
#####################.#.#.###########.#.#.###.#.#########.#########.#.#.#.#.#.#########.#.#####.###.#.#.#####.#.#.#####.#.#########.#.#.#.###
|
||||||
|
#.....................#.#.#.....#...#...#.....#.#...#.....###...###.#.#.#.#.#.#...#.....#.....#.###.#.#...###.#.#...#...#.........#.#...#...#
|
||||||
|
#.#####################.#.#.###.#.#.###########.#.#.#.#######.#.###.#.#.#.#.#.#.#.#.#########.#.###.#.###v###.#.###.#.###########v#.#######.#
|
||||||
|
#.#.....#.............#.#.#...#.#.#.............#.#.#.......#.#.###.#.#.#.#.#.#.#.#...#####...#.#...#...>.>.#.#.#...#...#.....#.>.#.#.......#
|
||||||
|
#.#.###.#.###########.#.#.###.#.#v###############.#.#######.#.#.###.#.#.#.#.#.#.#.###v#####.###.#.#######v#.#.#.#.#####.#.###.#.#v#.#.#######
|
||||||
|
#...#...#.#.....#...#.#.#.#...#.>.>...#...###.....#...#.....#.#.###.#.#.#.#.#.#.#...>.>.#...###.#.#.......#...#...#.....#...#...#.#.#.#...###
|
||||||
|
#####.###.#.###.#.#.#.#.#.#.#####v###.#.#.###.#######.#.#####.#.###.#.#.#.#.#.#.#####v#.#.#####.#.#.###############.#######.#####.#.#.#.#.###
|
||||||
|
#...#.....#...#...#...#.#...###...###...#...#.#.......#.....#.#.#...#.#.#.#.#.#...#...#...#...#...#.....#...###.....#...#...#.....#.#...#...#
|
||||||
|
#.#.#########.#########.#######.###########.#.#.###########.#.#.#.###.#.#.#.#.###.#.#######.#.#########.#.#.###.#####.#.#.###.#####.#######.#
|
||||||
|
#.#.#...#...#...#.....#.......#.......#...#...#...###...#...#.#.#...#.#.#.#.#.#...#.........#.#...#####...#...#...#...#...###.......#...#...#
|
||||||
|
#.#.#.#.#.#.###.#.###.#######.#######.#.#.#######.###.#.#v###.#.###.#.#.#.#.#.#.#############.#.#.###########.###.#.#################.#.#.###
|
||||||
|
#.#...#...#.....#.#...#...#...#.......#.#.......#...#.#.>.>...#.#...#.#.#.#.#.#...###.......#.#.#.............#...#.#.................#...###
|
||||||
|
#.###############.#.###.#.#.###.#######.#######.###.#.###v#####.#.###.#.#.#.#.###.###.#####.#.#.###############.###.#.#######################
|
||||||
|
#...#.....#...###.#.....#...###...#...#...#.....#...#...#.#...#...###...#...#.#...#...#...#...#.............###.#...#.......................#
|
||||||
|
###.#.###.#.#v###.###############.#.#.###.#.#####.#####.#.#.#.###############.#.###.###.#.#################.###.#.#########################.#
|
||||||
|
###.#.###.#.#.>...#...........#...#.#.....#.#...#...#...#.#.#.........#.......#.###.....#.#.......#.......#...#.#.#...###...#...............#
|
||||||
|
###.#.###.#.#v#####.#########.#.###.#######.#.#.###.#.###.#.#########.#.#######.#########.#.#####.#.#####.###.#.#.#.#.###.#.#.###############
|
||||||
|
#...#...#...#...#...#.........#.....#.......#.#...#.#.###.#.#.....#...#.......#...#.......#.#.....#.....#.....#...#.#.....#...#...#...###...#
|
||||||
|
#.#####.#######.#.###.###############.#######.###.#.#.###.#.#.###.#.#########.###.#.#######.#.#########.###########.###########.#.#.#.###.#.#
|
||||||
|
#.#.....#.....#...#...#...#...#...###.........#...#.#.###...#...#...#####...#.....#.........#...###...#.........###.....#.....#.#...#.#...#.#
|
||||||
|
#.#.#####.###.#####.###.#.#.#.#.#.#############.###.#.#########.#########.#.###################.###.#.#########.#######.#.###.#.#####.#.###.#
|
||||||
|
#...#...#...#.......###.#.#.#.#.#...#...........###...#...#...#...#...###.#.###.......#.........#...#.#.........#...###...###...#.....#.#...#
|
||||||
|
#####.#.###.###########.#.#.#.#.###.#.#################.#.#.#.###.#.#.###.#.###.#####.#.#########.###.#.#########.#.#############.#####.#.###
|
||||||
|
#.....#.....#.........#.#...#.#...#.#...#...#...###...#.#.#.#.###...#.....#...#.....#.#.........#...#.#.....#.....#.#...###...#...#.....#.###
|
||||||
|
#.###########.#######.#.#####.###.#.###.#.#.#.#.###.#.#.#.#.#.###############.#####.#.#########.###.#.#####.#.#####.#.#.###.#.#.###.#####.###
|
||||||
|
#.......#...#.#.......#.....#...#.#.###...#...#...#.#.#.#.#.#...#.....#.....#.#.....#...........###.#.......#.#.....#.#.#...#.#.....#...#...#
|
||||||
|
#######.#.#.#.#.###########.###.#.#.#############.#.#.#.#.#.###.#.###.#.###.#.#.###################.#########.#.#####.#.#.###.#######.#.###.#
|
||||||
|
#.......#.#...#.........#...#...#.#.#...###.......#.#.#.#.#.#...#.###...###...#.......#...###.....#.....#...#.#.#...#.#.#.#...#...###.#.#...#
|
||||||
|
#.#######.#############.#.###.###.#.#.#.###v#######.#.#.#.#.#.###v###################.#.#.###.###.#####v#.#.#.#.#.#.#.#.#.#.###.#.###.#.#v###
|
||||||
|
#.......#.#.............#...#...#.#.#.#...>.>...#...#.#.#...#...>.>.#...#...###.......#.#...#...#.#...>.>.#.#.#.#.#.#.#.#.#...#.#.....#.>.###
|
||||||
|
#######.#.#.###############.###.#.#.#.#####v###.#.###.#.#########v#.#.#.#.#.###.#######.###.###.#.#.###v###.#.#.#.#.#.#.#.###.#.#########v###
|
||||||
|
###...#...#.........###...#...#...#...###...#...#.#...#...#...#...#...#...#...#.........#...###.#.#...#...#.#.#.#.#.#.#.#.#...#.#...###...###
|
||||||
|
###.#.#############.###.#.###.###########.###.###.#.#####.#.#.#.#############.###########.#####.#.###.###.#.#.#.#.#.#.#.#.#.###.#.#.###.#####
|
||||||
|
#...#...............#...#.#...#...........###...#.#.#.....#.#.#...#...........#...#.......###...#.#...#...#.#.#.#.#.#.#.#.#.....#.#...#.#...#
|
||||||
|
#.###################.###.#.###.###############.#.#.#.#####.#.###.#.###########.#.#.#########.###.#.###.###.#.#.#.#.#.#.#.#######.###.#.#.#.#
|
||||||
|
#.#...........#...#...#...#...#.............#...#.#...###...#.#...#...###...#...#.#.........#...#.#.###...#...#...#...#...#.....#.#...#...#.#
|
||||||
|
#.#.#########.#.#v#.###.#####.#############.#.###.#######.###.#.#####.###.#.#.###.#########.###.#.#.#####.#################.###.#.#.#######.#
|
||||||
|
#.#.###...###...#.>.###.......#...###.......#.....###...#...#.#.....#...#.#.#.#...#...###...#...#.#...#...#...#...#...#...#...#...#...#...#.#
|
||||||
|
#.#.###.#.#######v#############.#.###.###############.#.###.#.#####.###.#.#.#.#.###.#.###v###.###.###.#.###.#.#.#.#.#.#.#.###.#######.#.#.#.#
|
||||||
|
#...#...#.......#.........#.....#.....#...###...###...#.....#.#.....#...#.#.#.#...#.#...>.>.#...#.....#.....#.#.#...#...#.###.......#.#.#.#.#
|
||||||
|
#####.#########.#########.#.###########.#.###.#.###.#########.#.#####.###.#.#.###.#.#####v#.###.#############.#.#########.#########.#.#.#.#.#
|
||||||
|
#.....#.......#.#...#...#.#.............#.....#.#...#...#...#.#...#...#...#...#...#...#...#.#...###...........#.........#.#...#...#.#.#.#...#
|
||||||
|
#.#####.#####.#.#.#.#.#.#.#####################.#.###.#.#.#.#.###.#.###.#######.#####.#.###.#.#####.###################.#.#.#.#.#.#.#.#.#####
|
||||||
|
#.#.....#.....#...#...#...#.......#.............#.....#...#.#.....#...#.......#.....#.#...#.#.....#.............#.......#...#...#.#.#.#.....#
|
||||||
|
#.#.#####.#################.#####.#.#######################.#########.#######.#####.#.###.#.#####.#############.#.###############.#.#.#####.#
|
||||||
|
#...#...#.#...#.......#...#...#...#...........#.......#...#.#...#...#.#.......#.....#.#...#.......#.......#.....#...#...#...#...#...#.......#
|
||||||
|
#####.#.#.#.#.#.#####.#.#.###.#.#############.#.#####.#.#.#.#.#.#.#.#.#.#######.#####.#.###########.#####.#.#######.#.#.#.#.#.#.#############
|
||||||
|
#...#.#.#...#...#.....#.#.#...#...###...#.....#.....#...#...#.#.#.#.#...#...###.......#.#...#.....#.#...#...###...#.#.#.#.#...#.###.........#
|
||||||
|
#.#.#.#.#########.#####.#.#.#####.###.#.#.#########.#########.#.#.#.#####.#.###########.#.#.#.###.#.#.#.#######.#.#.#.#.#.#####.###.#######.#
|
||||||
|
#.#...#.#...#...#.....#.#.#...#...#...#...###.....#...#...###.#.#.#.#...#.#.###...#...#.#.#.#.#...#.#.#.......#.#.#...#...#...#.....#...#...#
|
||||||
|
#.#####.#.#.#.#.#####.#.#.###.#.###.#########.###.###.#.#.###.#.#.#.#.#.#.#.###.#.#.#.#v#.#.#.#.###.#.#######.#.#.#########.#.#######.#.#.###
|
||||||
|
#.....#.#.#...#.#.....#.#...#.#.###...###...#...#.###.#.#.#...#.#.#.#.#.#.#.#...#.#.#.>.>.#...#.###...#.......#.#.#.........#.........#...###
|
||||||
|
#####.#.#.#####.#.#####.###.#.#.#####v###.#.###.#.###v#.#.#.###.#.#.#.#.#.#.#.###.#.###v#######.#######.#######.#.#.#########################
|
||||||
|
#.....#...#...#...#...#...#.#.#.#...>.>...#.#...#...>.>.#.#...#.#.#.#.#.#.#.#...#.#.#...#.....#...#.....#.....#.#.#.........#.........#.....#
|
||||||
|
#.#########.#.#####.#.###.#.#.#.#.###v#####.#.#######v###.###.#.#.#.#.#.#.#.###.#.#.#.###.###.###.#.#####.###.#.#.#########.#.#######.#.###.#
|
||||||
|
#.....#.....#.....#.#...#.#.#.#.#...#...###...###...#...#...#.#.#.#.#.#.#.#.#...#...#...#...#.....#.......#...#.#...#...###.#.#.......#...#.#
|
||||||
|
#####.#.#########.#.###.#.#.#.#.###.###.#########.#.###.###.#.#.#.#.#.#.#.#.#.#########.###.###############.###.###.#.#.###.#.#.#########.#.#
|
||||||
|
#.....#.#.........#...#.#.#.#.#.#...###.......#...#.#...###.#.#.#.#.#.#.#.#.#.#...#.....###.........#.......#...#...#.#...#...#...#.......#.#
|
||||||
|
#.#####.#.###########.#.#.#.#.#.#.###########.#.###.#.#####.#.#.#.#.#.#.#.#.#.#.#.#.###############.#.#######.###.###.###.#######.#.#######.#
|
||||||
|
#...#...#.........#...#.#.#.#.#...#...........#...#...#...#.#.#.#.#.#.#...#.#.#.#.#.....#####.......#...#...#...#.###.#...#.....#...#...#...#
|
||||||
|
###.#.###########.#.###.#.#.#.#####.#############.#####.#.#.#.#.#.#.#.#####.#.#.#.#####.#####.#########v#.#.###.#.###.#.###v###.#####.#.#.###
|
||||||
|
###...#...###...#.#...#...#...###...#...#.......#.......#.#...#.#.#.#...#...#.#.#.......#.....#.......>.>.#.#...#...#.#...>.###.......#...###
|
||||||
|
#######.#.###.#.#v###.###########.###.#.#.#####.#########.#####.#.#.###.#.###.#.#########.#####.#######v###.#.#####.#.#####v#################
|
||||||
|
#.......#.....#.#.>.#.......#...#.....#...#.....#.........#...#...#.#...#.#...#...#...###.#...#.....###...#.#.....#.#...#...###...#...#.....#
|
||||||
|
#.#############.#v#.#######.#.#.###########.#####.#########.#.#####.#.###.#.#####.#.#.###.#.#.#####.#####.#.#####.#.###.#.#####.#.#.#.#.###.#
|
||||||
|
#.............#...#.......#.#.#...........#...###.......#...#...###...###.#...###...#...#...#.#.....#...#.#.#...#.#.#...#.#...#.#...#.#.#...#
|
||||||
|
#############.###########.#.#.###########.###.#########.#.#####.#########.###.#########.#####.#.#####.#.#.#.#.#.#.#.#.###.#.#.#.#####.#.#.###
|
||||||
|
#...#...#...#...........#.#.#...#.......#.....#...###...#.#.....#...#...#.#...#.........#...#.#.#.....#...#.#.#...#.#...#.#.#.#.#.....#.#...#
|
||||||
|
#.#.#.#.#.#.###########.#.#.###.#.#####.#######.#.###.###.#.#####.#.#.#.#.#.###.#########.#.#.#.#.#########.#.#####.###.#.#.#.#.#.#####.###.#
|
||||||
|
#.#...#...#.......#.....#...###...#...#...#.....#.#...###.#.#...#.#...#.#...###...........#.#.#.#.....#...#.#...#...#...#...#.#.#.#...#.#...#
|
||||||
|
#.###############.#.###############.#.###.#.#####.#.#####.#.#.#.#.#####.###################.#.#.#####.#.#.#.###.#.###.#######.#.#.#.#.#.#.###
|
||||||
|
#...............#.#.......#...#.....#.....#.#.....#.......#.#.#.#...#...###.................#...#...#...#.#.#...#...#.....#...#.#.#.#...#...#
|
||||||
|
###############.#.#######.#.#.#.###########.#.#############.#.#.###.#.#####.#####################.#.#####.#.#.#####.#####.#.###.#.#.#######.#
|
||||||
|
#...............#.#.....#...#.#.............#.....#.......#.#.#.###.#.#...#.......#...........#...#.....#.#...#.....#.....#.....#...###.....#
|
||||||
|
#.###############.#.###.#####.###################.#.#####.#.#.#.###.#.#.#.#######.#.#########.#.#######.#.#####.#####.#################.#####
|
||||||
|
#.......#...#...#...###.......###...#.............#.....#...#.#...#.#...#.###...#...#.........#.......#...#...#.......###...#...#.......#...#
|
||||||
|
#######.#.#.#.#.#################.#.#.#################.#####.###.#.#####.###.#.#####.###############.#####.#.###########.#.#.#.#.#######.#.#
|
||||||
|
#...###...#...#.....#...#...#.....#.#.........#...#.....#...#.#...#.#.....#...#.......###...###...###...#...#...#...#.....#.#.#.#.....#...#.#
|
||||||
|
#.#.###############.#.#.#.#.#.#####.#########.#.#.#.#####.#.#.#.###.#.#####.#############.#.###.#.#####.#.#####.#.#.#.#####.#.#.#####.#.###.#
|
||||||
|
#.#.................#.#.#.#.#.#.....#.........#.#.#...###.#.#.#.#...#.#...#.......#.....#.#.#...#.......#.#.....#.#.#.#.....#.#...###...#...#
|
||||||
|
#.###################.#.#.#.#.#.#####.#########.#.###.###.#.#.#.#.###.#.#.#######.#.###.#.#.#.###########.#.#####.#.#.#.#####.###.#######.###
|
||||||
|
#.#...#...#.....#...#.#.#.#.#.#.#...#.......#...#...#...#.#.#.#.#...#.#.#.###...#...#...#.#.#.....#.......#.....#.#.#.#.....#...#.#.....#...#
|
||||||
|
#.#.#.#.#.#.###.#.#.#.#.#.#.#.#.#.#.#######.#.#####.###.#.#.#.#.###.#.#.#.###.#.#####v###.#.#####.#.###########.#.#.#.#####.###.#.#.###.###.#
|
||||||
|
#...#...#.#.#...#.#.#.#.#.#.#.#.#.#.###.....#...#...#...#.#.#.#...#.#.#.#...#.#.#...>.>.#.#.#...#...#...........#.#.#.#.....###.#.#.#...#...#
|
||||||
|
#########.#.#.###.#.#.#.#.#.#.#.#.#.###v#######.#.###v###.#.#.###.#.#.#.###.#.#.#.#####.#.#.#.#.#####v###########.#.#.#.#######.#.#.#.###v###
|
||||||
|
#.........#.#...#.#...#.#.#.#.#.#.#...>.>...#...#.#.>.>.#.#.#...#.#.#.#...#...#.#...###.#.#...#.#...>.>.#...#...#.#.#.#.#...#...#...#.#.>.###
|
||||||
|
#.#########.###.#.#####.#.#.#.#.#.#########.#.###.#.###.#.#.###.#.#.#.###.#####.###.###.#.#####.#.#####.#.#.#.#.#.#.#.#.#.#.#.#######.#.#v###
|
||||||
|
#.....#...#.#...#.#.....#.#.#.#.#.#.........#...#.#...#.#.#.#...#.#.#.#...#.....#...#...#.....#.#...#...#.#.#.#.#.#.#.#.#.#.#.#.......#.#.###
|
||||||
|
#####.#.#.#.#.###.#.#####.#.#.#.#.#.###########.#.###.#.#.#.#.###.#.#.#.###.#####.###.#######.#.###.#.###.#.#.#.#.#.#.#.#.#.#.#.#######.#.###
|
||||||
|
#####...#...#.....#.......#...#...#.............#.....#...#...###...#...###.......###.........#.....#.....#...#...#...#...#...#.........#...#
|
||||||
|
###########################################################################################################################################.#
|
||||||
23
day23/sample.txt
Normal file
23
day23/sample.txt
Normal file
@@ -0,0 +1,23 @@
|
|||||||
|
#.#####################
|
||||||
|
#.......#########...###
|
||||||
|
#######.#########.#.###
|
||||||
|
###.....#.>.>.###.#.###
|
||||||
|
###v#####.#v#.###.#.###
|
||||||
|
###.>...#.#.#.....#...#
|
||||||
|
###v###.#.#.#########.#
|
||||||
|
###...#.#.#.......#...#
|
||||||
|
#####.#.#.#######.#.###
|
||||||
|
#.....#.#.#.......#...#
|
||||||
|
#.#####.#.#.#########v#
|
||||||
|
#.#...#...#...###...>.#
|
||||||
|
#.#.#v#######v###.###v#
|
||||||
|
#...#.>.#...>.>.#.###.#
|
||||||
|
#####v#.#.###v#.#.###.#
|
||||||
|
#.....#...#...#.#.#...#
|
||||||
|
#.#########.###.#.#.###
|
||||||
|
#...###...#...#...#.###
|
||||||
|
###.###.#.###v#####v###
|
||||||
|
#...#...#.#.>.>.#.>.###
|
||||||
|
#.###.###.#.###.#.#v###
|
||||||
|
#.....###...###...#...#
|
||||||
|
#####################.#
|
||||||
Reference in New Issue
Block a user