shonen.hateblo.jp

やったこと,しらべたことを書く.

配列とEnumerable,どちらが高速?

問題

いくつかのrubyコードに対して実行時間を計測する.

require 'benchmark'

# p `ruby -v`

foo = (1..5050505)
[
    'foo.reduce(:+)',
    'foo.to_a.reduce(:+)',
    'foo.to_a.reverse.reduce(:+)',
    'foo.each.reduce(:+)',
    'foo.each.to_a.reduce(:+)',
    'foo.reverse_each.reduce(:+)',
    'foo.reverse_each.to_a.reduce(:+)'
].each do |e|
    puts e
    p Benchmark.realtime { eval(e) }
end

どのコードが高速で,どのコードが低速だろうか?

続きを読む

jsonのparserを書く

2018/08/05 致命的なミスを修正しました

JSONとは

javascriptをベースに設計された,軽量のデータ交換フォーマット.

詳しくは,https://www.json.org/json-ja.html

目的

構文解析を頑張るC++で書いたら型がだるかったのでRubyで書く.

jsonを読み込みたいだけならrequire 'json'

縛り

  • テスト目的以外での json モジュールの使用禁止.
  • #to_i 禁止.ただし1文字の変換を除く.
  • Regex禁止.ただし文字判定を除く.
  • `置換操作メソッドの禁止.

hexadecimalでズルしました…

続きを読む

手抜きjson構造体をC++11かC++14辺りでざっくり書く.

ざっくり.

JSONとは

気味の悪い拡張子. javascriptをベースに設計された,軽量のデータ交換フォーマット.

詳しくは,https://www.json.org/json-ja.html

仕様の省略

仕様の全てを実装することはそんなに大変では無いものの,ブログに載せられない量になってしまいそうだったので,仕様を省略する.

実装するのはobject*1numberだけ.arrayobjectで代用が効くので実装しない.

仕様ではkeystringだが,numberで代用.

*1:Hash.ソースコードではPairs

続きを読む