CodeIQ「進捗ジエンドマーク」の公開期限が終了したということで、自分の解答をさらしてみたいと思います(´・ω・`) なおCodeIQはそのサービスの性質上、解答の公開は原則禁止ですが、本問については出題者の@tbpgrさんの許可のもと、解答を公開しています。
さて「進捗ジエンドマーク」はおおよそ以下のような問題でした。
- 標準入力から1から100までの整数が与えられる。これをnとする。
- nが偶数の場合はinvalidを標準出力に出力する。
- nが奇数の場合は「進捗ジエンドマーク」を出力する。
- n×nの正方形に半角小文字のjでJを描く。
- 右辺と下辺はすべてjで埋める。
- 左辺は下半分をすべてjで埋める。
- 残りはすべて.で埋める。
- 具体例は以下の
test
メソッドを参照。
- n×nの正方形に半角小文字のjでJを描く。
解答コードは以下の通り。言語はPython3で一発合格でした(`・ω・´)シャキーン 実際のビジネスロジック(?)よりもテスト用のコードのほうが長くなってしまったのは内緒。よいこのみんなはきちんとunittestを使いましょう…。
def draw(n):
if n % 2 == 0:
return 'invalid'
matrix = [['.' for _ in range(n)] for _ in range(n)]
for i in range(n):
matrix[n - 1][i] = matrix[i][n - 1] = 'j'
for i in range(n // 2 + 1, n):
matrix[i][0] = 'j'
return '\n'.join(''.join(row) for row in matrix)
def test():
expects = {
1 : 'j',
2 : 'invalid',
3 : """
..j
..j
jjj
""",
5 : """
....j
....j
....j
j...j
jjjjj
"""
}
for n in expects:
expected = expects[n].replace(' ', '').strip()
actual = draw(n)
assert expected == actual, 'expected: {0}, actual: {1}'.format(expected, actual)
if __name__ == '__main__':
n = int(input())
print(draw(n))
# test()
参考: