配列と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辺りでざっくり書く.
ざっくり.
- 2018/6/29: ソースコード一部修正,parseを追加.説明も増やした.
JSONとは
気味の悪い拡張子. javascriptをベースに設計された,軽量のデータ交換フォーマット.
詳しくは,https://www.json.org/json-ja.html
仕様の省略
仕様の全てを実装することはそんなに大変では無いものの,ブログに載せられない量になってしまいそうだったので,仕様を省略する.
実装するのはobject
*1,number
だけ.array
もobject
で代用が効くので実装しない.
仕様ではkey
はstring
だが,number
で代用.