holysugarの日記

2008-11-30

num2astrisk 01:58 num2astrisk - holysugarの日記 を含むブックマーク はてなブックマーク - num2astrisk - holysugarの日記

http://rubyist.g.hatena.ne.jp/krystal/20081128/1227867175

正規表現でやるごり押し感なのが好きだけど、でも思いついたのはこれ。

def num2astrisk(n)
  counter = "0"
  result = ""
  while counter != n
    result << "*"
    counter.succ!
  end
  result
end

holysugarholysugar2008/12/02 12:27succ できるなら Range 作れるよなあ。勉強になります。("1"..n).map{"*"}.join でいいね。

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')

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

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

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

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

prinypriny2008/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

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

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

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

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

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

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

2006-12-13

拡張ライブラリよくわからん 拡張ライブラリよくわからん - holysugarの日記 を含むブックマーク はてなブックマーク - 拡張ライブラリよくわからん - holysugarの日記

ふつうのrbファイルで定義されてるクラスの子クラスを,C拡張ライブラリでrb_define_classで作ることはできないのかな? (今のところ簡単にぐぐっただけ) 第3引数に何書いたらいいかさっぱりわからん.グローバルで見えるところにあるとしたらどこなんだろう.

とりあえず家帰ったらRHG持ってくることにしよう…….

(意味ないかもしれんけど)たとえばRailsコントローラ拡張ライブラリとしてCで書いたりできるんだろーかという思考実験

2006-09-27

Array() その2  Array() その2 - holysugarの日記 を含むブックマーク はてなブックマーク -  Array() その2 - holysugarの日記

そうですよね

自分でも歩きながら考えたり,さっき検索したら[ruby-dev:19155]ってのも出てきてやっぱり設計的(?)に手抜きすぎかと.

まぁ,もちろん普段はそんなの書かないんですが,ではどこで使ってしまうかというと.

Rails で param[:hoge] が複数の値を取るとすると,(GETだと)パラメータは ?hoge[]=alice;hoge[]=bob のような形になると思うんですが,?hoge=foo と書かれた時も同じように扱いたい場合が出てきて,それが増えたらいつのまにか使いまくっていた,という…….やっぱりどう見ても手抜きですね.

あとこう書けるのを今更知りました.

*label = label        # 配列でなければ配列化
*label = *label        # 配列でなければ配列化
ちなみに Object#to_a は警告が出るので使わないようにしています.でもString#to_aは(Object#to_a相当の機能に思えるのに)警告が出ないなぁ.Enumerable だからか.

というか  というか - holysugarの日記 を含むブックマーク はてなブックマーク -  というか - holysugarの日記

俺はコードを信用しなさすぎだしエラーエラーでいいじゃん. そして使いまくっているといいつつ直す箇所は3箇所だった.いいすぎだ. 最初は Model.find_tagged_with(params[:id]) とか書くために書いたっぽい.

*a = a と *a = *a  *a = a と *a = *a - holysugarの日記 を含むブックマーク はてなブックマーク -  *a = a と *a = *a - holysugarの日記

http://rubyist.g.hatena.ne.jp/secondlife/20060927/1159341594 これなんですが,自分の意図するところは違ってました(すいません).
*a = a 
だと a = [a] と同じ.
*a = *a 
だと a = Array(a) と同じ.意図するのはこちらでした. マニュアルの該当箇所 しかし,これを書くなら素直に a = Array(a) でいい気はします.

2006-09-26

Array()  Array() - holysugarの日記 を含むブックマーク はてなブックマーク -  Array() - holysugarの日記

メソッドの最初にメソッド引数Array()で変換.

def f(array_or_non_array)
  array_object = Array(array_or_non_array)
  # array_object.collect ...など
end

これはださい?

  1. ださい
  2. ださくない

個人的にはださい感じがするけど使いまくってる…….設計が悪いのか.それともふつーでいいんだろうか.