1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

paizaラーニング問題集「【マップの扱い 4】マップのナンバリング」を解いてみた

Posted at

▼考え方

ポイントになる考え方1.~3.を以下に示します。

1.マップのナンバリングは関数numberingで行います。引数はDです。

2.ナンバリングの向きDに応じて、各種変数を定めます。

3.ナンバリングがされている(if)ならば次のループへ、ナンバリングされていない(else)ならばナンバリングします。

▼コード

# 考え方1.
def numbering(D):

    # a:次にナンバリングするマスの座標に移動するために、増加させる変数
    # number:マップにナンバリングする数
    a = 0
    number = 1

    # 考え方2.
    if D==1:
        # s1,s2:WあるいはH
        # th:添え字(k1,k2)がマップの範囲内に存在する条件
        # y:ナンバリングするマスのy座標
        # x:ナンバリングするマスのx座標
        s1 = W
        s2 = H
        th = "k2-a>=0 and k1+a<W"
        y = "k2-a"
        x = "k1+a"

    if D==2:
        s1 = W
        s2 = H
        th = "k1+a<W"
        y = "k2"
        x = "k1+a"

    if D==3:
        s1 = W
        s2 = H
        th = "k2+a<H"
        y = "k2+a"
        x = "k1"

    if D==4:
        s1 = H
        s2 = W
        th = "k1+a<H and k2-a>=0"
        y = "k1+a"
        x = "k2-a"

    for k1 in range(s1):
        for k2 in range(s2):
            while eval(th):
                # 考え方3.
                if N[eval(y)][eval(x)]!=0:
                    break
                else:
                    N[eval(y)][eval(x)] = number
                    number += 1
                    a += 1
            a = 0
    
    for j in range(H):
        print(*N[j],sep=' ')

########## 処理0(準備) インプット,リスト定義 ###########

H,W,D = map(int,input().split())

# N:ナンバリング用リスト
N = [[0 for i in range(W)] for j in range(H)]

########## 処理1 マップのナンバリング、マップの出力 ###########

numbering(D)
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

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?