Λάδι Βιώσας

http://profile.hatena.ne.jp/kenkitii/

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$>")
      ))))
    • -

追記
このエントリーを受けて、vimruby使いの某友人から動画が送られてきました。

見たらめっちゃ早い。EmacsからVimに乗り換えようかと真剣に思ったほどです。聞いてみたところ、録ったらなんだか倍速になってしまったとのこと。けどそれでも早い。ワンライナーとかじゃない、普通のコードで20秒ちょいくらいでしょうか。そんなわけで、上の動画をもうちょっと頑張ったものに置き換えました。