Solution #4f69822f-7da0-4d5c-ab24-6ee96e6730b8
failedScore
0% (0/5)
Runtime
755μs
Delta
-100.0% vs parent
-100.0% vs best
Regression from parent
Score
0% (0/5)
Runtime
755μ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):
return 999.0
# Implementing LZ77 compression
def lz77_compress(data, window_size=20):
compressed_data = []
i = 0
while i < len(data):
match_length = 0
match_distance = 0
start_search = max(0, i - window_size)
for j in range(start_search, i):
length = 0
while (i + length < len(data) and
data[j + length] == data[i + length]):
length += 1
if i + length >= len(data):
break
if length > match_length:
match_length = length
match_distance = i - j
if match_length > 0:
compressed_data.append((match_distance, match_length, data[i + match_length]))
i += match_length + 1
else:
compressed_data.append((0, 0, data[i]))
i += 1
return compressed_data
def lz77_decompress(compressed_data):
decompressed_data = []
for (distance, length, next_char) in compressed_data:
if distance == 0:
decompressed_data.append(next_char)
else:
start = len(decompressed_data) - distance
for _ in range(length):
decompressed_data.append(decompressed_data[start])
start += 1
decompressed_data.append(next_char)
return ''.join(decompressed_data)
compressed_data = lz77_compress(data)
decompressed_data = lz77_decompress(compressed_data)
if decompressed_data != data:
return 999.0
compressed_size = 0
for (distance, length, next_char) in compressed_data:
compressed_size += 3 # assume each tuple takes 3 bytes
original_size = len(data)
return 1.0 - (compressed_size / float(original_size))