Flower Field 是熱門遊戲《踩地雷》的暖心改編版。 遊戲的目標是找出花園裡所有的花,方法是利用數字提示,這些提示會指出與某個方格直接相鄰(水平、垂直、對角)的花有幾朵。 「Flower Field」曾收錄在義大利、德國、南韓、日本與台灣的 Microsoft Windows 地區版本中。
你的任務是在一座完成的花田花園中,為空格加上花的數量。
花園本身是一塊由格子組成的長方形棋盤,每個格子不是空格(' ')就是一朵花('*')。
對每個空格,數一數與它相鄰的花有幾朵(水平、垂直、對角)。 如果這個空格沒有相鄰的花,就讓它保持空白。 否則就用相鄰花的數量取代它。
舉例來說,你可能會收到像這樣一塊 5 x 4 的棋盤(為了在畫面上顯示,這裡用 '·' 字元來代表空格):
·*·*·
··*··
··*··
·····
你的程式應該把它轉換成這樣:
1*3*1
13*31
·2*2·
·111·
所有的輸入與輸出都是 ASCII。
Rust 的String和&str都是 utf8,所以你可能會以為"Hello".chars()很單純,但它其實必須逐一檢查每個字元,看它佔了 1、2、3 還是 4 個u8。
如果我們知道某個&str是 ASCII,就可以呼叫.as_bytes(),並把底層資料當成&[u8](位元組切片)。
逐一走訪 ASCII 位元組切片的速度快上許多,因為完全不涉及碼點,每個 ASCII 位元組的長度就是一個u8。
你能在不複製輸入的情況下完成這道挑戰嗎?