看板 Ajax 關於我們 聯絡資訊
可能有人看標題就猜到我要說甚麼了 沒錯我昨天在西洽看到的 XDDD https://paiza.jp/poh/enkoi 讓我驚訝的是他居然吃 Node.js! 有沒有人想嘗試搞爆他們伺服器的 (X 這實在太有趣了,所以來試著挑戰看看 順帶一提 C/C++ 的 Time Limit 是 3 秒 可是用 Node.js 寫有整整 16 秒可以用喔 XD 其實三題都很簡單 我就當作 Functional Programming 練習 先附上我的解答,內含一大堆 bad practice 傷眼注意 http://pastebin.com/E2A1un5V 一些感想: - stdin 讀進來加到字串有可能會炸記憶體,這跟 V8 限制有關 正確的做法是用 buffer 不過這裡應該是不用擔心那麼多 (而且程式複雜度會成指數上升) XD - stream interface 在 v0.10 有改變,我這邊還是用舊的寫法 - split 這邊可以簡化成 .split('\n') 就好 不過因為我在 windows 上測試所以要濾掉 \r - 第二題有一點 tricky, 因為一行只有三個數字 reduce 呼叫時若沒有傳入第二個參數,那第一次呼叫 callback callback 的第一第二個參數會是 array[0], array[1] 所以這裡 callback 只會被呼叫兩次 => 所以這邊判斷 index != 1 的時候 p, c 分別是前兩個數字 將 p, c 相減,若為負則設為 0, 傳到下一次呼叫中 index == 1 時將 previousValue (p) 乘以 currentValue (c) - 將字串強制轉數字有很多種方法 保險一點用 parseInt, parseFloat... 等等 或是炫泡解法 ~~str, -(-str)... 等等 這東西應該是討論到爛掉了,不過要慎用 XD 之所以用 p - -c 不用 p + ~~c 是因為這樣可以省一個字元 (? - .map, .reduce 這些寫起來效能一定比不上迴圈 To iterate is human, to recursive, divine! - 最後一題寫不好還是會 TLE 阿...XD 我一開始想不出不設區域變數的方法 把所有資料都傳進 reduce 又太慢 (真的會 TLE) 後來想出用 .bind 改變 this: http://pastebin.com/0p3fYXq3 這樣真的沒區域變數,可是比較慢 XDD --
jumbotest:反正操妳妹應該只是基本作 她開心就好 01/21 15:40
jumbotest: 操01/21 15:40
jumbotest:我沒有罵髒話01/21 15:44
-- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 140.117.181.25 ※ 文章網址: http://www.ptt.cc/bbs/Ajax/M.1417767318.A.FF3.html
mmis1000: 其實強制轉數字可以 (+str) 就行了 12/05 19:21
mmis1000: 另外建議不要+=string,而是 arrayOfString.join('') 12/05 19:48
mmis1000: 這樣會快很多 12/05 19:48
mrbigmouth: 樓上的知識過期了 現在的js引擎大多做過字串加法優化 12/05 21:21
mrbigmouth: 至少在v8引擎直接用字串加法比較快 12/05 21:22
mmis1000: 好吧,真的過期很久了 12/05 21:28
mmis1000: http://pastebin.com/HSyjuQK1 不用函數稍微快一點 12/05 21:43