• home
  • about
  • 全ての投稿
  • ソフトウェア・ハードウェアの設定のまとめ
  • 分析関連のまとめ
  • ヘルスケア関連のまとめ
  • 生涯学習関連のまとめ

ラングレス圧縮

date: 2021-08-10 excerpt: ラングレス圧縮について

tag: algorithmラングレス圧縮


ラングレス圧縮について

  • 符号を連続して出現する回数をカウントして、その符号 * 回数で表現する圧縮方式

具体例

import itertools
S = "ooxxoooxxxxxo"

res = []
for k, gi in itertools.groupby(S, key=lambda x:x[0]):
    res.append(k)
    res.append(len(list(gi)))
print(res)

結果

['o', 2, 'x', 2, 'o', 3, 'x', 5, 'o', 1]

例; ラングレス圧縮の結果を用いて結果を得る

問題

  • AtCoder Beginner Contest 136; D - Gathering Children

提出

import itertools
S = input()

l = []
for k, gi in itertools.groupby(S):
    l.append( (k, len(list(gi))) )
ans = [0] * len(S)
pos = 0
for k, ln in l:
    if k == "R":
        for i in range(ln):
            if i%2 == 0:
                ans[pos+ln-1] += 1
            else:
                ans[pos+ln] += 1
    if k == "L":
        for i in range(ln):
            if i%2 == 0:
                ans[pos] += 1
            else:
                ans[pos-1] += 1
    pos += ln
print(*ans, sep=" ")


algorithmラングレス圧縮 Share Tweet