루비, 코너킥, 점수 : 3340
다음은이를 시작하기위한 매우 간단한 전략입니다. 나는 (거의) 완벽한 점수에 대한 아이디어가 있지만 그것을 공식화하는 데 어려움을 겪고 있으므로 여기에 간단한 일이 있습니다.
def slide board, dir
case dir
when 'U'
i0 = 0
i_stride = 1
i_dist = 4
when 'D'
i0 = 15
i_stride = -1
i_dist = -4
when 'L'
i0 = 0
i_stride = 4
i_dist = 1
when 'R'
i0 = 15
i_stride = -4
i_dist = -1
end
4.times do |x|
column = []
top_merged = false
4.times do |y|
tile = board[i0 + x*i_stride + y*i_dist]
next if tile == 0
if top_merged || tile != column.last
column.push tile
top_merged = false
else
column[-1] *= 2
top_merged = true
end
end
4.times do |y|
board[i0 + x*i_stride + y*i_dist] = column[y] || 0
end
end
board
end
def advance board
if board.reduce(:*) > 0
return board, board
end
16.times do |i|
if board[15-i] == 0
board[15-i] = 4
break
end
end
spawned = board.clone
# Attention, dirty dirty hand-tweaked edge cases to avoid
# the inevitable for a bit longer. NSFS!
if board[11] == 8 && (board[12..15] == [32, 16, 4, 4] ||
board[12..15] == [16, 16, 4, 4] && board[8..10] == [256,64,32]) ||
board[11] == 16 && (board[12..15] == [32, 8, 4, 4] ||
board[12..15] == [4, 32, 8, 8] ||
board[12..15] == [4, 32, 0, 4])
dir = 'R'
elsif board[11] == 16 && board[12..15] == [4, 4, 32, 4] ||
board[11] == 8 && board[12..15] == [0, 4, 32, 8]
dir = 'U'
else
dir = (board.reduce(:+)/4).even? ? 'U' : 'L'
end
board = slide(board, dir)
if board == spawned
dir = dir == 'U' ? 'L' : 'U'
board = slide(board, dir)
end
return spawned, board
end
advance
기능은 사용자가 요청하는 것입니다. 보드를 1d 배열로 가져와 타일이 생성 된 후 이동 한 후 보드를 반환합니다.
이 스 니펫으로 테스트 할 수 있습니다
board = [0]*16
loop do
spawned, board = advance(board)
board.each_slice(4) {|row| puts row*' '}
puts
break if board[15] > 0
end
puts "Score: #{board.reduce :+}"
이 전략은 매우 간단하고, 나 자신을 2048 연주 할 때 나는 실제로 128로 건너 뜁니다하는 데 사용되는 하나입니다 사이에 단지 대체 위로 와 왼쪽 . 이 작업을 가능한 한 오랫동안 수행하기 위해 4
오른쪽 아래 모서리에 새로운 s가 생성됩니다.
편집 : 종료 직전의 특정 단계에서 몇 번 바로 이동하기 위해 하드 코딩 된 스위치를 추가했습니다. 실제로 1024에 도달 할 수 있습니다.하지만 다소 손이 닿지 않으므로 지금은 그만하고 내일 일반적으로 더 나은 접근 방식을 생각하십시오. (솔직히 손으로 비틀어 진 해킹을 추가하여 점수를 4 배 늘릴 수 있다는 사실은 내 전략이 헛소리라고 말해줍니다.)
이것은 당신이 끝내는 보드입니다
1024 512 256 128
512 256 128 16
256 128 64 8
8 32 8 4