1
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

Pythonで競プロに挑む日誌 vol.10 ~文字列調査~

Last updated at Posted at 2018-09-14

ABC の A, B 問題をコツコツ解く日々.
油断すると A 問題に足元をすくわれる.

現在の目標

  • 今年の10月内に茶色を取得する
  • ABS の問題を全部解く (完了)
  • ABC の A, B 問題を全部解く←イマココ
  • 年内に緑色を取得する
  • ABC の C, D 問題を全部解く
  • APG4b で C++ にも手を出す

#今日の問題
ABC003B - AtCoderトランプ
https://beta.atcoder.jp/contests/abc003/tasks/abc003_2

結果

answer1.py
#coding: utf-8
import sys
 
S = input()
T = input()
lis_str = ["a", "t", "c", "o", "d", "e", "r"]
 
for i in range(len(S)):
    if S[i] == T[i]:
        continue
    elif (S[i]=="@") and (T[i] in lis_str):
        continue
    elif (T[i]=="@") and (S[i] in lis_str):
        continue
    else:
        print("You will lose")
        sys.exit()
print("You can win")

# 実行時間:17 ms
# メモリ :3064 KB
# コード長:383 Byte
# 得点  :100/100

解けるには解けました. いつものようにほかの人の解答を参照したら, やはりもっとスマートな方法がありました.

answer2.py
#coding: utf-8
S = input()
T = input()
ans = 'You can win'
for a,b in zip(S,T):
    if a!=b and a+b not in ('@a@t@c@o@d@e@r@'):
        ans = 'You will lose'
        break
print(ans)

# 実行時間:19 ms
# メモリ :2940 KB
# コード長:192 Byte
# 得点  :100/100

なるほど, と思ったポイントは下記3点.

  • zip の使い方
  • 特定の条件時に ans を上書きするという発想
  • "if a!=b and a+b not in ('@a@t@c@o@d@e@r@'):"

1つ目の zip は今後も使えそうですね.

2つ目の書き方は好みの問題かもしれませんが, 条件式が減らせるかもしれないので覚えておきます.

そして最後の判定は, 思いついたら気持ちよさそうですね. S と T から一文字ずつ抜き出して, 「@ + "atcoder" のいずれかの文字」になっている, もしくは, 「"atcoder" のいずれかの文字 + @」になってるかどうかは、たしかにこれで調べられますね.

うーむ, 道のりは長い. けど, 前向きにがんばろう.

#明日やること

  • ABC を解き続ける.
1
2
4

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?