トップ «前の日記 最新 次の日記»

2023-06-10 (Sa) [長年日記]

_ 原神 - 万葉育成素材が揃った

イベント。だーかーらー、なんで使い慣れてないキャラを使わせようとするの?? コレイとフィッシュルで激化。途中で心海を手に入れて超開花。 でも、どの元素が足りてないかよくわからんのだ…

昨日:

魔偶剣鬼が46必要。今39。あと7か。ここはあと1日あれば大丈夫だな。

47になった。これで揃った!

_ Ruby の集合 Set のスピード

require 'set'
require 'benchmark'

s1 = Set.new
s2 = Set.new
a1 = []
a2 = []

(1..10000000).each do |i|
  s1 << i
  s2 << i
  a1 << i
  a2 << i
end

Benchmark.bm do |x|
  x.report { s1.intersection(s2) }
  x.report { a1.intersection(a2) }
end

結果。

luna:~ % ruby ./set.rb
       user     system      total        real
   5.732658   0.197985   5.930643 (  5.931053)
   2.891157   0.124955   3.016112 (  3.016335)
luna:~ %

おおぅ... 配列の方が倍速…

Hash に intersection がないのが残念だけど。 あ、でも似た感じのがあるな。slice。

require 'set'
require 'benchmark'

N = 10000000

Benchmark.bm do |x|
  a1 = nil
  a2 = nil
  s1 = nil
  s2 = nil
  h1 = nil
  h2 = nil

  x.report {
    a1 = (0...N).to_a
    a2 = a1.dup
  }

  x.report {
    s1 = Set.new(a1)
    s2 = s1.dup
  }

  x.report {
    h1 = Hash[a1.zip([true] * N)]
    h2 = h1.dup
  }

  x.report {
    s1.intersection(s2)
  }
  x.report {
    a1.intersection(a2)
  }
  x.report {
    h1.slice(*h2.keys)
  }
end

結果。 stack overflow になったので、環境変数付けた。

luna:~ % RUBY_THREAD_VM_STACK_SIZE=100000000  ruby ./set.rb
       user     system      total        real
   0.435573   0.036930   0.472503 (  0.472699)
   6.292491   0.386776   6.679267 (  6.682895)
   7.581674   0.502779   8.084453 (  8.087664)
   6.016323   0.165930   6.182253 (  6.185322)
   2.971486   0.129879   3.101365 (  3.104045)
   3.460383   0.114955   3.575338 (  3.576446)
luna:~ % 

お。いい感じのスピードが出てる。

g2diary を Hash に戻した。 気持ちきびきび動いてる気がする。


編集 パスワード変更