Friday, 27 December 2024

Average norm growth in a 2048-like merging game

Inspired from a 2048-like merging mobile game. There are surprisingly many of these -- just check the ads if you want one.

Consider the space of (positive) integer sequences $u = (u_0,u_1,...) = \sum u_ie_i$ with one "norm" and one operation. The measurement is $\| u \| = \sum 2^i u_i$. The operation $T$ is as follows: first add $e_0$ to $u$. If all entries are at most 1 then we are done. Otherwise find the lowest $u_i \geq 2$ and perform $u \mapsto u - 2e_i + e_{i+1}$. For those who know, this is related to 2-adic numbers, but we are not going to cover advanced math today. A simple question is how does the operation $T$ affects the norm? Clearly it adds the norm by 1 because the carry operation is norm invariant.

Game devs know as much as we do that simply advancing in 2-adic numbers one by one is insanely boring so they decided to adopt a variant instead. Consider an alternate operation as follows: there is a chance $r$ so that the carry jumps to the next digit. i.e., $u \mapsto u - 2e_i + e_{i+2}$. In that case, the norm jumps by $2^{i+1}$. 

Now under the new operation, what is the expected growth rate of the norm? Well, this is yet another Markov Chain like problem like many others we have encountered here. Let $p_{n,k}$ be the chance of $u_n = k$ in long term using the fact that the lower digits are independent of the higher ones. That gives an ergodic chain, meaning that it converges.

We work out the case $n=0$ effortlessly: $p_{0,0} = p_{0,1} = 0.5$. What about $p_{1,k}$?

When $u_0 = 0$, $u_1$ would be merged if $u_1\geq 2$. When $u_0 = 1$, there is a chance of $1-r$ that the carry lands on $u_1$ (no jumps). 

Therefore we have the system
$p_{1,0} = 0.5p_{1,0} + 0.5p_{1,2}$
$p_{1,1} = 0.5p_{1,1} + 0.5p_{1,3} + 0.5(1-r)p_{1,0}$
$p_{1,2} = 0.5p_{1,2} + 0.5p_{1,4} + 0.5(1-r)p_{1,1}$
...

That quickly becomes a mess. We will need another probability $q_n = (1-p_{0,0})\cdot \prod _{n = 1} (1-p_{n,0}-p_{n,1})$ the chance of no carrying up to $u_n$. We know $q_0 = 0.5$ hence the 0.5 above but the rest is so bad. Worse news is that $q_n$ is not a constant, and we don't even know if it converges to 0 as long as $p_{n,0}+p_{n,1}$ shrinks quick enough(for example, $\prod (1-2^{-n}) \approx 0.289$ converges to a positive constant). On one hand, we know carrying always happen as long as the lower digits requires no carrying. On the other hand, we worry the possibility of carrying happening mostly at lower digits, causing higher $u_n$ to stack up.

Oh, you say the original question was asking the growth rate of the norm? That's simple. Once you computed $p_{n,k}$'s, we know exactly how often a jump would happen on a given digit which gives the extra growth except the $p_{n,k}$'s are too complicated to compute.

But wait! We can still do some simulation. We can't accurately sample $u$ as an infintiely long string but we can simulate the operation starting from $u = 0e_0$. From here we have two key observations.

First, $p_{n,k}$ is largely independent of $n$ with $\lim _{n\to \infty}p_{n,k} = p_k$. Why? The state only changes when carrying concerning a certain digit occurs, but it's behavior (whether carrying to next digit or jump occurs) is uniform across $n$. If carrying is 50% less likely on a certain digit, it only means a state of change is 50% less likely, but that does not change the proportion among numbers at that digit in long term.

This is very important because now we can simply work on $p_k$ which would be a good estimate. Another implication is that $q_k$ is surely geometrically converging to zero, so we have one less technical problem.

Second which is also our original question. If we also call the new operation by $T$ out of laziness, we find that $\| T^k(u)/k\|$ increases with $k$. This is clear if we fit into a simpler but similar parameter. Assume that a carry happens at $u_n$ at the chance of $2^{-n}$. The expected gain in norm due to jump would be $\sum 2^{-n} \cdot 2^n = \sum 1$ which diverges...in a long term scenario. Practically when $u$ is finite, the number of 1's is capped by the highest non-zero $u_n$. That says, we expect $\| T^k(u)\|$ to behave like $O(k \log k)$ under the simplified parameter. Using the approximated parameter of $p_k$ the best guess remains $O(k \log k)$ instead of $O(k^{1+\varepsilon})$.

All I can say is, this problem sounds more interesting than Simon Marais A4 that I have covered month ago, and it's something nice to spend time on while listening to the carols.

Monday, 16 December 2024

16/12/2024: P12之完夢篇

你還記得那些國際賽的經典時刻嗎?

中生代的球迷可能記得「又是高志綱」或者「哩溝皂」,大王U21的「不用吃鍋貼」,還有2015 P12的「讓Mesa的戰術徹底失敗」。

那麼,今年有哪一句看上去是讓你記上十年、二十年三十年的呢?

我想來想去只有一句,中華隊贏了。

九局下一出局一壘有人四分領先,栗原陵矢打出強勁的一壘方向平飛球,朱哥漂亮地接住還不忘一腳踩在壘包上形成雙殺,比賽結束。

不是那種有十秒空檔的飛球接殺,甚至也不是正常的內野滾地刺殺,這是強襲球變成的雙殺。一切是來得如此突然,誰也沒想過比賽會以這種形式結束。電視上的講評已經激到沒法組識語言,旁述才講這球投出的同時另外兩人已經叫了起來。在一片歡呼聲中講評一連說了三句中華隊贏了,這就是我記得的關鍵旁述。

如果要比經典,有甚麼比「贏下冠軍」這件事更為更為經典呢?以前的國際賽中我們擁有過那些美好時刻最後卻還是遺憾出局,這才顯得那些美好時刻如此經典。八搶三台灣是打敗了南韓和加拿大也拿到奧運門票,但正賽中的屁屁事件是棒球迷的一生之痛;15年讓Mesa的戰術徹底失敗是很爽沒錯,但最後還是失足掉到第九。U21那次最後倒是贏了,但決賽是摧枯拉朽的大勝,那最經典的不就是在準決賽最膠著時刻打出致勝分的那一擊嗎?

當然另一個說法是這一屆成員裡人人有發揮,每個人都有關鍵一擊。不是說這樣顯得關鍵一擊沒那麼關鍵,而是在人們的記憶中難以挑出單獨一個時刻來代表整個旅程的高光。比如說首場單局六分放倒泡菜。作為一切的開端相信不少人認同這可能是僅次於決賽最重要的一場,這兩支全壘打當然意義飛凡。可是它們足夠經典嗎?就像故事一上來就是嗯嗯啊啊的高潮,中間雖然有高低起伏(還不是我們是別人的高低起伏)但高潮佔了七成的故事,看完也只能說一句「操、好爽」了吧。

正如異世界爽文現在大行其道一樣,我相信大家都不介意這種劇情,最好每幾年上演一次吧。

有關投打的事情已經沒有我再添油添醋的空間了。國際賽的流量是如此巨大,台日各路紙上網上媒體已經把任何一個比賽細節分析到極限,連逐球配球分析都出來了,我還能說些甚麼呢?

說說我的街頭觀察好了,正好冠軍賽當天我就在台北街頭。

比賽在六點開打,下午我就去了大巨蛋的特備展示場看能不能買到呆丸的黑豹球衣--我只能接受黑色的黑豹版,種花版藍白實在醜死了。可惜那邊也沒有現貨,有號碼版也僅限23和40號記念版。看了看蝦皮還有一些黃牛貨,可是蝦皮這他媽爛公司我才註冊就說我帳號異常把我封了還不讓我解除電子報訂閱,我怎可能去那邊下單呢!

一路從大巨蛋往忠孝復興走去,路上沒看到多少路邊攤。因為約了朋友時間尚早的關係我在某百貨的高層找到機廳打了兩道。同層還有一家火鍋,但電視上似乎不是在播棒球?

到了餐廳冠軍戰已經打到第二局左右。我們被安排到餐廳最深的位置剛好沒有電視,但是來到這種大家都坐下的地方就能看出除了我以外還有一些人對比賽進展十分緊張。我沒有訂閱hami只好一直刷ptt,可是超規格的流量大概把伺服擠破了,我沒法看到live文最底的留言只能看到頂部的文字直播。坐我旁邊的友人沒自己手機看,但每次我好幾分鐘沒刷的時候他就會提醒我要刷新一下。同桌的的朋友們應該有一半在看吧?他們當中不少本來就是中職迷就是。

「四比零?!?」第二支全壘打是旁邊那一桌先發現的。我趕緊刷新PTT可是沒辦法,網頁(telnet算嗎)完全當掉了,網頁版上倒是刷出了三分砲的帖子。同一時間比較遠的那幾桌也響起了四比零的驚呼,大家立刻打開手機看最新的消息。唉,浪費了剛端上來的牛肉燒餅了呀。

難得和朋友相聚,當然不會這麼快就結束。我們先在路邊續了點小吃,又找到一家看起來快要下班的冰淇淋店。這家店做的酒類冰淇淋應該是我印象中最好的一家,連台啤和高梁味都能做得好的話我沒試到的甚麼白蘭地或者百利奶酒口味一定不在話下吧?

不過這不是重點。

我們進店的時候離外面寫的關門時關只有三十分鐘不到的時間。這裡不是大街加上我們看來似乎是店員下班前最後一撥客人,我們都以為我們得快點吃完不能阻著別人收工。沒想到我們拿著冰淇淋坐下以後客人一批一批的進來,而且每一個手上都拿著手機看球賽!我甚至聽到一句「七比零?!?」,那可是直播看著林安可詐了一支三分砲才會有的反應啊。我的感覺是這些人都是衝著「找個位子坐下看球」而進來的。可是那時才七局,真要坐到打完的話店家絕對會生氣的。

那九局的時候我在哪裡呢?在台北車站地下街買草莓酸奶。第一個出局我是在往下的扶手電梯上瞄著前面那人的直播看完的,後面的雙殺就沒看到了--就算沒直播看,手搖還是得買的。我還在挑品項,前面還在點單的女子點到一半突然爆了一句話把店員嚇呆。

「中華隊贏了」

店員:「你……你確定?冰度甜度呢?」
女子:「贏了啊!去冰微糖謝謝。」

地下街人來人往,不論是停下購物的還是路過的都不約而同地對身邊的人訴說著這個終於被開頭那個雙殺釘在歷史上的事實。各種談論奪冠就像Belousov-Zhabotinsky反應那樣一圈圈地擴散,又很快歸於虛無。

……怎麼說,比我想象中冷淡?

當初我在紐西蘭,橄欖球世界盃奪冠時市中心的車可是直接慢駛沿途鳴笛歡呼,一堆人揮舞著國旗出來裸跑的呢。那個討論熱度比我在台北的短短幾天不論是奪冠前後都要來得高。說是國情有別也可以,只是作為國球的「贏球」好像也不過爾爾有點可惜而已。

不管怎樣,想拿下的冠軍已經拿下,國際賽的高潮過後終歸要回到種花職棒的日常。希望這個冠軍可以為職棒帶來更多長期球迷,提供一個讓選手繼續進步的環境吧!

Sunday, 8 December 2024

艾恩葛朗特的毀滅

再見……了。


是的我知道我該寫個某某棒球比賽的續篇,可是要怎樣寫才對得起這座冠軍真的不太容易。所以我決定分享一點遊戲相關、而且是我想寫了很久的東西。

「你這個……殺人兇手。」

希茲克利夫和茅場晶彥沒了,青眼惡魔也沒了。2024年11月7日,黑漆漆終於把弄出微波頭盔的萬惡之源斬下,順手攻破74層通關把所有被困的玩家給解放出來。這當然是SAO世界發生的事情。現實中日本有一堆玩家聚在animate還是電擊文庫門口慶祝還拿到號外報紙,台灣也有馬拉松播放SAO甚麼的活動。

可是對我桐玩家來說這天我們不是從SAO中被解放出來而是被艾恩葛朗特流放出來了。我們被流放到這個沒有我的桐人的世界裡,再沒有我桐、浮遊島和GGO可以玩了。

很難想像這種頁遊可以讓整個群體瘋起來狂玩,上一個奇跡是ACGN stock,下一個我們還在等。某個剛剛慶祝完一週年但其實才火了三個月的英文「放置系」(說放置系的某開發者不羞的嗎?)頁遊最高同時在線一萬三千多然後活人其實連一千個也沒,我桐光是在繁中圈子就能撐起同樣的熱度足以發映其流行程度。

另一個我桐有夠火爆的證據是我在2020寫了一篇「我的桐人與網頁遊戲」講我桐和頁遊發展軌跡,這篇的熱度長年高居不下(即使到現在還是),其點擊數輕鬆碾壓我寫過的任何其他遊戲分析文章。會是我寫懷舊遊戲所以多人看嗎?不太可能,我寫的懷舊東西多的是也不見其他人多點擊那些文章,這篇的熱度合理推斷就是來自我桐了吧。

也許有人覺得這遊戲倒掉有甚麼可惜的?GGO那種還有一堆活人在玩的也許比較可惜,但我桐都只剩死人了啊?

今年十月我才莫名奇妙地一直被友善切磋,於是我也友切回去。對方再次切過來還喊話交朋友,於是我看著他那個不太妙的善惡值對他回了一句來生再做朋友,按下決一死戰、GG。遊戲沒關掉的話我們也許可以像上面那樣結個朋友,再不濟也能偶而上去探望一下西莉根、關心一下這個月有多少人被鮑勃丟下樓又有多少人登上199層看看破關後的風景,可是倒了的話一切就結束了。想想看那一大票的古早頁遊都還在,你這個才四年的東西怎就關服了呢?

也許把遊戲砍掉就跟他把玩家砍掉一樣都是茅場的風格吧。沒法再現的輪椅桐(我也沒法卡bug弄出來)也好、各種星爆爆和七彩雷根系列也好,這些都是為了成就他心中的SAO世界。從這方面來說他還真成功了。

對我來說,也許遊戲的高潮在攻略組徹底解構育成系統的一瞬間就已經過去了。二周目也好、新頭目也好,再多的新內容也只不過是循固定程序就能攻略下來的關卡罷了。神祕的面紗被拿掉,剩下就是無機的數字和養成。到了2024,我桐的關服也就只能帶來一聲嘆息而已。

For those who know,以下是一些值得留念的戰報。連接當然已經失效,但光是用文字看上去就夠過癮了。對於那些一起同進退過的攻略組來說更是如此,對吧?

- [https://mykirito.com/report5/5f70bd800ed95f13e37b19ef]
一周目對上【微笑幻想催眠曲.絕命二重奏.狂暴樂章】瑪莉莎、霍斯汀,當時大家的探索還沒完善,這算是配點配到極限的代表作之一吧,以下原文:
拒絕野餐之人
40血99技(其實可以分20到智)
50前樓層 1自+坐野壓光攻敏反
50後樓層 自坐野壓光攻體敏反幸
修行同理 
野到21樓層->41 (14就領其實也可)
40-50 公式3野20坐修行
50+ 6自6野41坐修行
撐經驗就無限坐 不然你自己算修行x2
前面別他媽打PVP 打贏一場要補1野4坐 打輸要補1自1野6坐
智超過420(400)後20自無限野切速成
然後祈求你別平A吧

- [https://mykirito.com/report5/5f9d1cb952aeed52b5426dde]
可惜了100層那一票我們只能打一次。因為幸傷和幸運成正比的關係我們可以輕易算出通關所需的幸運值。我當時和隊友狂刷點數,省略了一直試錯被洗臉的麻煩。我當時的估算是雙1020幸有15%機會過,這個機率其實一點也不穩可我還是莽下去了。990+1063幸用了4場撞了過去。

- [https://mykirito.com/report5/5fdb96fa93a8d30ae8472440]
145神龍是我最引以為傲的攻略之一,最大特點是不靠運氣,以下是我當時寫的原文:
我覺得是超穩啦 點數可能只要550點左右
破龍全智 拉250體 帶愛麗絲(其實沒差 不帶輸出就好
神5000血(4500以下要骰) 190攻 310體 800智(可下調) 帶豬叫
攻體要求比正常拉高一點 必須不壓+配點/特地拉
高攻讓你省掉一兩次豬叫 省掉幾十回合
必須在累之前把老人扇死 打驢子小心破龍累被反 你有點數可以點成300體
順便說145 所有其法打法都要骰
其他穩要300防500技700智 基本上都要爆點數 而且骰很大
不然還是骰隆龍比較好

- [https://mykirito.com/report5/604c465cd8dc682a2f67b9b4] 
對戰【微笑幻想催眠曲.絕命二重奏.狂暴樂章】瑪莉莎、霍斯汀,被瘋狂降智降技之下一直打不中,但同時攻擊力一直吃到buff,最終以幾千萬傷害的猩爆流星拳拿下戰鬥!