水面下の夢

競プロやイラストに興味があります.メインブログがここ.同人サークル「かのらぶ」のページはこっち( https://yumechi0525.amebaownd.com ).ブログアイコンはYaQ(@8_9_00)さんから.

進捗ないですマークの回答(Python3)

回答期限を過ぎましたので、公開いたします。

このシリーズ、毎回手慣らしで解いてる気がする。

進捗ないですマーク

問題の要約

入力値nが奇数のとき、Nを描くような出力をすること。偶数の場合は無理ですといえば良い。

回答方針

Nを書く際に塗りつぶされるマスは両端と、各入力項目についてi番目となるものになるため、i行目について、array[i][0], array[i][i], array[i][n-1] がそれぞれnとなれば良い。

割りときれいに書ける。Pythonは文字列をインデックスアクセスして置き換えることが出来ないため、ilstで持つ必要がある点に注意。つまり、ansの初期化で、["." * n for _ in range(n)] はNGで、[["." for _ in range(n)] for _ in range(n)] はOKとなる。

def solve():
    n = int(input())
    if n % 2 == 0:
        print("invalid")
        return
    ans = [["." for _ in range(n)] for _ in range(n)]
    for i in range(n):
        ans[i][0] = ans[i][-1] = ans[i][i] = "n"
    for e in ans:
        print("".join(e))


if __name__ == "__main__":
    solve()

感想

これ初心者向けにちょうどいいかもなーと思い始めたので、まず競技プログラミングに興味持ってくれた人とか、コーディングスキル試験対策したい人とかにおすすめするべきでは?と思い始めた。あとPythonばっかり書いてないで、Rubyで解いたりしようかな。

余談

ついでに解いた文字列のパースの問題が若干辛かった。 興味がある方は、ソースコードからコメントを抽出しよう やってみてください。