【邏輯遊戲】A=B: A One-Instruction Esolang
如果不想花錢買也沒關係,在Steam遊戲平台上搜尋「A=B demo」就找的到免費的試玩版(但也可能隨著正式版的推出,試玩的Demo版本被移除)。
網路上也沒看到太多討論,就拋磚引玉來寫一篇文章吧!希望可以遇到好夥伴一起來解題跟討論內容~
遊戲劇情
如果你是曾經修過程式設計課或是資訊相關領域的學生看了劇情應該會會心一笑,劇情主要是在描述一個修編譯原理課的學生,在交作業時異想天開,從0開始搞了一套自己的程式語言,作業遲交還找各種理由牽拖開發新的程式語言很困難,所以需要多花點時間,希望老師能夠包容,但是最開始的版本連顯示「Hello world」都做不到,直接被老師無情退件。
隨著章節解鎖,可以看到更多教授與學生的Email往來內容,教授不斷退件,學生就只好一直新增功能希望教授能給他分數避免被當,逐漸把A=B這個程式語言開發的越來越完善,對玩家來說後面的功能越複雜,遊戲關卡就跟著困難了起來。
遊戲運作原理
A=B的程式運作規則非常簡單,大概可以將它分為四部分:
1. 只有「=」是保留字,「#」是拿來註解用的。
2. 每一行程式碼都必須要是左字串=右字串
3. 運行時會由上到下嘗試找尋可執行的程式碼
4. 找到之後會將等號左邊的字串替換成右邊的
額…看不懂嗎?那舉個例子,橘色的部分是我們寫好的程式碼 “ab=c”,意思就是輸入的字串要是出現任何ab有關的字都會變成c,所以若我們輸入abc,則輸出應為cc,因為前面的ab被我們的程式碼替換成c了,而後面的c我們都沒動它就依然存在。
再一個例子,假設我們寫的程式碼是”ab=”,那如果輸入abc,輸出應該是甚麼呢?
就是c哦,因為前面的ab被我們替換成沒有任何東西。
這兩個例子是為了能夠更快速理解它到底在幹嘛,所以都是先有程式碼,我們再由輸入什麼去推論輸出什麼,但是實際上在遊戲中我們要寫的是橘色的程式部分啦!
遊戲例題
我取最前面幾題來實際演練一下在這個遊戲中我們到底要寫的是甚麼東西,這些題目在免費的Demo版本中也都有出現過,應該算是公開的。
例題一、A到B
輸入: 一個由a, b和c組成的字串(字串內容是隨機生成且長度在1~7之間)。
輸出: 將每個a替換成b。
範例:
輸入: abc
輸出: bbc
輸入: baccc
輸出: bbccc
輸入: bccbcc
輸出: bccbcc
解答:
a=b
例題二、大寫
輸入: 一個由a, b和c組成的字串(字串內容是隨機生成且長度在1~7之間)。
輸出: 將每個小寫字母替換成大寫字母。
範例:
輸入: abc
輸出: ABC
輸入: accca
輸出: ACCCA
輸入: bcaaacab
輸出: BCAAACAB
解答:
a=A
b=B
c=C
例題三、去重
輸入: 一個由a, b和c組成的字串(字串內容是隨機生成且長度在1~7之間)。
輸出: 將連續的相同字母替換成一個字母。
範例:
輸入: aabccca
輸出: abca
輸入: bcbaa
輸出: bcba
輸入: acabab
輸出: acabab
比起前兩題,這題才算開始,在看解答之前再想一下吧!
留一點…
空行…
思考一下…
要怎麼寫…
解答:
aa=a
bb=b
cc=c
遊戲畫面
遊戲畫面也是走一個極簡風格,彷彿真的在開發程式,或許對完全沒寫過程式的人來說會是一個有趣的體驗!
在遊戲內還開發了另一個小遊戲叫「盤古計畫」,是一個蠻有趣的策略小遊戲,故事大致上就是玩家扮演火星上的拓荒者,需要在有限的時間內發展火星殖民地同時盡可能的完成大型建設任務。
希望經過圖解以及各種例題能夠勾起你的興趣,主要也是想找一些伴一起討論,所以快點一起下載來玩玩並討論解法!(因為後面有點難QQ)
原文連結 ITechNote 科技隨筆
最後謝謝你願意花時間來看我的文章,如果還喜歡的話希望能獲得你的追蹤支持,以及拍手化讚為賞,讓我有機會可以發表一篇寫文章換啤酒的心得文o((>ω< ))o