我正試圖解決this HackerRank有關動態編程的問題。我想我已經提出了一個解決方案,可能效率不高,但我仍在嘗試。當我在STDIN中輸入一個長字符串時,Swift的readLine()是零
我提交了我的代碼,它未能通過一個大的測試用例,所以我試圖使用該測試用例來測試它自己。問題是當我輸入輸入數據時Xcode不響應,它不會崩潰,但它不會繼續執行代碼。
首先我有這段代碼來讀取一行包含n個空格分隔的整數,在這種情況下是68,738。
let arr = readLine()!.characters.split(" ").map({ Int(String($0))! })
過一段時間(幾秒鐘,甚至也許分鐘)的代碼崩潰說,它發現了零,而展開的可選值。
於是,我就和拆分指令如下:
let input = readLine()!
let arr = input.characters.split(" ").map({ Int(String($0))! })
在這裏我希望的代碼在第二行崩潰,試圖映射輸入字符串到整數數組。但是,代碼在嘗試readLine()時崩潰。輸入字符串是370,112長。
我也試過爲了使用此代碼至少得到字符串輸入:
let input = readLine()
let arr = input!.characters.split(" ").map({ Int(String($0))! })
但輸入爲零。我在這裏假設輸入字符串太長,但在32字節的CPU上不應該是2,147,483,648?我想這是足夠的空間,對吧?
我搜索了一下,發現readLine()中是否有任何限制,但什麼也沒找到。我會嘗試用另一種語言來解決這個問題,但我真的很想在Swift中做到這一點。有沒有我沒有看到的東西?
是的,線路長度有限制,請參閱http://unix.stackexchange.com/questions/131105/how-to-read-over-4k-input-without-new-lines-on-a-terminal例如 總之,這種方法不適用於大數據。 – Sulthan
我剛剛測試了> 30MB輸入文件的readLine(),沒有問題。你確定readLine()是罪魁禍首嗎? –
@Sulthan:'readLine()'使用stdio ['getline'](https://developer.apple.com/legacy/library/documentation/Darwin/Reference/ManPages/man3/getline.3.html)函數,並且唯一的「限制」是在第一個SSIZE_MAX = 2^63-1字節中必須出現換行符。 –