30秒でかけた FizzBuzz 問題
そっか、三項演算子使うと短くかけるのか、なるほど。
n3 = lambda x: (x % 3 == 0) and 'Fizz' or '' n5 = lambda x: (x % 5 == 0) and 'Buzz' or '' for x in range(1, 101): print (n3(x) + n5(x) == '') and x or n3(x) + n5(x),
うーん、、、けどなんかむりやりっぽい。
やっぱなー、2分とかからずに紙にかけるはずだ、っていわれてもなー、問題読むのに30秒考えるのに30秒かかったとして、そんなんで、短いコード思いつかないしなー。でそうすると残り1分しかないし。。
というわけで、頑張って昨日のコードを1分以内で書いてみた。
いちおう30秒くらいでかけたので一安心。ちょっと、、、いやかなり、インチキしてますが。ていうか緊張した。
ちなみに上のスクリーンキャスト取るのに使ったsnippetは、こんな↓感じです。試してみたい人は、ロードパスの通ったところに、snippet.elをおいておいてね。
(require 'snippet) (add-hook 'python-mode-hook (function (lambda () (setq-default abbrev-mode t) (snippet-with-abbrev-table 'local-abbrev-table ("for" . "for $${element} in $${sequence}:\n$>") ("if" . "if $${True}:\n") ("elif" . "elif $${True}:\n") ("p" . "print \"$${text}\",\n$>") ))))
-
- -
追記
このエントリーを受けて、vim&ruby使いの某友人から動画が送られてきました。
見たらめっちゃ早い。EmacsからVimに乗り換えようかと真剣に思ったほどです。聞いてみたところ、録ったらなんだか倍速になってしまったとのこと。けどそれでも早い。ワンライナーとかじゃない、普通のコードで20秒ちょいくらいでしょうか。そんなわけで、上の動画をもうちょっと頑張ったものに置き換えました。