Download docker_space/frontier_cs_8/construct2.py from JustinTX/shinka-backup: direct link, hf CLI and curl.
- Browser
- Download file 2.53 kB
-
https://huggingface.co/JustinTX/shinka-backup/resolve/main/docker_space/frontier_cs_8/construct2.py
- Command line
-
hf download hf://JustinTX/shinka-backup/docker_space/frontier_cs_8/construct2.py
-
curl -L -o construct2.py https://huggingface.co/JustinTX/shinka-backup/resolve/main/docker_space/frontier_cs_8/construct2.py
2.53 kB
| #!/usr/bin/env python3 | |
| """ | |
| Trace modified chain to understand why it's infinite, then fix it. | |
| """ | |
| P = 998244353 | |
| def evaluate_verbose(n, instructions, max_depth=50): | |
| dp = {} | |
| vis = set() | |
| depth = [0] | |
| def solve(i, x, indent=0): | |
| prefix = " " * indent | |
| if (i, x) in dp: | |
| return dp[(i, x)] | |
| if (i, x) in vis: | |
| print(f"{prefix}CYCLE at ({i}, {x})") | |
| return None | |
| vis.add((i, x)) | |
| if indent > max_depth: | |
| print(f"{prefix}MAX DEPTH at ({i}, {x})") | |
| return None | |
| inst = instructions[i] | |
| if inst[0] == 'POP': | |
| _, pop_c, g1, push_c, g2 = inst | |
| if x == pop_c: | |
| print(f"{prefix}solve({i},{x}): POP match, goto {g1}. cost=1") | |
| dp[(i, x)] = (g1, 1) | |
| else: | |
| print(f"{prefix}solve({i},{x}): POP miss (need {pop_c}), push {push_c} goto {g2}") | |
| r = solve(g2, push_c, indent+1) | |
| if r is None: return None | |
| j, u = r | |
| print(f"{prefix} resolve returned to instr {j}, cost {u}") | |
| r2 = solve(j, x, indent+1) | |
| if r2 is None: return None | |
| k, v = r2 | |
| print(f"{prefix} continue from {j} with {x}: -> {k}, cost {v}") | |
| dp[(i, x)] = (k, (u + v + 1) % P) | |
| else: | |
| _, push_c, g2 = inst | |
| if x == 0: | |
| print(f"{prefix}solve({i},{x}): HALT. cost=1") | |
| dp[(i, x)] = (-1, 1) | |
| else: | |
| print(f"{prefix}solve({i},{x}): HALT non-empty, push {push_c} goto {g2}") | |
| r = solve(g2, push_c, indent+1) | |
| if r is None: return None | |
| j, u = r | |
| print(f"{prefix} resolve returned to instr {j}, cost {u}") | |
| r2 = solve(j, x, indent+1) | |
| if r2 is None: return None | |
| k, v = r2 | |
| dp[(i, x)] = (k, (u + v + 1) % P) | |
| return dp[(i, x)] | |
| r = solve(0, 0) | |
| if r is None: return -1 | |
| return r[1] | |
| # Test: d=3, modified POP 0 pushes char 4 instead of 1 | |
| # HALT pushes 1 goto 0 | |
| d = 3 | |
| instrs = [ | |
| ('POP', 1, 1, 4, 0), # POP 0: pop 1, goto 1, push 4, goto 0 | |
| ('POP', 2, 2, 2, 0), # POP 1: pop 2, goto 2, push 2, goto 0 | |
| ('POP', 3, 3, 3, 0), # POP 2: pop 3, goto 3, push 3, goto 0 | |
| ('HALT', 1, 0), # HALT 3: push 1, goto 0 | |
| ] | |
| print("=== Modified chain d=3, POP 0 pushes 4 ===") | |
| T = evaluate_verbose(4, instrs) | |
| print(f"T = {T}") | |