Golden Thumb

1-on-1 tutor of chosen kids
個人資料
正文

大隱隱於市

(2019-09-22 14:24:24) 下一個

寫個魔方app來模擬標準魔方,很容易就把腦袋瓜轉懵圈了。因為6x9共54個小正方形,每個都要編上號,編號方式也不太容易確定(哪個做頭哪個做尾?),然後這個轉到那裏,那個轉到這裏。不說它有多難吧,也夠煩人的。

高智商的小P同學兩周前就下手了。前轉後轉,左轉右轉,上轉下轉,還有逆時針反轉。各種轉法都是以函數的形式寫出來。如附圖圖顯示,左麵背麵和底麵看不見,搞清楚三麵的每個色塊的邏輯關係需要多一點點的想象力。正麵“Front”直勾勾地盯著你,相對直白,透亮,怎麽看都屬於最容易對付的。

魔方行話中順時針轉上下左右前後分別用這些字母代表:U,D,L,R,F,B;逆時針轉上下左右前後分別用這些字母代表:U',D',L',R',F',B'。

小P同學很快就寫完了函數turnF(),然後其它11個類似函數也一個一個寫出來了,最簡測試好像還行,沒發現太明顯的問題。接著加了個洗牌按鈕,點擊後隨機洗牌10000次,也就是轉上10000次,每次隨機地從12種轉法中挑一種。

沒想到洗牌按鈕猶如神探,一按就出明顯bug,即同一方塊的兩個鄰麵出現相同顏色。每次我倆討論的內容,就是用各種不同的方法debug,比如寫test cases,或者肉眼觀察,再比如讓全部54個小正方形除一個外都用同一個顏色,然後跟蹤那塊唯一不同的色塊。他幹累了,我說,我來試試,我慢吞吞小心翼翼地手工跟蹤著某個色塊,還真找到一個bug,然後小P同學上去搞定了,我們還補上一個test case。我說:“OK I found one. Now it's your turn.”把皮球踢給他了。

兩周下來,他解決了不少問題,但隻要一洗牌,錯誤鄰色塊立馬現身。昨天晚上,他發信息給我:“there are still a few bugs in our actual app, but I cannot find them”。有點要投降的味道。鬼知道12種轉法哪個或哪幾個有問題。

今天上午,我說咱們用個偷懶的辦法試試運氣。讓小P同學在洗牌函數中,每次注釋掉一種轉法,隻用其它未注釋的11種參與洗牌。失敗,失敗,失敗,...,當注釋到 turnF() 時,問題消失了,怎麽洗牌都看不見錯誤鄰色塊了。我倆都不願意相信這個被認為最不可能出錯的“正麵Front順時針旋”轉是罪魁禍首。但事實就是事實,小P同學找到turnF() 仔細檢查,秒殺了最後這個頑固的bug。當時跳入我腦海的就是這幾個字“大隱隱於市”。

我知道小P同學中文還行,就在他的電腦屏幕上寫了“大隱隱於市”,並問道:“你知道這幾個字的意思嗎?”

......

 

[ 打印 ]
閱讀 ()評論 (0)
評論
目前還沒有任何評論
登錄後才可評論.