mirror of
https://git.plasmaofthedawn.com/adventofcode.git
synced 2025-12-27 12:07:34 -06:00
plasl day2p1 and a lot of other junk i never pushed
This commit is contained in:
@@ -21,6 +21,10 @@ int number_from_id(int id) {
|
||||
|
||||
}
|
||||
|
||||
int get_letter(int id) {
|
||||
return id / 65536;
|
||||
}
|
||||
|
||||
int operator_to_id(char* str){
|
||||
|
||||
if (strcmp(str, "AND") == 0) {
|
||||
@@ -148,8 +152,11 @@ int main() {
|
||||
num_rules++;
|
||||
}
|
||||
|
||||
int found_zs[max_z];
|
||||
max_z++;
|
||||
int xy_ands[max_z];
|
||||
int xy_xors[max_z];
|
||||
|
||||
|
||||
int rule_applied[num_rules];
|
||||
|
||||
for (int i = 0; i < num_rules; i++) {
|
||||
@@ -160,76 +167,32 @@ int main() {
|
||||
|
||||
for (int i = 0; i < max_z; i++) {
|
||||
|
||||
found_zs[i] = 0;
|
||||
xy_ands[i] = 0;
|
||||
xy_xors[i] = 0;
|
||||
|
||||
}
|
||||
|
||||
printf("Read %d values and %d rules, trying to find %d zs\n", num_values, num_rules, max_z);
|
||||
|
||||
for (;;) {
|
||||
for (int i = 0; i < num_rules; i++) {
|
||||
|
||||
for (int i = 0; i < num_rules; i++) {
|
||||
if (get_letter(rules[i].op1) == 'x' && get_letter(rules[i].op2) == 'y' ||
|
||||
get_letter(rules[i].op1) == 'y' && get_letter(rules[i].op2) == 'x') {
|
||||
|
||||
int v1, v2;
|
||||
|
||||
if (rule_applied[i]) {
|
||||
continue;
|
||||
if (rules[i].operator == 3) {
|
||||
xy_xors[number_from_id(rules[i].op1)] = rules[i].result;
|
||||
} else if (rules[i].operator == 1) {
|
||||
xy_ands[number_from_id(rules[i].op1)] = rules[i].result;
|
||||
}
|
||||
|
||||
if ((v1 = get_value(rules[i].op1)) >= 0 && (v2 = get_value(rules[i].op2)) >= 0) {
|
||||
|
||||
int res = apply_operator(v1, rules[i].operator, v2);
|
||||
|
||||
//printf("%d: %d\n", rules[i].result, res);
|
||||
|
||||
add_value(rules[i].result, res);
|
||||
|
||||
if (rules[i].result / 65536 == 'z') {
|
||||
|
||||
found_zs[number_from_id(rules[i].result)] = 1;
|
||||
printf("Found z%d\n", number_from_id(rules[i].result));
|
||||
//printf("%x", rules[i].result);
|
||||
|
||||
}
|
||||
|
||||
rule_applied[i] = 1;
|
||||
|
||||
}
|
||||
|
||||
//printf("%d, %d\n", v1, v2);
|
||||
|
||||
printf("%d: %d %d\n", rules[i].operator, number_from_id(rules[i].op1), number_from_id(rules[i].op2));
|
||||
}
|
||||
|
||||
int finished = 1;
|
||||
for (int i = 0; i < max_z; i++) {
|
||||
|
||||
if (found_zs[i] == 0) {
|
||||
|
||||
finished = 0;
|
||||
break;
|
||||
|
||||
}
|
||||
|
||||
|
||||
if (rules[i].result / 65536 == 'z') {
|
||||
//printf("%d", rules[i].operator);
|
||||
}
|
||||
|
||||
if (finished) {
|
||||
|
||||
break;
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
long out = 0;
|
||||
for (int i = max_z - 1; i >= 0; i--) {
|
||||
|
||||
out *= 2;
|
||||
int n = get_value(zvalue_to_id(i));
|
||||
printf("%d", n);
|
||||
out += n;
|
||||
|
||||
//printf("%x\n", zvalue_to_id(i));
|
||||
}
|
||||
|
||||
printf("\nres: %ld\n", out);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user