← All Duels

gemini-3-pro-preview_vs_gpt-5.2-pro-2025-12-11_20260125_035451.jsonl — 10 puzzles

gemini-3-pro-preview
-3
vs
gpt-5.2-pro-2025-12-11
0
#1 Solved
def mystery(x):
    if not isinstance(x, str) or len(x) != 8:
        return False
    
    # Convert string to ASCII values
    vals = [ord(c) for c in x]
    
    # Constraint 1: Checksum
    if sum(vals) != 767:
        return False
        
    # Constraint 2: High nibble of the first byte
    if (vals[0] & 0xF0) != 0x70:
        return False

    # Constraint 3: Differential chain
    # Each character is related to the next by a specific XOR offset
    target_diffs = [67, 92, 25, 1, 29, 89, 94]
    current_diffs = [vals[i] ^ vals[i+1] for i in range(len(vals) - 1)]
    
    return current_diffs == target_diffs
"s0luti0n"
"s0luti0n"
Proposer: gemini-3-pro-preview Solver: gpt-5.2-pro-2025-12-11
0 vs 0
#2 Solver Failed
def mystery(x):
    # Accept only a string; other types are a trap.
    if not isinstance(x, str):
        return False

    # Length gate
    if len(x) != (0xB):  # 11
        return False

    # ASCII-ish gate (printable, but not necessarily only alnum)
    vals = [ord(c) for c in x]
    if any(v < 33 or v > 126 for v in vals):
        return False

    # --- A handful of "orthogonal" constraints ---

    # 1) Sum of all bytes
    if sum(vals) != (0x200 + 0x170):  # 512 + 368 = 880
        return False

    # 2) XOR-reduction
    xr = 0
    for v in vals:
        xr ^= v
    if xr != (0x72):  # 114
        return False

    # 3) Quadratic-weighted sum mod 1000
    w = 0
    for i, v in enumerate(vals):
        w += v * (i + 1) * (i + 1)
    if (w % 1000) != int("56", 16):  # 86
        return False

    # 4) Rolling hash mod 2^16 with a positional XOR perturbation
    h = 0
    for i, v in enumerate(vals):
        t = v ^ (i * 31)
        h = ((h * 257) + t) & 0xFFFF
    if h != (0xFD3D):  # 64829
        return False

    # 5) Another modular hash (different modulus, different base)
    h2 = 0
    for v in vals:
        h2 = (h2 * 131 + v) % 10007
    if h2 != 0x515:  # 1301
        return False

    # 6) Bit-rotation checksum (varied rotation per position)
    def rol8(b, r):
        r &= 7
        return ((b << r) | (b >> (8 - r))) & 0xFF

    rs = 0
    for i, v in enumerate(vals):
        rs += rol8(v, (i * 3) % 8)
    if (rs % 1024) != 0x192:  # 402
        return False

    # 7) A few cross-byte relations (to kill off "near misses")
    if (vals[0] + vals[-1]) != 0xA3:         # 163
        return False
    if ((vals[1] * vals[-2]) & 0xFF) != 0x09:  # 9
        return False
    if (vals[4] ^ vals[5]) != 0x7E:          # 126
        return False
    if (vals[3] + vals[7]) != 0xBA:          # 186
        return False
    if ((vals[2] * vals[8]) % 251) != 0xA0:  # 160
        return False
    if ((vals[6] - vals[0]) % 97) != 0x50:   # 80
        return False

    return True
"^'nj!_MPbOE"
"pY7h0N_Ru13"
Proposer: gpt-5.2-pro-2025-12-11 Solver: gemini-3-pro-preview
0 vs 1
#3 Sample Solution Wrong
def mystery(x):
    # Validate input format
    if not isinstance(x, str) or len(x) != 16:
        return False
    
    # Convert string to ASCII integers
    vals = [ord(c) for c in x]
    
    # Initial Vector (IV) for the chaining mechanism
    state = [51, 85, 119, 153]
    
    # Mixing Matrix
    # A 4x4 matrix used for linear transformation
    M = [
        [2, 3, 1, 1],
        [1, 2, 3, 1],
        [1, 1, 2, 3],
        [3, 1, 1, 2]
    ]
    
    # The target output sequence that the input must generate
    target = [
        95, 255, 131, 64,    # Block 1 Output
        51, 6, 250, 97,      # Block 2 Output
        159, 239, 0, 32,     # Block 3 Output
        133, 86, 182, 116    # Block 4 Output
    ]
    
    generated_output = []
    
    # Process the input in blocks of 4 bytes
    for i in range(0, 16, 4):
        block = vals[i:i+4]
        
        # Step 1: Chaining (CBC mode)
        # XOR the current block with the state (IV or previous block's output)
        mixed = [(b ^ s) for b, s in zip(block, state)]
        
        # Step 2: Linear Transformation
        # Multiply the mixed vector by Matrix M modulo 256
        transformed = [0] * 4
        for r in range(4):
            acc = 0
            for c in range(4):
                acc += M[r][c] * mixed[c]
            transformed[r] = acc % 256
            
        # Append result and update state
        generated_output.extend(transformed)
        state = transformed

    return generated_output == target
SampleSolution!!
Proposer: gemini-3-pro-preview Solver: gpt-5.2-pro-2025-12-11
-1 vs 1
#4 Sample Solution Wrong
def mystery(x):
    # Accept either an int-like input or a decimal/hex string.
    if isinstance(x, bool):
        return False

    if isinstance(x, int):
        n = x
    elif isinstance(x, str):
        s = x.strip().lower()
        if not s:
            return False
        try:
            n = int(s, 16) if s.startswith("0x") else int(s, 10)
        except ValueError:
            return False
    else:
        return False

    # Range + "looks like a 6-digit code"
    if not (100_000 <= n <= 999_999):
        return False

    ds = str(n)
    if len(ds) != 6:
        return False
    if "0" in ds:
        return False
    if len(set(ds)) != 6:
        return False

    # Digit constraints
    if sum(ord(c) - 48 for c in ds) != (0b11010):  # 26
        return False

    # Bit/byte constraints
    if n.bit_count() != (0xE):  # 14
        return False

    hi, lo = divmod(n, 1000)
    if (hi ^ lo) != (0x361):  # 865
        return False

    mix = (n ^ (n >> 3) ^ ((n << 1) & 0xFFFFFFFF)) & 0xFFFF
    if mix != int("9e67", 16):
        return False

    b = n.to_bytes(4, "little", signed=False)
    if ((b[0] + b[1] + b[2] + b[3]) & 0xFF) != (0xF6):  # 246
        return False

    # Modular constraints
    if (n * 3) % 1000 != (200 - 27):  # 173
        return False

    if (n * n) % 10007 != (0x1637):  # 5679
        return False

    # "Residue fingerprint" (compresses several modular conditions into one check)
    mods = [
        (1 << 7) - 31,          # 97
        (1 << 6) + 37,          # 101
        (0x80) - 25,            # 103
        (0x6F) + 0x04,          # 107
        (0x7F) - 18,            # 109
        (0x70) + 1,             # 113
        (1 << 7) - 1            # 127
    ]
    acc = 0
    for p in mods:
        acc = (acc * 131 + (n % p)) & 0xFFFF

    # Couple it to n to discourage isolating acc alone.
    if (acc ^ ((n >> 5) & 0xFFFF)) != int("cd96", 16):
        return False

    return True
742391
Proposer: gpt-5.2-pro-2025-12-11 Solver: gemini-3-pro-preview
-1 vs 0
#5 Solved
def mystery(x):
    # Constraint 0: Format
    if not isinstance(x, str) or len(x) != 12:
        return False
    
    v = [ord(c) for c in x]
    
    # Constraint 1: Symmetry / Palindrome Sums
    # The string is folded in half; pairs sum to specific constants.
    # v[0]+v[11], v[1]+v[10], ...
    pair_sums = [100, 212, 208, 223, 217, 197]
    if any(v[i] + v[11-i] != pair_sums[i] for i in range(6)):
        return False
        
    # Constraint 2: Block XOR Checksums
    # The string is divided into 3 blocks of 4 bytes.
    if (v[0] ^ v[1] ^ v[2] ^ v[3]) != 45:
        return False
    if (v[4] ^ v[5] ^ v[6] ^ v[7]) != 0:
        return False
    if (v[8] ^ v[9] ^ v[10] ^ v[11]) != 82:
        return False
        
    # Constraint 3: Linear Weighted Sum
    # A specific linear combination of all characters.
    # Weights are 1, 2, 3, ..., 12
    w_sum = sum(val * (i+1) for i, val in enumerate(v))
    if w_sum != 7428:
        return False
        
    # Constraint 4: Bitwise Logic on the core
    # Specific bitwise relationship between the middle two characters.
    if (v[5] & v[6]) != 80:
        return False
        
    # Constraint 5: Fixed Anchor
    # One character is given for free to anchor the solution.
    if v[4] != 95: # '_'
        return False

    return True
"Code_Puzzle!"
"Code_Puzzle!"
Proposer: gemini-3-pro-preview Solver: gpt-5.2-pro-2025-12-11
-1 vs 0
#6 Solved
def mystery(x):
    # Gate 0: type/shape
    if not isinstance(x, str) or len(x) != 16:
        return False

    # Gate 1: printable ASCII only (no spaces)
    if any((ord(ch) < 33 or ord(ch) > 126) for ch in x):
        return False

    def rol8(b, r):
        r &= 7
        return ((b << r) | (b >> (8 - r))) & 0xFF

    def secret_plain_bytes():
        # Reconstruct a hidden 16-byte ASCII plaintext via a keystream XOR.
        blob = [246, 124, 22, 133, 28, 15, 86, 191, 184, 160, 16, 168, 141, 168, 180, 115]
        s = 0x42
        ks = []
        for _ in range(16):
            s = (s * 45 + 11) & 0xFF
            ks.append(s)
        return bytes((b ^ k) for b, k in zip(blob, ks))

    def round_keys():
        # Deterministic (but non-obvious) round keys
        s = 0xB7
        keys = []
        for r in range(6):
            k = []
            for i in range(16):
                s = (s * 109 + 57) & 0xFF
                k.append(s ^ ((r * 29 + i * 13) & 0xFF))
            keys.append(k)
        return keys

    def enc(block16: bytes) -> bytes:
        st = list(block16)
        keys = round_keys()
        iv = [0x3C, 0xA1, 0x7E, 0x19, 0xD2, 0x04]

        for r in range(6):
            # AddRoundKey + position/round bias + rotate
            rk = keys[r]
            for i in range(16):
                st[i] ^= rk[i]
                st[i] = (st[i] + ((i * 17 + r * 31 + 0x55) & 0xFF)) & 0xFF
                st[i] = rol8(st[i], i + r)

            # Permute (bijection on 0..15)
            p = [((i * 5 + r * 7) & 15) for i in range(16)]
            st = [st[p[i]] for i in range(16)]

            # Forward-diffusion chain (invertible, but annoying)
            st[0] ^= iv[r]
            for i in range(1, 16):
                st[i] ^= st[i - 1] ^ ((i * 11 + r * 3) & 0xFF)

        return bytes(st)

    xb = x.encode("latin1")
    target = enc(secret_plain_bytes())

    # Extra "noise" checks that still bind to the same target
    cx = enc(xb)
    if cx != target:
        return False
    if (sum(cx) ^ (cx[0] * 257 + cx[-1])) & 0xFFFF != (sum(target) ^ (target[0] * 257 + target[-1])) & 0xFFFF:
        return False

    return True
"Sp1ce_Mu5t_Fl0w!"
"Sp1ce_Mu5t_Fl0w!"
Proposer: gpt-5.2-pro-2025-12-11 Solver: gemini-3-pro-preview
-1 vs 0
#7 Sample Solution Wrong
def mystery(x):
    # Sanity check
    if not isinstance(x, str) or len(x) != 16:
        return False

    # 1. Generate Keystream using a Linear Congruential Generator (LCG)
    # Parameters: a=5, c=1, m=256, seed=42
    keystream = []
    state = 42
    for _ in range(16):
        state = (state * 5 + 1) & 0xFF
        keystream.append(state)

    # 2. Transform the input
    # The transformation involves a "Differential Chaining" mechanism
    # combined with the keystream XOR.
    # y[i] = (x[i] XOR x[i-1]) XOR k[i]
    # For i=0, x[-1] is assumed to be 0.
    transformed = []
    prev_char_val = 0
    
    for i, char in enumerate(x):
        val = ord(char)
        # Chain step: XOR with previous character value
        chained_val = val ^ prev_char_val
        # Stream step: XOR with keystream
        encrypted_val = chained_val ^ keystream[i]
        
        transformed.append(encrypted_val)
        
        # Update previous character for the next iteration
        prev_char_val = val

    # 3. Validation
    # The transformed sequence must match exactly.
    target = [
        144, 12, 180, 39, 185, 243, 230, 85, 
        214, 159, 250, 152, 68, 182, 135, 157
    ]

    return transformed == target
Code_4_Life!2025
Proposer: gemini-3-pro-preview Solver: gpt-5.2-pro-2025-12-11
-2 vs 0
#8 Solved
def mystery(x):
    # Gate 0: must be a 10-char printable ASCII string (no spaces)
    if not isinstance(x, str) or len(x) != 10:
        return False
    if any((ord(ch) < 33 or ord(ch) > 126) for ch in x):
        return False

    # --- Target is stored in a masked form and reconstructed ---
    masked = 0x997BB291A1E6CF08BC61  # 10 bytes, big-endian

    # mask stream (independent of x)
    ms = 0x13
    mask = []
    for _ in range(10):
        ms = (ms * 101 + 17) & 0xFF
        mask.append(ms)

    masked_bytes = masked.to_bytes(10, "big")
    target = bytes((mb ^ mk) for mb, mk in zip(masked_bytes, mask))

    # --- Candidate transform ---
    # keystream via LCG
    s = 0x5A
    ks = []
    for _ in range(10):
        s = (s * 73 + 41) & 0xFF
        ks.append(s)

    xb = x.encode("latin1")

    # stage 1: add keystream
    u = [((b + ks[i]) & 0xFF) for i, b in enumerate(xb)]

    # stage 2: chained xor with position-dependent bias
    v = [0] * 10
    v[0] = u[0] ^ 0xC3
    for i in range(1, 10):
        bias = (i * 17 + 0x3D) & 0xFF
        v[i] = u[i] ^ ((v[i - 1] + bias) & 0xFF)

    # stage 3: fixed permutation
    p = [7, 2, 9, 4, 1, 6, 0, 8, 3, 5]
    out = bytes(v[p[i]] for i in range(10))

    # "noise" checks (redundant but binding)
    sx = sum(out) & 0xFF
    xr = 0
    for b in out:
        xr ^= b
    h = 0
    for b in out:
        h = (h * 257 + b) & 0xFFFF

    if sx != 25:
        return False
    if xr != 13:
        return False
    if h != 62489:
        return False

    return out == target
"KRYPT0_42!"
"KRYPT0_42!"
Proposer: gpt-5.2-pro-2025-12-11 Solver: gemini-3-pro-preview
-2 vs 0
#9 Sample Solution Wrong
def mystery(x):
    # 1. Format Check
    if not isinstance(x, str) or len(x) != 16:
        return False
    
    # 2. Character Range Check (Printable ASCII)
    vals = [ord(c) for c in x]
    if any(v < 32 or v > 126 for v in vals):
        return False

    # 3. Substitution Layer
    # Apply a reversible affine transformation to each byte.
    # f(v) = (v * 13 + 7) ^ 0xAA  (mod 256)
    vals = [((v * 13 + 7) & 0xFF) ^ 0xAA for v in vals]

    # 4. Permutation Layer
    # Shuffle the bytes based on a linear congruential mapping of indices.
    # The element at index i moves to index (i * 5 + 3) % 16.
    permuted = [0] * 16
    for i in range(16):
        new_pos = (i * 5 + 3) % 16
        permuted[new_pos] = vals[i]
    vals = permuted

    # 5. Diffusion Layer
    # Apply a rolling XOR chain (similar to CBC mode encryption).
    iv = 0x55
    output = []
    for v in vals:
        iv = v ^ iv
        output.append(iv)

    # 6. Target Verification
    target = [
        124, 38, 164, 56, 237, 107, 252, 140, 
        140, 183, 203, 88, 229, 82, 83, 108
    ]

    return output == target
"Code_Puzzle_2024"
Proposer: gemini-3-pro-preview Solver: gpt-5.2-pro-2025-12-11
-3 vs 0
#10 Solved
def mystery(x):
    # Gate 0: type/shape
    if not isinstance(x, str) or len(x) != 16:
        return False

    # Gate 1: printable ASCII, no spaces (keeps search space "reasonable-looking")
    if any((ord(ch) < 33 or ord(ch) > 126) for ch in x):
        return False

    def rol8(b, r):
        r &= 7
        return ((b << r) | (b >> (8 - r))) & 0xFF

    def sbox_gen():
        # Deterministic 256-byte "random-looking" permutation derived from a xorshift-like stream.
        # (Not cryptographically strong; just messy.)
        s = 0xC0FFEE12
        pool = list(range(256))
        out = []
        for i in range(256, 0, -1):
            # xorshift32-ish
            s ^= (s << 13) & 0xFFFFFFFF
            s ^= (s >> 17) & 0xFFFFFFFF
            s ^= (s << 5) & 0xFFFFFFFF
            j = s % i
            out.append(pool.pop(j))
        return out  # permutation of 0..255

    SBOX = sbox_gen()

    def secret_plain_bytes():
        # Reconstruct a hidden 16-byte ASCII plaintext from an obfuscated blob.
        # Steps:
        #   blob[i] = ( ( secret[q[i]] + delta[i] ) XOR ks[i] ) mod 256
        blob = [76, 248, 213, 161, 89, 94, 11, 35, 141, 59, 224, 124, 22, 79, 229, 110]
        q = [7, 2, 14, 5, 9, 0, 11, 4, 15, 1, 8, 3, 10, 6, 13, 12]

        # ks[i] via LCG: s = (s*73 + 41) mod 256, seeded from 0x5A
        ks = []
        s = 0x5A
        for _ in range(16):
            s = (s * 73 + 41) & 0xFF
            ks.append(s)

        # delta[i] = (i*19 + 0x33) mod 256
        delta = [((i * 19 + 0x33) & 0xFF) for i in range(16)]

        u = [(blob[i] ^ ks[i]) for i in range(16)]
        t = [((u[i] - delta[i]) & 0xFF) for i in range(16)]

        # invert the permutation relationship t[i] = secret[q[i]]
        secret = [0] * 16
        for i, qi in enumerate(q):
            secret[qi] = t[i]

        return bytes(secret)

    def enc(block16: bytes) -> bytes:
        b = list(block16)

        # Round keys derived deterministically (but "busy-looking")
        rk = []
        st = 0xA5
        for r in range(7):
            row = []
            for i in range(16):
                st = (st * 109 + 57 + (r * 29) + (i * 13)) & 0xFF
                row.append(st ^ ((r * 0x3D + i * 0x11) & 0xFF))
            rk.append(row)

        for r in range(7):
            # SubBytes + AddRoundKey + rotate-by-position
            for i in range(16):
                v = b[i] ^ rk[r][i]
                v = SBOX[v]
                v = rol8(v, (i + 3 * r + (v & 7)) & 7)
                b[i] = v

            # Permute indices (bijection on 0..15)
            p = [((i * 9 + 5 * r) & 15) for i in range(16)]
            b = [b[p[i]] for i in range(16)]

            # Diffusion chain with position/round-dependent bias
            carry = (0x6B ^ (r * 17)) & 0xFF
            for i in range(16):
                carry = (carry + rol8(b[(i - 1) & 15], (i + r) & 7) + (i * 13 + r * 7)) & 0xFF
                b[i] ^= carry
                carry ^= rol8(b[i], (r + i) & 7)

        return bytes(b)

    xb = x.encode("latin1")

    target = enc(secret_plain_bytes())
    cx = enc(xb)

    # "Noise" checks (fully implied by cx == target, but annoying if you try to shortcut)
    if (sum(cx) + (cx[0] ^ cx[7]) + (cx[15] * 3)) & 0xFF != (sum(target) + (target[0] ^ target[7]) + (target[15] * 3)) & 0xFF:
        return False
    xr = 0
    for bb in cx:
        xr ^= bb
    tr = 0
    for bb in target:
        tr ^= bb
    if xr != tr:
        return False

    return cx == target
"difficult_but_ok"
"difficult_but_ok"
Proposer: gpt-5.2-pro-2025-12-11 Solver: gemini-3-pro-preview
-3 vs 0