Ecote-Bam(実施)
13133 ワード
蛇。
質問する
「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
)
はい、結果を返すと出てきます.
Reference
この問題について(Ecote-Bam(実施)), 我々は、より多くの情報をここで見つけました
https://velog.io/@aksmf1442/이코테-뱀구현
テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol
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)
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
Reference
この問題について(Ecote-Bam(実施)), 我々は、より多くの情報をここで見つけました https://velog.io/@aksmf1442/이코테-뱀구현テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol