Solution #c0d68d5c-fa9d-4207-bf1b-597f887e66e7

failed

Score

0% (0/5)

Runtime

1.57ms

Delta

-100.0% vs parent

-100.0% vs best

Regression from parent

Solution Lineage

Current0%Regression from parent
ae54b0ca54%Regression from parent
e0f66b5554%Improved from parent
465e93a245%Regression from parent
73be1f5e49%Improved from parent
dd5155da19%Improved from parent
a9d69e700%Regression from parent
63acaad058%Improved from parent
1265a3fc48%Improved from parent
693a4dda33%Regression from parent
d5bf925948%Regression from parent
48e560c749%Improved from parent
78afbd2538%Improved from parent
f0098ec50%Same as parent
bb8caee80%Regression from parent
ce53db5152%Improved from parent
9e6f727542%Improved from parent
2c6b742934%Regression from parent
223a455254%Improved from parent
4a54e07352%Improved from parent
99326a1432%Improved from parent
d8629f4919%Regression from parent
0deb287347%Improved from parent
e4b007c347%Improved from parent
32b7128c43%Regression from parent
f209f80655%Improved from parent
9161b31714%Regression from parent
9ab0f66324%Improved from parent
110fbd0b0%Regression from parent
e3d01a5c52%Improved from parent
c6fc252643%Regression from parent
23b4491152%Improved from parent
03aea6db43%Regression from parent
5f1a15ce53%Improved from parent
f22b171153%Same as parent
7b6d9f0953%Improved from parent
0401f74f12%Regression from parent
b96fbcb340%Improved from parent
84cc9d0420%First in chain

Code

def solve(input):
    try:
        data = input.get("data", "") if isinstance(input, dict) else ""
        if not isinstance(data, str):
            data = str(data)

        raw = data.encode("utf-8")
        n = len(raw)
        if n == 0:
            return 0.0

        original_size = len(data)
        if original_size == 0:
            return 0.0

        def vbytes(x):
            c = 1
            while x >= 128:
                x >>= 7
                c += 1
            return c

        def lit_cost(l):
            return 1 + vbytes(l) + l

        def rle_cost(l):
            return 1 + 1 + vbytes(l)

        def ref_cost(d, l):
            return 1 + vbytes(d) + vbytes(l)

        min_match = 4
        max_window = min(n, 65535)

        next_same = [-1] * n
        last_pos = {}
        for i in range(n - 1, -1, -1):
            b = raw[i]
            next_same[i] = last_pos.get(b, -1)
            last_pos[b] = i

        best_len = [0] * n
        best_dist = [0] * n

        for i in range(n):
            if i + min_match > n:
                continue

            p = next_same[i]
            checked = 0
            bestl = 0
            bestd = 0

            while p != -1 and checked < 48:
                d = p - i
                if d > max_window:
                    break
                checked += 1

                if i + d + min_match <= n and raw[i:i + min_match] == raw[i + d:i + d + min_match]:
                    l = min_match
                    limit = n - i - d
                    while l < limit and raw[i + l] == raw[i + d + l]:
                        l += 1

                    total = d + l
                    while total < n and raw[i + total] == raw[i + total - d]:
                        total += 1

                    if total >= min_match:
                        c_ref = ref_cost(d, total)
                        c_lit = lit_cost(total)
                        if c_ref < c_lit and total > bestl:
                            bestl = total
                            bestd = d

                p = next_same[p]

            best_len[i] = bestl
            best_dist[i] = bestd

        INF = 10**18
        dp = [INF] * (n + 1)
        choice = [None] * (n + 1)
        dp[n] = 0

        max_lit = 128

        for i in range(n - 1, -1, -1):
            b = raw[i]

            run = 1
            while i + run < n and raw[i + run] == b:
                run += 1
            if run >= 4:
                cand = [run]
                if run > 8:
                    cand.append(4)
                    cand.append(run // 2)
                else:
                    cand.extend(range(4, run))
                seen = set()
                for l in cand:
                    if l < 4 or l > run or l in seen:
                        continue
                    seen.add(l)
                    c = rle_cost(l) + dp[i + l]
                    if c < dp[i]:
                        dp[i] = c
                        choice[i] = ("R", l)

            bl = best_len[i]
            if bl >= min_match:
                d = best_dist[i]
                cand = [bl, min_match]
                if bl >= 8:
                    cand.append(bl // 2)
                seen = set()
                for l in cand:
                    if l < min_match or l > bl or l in seen:
                        continue
                    seen.add(l)
                    c = ref_cost(d, l) + dp[i + l]
                    if c < dp[i]:
                        dp[i] = c
                        choice[i] = ("B", d, l)

            limit = min(max_lit, n - i)
            acc = 1 + vbytes(1)
            for l in range(1, limit + 1):
                if l > 1:
                    acc += 1
                c = acc + dp[i + l]
                if c < dp[i]:
                    dp[i] = c
                    choice[i] = ("L", l)

        out = bytearray()
        i = 0
        while i < n:
            ch = choice[i]
            if ch is None:
                return 999.0
            t = ch[0]
            if t == "L":
                l = ch[1]
                out.extend(raw[i:i + l])
                i += l
            elif t == "R":
                l = ch[1]
                out.extend(raw[i:i + 1] * l)
                i += l
            else:
                d, l = ch[1], ch[2]
                if d <= 0 or d > len(out):
                    return 999.0
                start = len(out) - d
                for k in range(l):
                    out.append(out[start + k])
                i += l

        if bytes(out) != raw:
            return 999.0

        ratio = dp[0] / float(original_size)
        if ratio < 0:
            return 999.0
        return float(ratio)
    except:
        return 999.0