Solution #8f72c514-156a-4152-b2d9-ec74b3d53b19

completed

Score

100% (5/5)

Runtime

52μs

Delta

+400.0% vs parent

Tied for best

Improved from parent

Solution Lineage

Current100%Improved from parent
9bcd8c5220%Regression from parent
1a8aec0060%Regression from parent
e2a7405b100%Same as parent
9e71593e100%Improved from parent
42ace40a40%Regression from parent
b404991f100%Same as parent
06ab1c25100%Same as parent
52d74aac100%Improved from parent
917a89f120%Regression from parent
f3599802100%Same as parent
6aeac392100%Improved from parent
3edec6f70%Regression from parent
f68f5746100%Same as parent
40369b8a100%Same as parent
f9d7018b100%Same as parent
5a4f6922100%Same as parent
15ec7bd1100%Same as parent
76aeaf5e100%Improved from parent
4b16e42760%Regression from parent
fd0fb3a5100%Same as parent
4911088c100%Same as parent
68ce1629100%Same as parent
2d8382ce100%Same as parent
62c233ed100%Same as parent
82a9952b100%Same as parent
b513de2d100%Same as parent
8607bb8f100%Same as parent
96012705100%Same as parent
21d15e87100%Same as parent
9a277008100%Improved from parent
1b2fa39920%Regression from parent
98fd02a3100%Same as parent
ae4d0f99100%Same as parent
6126deee100%Same as parent
d720f0bf100%Same as parent
7e637902100%Same as parent
29bbc470100%Same as parent
268b5b53100%Same as parent
ffe6e932100%Same as parent
bb8a4da9100%Same as parent
0d32fca6100%Same as parent
195f1ac7100%Same as parent
96773990100%Same as parent
d7adae63100%Same as parent
8cb031c4100%Same as parent
0826d84e100%Same as parent
2da814bd100%Same as parent
e227904f100%Same as parent
69696638100%Same as parent
c128503d100%Same as parent
9e0f203b100%Same as parent
30447971100%Same as parent
62082b2d100%Same as parent
2a708353100%Same as parent
a0f415b0100%First in chain

Code

def solve(input):
    text = input.get("text", "")
    n = len(text)
    if n == 0:
        return {"encoded_length": 0, "decoded": ""}

    def count_dc(s):
        ln = len(s)
        if ln <= 32:
            d = {}
            for ch in s:
                d[ch] = d.get(ch, 0) + 1
            return d
        mid = ln >> 1
        left = count_dc(s[:mid])
        right = count_dc(s[mid:])
        if len(left) < len(right):
            left, right = right, left
        for ch, c in right.items():
            left[ch] = left.get(ch, 0) + c
        return left

    counts = count_dc(text)
    vals = sorted(counts.values())
    m = len(vals)

    if m == 1:
        return {"encoded_length": n, "decoded": text}

    q = vals + [0] * (m - 1)
    i = 0
    j = m
    end = m
    total = 0

    for _ in range(m - 1):
        if i < m and (j >= end or q[i] <= q[j]):
            a = q[i]
            i += 1
        else:
            a = q[j]
            j += 1

        if i < m and (j >= end or q[i] <= q[j]):
            b = q[i]
            i += 1
        else:
            b = q[j]
            j += 1

        s = a + b
        total += s
        q[end] = s
        end += 1

    return {"encoded_length": total, "decoded": text}

Compare with Champion

Score Difference

Tied

Runtime Advantage

28μs slower

Code Size

56 vs 46 lines

#Your Solution#Champion
1def solve(input):1def 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": ""}
66
7 def count_dc(s):7 counts = {}
8 ln = len(s)8 get = counts.get
9 if ln <= 32:9 for ch in text:
10 d = {}10 counts[ch] = get(ch, 0) + 1
11 for ch in s:11
12 d[ch] = d.get(ch, 0) + 112 freqs = list(counts.values())
13 return d13 m = len(freqs)
14 mid = ln >> 114
15 left = count_dc(s[:mid])15 if m == 1:
16 right = count_dc(s[mid:])16 return {"encoded_length": n, "decoded": text}
17 if len(left) < len(right):17
18 left, right = right, left18 freqs.sort()
19 for ch, c in right.items():19
20 left[ch] = left.get(ch, 0) + c20 # Bottom-up two-queue Huffman merge:
21 return left21 # use freqs as first queue and merged as second queue.
2222 merged = [0] * (m - 1)
23 counts = count_dc(text)23 i = j = k = 0
24 vals = sorted(counts.values())24 total = 0
25 m = len(vals)25
2626 while k < m - 1:
27 if m == 1:27 if i < m and (j >= k or freqs[i] <= merged[j]):
28 return {"encoded_length": n, "decoded": text}28 a = freqs[i]
2929 i += 1
30 q = vals + [0] * (m - 1)30 else:
31 i = 031 a = merged[j]
32 j = m32 j += 1
33 end = m33
34 total = 034 if i < m and (j >= k or freqs[i] <= merged[j]):
3535 b = freqs[i]
36 for _ in range(m - 1):36 i += 1
37 if i < m and (j >= end or q[i] <= q[j]):37 else:
38 a = q[i]38 b = merged[j]
39 i += 139 j += 1
40 else:40
41 a = q[j]41 s = a + b
42 j += 142 merged[k] = s
4343 total += s
44 if i < m and (j >= end or q[i] <= q[j]):44 k += 1
45 b = q[i]45
46 i += 146 return {"encoded_length": total, "decoded": text}
47 else:47
48 b = q[j]48
49 j += 149
5050
51 s = a + b51
52 total += s52
53 q[end] = s53
54 end += 154
5555
56 return {"encoded_length": total, "decoded": text}56
Your Solution
100% (5/5)52μs
1def solve(input):
2 text = input.get("text", "")
3 n = len(text)
4 if n == 0:
5 return {"encoded_length": 0, "decoded": ""}
6
7 def count_dc(s):
8 ln = len(s)
9 if ln <= 32:
10 d = {}
11 for ch in s:
12 d[ch] = d.get(ch, 0) + 1
13 return d
14 mid = ln >> 1
15 left = count_dc(s[:mid])
16 right = count_dc(s[mid:])
17 if len(left) < len(right):
18 left, right = right, left
19 for ch, c in right.items():
20 left[ch] = left.get(ch, 0) + c
21 return left
22
23 counts = count_dc(text)
24 vals = sorted(counts.values())
25 m = len(vals)
26
27 if m == 1:
28 return {"encoded_length": n, "decoded": text}
29
30 q = vals + [0] * (m - 1)
31 i = 0
32 j = m
33 end = m
34 total = 0
35
36 for _ in range(m - 1):
37 if i < m and (j >= end or q[i] <= q[j]):
38 a = q[i]
39 i += 1
40 else:
41 a = q[j]
42 j += 1
43
44 if i < m and (j >= end or q[i] <= q[j]):
45 b = q[i]
46 i += 1
47 else:
48 b = q[j]
49 j += 1
50
51 s = a + b
52 total += s
53 q[end] = s
54 end += 1
55
56 return {"encoded_length": total, "decoded": text}
Champion
100% (5/5)24μs
1def solve(input):
2 text = input.get("text", "")
3 n = len(text)
4 if n == 0:
5 return {"encoded_length": 0, "decoded": ""}
6
7 counts = {}
8 get = counts.get
9 for ch in text:
10 counts[ch] = get(ch, 0) + 1
11
12 freqs = list(counts.values())
13 m = len(freqs)
14
15 if m == 1:
16 return {"encoded_length": n, "decoded": text}
17
18 freqs.sort()
19
20 # 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 = 0
24 total = 0
25
26 while k < m - 1:
27 if i < m and (j >= k or freqs[i] <= merged[j]):
28 a = freqs[i]
29 i += 1
30 else:
31 a = merged[j]
32 j += 1
33
34 if i < m and (j >= k or freqs[i] <= merged[j]):
35 b = freqs[i]
36 i += 1
37 else:
38 b = merged[j]
39 j += 1
40
41 s = a + b
42 merged[k] = s
43 total += s
44 k += 1
45
46 return {"encoded_length": total, "decoded": text}