KATOエンジニヤリング開発日誌

「アウトプット無きエンジニアにインプットもチャンスも無い」の精神で書いています

CodeIQの「進捗いいわけマーク」解答

CodeIQの「進捗いいわけマーク」を解いたので、私が作成したコードを晒します。

12月21日の10時に回答締切なので、ネタバレを避けるためそれ以降に投稿しています。

www.kato-eng.info

設問

「進捗いいわけマーク」は高さ X 幅 X の正方形の中に I のカタチをした文字を半角小文字の「i」で描きます。
すべての行の真ん中は「i」です。
1行目と最後の行については、真ん中の両隣の列を「i」にします。
それ以外を半角ドット「.」にします。

例1:高さ1幅1の進捗いいわけマーク

i

例2:高さ3幅3の進捗いいわけマーク

iii
.i.
iii

例3:高さ5幅5の進捗いいわけマーク

.iii.
..i..
..i..
..i..
.iii.

仕様

  • 標準入力として1から100の整数が与えられる。
  • 標準入力の数字が奇数の場合には「進捗いいわけマーク」を出力する。
  • 標準入力の数字が偶数の場合には「invalid」を出力する。

解答

言語はPython3を選択しました。

# coding: utf-8

def print_i(row_count, dush_flg):
    harf_point = row_count // 2
    return_line = [dot for dot in ("." * row_count)]
    if dush_flg:
        return_line[harf_point - 1] = "i"
        return_line[harf_point + 1] = "i"
    return_line[harf_point] = "i"
    return "".join(return_line)


row_count = int(input())

if row_count % 2 == 0:
    print("invalid")
elif row_count == 1:
    print("i")
else:
    first_low = 0
    last_low = row_count - 1

    for low in range(row_count):
        if low in (first_low, last_low):
            row_word = print_i(row_count, True)
        else:
            row_word = print_i(row_count, False)
        print(row_word)