我來寫個帶推導過程的答案吧。2048的玩法就不贅述了,先來看看相關的規則,因為是Gabriele Cirulli讓這個遊戲火起來的,以他的原始碼為準(Gabriele Cirulli的版本的地址:
2048
)。
記分規則
:在
2048/game_manager.js at master · gabrielecirulli/2048 · GitHub
中的167行:
self
.
score
+=
merged
.
value
;
分數就是累加遊戲過程中新合成方塊的數值。
新方塊出現的規則
:在
2048/game_manager.js at master · gabrielecirulli/2048 · GitHub
的71行:
var
value
=
Math
.
random
()
<
0.9
?
2
:
4
;
新方塊的取值集為{2, 4},其中4出現的機率是0.1。
題主的第一問:
如果到2048不繼續,那麽最高分是多少?
2048肯定是由兩個1024合成的,所以在合成2048的這一步,記分是2048,同樣1024也是由合成得到的,所以在得到兩個1024的這兩步,積分是1024*2=2048,以此類推,在>4的情況下,每一步分解的逆過程都會積2048分。註意到題主問的是理論最高分,我們當然希望盡可能多的合成新方塊,所以不希望4是直接生成的,應該都是由2合成的。假設題主運氣足夠好,玩的過程中出現的新方塊都是2,那麽基於以上推導,從2一路合成到2048,理論上的最高分為:
\[2048\times \left( {{\log }_{2}}\left( 2048 \right)-{{\log }_{2}}\left( 2 \right) \right)={{2}^{11}}\times \left( 11-1 \right)=\text{20480}\]
對於任意從2開始合成的\[{{2}^{N}}\]
這個公式可以推廣為:
\[{{2}^{N}}\times \left( N-1 \right)\]
題主的第二問:
如果繼續,那麽最高分是多少?
要回答這個問題首先要來看2048理論上能達到最終布局是怎麽樣的,假設能達到的最大的數值為\[{{2}^{N}}\]
,那麽在最後一步合成\[{{2}^{N}}\]
時一定是占兩格的兩個\[{{2}^{N-1}}\]
,那麽對這兩個\[{{2}^{N-1}}\]
做最小的展開,也就是保持一個不變,另一個展開為兩個\[{{2}^{N-2}}\]
……如下所示:
\[{{2}^{N}}\xleftarrow{\text{merge}}{{2}^{N-1}},{{2}^{N-1}}\xleftarrow{\text{merge}}{{2}^{N-1}},{{2}^{N-2}},{{2}^{N-2}}\xleftarrow{\text{merge}}\cdots \xleftarrow{\text{merge}}{{2}^{N-1}},{{2}^{N-2}},\cdots 16,8,4,4\]
所以依次類推如果要合成\[{{2}^{N}}\]
,則需要一直展開一個相鄰的方塊序列直到遊戲能產生的方塊值,其中序列長度由要展開的級數的初始值決定,比如要展開到\[{{2}^{N-M}}\]
,則需要的序列長度是\[M+1\]
,因為遊戲一共16個格子,所以\[M+1=16\]
,則\[M=15\]
。考慮到需要最大值,所以認為在這樣一個序列中,遊戲產生的方塊是兩個4,那麽\[{{2}^{N-M}}={{2}^{N-15}}={{2}^{2}}=4\]
,則\[N=17\]
,所以遊戲能達到的方塊最大值是\[{{2}^{17}}=\text{131072}\]
。同樣道理,當一個131072已經產生之後,還剩下15個格子,那麽這種情況下能產生的最大值為65536,依此類推,14個格子能合成的最大值是32768,……所以理論上最大值的情況一定是前15個格子的值依次為\[{{2}^{17}},{{2}^{16}},{{2}^{15}},\cdots ,{{2}^{4}},{{2}^{3}}\]
,也就是\[131072,65536,32768,\cdots ,16,8\]
,而最後一個格子是2或者4。前面好多答主也貼過最後的局面,我這裏也貼一例(圖用我自己寫的
蛋疼99行程式碼Python版2048
畫的):