読者です 読者をやめる 読者になる 読者になる

こんなのかんたんタンザニア

Change the a sentence to another sentence, letter by letter.

The sentences will always have the same length.

redditのurlが貼れないんで詳細は問題文からググってください(はてな*ねって感じですね)。別に難しい問題じゃないですが、気持ちひとひねりあったんで文章にしたのよ。

最初はこんな感じで書いた。

def letter_by_letter(a, b):
    length = len(a)
    for i in range(length+1):
        print("%s%s" % (b[:i], a[i:]))

で、これ動かしてみると期待されるoutputと違うんっすよね。具体的にはoutput2がコケる。

上のコードだと入力letter_by_letter("wood", "book")に対して次のような表示。

wood
bood
bood
bood
book

期待されるのは以下。

wood
bood
book

boodが2回余計なんですね。なんでリストをgroupingしてから頭を切り取る感じで行きます。

from itertools import groupby


def letter_by_letter(a, b):
    length = len(a)
    xs = ["%s%s" % (b[:i], a[i:]) for i in range(length+1)]
    [print(list(g)[0]) for _, g in groupby(xs)]

ちなみに文字を比較するだけの知性があれば次のように書けばいい話です。

def letter_by_letter(a, b):
    length = len(a)
    print(a)
    for i in range(length):
        if(a[i] != b[i]):
            print("%s%s" % (b[:i+1], a[i+1:]))