roiti46's blog

主に競プロ問題の解説を載せてます

Unkoder #05 A: Print Cuboid

HackerRankで開催されたUnkoder #05に参加。A,B,Dの3問をACできたのでとりあえず満足。

問題はこちらから

問題

幅W, 高さH, 奥行きD の直方体を出力せよ。

解法

地道に実装するしかない。
文字列配列を抱えてその中身を書き換えていくと多少実装が容易になるかもしれない。

W, H, D = map(int, raw_input().split())

A = [[" "] * (3 + W + D) for i in xrange(3 + H + D)]

A[0][D + 1] = A[0][-1] = A[1 + H][-1] = "+"
for i in xrange(1, 1 + H):
    A[i][-1] = "|"

for i in xrange(1 + D, 1 + D + W):
    A[0][i + 1] = "-"

for i in xrange(2 + D, 2 + D + H):
    A[i][0] = A[i][W + 1] = "|"

A[1 + D][0] = A[-1][0] = A[1 + D][1 + W] = A[-1][1 + W] = "+"
for i in xrange(1, W + 1):
    A[1 + D][i] = A[-1][i] = "-"

for i in xrange(D):
    A[D - i][1 + i] = A[D - i][1 + i + W + 1] = "/"
    A[-2 - i][2 + W + i] = "/"

for line in A:
    print "".join(line)
    

まとめ

汚いコードだ・・・