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

東大理三生のプログラミング奮闘記

初心者プログラマーが半年間でどれだけ成長するか!についてのブログです。勉強方法とか使った本とかについて書いていくと思います!プログラミングをもっと身近に感じてもらえたら嬉しいです!毎日更新を目指します!

ABC #055 を python で解いてみた!

python3

おはようございます。

朝の準備体操に、AtCoderの#055の D問題をときました。
D: Menagerie - AtCoder Beginner Contest 055 | AtCoder


D問題が解けるようになってきたので、楽しくなってきました!!

でも、よくない傾向なのは、最近はDjangoが少し辛くなってきていて、AtCoderの問題を解く方に逃げてしまうことなんですよね..
朝と晩に1題ずつ解くことにして、その他はDjangoに時間を回すようにしようかな。


問題D

from copy import deepcopy

print("--入力--")

N = int(input())
statement_first = input()
statement = statement_first + statement_first[:2]

animal_arrange = [["S", "S"], ["S", "W"], ["W", "S"], ["W", "W"]]
animal_final_arrange = []

for animal_pattern in animal_arrange:
    i = 0
    while i <= N:
        if animal_pattern[i:] == ["S", "S"]:
            if statement[i+1] == "o":
                animal_pattern.append("S")
            elif statement[i+1] == "x":
                animal_pattern.append("W")
        elif animal_pattern[i:] == ["S", "W"]:
            if statement[i+1] == "o":
                animal_pattern.append("W")
            elif statement[i+1] == "x":
                animal_pattern.append("S")
        elif animal_pattern[i:] == ["W", "S"]:
            if statement[i+1] == "o":
                animal_pattern.append("W")
            elif statement[i+1] == "x":
                animal_pattern.append("S")
        elif animal_pattern[i:] == ["W", "W"]:
            if statement[i+1] == "o":
                animal_pattern.append("S")
            elif statement[i+1] == "x":
                animal_pattern.append("W")
        i += 1
    animal_final_arrange.append(animal_pattern)

animal_final_arrange_copy = deepcopy(animal_final_arrange)
print("--出力--")

counter = 0
for animal_arrange in animal_final_arrange_copy:
    if animal_arrange[:2] == animal_arrange[N: N+2]:
        animal = ""
        for animal_string in animal_arrange[:N]:
            animal += animal_string
        print(animal)
    else:
        counter += 1

if counter == len(animal_final_arrange):
    print(-1)

冗長になってる気もしますが、whileで回しているので輪っかの最後の方は複製せざるを得ませんでした。
他にうまいやり方があるのかな...

それはともかく、一応は正しく動きます。
条件を満たすものが全通り出力されるようにしてます。

〜Test〜
f:id:gragragrao:20170228093526p:plain

うまくいっていますね〜

それでは!