Day24
This commit is contained in:
BIN
day24/c/day24
Executable file
BIN
day24/c/day24
Executable file
Binary file not shown.
469
day24/c/day24.c
Normal file
469
day24/c/day24.c
Normal file
@@ -0,0 +1,469 @@
|
||||
#include <stdint.h>
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
#include <string.h>
|
||||
#include <limits.h>
|
||||
|
||||
#define CHARS_MAX 64
|
||||
#define MAX_GATES_PER_WIRE 16
|
||||
#define MAX_WIRES 16*1024
|
||||
#define MAX_GATES 8*1024
|
||||
#define c2i(a) ((a) >= 'a' ? ((a) - 'a') : ((a) - '0' + 26))
|
||||
|
||||
|
||||
int cmp(const void* a, const void* b) {
|
||||
const char **pa = (const char**)a;
|
||||
const char **pb = (const char**)b;
|
||||
|
||||
if ((*pa)[0] != (*pb)[0]) {
|
||||
return (*pa)[0] - (*pb)[0];
|
||||
}
|
||||
|
||||
if ((*pa)[1] != (*pb)[1]) {
|
||||
return (*pa)[1] - (*pb)[1];
|
||||
}
|
||||
|
||||
return (*pa)[2] - (*pb)[2];
|
||||
}
|
||||
|
||||
typedef struct node {
|
||||
struct node *children[36];
|
||||
struct wire *value;
|
||||
char key;
|
||||
uint8_t is_leaf;
|
||||
} node_t;
|
||||
|
||||
node_t* create_node() {
|
||||
node_t *node = calloc(1, sizeof(node[0]));
|
||||
return node;
|
||||
}
|
||||
|
||||
node_t* search(node_t* root, char* word) {
|
||||
node_t* node = root;
|
||||
for (int i = 0; i < 3; i++) {
|
||||
if (node->children[c2i(word[i])] == NULL) {
|
||||
return NULL;
|
||||
}
|
||||
node = node->children[c2i(word[i])];
|
||||
}
|
||||
return node;
|
||||
}
|
||||
|
||||
void insert(node_t* root, char* word, struct wire *value) {
|
||||
node_t* node = root;
|
||||
for (int i = 0; i < 3; i++) {
|
||||
if (node->children[c2i(word[i])] == NULL) {
|
||||
node->children[c2i(word[i])] = create_node();
|
||||
}
|
||||
node = node->children[c2i(word[i])];
|
||||
}
|
||||
node->value = value;
|
||||
node->is_leaf = 1;
|
||||
}
|
||||
|
||||
void free_node(node_t* node) {
|
||||
for (int i = 0; i < 36; i++) {
|
||||
if (node->children[i] != NULL) {
|
||||
free_node(node->children[i]);
|
||||
}
|
||||
}
|
||||
|
||||
free(node->value);
|
||||
free(node);
|
||||
}
|
||||
|
||||
typedef struct wire {
|
||||
char name[3];
|
||||
int signal;
|
||||
struct gate *gates[MAX_GATES_PER_WIRE];
|
||||
int output_gate_count;
|
||||
struct gate *generator;
|
||||
} wire_t;
|
||||
|
||||
typedef enum {
|
||||
AND,
|
||||
OR,
|
||||
XOR
|
||||
} gate_type_t;
|
||||
|
||||
typedef struct gate {
|
||||
wire_t *inputs[2];
|
||||
wire_t *output;
|
||||
gate_type_t type;
|
||||
} gate_t;
|
||||
|
||||
void process_wire(wire_t *wire);
|
||||
uint64_t get_output(node_t *wires, char c);
|
||||
void reset(node_t *wires);
|
||||
void set_input1(node_t *wires, uint64_t value);
|
||||
void set_input2(node_t *wires, uint64_t value);
|
||||
void backtrack(node_t *wires, wire_t **list, int *list_count, wire_t* wire);
|
||||
int is_correct(node_t *wires, int i, wire_t **initial_wires);
|
||||
void get_activated_gates(node_t *wires, gate_t **list, int *list_count);
|
||||
|
||||
int main() {
|
||||
char *p, *buf, c;
|
||||
|
||||
buf = calloc(CHARS_MAX, sizeof(char));
|
||||
p = buf;
|
||||
|
||||
wire_t **initial_wires = calloc(MAX_WIRES, sizeof(wire_t*));
|
||||
int initial_wire_count = 0;
|
||||
int reading_initial_wires = 1;
|
||||
|
||||
char (*preparsed_gates)[10] = calloc(MAX_GATES, sizeof(preparsed_gates[0]));
|
||||
int gate_count = 0;
|
||||
|
||||
while ((c = getchar()) != EOF) {
|
||||
*p++ = c;
|
||||
if (c != '\n') {
|
||||
continue;
|
||||
}
|
||||
if (reading_initial_wires) {
|
||||
if (buf[0] == '\n') {
|
||||
reading_initial_wires = 0;
|
||||
memset(buf, 0, CHARS_MAX);
|
||||
p = buf;
|
||||
continue;
|
||||
}
|
||||
initial_wires[initial_wire_count] = calloc(1, sizeof(wire_t));
|
||||
initial_wires[initial_wire_count]->name[0] = buf[0];
|
||||
initial_wires[initial_wire_count]->name[1] = buf[1];
|
||||
initial_wires[initial_wire_count]->name[2] = buf[2];
|
||||
initial_wires[initial_wire_count++]->signal = buf[5] == '1' ? 1 : 0;
|
||||
} else {
|
||||
preparsed_gates[gate_count][0] = buf[0];
|
||||
preparsed_gates[gate_count][1] = buf[1];
|
||||
preparsed_gates[gate_count][2] = buf[2];
|
||||
preparsed_gates[gate_count][3] = buf[4] == 'A' ? AND : (buf[4] == 'O' ? OR : XOR);
|
||||
p = buf;
|
||||
while (*p++ != ' ');
|
||||
while (*p++ != ' ');
|
||||
preparsed_gates[gate_count][4] = p[0];
|
||||
preparsed_gates[gate_count][5] = p[1];
|
||||
preparsed_gates[gate_count][6] = p[2];
|
||||
while (*p++ != ' ');
|
||||
while (*p++ != ' ');
|
||||
preparsed_gates[gate_count][7] = p[0];
|
||||
preparsed_gates[gate_count][8] = p[1];
|
||||
preparsed_gates[gate_count][9] = p[2];
|
||||
gate_count++;
|
||||
}
|
||||
|
||||
memset(buf, 0, CHARS_MAX);
|
||||
p = buf;
|
||||
}
|
||||
|
||||
free(buf);
|
||||
|
||||
// Create trie of wires
|
||||
node_t *wires = create_node();
|
||||
|
||||
// Insert initial wires
|
||||
for (int i = 0; i < initial_wire_count; i++) {
|
||||
insert(wires, initial_wires[i]->name, initial_wires[i]);
|
||||
}
|
||||
|
||||
// Go through gates and extract previously unknown wires
|
||||
for (int i = 0; i < gate_count; i++) {
|
||||
char* wire_name = &preparsed_gates[i][0];
|
||||
node_t *wire = search(wires, wire_name);
|
||||
if (wire == NULL || wire->is_leaf == 0) {
|
||||
wire_t *value = calloc(1, sizeof(wire_t));
|
||||
memcpy(value->name, wire_name, 3);
|
||||
value->signal = -1;
|
||||
insert(wires, value->name, value);
|
||||
}
|
||||
wire_name = &preparsed_gates[i][4];
|
||||
wire = search(wires, wire_name);
|
||||
if (wire == NULL || wire->is_leaf == 0) {
|
||||
wire_t *value = calloc(1, sizeof(wire_t));
|
||||
memcpy(value->name, wire_name, 3);
|
||||
value->signal = -1;
|
||||
insert(wires, value->name, value);
|
||||
}
|
||||
wire_name = &preparsed_gates[i][7];
|
||||
wire = search(wires, wire_name);
|
||||
if (wire == NULL || wire->is_leaf == 0) {
|
||||
wire_t *value = calloc(1, sizeof(wire_t));
|
||||
memcpy(value->name, wire_name, 3);
|
||||
value->signal = -1;
|
||||
insert(wires, value->name, value);
|
||||
}
|
||||
}
|
||||
|
||||
// Now link everything together
|
||||
gate_t *gates = calloc(MAX_GATES, sizeof(gates[0]));
|
||||
for (int i = 0; i < gate_count; i++) {
|
||||
// Link gate inputs/outputs
|
||||
gates[i].type = preparsed_gates[i][3];
|
||||
wire_t *wire1 = search(wires, &preparsed_gates[i][0])->value;
|
||||
gates[i].inputs[0] = wire1;
|
||||
wire_t *wire2 = search(wires, &preparsed_gates[i][4])->value;
|
||||
gates[i].inputs[1] = wire2;
|
||||
wire_t *wire3 = search(wires, &preparsed_gates[i][7])->value;
|
||||
gates[i].output = wire3;
|
||||
|
||||
// Link wires to gates
|
||||
wire1->gates[wire1->output_gate_count++] = &gates[i];
|
||||
wire2->gates[wire2->output_gate_count++] = &gates[i];
|
||||
wire3->generator = &gates[i];
|
||||
}
|
||||
free(preparsed_gates);
|
||||
|
||||
for (int i = 0; i < initial_wire_count; i++) {
|
||||
process_wire(initial_wires[i]);
|
||||
}
|
||||
|
||||
uint64_t output = get_output(wires, 'z');
|
||||
|
||||
printf("%lu\n", output);
|
||||
|
||||
char **part2 = calloc(8, sizeof(part2[0]));
|
||||
int part2_c = 0;
|
||||
wire_t **relevant_gates = calloc(MAX_GATES, sizeof(wire_t*));
|
||||
relevant_gates[0] = search(wires, "z00")->value;
|
||||
int relevant_gate_count = 1;
|
||||
int pc = 1;
|
||||
for (int i = 1; i < 64; i++) {
|
||||
char buf[4];
|
||||
sprintf(buf, "z%02d", i);
|
||||
node_t *generator_node = search(wires, buf);
|
||||
if (generator_node) {
|
||||
backtrack(wires, relevant_gates, &relevant_gate_count, generator_node->value);
|
||||
|
||||
if (!is_correct(wires, i, initial_wires)) {
|
||||
gate_t **activated = calloc(MAX_GATES, sizeof(gate_t*));
|
||||
gate_t **switchable = calloc(MAX_GATES, sizeof(gate_t*));
|
||||
int activated_count = 0;
|
||||
int switchable_count = 0;
|
||||
get_activated_gates(wires, activated, &activated_count);
|
||||
for (int j = 0; j < activated_count; j++) {
|
||||
int found = 0;
|
||||
for (int jj = 0; jj < pc; jj++) {
|
||||
if (relevant_gates[jj] == activated[j]->output) {
|
||||
found = 1;
|
||||
break;
|
||||
}
|
||||
}
|
||||
if (!found) {
|
||||
switchable[switchable_count++] = activated[j];
|
||||
}
|
||||
}
|
||||
|
||||
// Try to switch each switchable
|
||||
int br = 0;
|
||||
for (int s1 = 0; s1 < switchable_count; s1++) {
|
||||
for (int s2 = s1 + 1; s2 < switchable_count; s2++) {
|
||||
wire_t *tmp = switchable[s2]->output;
|
||||
switchable[s2]->output = switchable[s1]->output;
|
||||
switchable[s1]->output = tmp;
|
||||
// Check switched version
|
||||
if (is_correct(wires, i, initial_wires)) {
|
||||
part2[part2_c++] = switchable[s1]->output->name;
|
||||
part2[part2_c++] = switchable[s2]->output->name;
|
||||
br = 1;
|
||||
break;
|
||||
}
|
||||
|
||||
switchable[s1]->output = switchable[s2]->output;
|
||||
switchable[s2]->output = tmp;
|
||||
}
|
||||
if (br) {
|
||||
break;
|
||||
}
|
||||
}
|
||||
free(activated);
|
||||
free(switchable);
|
||||
}
|
||||
pc = relevant_gate_count;
|
||||
}
|
||||
}
|
||||
qsort(part2, part2_c, sizeof(char*), cmp);
|
||||
|
||||
for (int i = 0; i < part2_c; i++) {
|
||||
printf("%c%c%c", part2[i][0], part2[i][1], part2[i][2]);
|
||||
if (i != part2_c - 1) {
|
||||
printf(",");
|
||||
}
|
||||
}
|
||||
printf("\n");
|
||||
|
||||
free(initial_wires);
|
||||
free_node(wires);
|
||||
free(gates);
|
||||
free(relevant_gates);
|
||||
free(part2);
|
||||
}
|
||||
|
||||
int eval_gate(gate_t gate) {
|
||||
switch (gate.type) {
|
||||
case AND:
|
||||
return gate.inputs[0]->signal & gate.inputs[1]->signal;
|
||||
case OR:
|
||||
return gate.inputs[0]->signal | gate.inputs[1]->signal;
|
||||
case XOR:
|
||||
return gate.inputs[0]->signal ^ gate.inputs[1]->signal;
|
||||
}
|
||||
|
||||
return -1;
|
||||
}
|
||||
|
||||
void process_wire(wire_t *wire) {
|
||||
// Try each of its outputs
|
||||
for (int i = 0; i < wire->output_gate_count; i++) {
|
||||
// Check if gate has both of it's outputs set
|
||||
if (wire->gates[i]->inputs[0]->signal != -1 && wire->gates[i]->inputs[1]->signal != -1) {
|
||||
wire->gates[i]->output->signal = eval_gate(*wire->gates[i]);
|
||||
process_wire(wire->gates[i]->output);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void set_input1(node_t *wires, uint64_t value) {
|
||||
for (int i = 0; i < INT_MAX; i++) {
|
||||
char buf[4];
|
||||
sprintf(buf, "x%02d", i);
|
||||
node_t *node = search(wires, buf);
|
||||
if (node == NULL) {
|
||||
break;
|
||||
}
|
||||
node->value->signal = (value >> i) & 1;
|
||||
}
|
||||
}
|
||||
|
||||
void set_input2(node_t *wires, uint64_t value) {
|
||||
for (int i = 0; i < INT_MAX; i++) {
|
||||
char buf[4];
|
||||
sprintf(buf, "y%02d", i);
|
||||
node_t *node = search(wires, buf);
|
||||
if (node == NULL) {
|
||||
break;
|
||||
}
|
||||
node->value->signal = (value >> i) & 1;
|
||||
}
|
||||
}
|
||||
|
||||
uint64_t get_output(node_t *wires, char c) {
|
||||
uint64_t result = 0;
|
||||
for (int i = 0; i < INT_MAX; i++) {
|
||||
char buf[4];
|
||||
sprintf(buf, "%c%02d", c, i);
|
||||
node_t *node = search(wires, buf);
|
||||
if (node == NULL) {
|
||||
break;
|
||||
}
|
||||
result += (uint64_t)node->value->signal << i;
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
||||
void reset(node_t *wires) {
|
||||
if (wires == NULL) {
|
||||
return;
|
||||
}
|
||||
|
||||
for (int i = 0; i < 36; i++) {
|
||||
reset(wires->children[i]);
|
||||
}
|
||||
|
||||
if (wires->value != NULL) {
|
||||
wires->value->signal = -1;
|
||||
}
|
||||
}
|
||||
|
||||
void backtrack(node_t *wires, wire_t **list, int *list_count, wire_t* wire) {
|
||||
if (wire == NULL) {
|
||||
return;
|
||||
}
|
||||
|
||||
int found = 0;
|
||||
for (int i = 0; i < *list_count; i++) {
|
||||
if (wire == list[i]) {
|
||||
found = 1;
|
||||
break;
|
||||
}
|
||||
}
|
||||
if (found) {
|
||||
return;
|
||||
}
|
||||
list[*list_count] = wire;
|
||||
(*list_count)++;
|
||||
|
||||
if (wire->generator) {
|
||||
backtrack(wires, list, list_count, wire->generator->inputs[0]);
|
||||
backtrack(wires, list, list_count, wire->generator->inputs[1]);
|
||||
}
|
||||
}
|
||||
|
||||
void get_activated_gates(node_t *wires, gate_t **list, int *list_count) {
|
||||
if (wires == NULL) {
|
||||
return;
|
||||
}
|
||||
|
||||
if (wires->value != NULL && wires->value->generator != NULL && wires->value->signal != -1) {
|
||||
int found = 0;
|
||||
for (int i = 0; i < *list_count; i++) {
|
||||
if (wires->value->generator == list[i]) {
|
||||
found = 1;
|
||||
break;
|
||||
}
|
||||
}
|
||||
if (!found) {
|
||||
list[*list_count] = wires->value->generator;
|
||||
(*list_count)++;
|
||||
}
|
||||
}
|
||||
// Iterate each wire
|
||||
for (int i = 0; i < 36; i++) {
|
||||
get_activated_gates(wires->children[i], list, list_count);
|
||||
}
|
||||
}
|
||||
|
||||
int is_correct(node_t *wires, int i, wire_t **initial_wires) {
|
||||
for (int j = 0; j < 2; j++) {
|
||||
for (int k = 0; k < 2; k++) {
|
||||
for (int jj = 0; jj < 2; jj++) {
|
||||
for (int kk = 0; kk < 2; kk++) {
|
||||
reset(wires);
|
||||
set_input1(wires, ((uint64_t)j << i) + ((uint64_t)k << (i-1)));
|
||||
set_input2(wires, ((uint64_t)jj << i) + ((uint64_t)kk << (i-1)));
|
||||
uint64_t e = ((uint64_t)j << i) + ((uint64_t)k << (i-1)) + ((uint64_t)jj << i) + ((uint64_t)kk << (i-1));
|
||||
char buf[4];
|
||||
for (int ii = 0; ii <= i; ii++) {
|
||||
if (i == 45) {
|
||||
continue;
|
||||
}
|
||||
sprintf(buf, "x%02d", ii);
|
||||
wire_t *x = search(wires, buf)->value;
|
||||
process_wire(x);
|
||||
sprintf(buf, "y%02d", ii);
|
||||
wire_t *y = search(wires, buf)->value;
|
||||
process_wire(y);
|
||||
}
|
||||
|
||||
for (int ii = 0; ii < i-1; ii++) {
|
||||
sprintf(buf, "z%02d", ii);
|
||||
wire_t *z = search(wires, buf)->value;
|
||||
if (z->signal != 0) {
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
sprintf(buf, "z%02d", i-1);
|
||||
wire_t *z = search(wires, buf)->value;
|
||||
if (z->signal != (k ^ kk)) {
|
||||
return 0;
|
||||
}
|
||||
sprintf(buf, "z%02d", i);
|
||||
z = search(wires, buf)->value;
|
||||
if (z->signal != ((j ^ jj) ^ (k & kk))) {
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return 1;
|
||||
}
|
||||
|
||||
313
day24/input.txt
Normal file
313
day24/input.txt
Normal file
@@ -0,0 +1,313 @@
|
||||
x00: 1
|
||||
x01: 1
|
||||
x02: 1
|
||||
x03: 1
|
||||
x04: 0
|
||||
x05: 1
|
||||
x06: 0
|
||||
x07: 1
|
||||
x08: 0
|
||||
x09: 1
|
||||
x10: 1
|
||||
x11: 1
|
||||
x12: 1
|
||||
x13: 1
|
||||
x14: 1
|
||||
x15: 0
|
||||
x16: 0
|
||||
x17: 1
|
||||
x18: 0
|
||||
x19: 0
|
||||
x20: 1
|
||||
x21: 1
|
||||
x22: 0
|
||||
x23: 1
|
||||
x24: 1
|
||||
x25: 1
|
||||
x26: 1
|
||||
x27: 0
|
||||
x28: 0
|
||||
x29: 1
|
||||
x30: 0
|
||||
x31: 1
|
||||
x32: 0
|
||||
x33: 0
|
||||
x34: 1
|
||||
x35: 0
|
||||
x36: 1
|
||||
x37: 0
|
||||
x38: 1
|
||||
x39: 1
|
||||
x40: 0
|
||||
x41: 1
|
||||
x42: 0
|
||||
x43: 1
|
||||
x44: 1
|
||||
y00: 1
|
||||
y01: 1
|
||||
y02: 1
|
||||
y03: 1
|
||||
y04: 1
|
||||
y05: 0
|
||||
y06: 0
|
||||
y07: 0
|
||||
y08: 0
|
||||
y09: 0
|
||||
y10: 1
|
||||
y11: 0
|
||||
y12: 0
|
||||
y13: 1
|
||||
y14: 1
|
||||
y15: 0
|
||||
y16: 0
|
||||
y17: 0
|
||||
y18: 0
|
||||
y19: 0
|
||||
y20: 0
|
||||
y21: 1
|
||||
y22: 1
|
||||
y23: 1
|
||||
y24: 1
|
||||
y25: 1
|
||||
y26: 1
|
||||
y27: 0
|
||||
y28: 0
|
||||
y29: 0
|
||||
y30: 1
|
||||
y31: 1
|
||||
y32: 0
|
||||
y33: 1
|
||||
y34: 0
|
||||
y35: 1
|
||||
y36: 0
|
||||
y37: 0
|
||||
y38: 0
|
||||
y39: 0
|
||||
y40: 1
|
||||
y41: 1
|
||||
y42: 1
|
||||
y43: 0
|
||||
y44: 1
|
||||
|
||||
stn AND ffg -> tnr
|
||||
y43 XOR x43 -> vfw
|
||||
x37 AND y37 -> gnn
|
||||
x12 AND y12 -> knv
|
||||
hqw AND jmq -> djd
|
||||
pqv AND kcv -> mnv
|
||||
gtf OR jjt -> dfv
|
||||
x38 AND y38 -> qjd
|
||||
x40 AND y40 -> kqh
|
||||
ghk XOR pnr -> z09
|
||||
vjd XOR kmb -> z10
|
||||
ftt XOR hwf -> z37
|
||||
x33 XOR y33 -> shg
|
||||
shg AND gfm -> vqw
|
||||
jvj OR bch -> jmq
|
||||
y27 XOR x27 -> hqw
|
||||
jsr XOR kph -> z13
|
||||
y35 AND x35 -> rkm
|
||||
ccq OR hns -> vdt
|
||||
x22 AND y22 -> hcv
|
||||
x11 XOR y11 -> mws
|
||||
ctp OR mdt -> nqv
|
||||
y24 XOR x24 -> jjh
|
||||
x43 AND y43 -> dkq
|
||||
y13 AND x13 -> qmc
|
||||
swk OR dgd -> tjh
|
||||
jqm AND fjc -> ktw
|
||||
fkq OR qfs -> dkn
|
||||
sdn XOR hrm -> z14
|
||||
y22 XOR x22 -> hrj
|
||||
mhm XOR mhc -> z34
|
||||
rbm OR bjj -> tmm
|
||||
gqq OR nnk -> stv
|
||||
jbc OR mnv -> z32
|
||||
y39 AND x39 -> gtf
|
||||
crw OR bbv -> wvt
|
||||
y05 AND x05 -> vfm
|
||||
mjf OR srr -> dpv
|
||||
y08 XOR x08 -> dnc
|
||||
x01 XOR y01 -> qtg
|
||||
y36 XOR x36 -> fjc
|
||||
kdn XOR fvk -> z29
|
||||
msp AND shq -> dqc
|
||||
vdt XOR rjv -> z25
|
||||
dpv AND mgr -> fvd
|
||||
bqf AND vnc -> jjt
|
||||
x09 XOR y09 -> ghk
|
||||
ckj AND jjh -> hns
|
||||
mpm XOR gtn -> z21
|
||||
x35 XOR y35 -> rpq
|
||||
y16 XOR x16 -> btj
|
||||
wkh XOR fhk -> z17
|
||||
y31 XOR x31 -> mbc
|
||||
gsv AND qtg -> vjb
|
||||
y23 AND x23 -> jmr
|
||||
jpj XOR brn -> z18
|
||||
crb AND gqd -> fpk
|
||||
x07 AND y07 -> hhm
|
||||
spg XOR bfw -> z44
|
||||
djd OR wqf -> msp
|
||||
gsv XOR qtg -> z01
|
||||
x10 XOR y10 -> vjd
|
||||
x20 XOR y20 -> pwm
|
||||
nct OR mmk -> gtn
|
||||
hrj AND tjh -> wfs
|
||||
y13 XOR x13 -> kph
|
||||
pjv XOR bhn -> z05
|
||||
fhk AND wkh -> vpv
|
||||
dnc XOR rtp -> cdj
|
||||
x40 XOR y40 -> tqg
|
||||
ckj XOR jjh -> z24
|
||||
x23 XOR y23 -> crb
|
||||
y14 AND x14 -> vjh
|
||||
tqg AND dfv -> dbc
|
||||
y10 AND x10 -> fkq
|
||||
kcv XOR pqv -> gfm
|
||||
x18 XOR y18 -> brn
|
||||
x02 AND y02 -> hjk
|
||||
wdg XOR fbp -> z03
|
||||
y08 AND x08 -> z08
|
||||
x32 XOR y32 -> pqv
|
||||
tqg XOR dfv -> z40
|
||||
jdh OR qrw -> z45
|
||||
x00 XOR y00 -> z00
|
||||
gtm OR mqp -> tfr
|
||||
x12 XOR y12 -> dmv
|
||||
mdr OR dqc -> fvk
|
||||
dmv AND wvt -> tkv
|
||||
gfm XOR shg -> z33
|
||||
dbc OR kqh -> tkw
|
||||
x21 AND y21 -> swk
|
||||
jhb XOR tkw -> z41
|
||||
dkn XOR mws -> z11
|
||||
x05 XOR y05 -> pjv
|
||||
x04 AND y04 -> wmc
|
||||
fgk AND jbp -> rdf
|
||||
y16 AND x16 -> dwj
|
||||
hqw XOR jmq -> z27
|
||||
gnn OR qmd -> kvn
|
||||
msp XOR shq -> z28
|
||||
mhs AND pbn -> whd
|
||||
pnr AND ghk -> kgf
|
||||
y31 AND x31 -> tnf
|
||||
pwm XOR cjh -> z20
|
||||
y19 AND x19 -> stp
|
||||
tdc XOR scp -> z30
|
||||
y03 AND x03 -> tqj
|
||||
fpk OR jmr -> ckj
|
||||
skt OR cdj -> pnr
|
||||
gtn AND mpm -> dgd
|
||||
wmc OR whd -> bhn
|
||||
dpv XOR mgr -> z19
|
||||
y17 XOR x17 -> fhk
|
||||
y03 XOR x03 -> fbp
|
||||
btj AND tmm -> z16
|
||||
stv XOR vfw -> z43
|
||||
tjh XOR hrj -> z22
|
||||
y11 AND x11 -> bbv
|
||||
cpp OR tnf -> kcv
|
||||
pbn XOR mhs -> z04
|
||||
x17 AND y17 -> pjm
|
||||
bmh OR tqj -> mhs
|
||||
fgk XOR jbp -> z06
|
||||
x25 XOR y25 -> rjv
|
||||
kvn XOR qjd -> z38
|
||||
y21 XOR x21 -> mpm
|
||||
qfv OR hjk -> wdg
|
||||
y36 AND x36 -> jwh
|
||||
knv OR tkv -> jsr
|
||||
tnr OR hhm -> rtp
|
||||
mhm AND mhc -> hsq
|
||||
qjd AND kvn -> bgj
|
||||
brn AND jpj -> srr
|
||||
hwf AND ftt -> qmd
|
||||
pjv AND bhn -> jnn
|
||||
x42 AND y42 -> gqq
|
||||
btj XOR tmm -> mrb
|
||||
x28 AND y28 -> mdr
|
||||
y39 XOR x39 -> vnc
|
||||
dwj OR mrb -> wkh
|
||||
rpq XOR pfh -> z35
|
||||
y25 AND x25 -> ctp
|
||||
stp OR fvd -> cjh
|
||||
cgp OR vjh -> gjd
|
||||
crb XOR gqd -> z23
|
||||
x26 XOR y26 -> stc
|
||||
y44 XOR x44 -> spg
|
||||
nqv XOR stc -> z26
|
||||
bqf XOR vnc -> z39
|
||||
x42 XOR y42 -> msd
|
||||
x00 AND y00 -> gsv
|
||||
rpq AND pfh -> bdd
|
||||
x01 AND y01 -> wcd
|
||||
x02 XOR y02 -> vgg
|
||||
x38 XOR y38 -> dhm
|
||||
y09 AND x09 -> btq
|
||||
wdg AND fbp -> bmh
|
||||
x06 XOR y06 -> fgk
|
||||
qpq OR vqw -> mhm
|
||||
dmv XOR wvt -> z12
|
||||
y32 AND x32 -> jbc
|
||||
rdf OR kcg -> ffg
|
||||
ffg XOR stn -> z07
|
||||
sdn AND hrm -> cgp
|
||||
scp AND tdc -> pkv
|
||||
fvk AND kdn -> kvv
|
||||
ktw OR jwh -> hwf
|
||||
spg AND bfw -> qrw
|
||||
x27 AND y27 -> wqf
|
||||
rkm OR bdd -> jqm
|
||||
x37 XOR y37 -> ftt
|
||||
y30 AND x30 -> nmd
|
||||
y07 XOR x07 -> stn
|
||||
y41 XOR x41 -> jhb
|
||||
vfw AND stv -> nfk
|
||||
y04 XOR x04 -> pbn
|
||||
rtp AND dnc -> skt
|
||||
jrd OR qmc -> hrm
|
||||
kmb AND vjd -> qfs
|
||||
nmd OR pkv -> sjk
|
||||
tkw AND jhb -> gtm
|
||||
nfk OR dkq -> bfw
|
||||
x29 AND y29 -> shs
|
||||
jqm XOR fjc -> z36
|
||||
sjk AND mbc -> cpp
|
||||
x20 AND y20 -> mmk
|
||||
y33 AND x33 -> qpq
|
||||
hsq OR fgq -> pfh
|
||||
gbg XOR vgg -> z02
|
||||
jnn OR vfm -> jbp
|
||||
pwm AND cjh -> nct
|
||||
dkn AND mws -> crw
|
||||
mbc XOR sjk -> z31
|
||||
dhm OR bgj -> bqf
|
||||
y34 AND x34 -> fgq
|
||||
x06 AND y06 -> kcg
|
||||
x41 AND y41 -> mqp
|
||||
kvv OR shs -> scp
|
||||
btq OR kgf -> kmb
|
||||
rjv AND vdt -> mdt
|
||||
x15 AND y15 -> rbm
|
||||
x44 AND y44 -> jdh
|
||||
gbg AND vgg -> qfv
|
||||
x18 AND y18 -> mjf
|
||||
y19 XOR x19 -> mgr
|
||||
msd XOR tfr -> z42
|
||||
y30 XOR x30 -> tdc
|
||||
y24 AND x24 -> ccq
|
||||
x28 XOR y28 -> shq
|
||||
stc AND nqv -> bch
|
||||
y14 XOR x14 -> sdn
|
||||
gjd AND jfh -> bjj
|
||||
x34 XOR y34 -> mhc
|
||||
vpv OR pjm -> jpj
|
||||
msd AND tfr -> nnk
|
||||
x26 AND y26 -> jvj
|
||||
kph AND jsr -> jrd
|
||||
jfh XOR gjd -> z15
|
||||
x15 XOR y15 -> jfh
|
||||
y29 XOR x29 -> kdn
|
||||
vjb OR wcd -> gbg
|
||||
hcv OR wfs -> gqd
|
||||
10
day24/sample.txt
Normal file
10
day24/sample.txt
Normal file
@@ -0,0 +1,10 @@
|
||||
x00: 1
|
||||
x01: 1
|
||||
x02: 1
|
||||
y00: 0
|
||||
y01: 1
|
||||
y02: 0
|
||||
|
||||
x00 AND y00 -> z00
|
||||
x01 XOR y01 -> z01
|
||||
x02 OR y02 -> z02
|
||||
47
day24/sample2.txt
Normal file
47
day24/sample2.txt
Normal file
@@ -0,0 +1,47 @@
|
||||
x00: 1
|
||||
x01: 0
|
||||
x02: 1
|
||||
x03: 1
|
||||
x04: 0
|
||||
y00: 1
|
||||
y01: 1
|
||||
y02: 1
|
||||
y03: 1
|
||||
y04: 1
|
||||
|
||||
ntg XOR fgs -> mjb
|
||||
y02 OR x01 -> tnw
|
||||
kwq OR kpj -> z05
|
||||
x00 OR x03 -> fst
|
||||
tgd XOR rvg -> z01
|
||||
vdt OR tnw -> bfw
|
||||
bfw AND frj -> z10
|
||||
ffh OR nrd -> bqk
|
||||
y00 AND y03 -> djm
|
||||
y03 OR y00 -> psh
|
||||
bqk OR frj -> z08
|
||||
tnw OR fst -> frj
|
||||
gnj AND tgd -> z11
|
||||
bfw XOR mjb -> z00
|
||||
x03 OR x00 -> vdt
|
||||
gnj AND wpb -> z02
|
||||
x04 AND y00 -> kjc
|
||||
djm OR pbm -> qhw
|
||||
nrd AND vdt -> hwm
|
||||
kjc AND fst -> rvg
|
||||
y04 OR y02 -> fgs
|
||||
y01 AND x02 -> pbm
|
||||
ntg OR kjc -> kwq
|
||||
psh XOR fgs -> tgd
|
||||
qhw XOR tgd -> z09
|
||||
pbm OR djm -> kpj
|
||||
x03 XOR y03 -> ffh
|
||||
x00 XOR y04 -> ntg
|
||||
bfw OR bqk -> z06
|
||||
nrd XOR fgs -> wpb
|
||||
frj XOR qhw -> z04
|
||||
bqk OR frj -> z07
|
||||
y03 OR x01 -> nrd
|
||||
hwm AND bqk -> z03
|
||||
tgd XOR rvg -> z12
|
||||
tnw OR pbm -> gnj
|
||||
19
day24/sample3.txt
Normal file
19
day24/sample3.txt
Normal file
@@ -0,0 +1,19 @@
|
||||
x00: 0
|
||||
x01: 1
|
||||
x02: 0
|
||||
x03: 1
|
||||
x04: 0
|
||||
x05: 1
|
||||
y00: 0
|
||||
y01: 0
|
||||
y02: 1
|
||||
y03: 1
|
||||
y04: 0
|
||||
y05: 1
|
||||
|
||||
x00 AND y00 -> z05
|
||||
x01 AND y01 -> z02
|
||||
x02 AND y02 -> z01
|
||||
x03 AND y03 -> z03
|
||||
x04 AND y04 -> z04
|
||||
x05 AND y05 -> z00
|
||||
Reference in New Issue
Block a user