[讨论] 解题目看漫画 (?)

楼主: s25g5d4 (function(){})()   2014-12-05 16:15:13
可能有人看标题就猜到我要说什么了
没错我昨天在西洽看到的 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
作者: mmis1000 (秋月恋枫)   2014-12-05 19:21:00
其实强制转数字可以 (+str) 就行了另外建议不要+=string,而是 arrayOfString.join('')这样会快很多
作者: mrbigmouth (大嘴先生)   2014-12-05 21:21:00
楼上的知识过期了 现在的js引擎大多做过字串加法优化至少在v8引擎直接用字串加法比较快
作者: mmis1000 (秋月恋枫)   2014-12-05 21:28:00
好吧,真的过期很久了http://pastebin.com/HSyjuQK1 不用函数稍微快一点

Links booklink

Contact Us: admin [ a t ] ucptt.com