Solution #ae54b0ca-339b-4d2b-8bdd-91b54d0b8511
completedScore
54% (0/5)
Runtime
27.67ms
Delta
-0.4% vs parent
-44.4% vs best
Regression from parent
Score
54% (0/5)
Runtime
27.67ms
Delta
-0.4% vs parent
-44.4% vs best
Regression from parent
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
def bits_needed(x):
return x.bit_length() if x > 0 else 1
def varint_bits(x):
return 2 * bits_needed(x)
def lit_cost(length):
return 2 + varint_bits(length) + 8 * length
def rle_cost(length):
return 2 + varint_bits(length) + 8
def ref_cost(dist, length):
return 2 + varint_bits(dist) + varint_bits(length)
min_match = 4
max_window = min(n, 1 << 15)
max_chain = 32
pos_map = {}
best_len_at = [0] * n
best_dist_at = [0] * n
for i in range(n):
if i + min_match <= n:
key = raw[i:i + min_match]
arr = pos_map.get(key)
best_len = 0
best_dist = 0
if arr:
checked = 0
idx = len(arr) - 1
while idx >= 0 and checked < max_chain:
p = arr[idx]
idx -= 1
checked += 1
dist = i - p
if dist <= 0 or dist > max_window:
continue
lim = n - i
m = 0
while m < lim and raw[p + (m % dist)] == raw[i + m]:
m += 1
if m >= min_match:
c = ref_cost(dist, m)
if c < lit_cost(m):
if m > best_len or (m == best_len and dist < best_dist):
best_len = m
best_dist = dist
best_len_at[i] = best_len
best_dist_at[i] = best_dist
if arr is None:
pos_map[key] = [i]
else:
arr.append(i)
cutoff = i - max_window
while arr and arr[0] < cutoff:
arr.pop(0)
if len(arr) > max_chain * 4:
del arr[:-max_chain * 2]
INF = 10**18
dp = [INF] * (n + 1)
choice = [None] * (n + 1)
dp[n] = 0
for i in range(n - 1, -1, -1):
b = raw[i]
r = i + 1
while r < n and raw[r] == b:
r += 1
run_len = r - i
if run_len >= 3:
rr = 3
while rr <= run_len:
c = rle_cost(rr) + dp[i + rr]
if c < dp[i]:
dp[i] = c
choice[i] = ("R", rr)
rr += 1
c = rle_cost(run_len) + dp[i + run_len]
if c < dp[i]:
dp[i] = c
choice[i] = ("R", run_len)
bl = best_len_at[i]
if bl >= min_match:
dist = best_dist_at[i]
lengths = set()
lengths.add(bl)
lengths.add(min_match)
if bl > min_match:
lengths.add((min_match + bl) // 2)
for l in lengths:
if l >= min_match and l <= bl:
c = ref_cost(dist, l) + dp[i + l]
if c < dp[i]:
dp[i] = c
choice[i] = ("B", dist, l)
max_lit = min(64, n - i)
for l in range(1, max_lit + 1):
c = lit_cost(l) + dp[i + l]
if c < dp[i]:
dp[i] = c
choice[i] = ("L", l)
tokens = []
i = 0
while i < n:
ch = choice[i]
if ch is None:
return 999.0
if ch[0] == "L":
l = ch[1]
tokens.append(("L", raw[i:i + l]))
i += l
elif ch[0] == "R":
l = ch[1]
tokens.append(("R", raw[i], l))
i += l
else:
dist, l = ch[1], ch[2]
tokens.append(("B", dist, l))
i += l
out = bytearray()
for t in tokens:
if t[0] == "L":
out.extend(t[1])
elif t[0] == "R":
out.extend(bytes([t[1]]) * t[2])
else:
dist, length = t[1], t[2]
if dist <= 0 or dist > len(out):
return 999.0
start = len(out) - dist
for k in range(length):
out.append(out[start + k])
if bytes(out) != raw:
return 999.0
original_size = len(data)
if original_size == 0:
return 0.0
compressed_bits = dp[0]
compressed_bytes = (compressed_bits + 7) / 8.0
ratio = compressed_bytes / original_size
if ratio < 0:
return 999.0
return float(ratio)
except:
return 999.0Score Difference
-42.9%
Runtime Advantage
27.54ms slower
Code Size
173 vs 34 lines
| # | Your Solution | # | Champion |
|---|---|---|---|
| 1 | def solve(input): | 1 | def solve(input): |
| 2 | try: | 2 | data = input.get("data", "") |
| 3 | data = input.get("data", "") if isinstance(input, dict) else "" | 3 | if not isinstance(data, str) or not data: |
| 4 | if not isinstance(data, str): | 4 | return 999.0 |
| 5 | data = str(data) | 5 | |
| 6 | 6 | # Mathematical/analytical approach: Entropy-based redundancy calculation | |
| 7 | raw = data.encode("utf-8") | 7 | |
| 8 | n = len(raw) | 8 | from collections import Counter |
| 9 | if n == 0: | 9 | from math import log2 |
| 10 | return 0.0 | 10 | |
| 11 | 11 | def entropy(s): | |
| 12 | def bits_needed(x): | 12 | probabilities = [freq / len(s) for freq in Counter(s).values()] |
| 13 | return x.bit_length() if x > 0 else 1 | 13 | return -sum(p * log2(p) if p > 0 else 0 for p in probabilities) |
| 14 | 14 | ||
| 15 | def varint_bits(x): | 15 | def redundancy(s): |
| 16 | return 2 * bits_needed(x) | 16 | max_entropy = log2(len(set(s))) if len(set(s)) > 1 else 0 |
| 17 | 17 | actual_entropy = entropy(s) | |
| 18 | def lit_cost(length): | 18 | return max_entropy - actual_entropy |
| 19 | return 2 + varint_bits(length) + 8 * length | 19 | |
| 20 | 20 | # Calculate reduction in size possible based on redundancy | |
| 21 | def rle_cost(length): | 21 | reduction_potential = redundancy(data) |
| 22 | return 2 + varint_bits(length) + 8 | 22 | |
| 23 | 23 | # Assuming compression is achieved based on redundancy | |
| 24 | def ref_cost(dist, length): | 24 | max_possible_compression_ratio = 1.0 - (reduction_potential / log2(len(data))) |
| 25 | return 2 + varint_bits(dist) + varint_bits(length) | 25 | |
| 26 | 26 | # Qualitative check if max_possible_compression_ratio makes sense | |
| 27 | min_match = 4 | 27 | if max_possible_compression_ratio < 0.0 or max_possible_compression_ratio > 1.0: |
| 28 | max_window = min(n, 1 << 15) | 28 | return 999.0 |
| 29 | max_chain = 32 | 29 | |
| 30 | 30 | # Verify compression is lossless (hypothetical check here) | |
| 31 | pos_map = {} | 31 | # Normally, if we had a compression algorithm, we'd test decompress(compress(data)) == data |
| 32 | best_len_at = [0] * n | 32 | |
| 33 | best_dist_at = [0] * n | 33 | # Returning the hypothetical compression performance |
| 34 | 34 | return max_possible_compression_ratio | |
| 35 | for i in range(n): | 35 | |
| 36 | if i + min_match <= n: | 36 | |
| 37 | key = raw[i:i + min_match] | 37 | |
| 38 | arr = pos_map.get(key) | 38 | |
| 39 | best_len = 0 | 39 | |
| 40 | best_dist = 0 | 40 | |
| 41 | 41 | ||
| 42 | if arr: | 42 | |
| 43 | checked = 0 | 43 | |
| 44 | idx = len(arr) - 1 | 44 | |
| 45 | while idx >= 0 and checked < max_chain: | 45 | |
| 46 | p = arr[idx] | 46 | |
| 47 | idx -= 1 | 47 | |
| 48 | checked += 1 | 48 | |
| 49 | dist = i - p | 49 | |
| 50 | if dist <= 0 or dist > max_window: | 50 | |
| 51 | continue | 51 | |
| 52 | 52 | ||
| 53 | lim = n - i | 53 | |
| 54 | m = 0 | 54 | |
| 55 | while m < lim and raw[p + (m % dist)] == raw[i + m]: | 55 | |
| 56 | m += 1 | 56 | |
| 57 | 57 | ||
| 58 | if m >= min_match: | 58 | |
| 59 | c = ref_cost(dist, m) | 59 | |
| 60 | if c < lit_cost(m): | 60 | |
| 61 | if m > best_len or (m == best_len and dist < best_dist): | 61 | |
| 62 | best_len = m | 62 | |
| 63 | best_dist = dist | 63 | |
| 64 | 64 | ||
| 65 | best_len_at[i] = best_len | 65 | |
| 66 | best_dist_at[i] = best_dist | 66 | |
| 67 | 67 | ||
| 68 | if arr is None: | 68 | |
| 69 | pos_map[key] = [i] | 69 | |
| 70 | else: | 70 | |
| 71 | arr.append(i) | 71 | |
| 72 | cutoff = i - max_window | 72 | |
| 73 | while arr and arr[0] < cutoff: | 73 | |
| 74 | arr.pop(0) | 74 | |
| 75 | if len(arr) > max_chain * 4: | 75 | |
| 76 | del arr[:-max_chain * 2] | 76 | |
| 77 | 77 | ||
| 78 | INF = 10**18 | 78 | |
| 79 | dp = [INF] * (n + 1) | 79 | |
| 80 | choice = [None] * (n + 1) | 80 | |
| 81 | dp[n] = 0 | 81 | |
| 82 | 82 | ||
| 83 | for i in range(n - 1, -1, -1): | 83 | |
| 84 | b = raw[i] | 84 | |
| 85 | 85 | ||
| 86 | r = i + 1 | 86 | |
| 87 | while r < n and raw[r] == b: | 87 | |
| 88 | r += 1 | 88 | |
| 89 | run_len = r - i | 89 | |
| 90 | 90 | ||
| 91 | if run_len >= 3: | 91 | |
| 92 | rr = 3 | 92 | |
| 93 | while rr <= run_len: | 93 | |
| 94 | c = rle_cost(rr) + dp[i + rr] | 94 | |
| 95 | if c < dp[i]: | 95 | |
| 96 | dp[i] = c | 96 | |
| 97 | choice[i] = ("R", rr) | 97 | |
| 98 | rr += 1 | 98 | |
| 99 | c = rle_cost(run_len) + dp[i + run_len] | 99 | |
| 100 | if c < dp[i]: | 100 | |
| 101 | dp[i] = c | 101 | |
| 102 | choice[i] = ("R", run_len) | 102 | |
| 103 | 103 | ||
| 104 | bl = best_len_at[i] | 104 | |
| 105 | if bl >= min_match: | 105 | |
| 106 | dist = best_dist_at[i] | 106 | |
| 107 | lengths = set() | 107 | |
| 108 | lengths.add(bl) | 108 | |
| 109 | lengths.add(min_match) | 109 | |
| 110 | if bl > min_match: | 110 | |
| 111 | lengths.add((min_match + bl) // 2) | 111 | |
| 112 | for l in lengths: | 112 | |
| 113 | if l >= min_match and l <= bl: | 113 | |
| 114 | c = ref_cost(dist, l) + dp[i + l] | 114 | |
| 115 | if c < dp[i]: | 115 | |
| 116 | dp[i] = c | 116 | |
| 117 | choice[i] = ("B", dist, l) | 117 | |
| 118 | 118 | ||
| 119 | max_lit = min(64, n - i) | 119 | |
| 120 | for l in range(1, max_lit + 1): | 120 | |
| 121 | c = lit_cost(l) + dp[i + l] | 121 | |
| 122 | if c < dp[i]: | 122 | |
| 123 | dp[i] = c | 123 | |
| 124 | choice[i] = ("L", l) | 124 | |
| 125 | 125 | ||
| 126 | tokens = [] | 126 | |
| 127 | i = 0 | 127 | |
| 128 | while i < n: | 128 | |
| 129 | ch = choice[i] | 129 | |
| 130 | if ch is None: | 130 | |
| 131 | return 999.0 | 131 | |
| 132 | if ch[0] == "L": | 132 | |
| 133 | l = ch[1] | 133 | |
| 134 | tokens.append(("L", raw[i:i + l])) | 134 | |
| 135 | i += l | 135 | |
| 136 | elif ch[0] == "R": | 136 | |
| 137 | l = ch[1] | 137 | |
| 138 | tokens.append(("R", raw[i], l)) | 138 | |
| 139 | i += l | 139 | |
| 140 | else: | 140 | |
| 141 | dist, l = ch[1], ch[2] | 141 | |
| 142 | tokens.append(("B", dist, l)) | 142 | |
| 143 | i += l | 143 | |
| 144 | 144 | ||
| 145 | out = bytearray() | 145 | |
| 146 | for t in tokens: | 146 | |
| 147 | if t[0] == "L": | 147 | |
| 148 | out.extend(t[1]) | 148 | |
| 149 | elif t[0] == "R": | 149 | |
| 150 | out.extend(bytes([t[1]]) * t[2]) | 150 | |
| 151 | else: | 151 | |
| 152 | dist, length = t[1], t[2] | 152 | |
| 153 | if dist <= 0 or dist > len(out): | 153 | |
| 154 | return 999.0 | 154 | |
| 155 | start = len(out) - dist | 155 | |
| 156 | for k in range(length): | 156 | |
| 157 | out.append(out[start + k]) | 157 | |
| 158 | 158 | ||
| 159 | if bytes(out) != raw: | 159 | |
| 160 | return 999.0 | 160 | |
| 161 | 161 | ||
| 162 | original_size = len(data) | 162 | |
| 163 | if original_size == 0: | 163 | |
| 164 | return 0.0 | 164 | |
| 165 | 165 | ||
| 166 | compressed_bits = dp[0] | 166 | |
| 167 | compressed_bytes = (compressed_bits + 7) / 8.0 | 167 | |
| 168 | ratio = compressed_bytes / original_size | 168 | |
| 169 | if ratio < 0: | 169 | |
| 170 | return 999.0 | 170 | |
| 171 | return float(ratio) | 171 | |
| 172 | except: | 172 | |
| 173 | return 999.0 | 173 |
1def solve(input):2 try:3 data = input.get("data", "") if isinstance(input, dict) else ""4 if not isinstance(data, str):5 data = str(data)67 raw = data.encode("utf-8")8 n = len(raw)9 if n == 0:10 return 0.01112 def bits_needed(x):13 return x.bit_length() if x > 0 else 11415 def varint_bits(x):16 return 2 * bits_needed(x)1718 def lit_cost(length):19 return 2 + varint_bits(length) + 8 * length2021 def rle_cost(length):22 return 2 + varint_bits(length) + 82324 def ref_cost(dist, length):25 return 2 + varint_bits(dist) + varint_bits(length)2627 min_match = 428 max_window = min(n, 1 << 15)29 max_chain = 323031 pos_map = {}32 best_len_at = [0] * n33 best_dist_at = [0] * n3435 for i in range(n):36 if i + min_match <= n:37 key = raw[i:i + min_match]38 arr = pos_map.get(key)39 best_len = 040 best_dist = 04142 if arr:43 checked = 044 idx = len(arr) - 145 while idx >= 0 and checked < max_chain:46 p = arr[idx]47 idx -= 148 checked += 149 dist = i - p50 if dist <= 0 or dist > max_window:51 continue5253 lim = n - i54 m = 055 while m < lim and raw[p + (m % dist)] == raw[i + m]:56 m += 15758 if m >= min_match:59 c = ref_cost(dist, m)60 if c < lit_cost(m):61 if m > best_len or (m == best_len and dist < best_dist):62 best_len = m63 best_dist = dist6465 best_len_at[i] = best_len66 best_dist_at[i] = best_dist6768 if arr is None:69 pos_map[key] = [i]70 else:71 arr.append(i)72 cutoff = i - max_window73 while arr and arr[0] < cutoff:74 arr.pop(0)75 if len(arr) > max_chain * 4:76 del arr[:-max_chain * 2]7778 INF = 10**1879 dp = [INF] * (n + 1)80 choice = [None] * (n + 1)81 dp[n] = 08283 for i in range(n - 1, -1, -1):84 b = raw[i]8586 r = i + 187 while r < n and raw[r] == b:88 r += 189 run_len = r - i9091 if run_len >= 3:92 rr = 393 while rr <= run_len:94 c = rle_cost(rr) + dp[i + rr]95 if c < dp[i]:96 dp[i] = c97 choice[i] = ("R", rr)98 rr += 199 c = rle_cost(run_len) + dp[i + run_len]100 if c < dp[i]:101 dp[i] = c102 choice[i] = ("R", run_len)103104 bl = best_len_at[i]105 if bl >= min_match:106 dist = best_dist_at[i]107 lengths = set()108 lengths.add(bl)109 lengths.add(min_match)110 if bl > min_match:111 lengths.add((min_match + bl) // 2)112 for l in lengths:113 if l >= min_match and l <= bl:114 c = ref_cost(dist, l) + dp[i + l]115 if c < dp[i]:116 dp[i] = c117 choice[i] = ("B", dist, l)118119 max_lit = min(64, n - i)120 for l in range(1, max_lit + 1):121 c = lit_cost(l) + dp[i + l]122 if c < dp[i]:123 dp[i] = c124 choice[i] = ("L", l)125126 tokens = []127 i = 0128 while i < n:129 ch = choice[i]130 if ch is None:131 return 999.0132 if ch[0] == "L":133 l = ch[1]134 tokens.append(("L", raw[i:i + l]))135 i += l136 elif ch[0] == "R":137 l = ch[1]138 tokens.append(("R", raw[i], l))139 i += l140 else:141 dist, l = ch[1], ch[2]142 tokens.append(("B", dist, l))143 i += l144145 out = bytearray()146 for t in tokens:147 if t[0] == "L":148 out.extend(t[1])149 elif t[0] == "R":150 out.extend(bytes([t[1]]) * t[2])151 else:152 dist, length = t[1], t[2]153 if dist <= 0 or dist > len(out):154 return 999.0155 start = len(out) - dist156 for k in range(length):157 out.append(out[start + k])158159 if bytes(out) != raw:160 return 999.0161162 original_size = len(data)163 if original_size == 0:164 return 0.0165166 compressed_bits = dp[0]167 compressed_bytes = (compressed_bits + 7) / 8.0168 ratio = compressed_bytes / original_size169 if ratio < 0:170 return 999.0171 return float(ratio)172 except:173 return 999.01def solve(input):2 data = input.get("data", "")3 if not isinstance(data, str) or not data:4 return 999.056 # Mathematical/analytical approach: Entropy-based redundancy calculation7 8 from collections import Counter9 from math import log21011 def entropy(s):12 probabilities = [freq / len(s) for freq in Counter(s).values()]13 return -sum(p * log2(p) if p > 0 else 0 for p in probabilities)1415 def redundancy(s):16 max_entropy = log2(len(set(s))) if len(set(s)) > 1 else 017 actual_entropy = entropy(s)18 return max_entropy - actual_entropy1920 # Calculate reduction in size possible based on redundancy21 reduction_potential = redundancy(data)2223 # Assuming compression is achieved based on redundancy24 max_possible_compression_ratio = 1.0 - (reduction_potential / log2(len(data)))25 26 # Qualitative check if max_possible_compression_ratio makes sense27 if max_possible_compression_ratio < 0.0 or max_possible_compression_ratio > 1.0:28 return 999.02930 # Verify compression is lossless (hypothetical check here)31 # Normally, if we had a compression algorithm, we'd test decompress(compress(data)) == data32 33 # Returning the hypothetical compression performance34 return max_possible_compression_ratio