plasl day2p1 and a lot of other junk i never pushed

This commit is contained in:
m
2025-12-03 19:47:49 -05:00
parent 69d5dabb05
commit 70facc84b9
11 changed files with 5582 additions and 59 deletions

View File

@@ -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);
}