1. 程式人生 > >ThoughtWorks2019 提前批大作業附程式碼

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 ​. 

*可以的話,幫忙點個贊哦