🐥
Codejam2022 QR: Punched Cards
問題
次の様なAscii Art(Punched Cards)を作成したい。左上を除く(RxC)-1個のセルは、真ん中にperiod、上下はdash、左右はpipeで、コーナーはplusとして表す。RとCが与えられた時のPunched Cardsを出力する。
..+-+-+-+
..|.|.|.|
+-+-+-+-+
|.|.|.|.|
+-+-+-+-+
|.|.|.|.|
+-+-+-+-+
実装
Ascii Artにした時の行数と列数は2R+1と2C+1。それぞれの位置に現れる記号は決まっているので、条件に合うものを描画する(drawの中)。最後に、各列を連結して、行単位で出力する。
def draw(r, c):
if r <= 1 and c <= 1:
return '.'
elif r % 2 == 0 and c % 2 == 0:
return '+'
elif r % 2 != 0 and c % 2 == 0:
return '|'
elif r % 2 == 0 and c % 2 != 0:
return '-'
else:
return '.'
T = int(input())
for t in range(1, T + 1):
R, C = list(map(int, input().split()))
ret = [[''] * (2*C + 1) for _ in range(2*R+1)]
for r in range(2*R+1):
for c in range(2*C+1):
ret[r][c] = draw(r, c)
print('Case #{}:'.format(t))
for r in range(2*R+1):
print(''.join(ret[r]))
Discussion