どう書いたらどう見えるのかさっぱり忘れてた。
あ、そうか。join は勝手に to_s してくれるのでした。気付かなかった。指摘ありがとうございます!
それなら、これで十分。
(0..1000).to_a.join.count('0')
map でも確かにできるけど、 to_a の方が意味がはっきりするような。
もっと短くするなら、こう(でもきっと遅いし、何しろぎょっとする)。
[*0..1000].join.count('0')
0~1000に含まれる0の数を数える。
身も蓋もないけど
(0..1000).map{|i| i.to_s }.join.count('0')
parin30 2008/11/12 17:00 ∑( ̄□ ̄;)1行で!見事です!!マニュアル調べたけどブロックなしでもいけますね(*゚ー゚)(0..1000).map.join.count('0')
krystal 2008/11/12 21:13 Code Golf的に言うと優勝かも。mapの使い方、調べます。
parin30 2008/11/12 23:23 ∑( ̄□ ̄;)そんな方法まで!!素敵です!!
priny 2008/11/13 01:08 高校生のころ、先生が自分で板書した数式を腕を組みながら見つめて、「う~ん、美しい」って言ったことあったたけど、今、その気持ちがわかったような。シンプルで、しかも、わかりやすいっていいですね。話は変わりますが、[*0..10]みたいに、0 の前に「*」をつけると、[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10] になるのは、どんなカラクリですか?調べてみたけど、わからなかったです。p (0..10).class したときは Range が返ってくるけど、p (*0..10).class したらエラーになりました。回答 or ヒントお願いしますm(_ _)m
holysugar 2008/11/13 12:17 「0 の前」じゃなくて、「0..10 の前」ですね。「*(0..10)」 と解釈されています。また、「*」については、 http://www.ruby-lang.org/ja/man/html/_A5E1A5BDA5C3A5C9B8C6A4D3BDD0A4B7.html の最初の項の中にあります。まあ、この例は Golf 的でやりすぎだと思うので実際のコードの参考にしないでくださいね。:)# しかし、配列式は厳密にはメソッドじゃないはずなのに * が使えるのはなぜだろう。
holysugar 2008/11/13 12:28 あとはるびきちさんの「Array.new(1001, &:to_s).join.count('0')」はなるほどと思いました。まだまだ修行が足りてません > 自分。
priny 2008/11/13 21:59 勉強になります。ありがとうございます。どんなことが起きているかわかったら、どうして [*0..1000].join.count('0') のほうが処理が遅そうなのかわかるかと思ったのですが、処理速度を理解できるようになるには、もっともっと精進しなくちゃいけないみたいです。
ちょっとしたコメント
マニュアル調べたけどブロックなしでもいけますね(*゚ー゚)
(0..1000).map.join.count('0')
mapの使い方、調べます。
シンプルで、しかも、わかりやすいっていいですね。
話は変わりますが、[*0..10]みたいに、0 の前に「*」をつけると、[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10] になるのは、どんなカラクリですか?
調べてみたけど、わからなかったです。
p (0..10).class したときは Range が返ってくるけど、p (*0..10).class したらエラーになりました。
回答 or ヒントお願いしますm(_ _)m
また、「*」については、 http://www.ruby-lang.org/ja/man/html/_A5E1A5BDA5C3A5C9B8C6A4D3BDD0A4B7.html の最初の項の中にあります。
まあ、この例は Golf 的でやりすぎだと思うので実際のコードの参考にしないでくださいね。:)
# しかし、配列式は厳密にはメソッドじゃないはずなのに * が使えるのはなぜだろう。
どんなことが起きているかわかったら、どうして [*0..1000].join.count('0') のほうが処理が遅そうなのかわかるかと思ったのですが、処理速度を理解できるようになるには、もっともっと精進しなくちゃいけないみたいです。