2022年5月16日 星期一

Wordle 和學生時代寫的 1A2B 猜數字遊戲程式


 
Wordle 是疫期中程式師 Josh Wardle 寫來打發時間的小玩意兒,一時大受歡迎,目前由紐約時報買下經營。每日一題,有六次機會猜中五個字母的單字。正確位置上的正確字母以綠色標示,位置錯誤是黃色,字母錯誤則是黑色。有點像小時候玩的 1A2B 猜數字遊戲。


猜中後會顯示統計數字,可以看出一般要花費 4~5 次。三次猜中算運氣不錯;六次或猜不中,多半是發生一種狀況:只差一兩個字母,但可能單字太多,還沒輪到,機會就用完了。(有個技巧是,若還有兩次以上機會,將沒猜過但有可能的字母,儘量湊出一個單字以利排除)

有沒有可能前兩次就猜中呢?當然,需要極佳的運氣。記得剛開始是兩個孩子在玩,三次猜中是「Wordle之王」,兩次是「Wordle之神」。孩子娘問:「那一次呢?」兩個孩子相視一笑:「作弊!😆」原來無論猜中與否,都會公布正確答案,而統計數字只在同一台機器累計。拿到正確答案,換一台機器自然就百發百中啦!其實一次猜中大概跟一竿進洞機率差不多。

殺時間的事兒,倒不必太認真。我自己的玩法,喜歡先找出母音,再由母音的位置、數量推敲子音。和猜數字相比,Wordle 的答案必定是字典上查得到的單字,不是隨機組合;比較難的則是字母允許重複,只有翻黑的字母可以排除。

標題後半段,則是想起大學時代自修 BASIC, Pascal 程式語言,想找個題目練功。猜數字是個好題目,可是由電腦出題給人猜,一方面太簡單,一方面早有人寫過。於是反其道而行,寫個程式來猜使用者出的題目,難度當然高得多,同時也有點人工智慧的味道。1980年代所謂人工智慧,是個令人熱血的領域。雖然限於硬體的容量與速度,能夠實現的不多,但在有限環境中,儘量把自己猜題的策略和技巧轉化為程式,仍然是很興奮的事。

當時還沒有自己的電腦,必須到學校電算中心排時段上機,斷斷續續大約一學期,達到接近人類(就是我自己)的命中水準,平均大約 5~6 次可以猜中。實際上程式的表現應該比人稍好一點,因為不會閃神遺忘,而且特定情況下先猜數字或猜位置的策略選擇(或稱「招數」)也不會失算。那段時間一有什麼新想法念頭,就趕緊筆記,然後到電算中心(不是上網哩,是人要走進去用紙筆登記),看最近可用時段是什麼時候。後來想想挺辛苦,但十分快樂。

印象中用了很多招數增強判斷,甚至如果使用者故意唬爛,被我的程式發現,指出錯誤之餘,還會用髒話罵人😁。可惜的是因為硬體相容性問題,很多當時練功的題目,都沒能移植到後來的 PC ,就這麼消逝在過往雲煙,包括一個簡單的第一人稱視角 3D 射擊遊戲。別把後者想得太偉大,當時甚至還沒有這種說法。只不過是立體化的小蜜蜂,目標是一個個自遠而近的圓球,用一條細線代表的激光束將之擊毀。實際演練的是三維矩陣運算,只是讓它有趣一些罷了。

有立體小蜜蜂做基礎,次年修習計算機圖學(Computer Graphics)得心應手,受老師誇獎不說,後來很長一段時間的職涯發展,都多少和這個領域有關。這些天寶遺事,自己想起來挺有意思,再過十年也許忘光了。讀者尚請包涵,疫期題材燒得快乾,只得將就啦!






 

沒有留言:

張貼留言