[アルゴリズム]2048(Easy)
21370 ワード
標準的なサムスンのソフトウェアの能力は問題をテストします
2048(Easy)
白駿12100 2048(Easy)
これはシミュレーション2048ゲームで,最大5回移動したときに最大値を探索する問題である.ゲームの特性上、最大値を繰り返し下げることはありませんので、5つの場合の数だけ考えてください.このため,上下,左,右の4つの動作の繰返しを許容することを事前に考慮し,順序に従って5つを選択すれば透かし繰返し順で問題を解くことができる.
「上、下、左、右」をそれぞれ[0,1,2,3]とすると、[0,0,0]~[3,3,3,3,3,3]がチェックされ、最大値を持つブロックがフィルタされます.
場合によっては、itertoolsライブラリ内の重複シーケンスメソッドproductを使用して、メソッドをシミュレートする関数を実装する必要があります.シミュレーション関数は実装分野の問題であり,迅速に解決するためには経験値が必要である.解きほぐした后に说明する必要はありませんとても简単ですが...時間がかかりすぎた.
パスコード
from collections import deque
from copy import deepcopy
from itertools import product
size = int(input())
orgboard = []
for i in range(size):
orgboard.append(list(map(int, input().split())))
def move(moveList): #0123(상하좌우)에 따라 보드를 움직이고 가장 큰 수를 반환
board = deepcopy(orgboard)
for move in moveList:
if move == 0:
for i in range(size):
temp = []
for j in range(0, size):
if board[j][i]!=0:
temp.append(board[j][i])
board[j][i]=0
for k in range(len(temp)-1):
if temp[k] == temp[k+1]:
temp[k] += temp[k+1]
temp[k+1] = 0
index = 0
for l in temp:
if l!=0:
board[index][i]=l
index+=1
elif move == 1:
for i in range(size):
temp = []
for j in range(size-1,-1,-1):
if board[j][i]!=0:
temp.append(board[j][i])
board[j][i]=0
for k in range(len(temp)-1):
if temp[k] == temp[k+1]:
temp[k] += temp[k+1]
temp[k+1] = 0
index = size-1
for l in temp:
if l!=0:
board[index][i]=l
index-=1
elif move == 2:
for i in range(size):
temp = []
for j in range(0, size):
if board[i][j]!=0:
temp.append(board[i][j])
board[i][j]=0
for k in range(len(temp)-1):
if temp[k] == temp[k+1]:
temp[k] += temp[k+1]
temp[k+1] = 0
index = 0
for l in temp:
if l!=0:
board[i][index]=l
index+=1
else:
for i in range(size):
temp = []
for j in range(size-1,-1,-1):
if board[i][j]!=0:
temp.append(board[i][j])
board[i][j]=0
for k in range(len(temp)-1):
if temp[k] == temp[k+1]:
temp[k] += temp[k+1]
temp[k+1] = 0
index = size-1
for l in temp:
if l!=0:
board[i][index]=l
index-=1
maxnum = 0
for i in board:
if maxnum < max(i):
maxnum = max(i)
return maxnum
case = list(product([0,1,2,3],repeat=5)) #0,1,2,3에서 5개 중복순열 추출한 경우의 수
answer = 0
answercase = 0
for i in case:
temp = move(i)
if temp>answer:
answer = temp
answercase = i
print(answer)
Reference
この問題について([アルゴリズム]2048(Easy)), 我々は、より多くの情報をここで見つけました
https://velog.io/@gomiseki/알고리즘-2048Easy
テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol
from collections import deque
from copy import deepcopy
from itertools import product
size = int(input())
orgboard = []
for i in range(size):
orgboard.append(list(map(int, input().split())))
def move(moveList): #0123(상하좌우)에 따라 보드를 움직이고 가장 큰 수를 반환
board = deepcopy(orgboard)
for move in moveList:
if move == 0:
for i in range(size):
temp = []
for j in range(0, size):
if board[j][i]!=0:
temp.append(board[j][i])
board[j][i]=0
for k in range(len(temp)-1):
if temp[k] == temp[k+1]:
temp[k] += temp[k+1]
temp[k+1] = 0
index = 0
for l in temp:
if l!=0:
board[index][i]=l
index+=1
elif move == 1:
for i in range(size):
temp = []
for j in range(size-1,-1,-1):
if board[j][i]!=0:
temp.append(board[j][i])
board[j][i]=0
for k in range(len(temp)-1):
if temp[k] == temp[k+1]:
temp[k] += temp[k+1]
temp[k+1] = 0
index = size-1
for l in temp:
if l!=0:
board[index][i]=l
index-=1
elif move == 2:
for i in range(size):
temp = []
for j in range(0, size):
if board[i][j]!=0:
temp.append(board[i][j])
board[i][j]=0
for k in range(len(temp)-1):
if temp[k] == temp[k+1]:
temp[k] += temp[k+1]
temp[k+1] = 0
index = 0
for l in temp:
if l!=0:
board[i][index]=l
index+=1
else:
for i in range(size):
temp = []
for j in range(size-1,-1,-1):
if board[i][j]!=0:
temp.append(board[i][j])
board[i][j]=0
for k in range(len(temp)-1):
if temp[k] == temp[k+1]:
temp[k] += temp[k+1]
temp[k+1] = 0
index = size-1
for l in temp:
if l!=0:
board[i][index]=l
index-=1
maxnum = 0
for i in board:
if maxnum < max(i):
maxnum = max(i)
return maxnum
case = list(product([0,1,2,3],repeat=5)) #0,1,2,3에서 5개 중복순열 추출한 경우의 수
answer = 0
answercase = 0
for i in case:
temp = move(i)
if temp>answer:
answer = temp
answercase = i
print(answer)
Reference
この問題について([アルゴリズム]2048(Easy)), 我々は、より多くの情報をここで見つけました https://velog.io/@gomiseki/알고리즘-2048Easyテキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol