はじめに
ある有名Web系会社のエンジニア採用担当者の方が競技プログラミングに挑戦し、採用候補のエンジニアはもちろん、社内のエンジニアとのコミュニケーションに活用している事例を読み、刺激を受けて始めた競技プログラミング。
採用の仕事から離れたものの今もIT企業に勤務しており、プログラミングの重要性は今後一層増すだろう、ということで参加を継続している(使用言語はPython)。ぶっつけで参加して終わりになっていて積み重ねがない状態だったため実力向上をねらい復習。
ABC212 復習
問題
自分の誤答
# -*- coding: utf-8 -*-
X = list(input())
s = 0
for i in range(4):
X[i] = int(X[i])
if X[0]==X[1] & X[1]==X[2] & X[2]==X[3]:
print("Weak")
exit()
for i in range(2):
if s == 0:
if X[i]==9:
if X[i+1]==0:
s = 0
else:
s = 1
break
elif X[i+1] == X[i]+1:
s = 0
else:
s = 1
break
if s==0:
print("Weak")
else:
print("Strong")
学び・気づき
敗因
- 問題文を最初の3桁が連続していることを指すと誤解した(正しくは4桁が連続していることを指す)。
-
9015
をStrong
と判定すべきところを、Weak
と判定
-
1≤i≤3 をみたす任意の整数 iについて、 X_i+1 が、X_i の次の数字である。
模範解答からの学び
- 変数宣言のときにカンマで並べて複数の変数に対して複数の値を代入できる1
- 「
X_i+1
が、X_i
の次の数字である。 ただし、0≤j≤8
についてj
の次の数字はj+1
、9
の次の数字は0
」は以下のように表現できる
(int(X[i])+1)%10 = int(X[i+1])
まとめ
ABC212の復習を実施。クリアできなかった原因は問題文の誤解とわかった。悲しい