名もなき未知

エンジニアリングとか、日常とかそういうのをまとめる場所。アクセス解析のためGAを利用、Googleに情報を送信しています。商品紹介のためAmazonアフィリエイトを利用、Amazonに情報を送信しています。記事に関しては私が書いていない引用文を除いて自由にご利用ください。

進捗ないですマークの回答(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で解いたりしようかな。

余談

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