ThoughtWorks2019 提前批大作業附程式碼
說明
* 本作業限時3天完成
* 作業完成後必須附上 Readme 純文字文件(推薦使用 markdown 排版)
* Readme文件中必須描述如何執行單元測試或主程式來證明作業的正確性(至少針對測試用例輸
入能夠得到對應輸出)
* 作業的輸入和輸出必須和題目的測試用例輸出嚴格一致
* 可以選用擅長的語言完成,例如C、C++、Java、C#、Javascript、Python、Scala等
*請注意作業的保密性,不要將作業放在Git等渠道上面
校招題目
用計算機生成迷宮是一個很有趣的任務。我們可以用 道路網格(Road Grid) 來表示迷宮的道路,那麼 3 x 3
的 道路網格 ( 圖-1 左 )可以對應一個 7 x 7 的 渲染網格(Render Grid) —— 圖-1 右 的方式(迷宮的牆是灰
色的,道路是白色的):
如果我們將迷宮 道路網格 兩個相鄰的 cell 連通,則可以打通道路。如 圖-2 所示:
連通 道路網格 有如下的約束條件:
● 每一個 cell 只能夠直接與相鄰正南、正北、正東、正西的 cell 連通。不能夠和其他的 cell 連
通。
● 兩個 cell 之間的連通一定是雙向的。即 cell(0,0) 和 cell(1,0) 連通等價於 cell(1,0) 和
cell(0,0) 的連通。
要求1:將迷宮渲染為字串
現在我們希望你書寫程式,將給定迷宮的 道路網格 ,渲染為字串輸出。例如,其使用方式如下(虛擬碼
,僅做演示,實際實現時請應用實際語言的程式設計風格)
Maze maze = MazeFactory.Create(command);
String mazeText = maze.Render();
其中 command 是一個字串。它的定義如下:
● 第一行是迷宮 道路網格 的尺寸。例如 3 x 3 的迷宮為 3 3 ,而 5 x 4 的迷宮為 5 4。
● 第二行是迷宮 道路網格 的連通性定義。如果 cell(0,1) 和 cell(0,2) 是連通的,則表示為:
0,1 0,2 ,多個連通以分號 ; 隔開。
例如,如果給定輸入:
3 3
0,1 0,2;0,0 1,0;0,1 1,1;0,2 1,2;1,0 1,1;1,1 1,2;1,1 2,1;1,2 2,2;2,0 2,1
則輸出字串為(如果當前 渲染網格 為牆壁,則輸出 [W] 如果為道路則輸出 [R]):
[W] [W] [W] [W] [W] [W] [W]
[W] [R] [W] [R] [R] [R] [W]
[W] [R] [W] [R] [W] [R] [W]
[W] [R] [R] [R] [R] [R] [W]
[W] [W] [W] [R] [W] [R] [W]
[W] [R] [R] [R] [W] [R] [W]
[W] [W] [W] [W] [W] [W] [W]
要求2:檢查輸入的有效性
在處理輸入的時候需要檢查輸入的有效性。需要檢查的有效性包括如下的幾個方面:
● 無效的數字:輸入的字串無法正確的轉換為數字。此時,該函式的輸出為字串 ”Invalid
number format . ”
● 數字超出預定範圍:數字超出了允許的範圍,例如為負數等。此時,該函式的輸出為字串
”Number out of range . ”
● 格式錯誤:輸入命令的格式不符合約定。此時,該函式的輸出為字串 ”Incorrect command
format .
*可以的話,幫忙點個贊哦