Rubyの魔神 このページをアンテナに追加 RSSフィード

   「Ruby」は宝石の魔神のイメージ(The Jinn of the Ruby)
   [VB] [VB6] [Android] [電子工作] [個人メモ] [仕事メモ] [アイデア] [TstLink] [開発] [CE] [LTSA] [自動化] [Qt] [OCaml] [TOOLS]
   [3Dプリンタ] [RAA] [Forge]   [機能別索引] [逆引きRuby] [マニュアル] [るびま] [標準ライブラリ] [るりまサーチ] [Try! Ruby] [PRaggerまとめ] [ピジョン・ブラッド]
   [Rubyコーディング規約] [プログラミングのオキテ] [Rubyist SNS] [TOOLBIS]
   [RubyネットワークProg] [druby] [コードなにがし] [RDocテンプレ] [Ruby/Tkサンプル]
   [WAVE] [Xperia] [github] [twitterなど] [Java] [EA] [マクロ]

2013-09-25

遅延評価lazy

遅延評価lazy - Rubyの魔神 を含むブックマーク はてなブックマーク - 遅延評価lazy - Rubyの魔神 遅延評価lazy - Rubyの魔神 のブックマークコメント

Ruby2.0ではlazyというメソッドがEnumerableモジュールに追加されるらしいよ。

怠惰で短気で傲慢な君に贈るRubyの遅延評価

面白いですね。

(1..1.0/0).lazy.map{|n|n**2+1}.take(10).to_a

本当だったら1から無限の配列に対してmapを行ったら永遠の時間がかかるけど、必要になった時だけ処理するから有限時間で扱える。

配列の先頭からn個取り出すtake()というのも便利そう。

与えられた数字よりも小さい素数の数

与えられた数字よりも小さい素数の数 - Rubyの魔神 を含むブックマーク はてなブックマーク - 与えられた数字よりも小さい素数の数 - Rubyの魔神 与えられた数字よりも小さい素数の数 - Rubyの魔神 のブックマークコメント

JS:素数の数を数えてください

与えられた数字よりも小さい数字の中で素数がいくつあるかを調べるプログラムを作ってください

挑戦者求む!【ウチに来ない?】JS:素数の数を数えてください by CodeIQ運営事務局 アプリケーションエンジニアを募集する企業│CodeIQ

JSはわからないけどRubyだと

require "prime"
puts Prime.each(10000).to_a.size

n番目の完全数を求める関数

n番目の完全数を求める関数 - Rubyの魔神 を含むブックマーク はてなブックマーク - n番目の完全数を求める関数 - Rubyの魔神 n番目の完全数を求める関数 - Rubyの魔神 のブックマークコメント

4個まで計算するのが限界かな。

perfect_number = ->m{(1..1.0/0).lazy.select{|n|(1..(n-1)).select{|x|n % x == 0}.inject(&:+) == n}.take(m).to_a}
perfect_number[4]#=> [6, 28, 496, 8128]

再帰バージョンも作ってみたけど、4つ目を計算したらirbが吹っ飛んだ。

sod = ->n,m{m == 0 ? 0 :(n % m == 0 ? m + sod[n,m - 1]:sod[n,m- 1])}
pn =->n{sod[n,n-1] == n}
p (1..1.0/0).lazy.select{|x|pn[x]}.take(3).to_a #=> [6, 28, 496]
トラックバック - http://ruby.g.hatena.ne.jp/garyo/20130925