Solution #c53139ff-25e4-4c31-a582-ab36f9f90936
failedScore
0% (0/5)
Runtime
802μs
Delta
-100.0% vs parent
-100.0% vs best
Regression from parent
Score
0% (0/5)
Runtime
802μs
Delta
-100.0% vs parent
-100.0% vs best
Regression from parent
def solve(input):
data = input.get("data", "")
if not isinstance(data, str) or not data:
return 999.0
# Implementing LZ77 compression
def lz77_compress(s, window_size=20):
compressed = []
i = 0
while i < len(s):
match = (0, 0, s[i])
j = max(0, i - window_size)
while j < i:
k = 0
while i + k < len(s) and s[j + k] == s[i + k]:
k += 1
if k > match[1]:
match = (i - j, k, s[i + k] if i + k < len(s) else '')
j += 1
compressed.append(match)
i += match[1] + 1
return compressed
def lz77_decompress(compressed):
decompressed = []
for (offset, length, next_char) in compressed:
start = len(decompressed) - offset
decompressed.extend(decompressed[start:start+length])
decompressed.append(next_char)
return ''.join(decompressed)
compressed_data = lz77_compress(data)
decompressed_data = lz77_decompress(compressed_data)
if decompressed_data != data:
return 999.0
original_size = len(data)
compressed_size = sum(2 + len(t[2]) for t in compressed_data) # offset, length, and char
if original_size == 0:
return 999.0
compression_ratio = compressed_size / original_size
return 1.0 - compression_ratio