LoginSignup
1
0

More than 5 years have passed since last update.

CodeIQ「進捗ジエンドマーク」に参加しました。

Posted at

CodeIQ「進捗ジエンドマーク」の公開期限が終了したということで、自分の解答をさらしてみたいと思います(´・ω・`) なおCodeIQはそのサービスの性質上、解答の公開は原則禁止ですが、本問については出題者の@tbpgrさんの許可のもと、解答を公開しています。

さて「進捗ジエンドマーク」はおおよそ以下のような問題でした。

  • 標準入力から1から100までの整数が与えられる。これをnとする。
  • nが偶数の場合はinvalidを標準出力に出力する。
  • nが奇数の場合は「進捗ジエンドマーク」を出力する。
    • n×nの正方形に半角小文字のjでJを描く。
      • 右辺と下辺はすべてjで埋める。
      • 左辺は下半分をすべてjで埋める。
      • 残りはすべて.で埋める。
    • 具体例は以下のtestメソッドを参照。

解答コードは以下の通り。言語は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()

参考:

1
0
0

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
0