holysugarの日記

 | 

2008-11-12

はてな久しぶりすぎて 21:32 はてな久しぶりすぎて - holysugarの日記 を含むブックマーク はてなブックマーク - はてな久しぶりすぎて - holysugarの日記

どう書いたらどう見えるのかさっぱり忘れてた。

続・0の数を数える  続・0の数を数える - holysugarの日記 を含むブックマーク はてなブックマーク -  続・0の数を数える - holysugarの日記

あ、そうか。join は勝手に to_s してくれるのでした。気付かなかった。指摘ありがとうございます!

それなら、これで十分。

(0..1000).to_a.join.count('0')

map でも確かにできるけど、 to_a の方が意味がはっきりするような。

もっと短くするなら、こう(でもきっと遅いし、何しろぎょっとする)。

[*0..1000].join.count('0')

0の数を数える  0の数を数える - holysugarの日記 を含むブックマーク はてなブックマーク -  0の数を数える - holysugarの日記

0~1000に含まれる0の数を数える

身も蓋もないけど

(0..1000).map{|i| i.to_s }.join.count('0')

parin30parin30 2008/11/12 17:00 ∑( ̄□ ̄;)1行で!見事です!!

マニュアル調べたけどブロックなしでもいけますね(*゚ー゚)
(0..1000).map.join.count('0')

krystalkrystal 2008/11/12 21:13 Code Golf的に言うと優勝かも。
mapの使い方、調べます。

parin30parin30 2008/11/12 23:23 ∑( ̄□ ̄;)そんな方法まで!!素敵です!!

prinypriny 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

holysugarholysugar 2008/11/13 12:17 「0 の前」じゃなくて、「0..10 の前」ですね。「*(0..10)」 と解釈されています。

また、「*」については、 http://www.ruby-lang.org/ja/man/html/_A5E1A5BDA5C3A5C9B8C6A4D3BDD0A4B7.html の最初の項の中にあります。

まあ、この例は Golf 的でやりすぎだと思うので実際のコードの参考にしないでくださいね。:)

# しかし、配列式は厳密にはメソッドじゃないはずなのに * が使えるのはなぜだろう。

holysugarholysugar 2008/11/13 12:28 あとはるびきちさんの「Array.new(1001, &:to_s).join.count('0')」はなるほどと思いました。まだまだ修行が足りてません > 自分。

prinypriny 2008/11/13 21:59 勉強になります。ありがとうございます。
どんなことが起きているかわかったら、どうして [*0..1000].join.count('0') のほうが処理が遅そうなのかわかるかと思ったのですが、処理速度を理解できるようになるには、もっともっと精進しなくちゃいけないみたいです。

ゲスト



トラックバック - http://rubyist.g.hatena.ne.jp/holysugar/20081112
 |