Ecote-Bam(実施)


蛇。


質問する


「Dummy」というドスゲームがありましたこのゲームでは蛇が這っていて、りんごを食べると蛇の長さが長くなります.ヘビが這い回って、壁や自分の体にぶつかって、ゲームは終わりました.ゲームはNxNの正方形の碁盤で行われ、いくつかの格にはりんごが入っています.板の上下両端に壁がある.ゲーム開始時、ヘビは一番上の一番左側にあり、ヘビの長さは1です.蛇は最初は右に向かった.
ヘビは毎秒1回移動し、以下のルールに従います.
まず、ヘビは体長を伸ばして、頭を次の格子に位置させます.
動いている格子にりんごが入っていれば、格子の中のりんごは消え、しっぽも動かない.
動く格子の中にリンゴがなければ、体長を短くして尻尾のある格子を空にします.つまり、身長は変わらない.

入力


1行目の基板サイズはNである.(2<=N<=100)次の行はリンゴの個数Kを与える.(0<=K<=100)
次のK行はリンゴの位置を表し、1番目の整数は行を表し、2番目の整数は列の位置を表す.りんごの位置が違います.一番上の左側(1行1列)にはりんごがありません.
次の行は蛇の方向転換回数Lを与える.(1<=L<=100)
以下のL行はヘビの方向変換情報を提供し、整数Xと文字Cからなり、ゲーム開始時にX秒終了後に左(Cは「L」)または右(Cは「D」)に90度回転することを示す.Xは10000未満の整数であり、方向変換情報はXのインクリメント順に与えられる.

しゅつりょく


1行目の出力ゲームは数秒で終了します.
from collections import deque

n = int(input())
k = int(input())
board = [[0] * n for _ in range(n)]

for i in range(k):
    x, y = map(int, input().split())
    board[x - 1][y - 1] = 1  # 사과 있는 위치에 1로 초기화

dx, dy = [0, 1, 0, -1], [1, 0, -1, 0]
direction = 0  # 오른쪽: 0, 아래쪽: 1, 왼쪽: 2, 위쪽: 3
result = 0
snakes = deque([[0, 0]])
nx, ny = 0, 0
lst = deque([])


for _ in range(int(input())):
    x, c = input().split()
    x = int(x)
    lst.append((x, c))

x, c = lst.popleft()

while True:
    result += 1
    nx, ny = nx + dx[direction], ny + dy[direction]
    isStop = False

    if nx < 0 or nx >= n or ny < 0 or ny >= n:
        isStop = True

    for snake in snakes:
        if [nx, ny] == snake:
            isStop = True
            break

    if isStop:
        break

    if board[nx][ny] == 1:
        board[nx][ny] = 0
        snakes.append([nx, ny])
    elif board[nx][ny] == 0:
        snakes.append([nx, ny])
        snakes.popleft()

    if x == result:

        if c == "D":
            direction = (direction + 1) % 4
        if c == "L":
            direction = (direction - 1) % 4
        if lst:
            x, c = lst.popleft()

print(result)

草を切る
1.boardを0に初期化し、アップルの位置を1に初期化します.
2.snakeリストで、ヘビの現在位置を[a,b]に追加し、lstに方向転換が必要な順序を追加します.
3.ドアを回して現在ヘビが動いている回数、方向転換が必要な数字がxなら
xが結果と同じ場合は方向を反転する必要があるため、x=resultで方向を反転すると条件が設定されます.
[原句]こうしてまっすぐ回ると、ヘビが壁にぶつかった(
if nx < 0 or nx >= n or ny < 0 or ny >= n:
	isStop = True
),
自分のしっぽをつかむ(
     
for snake in snakes:
	if [nx, ny] == snake:
		isStop = True
		break
)ゲーム終了
(
if isStop:
	break
)
はい、結果を返すと出てきます.