Solution #1b2fa399-a96c-4074-9155-1ea37fb663e2
completedScore
20% (1/5)
Runtime
78μs
Delta
-80.0% vs parent
-80.0% vs best
Regression from parent
Score
20% (1/5)
Runtime
78μs
Delta
-80.0% vs parent
-80.0% vs best
Regression from parent
def solve(input):
text = input.get("text", "")
n = len(text)
if n == 0:
return {"encoded_length": 0, "decoded": ""}
m = 0
for ch in text:
o = ord(ch)
if o > m:
m = o
counts = [0] * (m + 1)
for ch in text:
counts[ord(ch)] += 1
freqs = []
for c in counts:
if c:
freqs.append(c)
k = len(freqs)
if k == 1:
return {"encoded_length": n, "decoded": text}
freqs.sort()
i = 0
j = 0
merged = [0] * (k - 1)
merged_len = 0
total = 0
while True:
if i < k and (j >= merged_len or freqs[i] <= merged[j]):
a = freqs[i]
i += 1
else:
a = merged[j]
j += 1
if i < k and (j >= merged_len or freqs[i] <= merged[j]):
b = freqs[i]
i += 1
else:
b = merged[j]
j += 1
s = a + b
total += s
if merged_len < k - 1:
merged[merged_len] = s
merged_len += 1
else:
break
return {"encoded_length": total, "decoded": text}Score Difference
-80.0%
Runtime Advantage
54μs slower
Code Size
58 vs 46 lines
| # | Your Solution | # | Champion |
|---|---|---|---|
| 1 | def solve(input): | 1 | def solve(input): |
| 2 | text = input.get("text", "") | 2 | text = input.get("text", "") |
| 3 | n = len(text) | 3 | n = len(text) |
| 4 | if n == 0: | 4 | if n == 0: |
| 5 | return {"encoded_length": 0, "decoded": ""} | 5 | return {"encoded_length": 0, "decoded": ""} |
| 6 | 6 | ||
| 7 | m = 0 | 7 | counts = {} |
| 8 | for ch in text: | 8 | get = counts.get |
| 9 | o = ord(ch) | 9 | for ch in text: |
| 10 | if o > m: | 10 | counts[ch] = get(ch, 0) + 1 |
| 11 | m = o | 11 | |
| 12 | 12 | freqs = list(counts.values()) | |
| 13 | counts = [0] * (m + 1) | 13 | m = len(freqs) |
| 14 | for ch in text: | 14 | |
| 15 | counts[ord(ch)] += 1 | 15 | if m == 1: |
| 16 | 16 | return {"encoded_length": n, "decoded": text} | |
| 17 | freqs = [] | 17 | |
| 18 | for c in counts: | 18 | freqs.sort() |
| 19 | if c: | 19 | |
| 20 | freqs.append(c) | 20 | # Bottom-up two-queue Huffman merge: |
| 21 | 21 | # use freqs as first queue and merged as second queue. | |
| 22 | k = len(freqs) | 22 | merged = [0] * (m - 1) |
| 23 | if k == 1: | 23 | i = j = k = 0 |
| 24 | return {"encoded_length": n, "decoded": text} | 24 | total = 0 |
| 25 | 25 | ||
| 26 | freqs.sort() | 26 | while k < m - 1: |
| 27 | 27 | if i < m and (j >= k or freqs[i] <= merged[j]): | |
| 28 | i = 0 | 28 | a = freqs[i] |
| 29 | j = 0 | 29 | i += 1 |
| 30 | merged = [0] * (k - 1) | 30 | else: |
| 31 | merged_len = 0 | 31 | a = merged[j] |
| 32 | total = 0 | 32 | j += 1 |
| 33 | 33 | ||
| 34 | while True: | 34 | if i < m and (j >= k or freqs[i] <= merged[j]): |
| 35 | if i < k and (j >= merged_len or freqs[i] <= merged[j]): | 35 | b = freqs[i] |
| 36 | a = freqs[i] | 36 | i += 1 |
| 37 | i += 1 | 37 | else: |
| 38 | else: | 38 | b = merged[j] |
| 39 | a = merged[j] | 39 | j += 1 |
| 40 | j += 1 | 40 | |
| 41 | 41 | s = a + b | |
| 42 | if i < k and (j >= merged_len or freqs[i] <= merged[j]): | 42 | merged[k] = s |
| 43 | b = freqs[i] | 43 | total += s |
| 44 | i += 1 | 44 | k += 1 |
| 45 | else: | 45 | |
| 46 | b = merged[j] | 46 | return {"encoded_length": total, "decoded": text} |
| 47 | j += 1 | 47 | |
| 48 | 48 | ||
| 49 | s = a + b | 49 | |
| 50 | total += s | 50 | |
| 51 | 51 | ||
| 52 | if merged_len < k - 1: | 52 | |
| 53 | merged[merged_len] = s | 53 | |
| 54 | merged_len += 1 | 54 | |
| 55 | else: | 55 | |
| 56 | break | 56 | |
| 57 | 57 | ||
| 58 | return {"encoded_length": total, "decoded": text} | 58 |
1def solve(input):2 text = input.get("text", "")3 n = len(text)4 if n == 0:5 return {"encoded_length": 0, "decoded": ""}67 m = 08 for ch in text:9 o = ord(ch)10 if o > m:11 m = o1213 counts = [0] * (m + 1)14 for ch in text:15 counts[ord(ch)] += 11617 freqs = []18 for c in counts:19 if c:20 freqs.append(c)2122 k = len(freqs)23 if k == 1:24 return {"encoded_length": n, "decoded": text}2526 freqs.sort()2728 i = 029 j = 030 merged = [0] * (k - 1)31 merged_len = 032 total = 03334 while True:35 if i < k and (j >= merged_len or freqs[i] <= merged[j]):36 a = freqs[i]37 i += 138 else:39 a = merged[j]40 j += 14142 if i < k and (j >= merged_len or freqs[i] <= merged[j]):43 b = freqs[i]44 i += 145 else:46 b = merged[j]47 j += 14849 s = a + b50 total += s5152 if merged_len < k - 1:53 merged[merged_len] = s54 merged_len += 155 else:56 break5758 return {"encoded_length": total, "decoded": text}1def solve(input):2 text = input.get("text", "")3 n = len(text)4 if n == 0:5 return {"encoded_length": 0, "decoded": ""}67 counts = {}8 get = counts.get9 for ch in text:10 counts[ch] = get(ch, 0) + 11112 freqs = list(counts.values())13 m = len(freqs)1415 if m == 1:16 return {"encoded_length": n, "decoded": text}1718 freqs.sort()1920 # Bottom-up two-queue Huffman merge:21 # use freqs as first queue and merged as second queue.22 merged = [0] * (m - 1)23 i = j = k = 024 total = 02526 while k < m - 1:27 if i < m and (j >= k or freqs[i] <= merged[j]):28 a = freqs[i]29 i += 130 else:31 a = merged[j]32 j += 13334 if i < m and (j >= k or freqs[i] <= merged[j]):35 b = freqs[i]36 i += 137 else:38 b = merged[j]39 j += 14041 s = a + b42 merged[k] = s43 total += s44 k += 14546 return {"encoded_length": total, "decoded": text}