Ruby
概要 昨日、自分自身を出力するHaskellプログラムを生成するOCamlプログラムを生成するSchemeプログラムを生成するRubyプログラムを生成するJavaScriptプログラムを生成するCプログラムを書いた。 #include<stdio.h> int main(){char*g="var p=print;p('puts %%^(form</stdio.h>…
きっかけ: るびま これを読んでpolyglotするかーって思った. 今回のコンセプトは 初めてなのでやさしくHello, world! 好きな言語を盛り込む 140文字以下 以下,Schemeと言いつつGauche決め打ちである. ソースコード できあがったのがこれ. ;(#)={-"^<"v '…
Ruby2.0.0-p195をインストール. makeすると gcc: installation problem, cannot exec '/usr/local/bin/i686-apple-darwin9-gcc-4.0.1': No such file or directory dtrace: failed to compile script probes.d: Preprocessor failed to process input progr…
rejectはデフォルト値を受け継ぐが,selectは受け継がない. Hash.new(42).select { nil }[0] # => nil Hash.new(42).reject { nil }[0] # => 42 リファレンスマニュアルの説明の微妙な違いは,この挙動の違いから来るものなのか? key, value のペアについ…
def f(&b) lambda(&b) end f {}.lambda? # => false フンギャー
(1) module A def a 42 end end module B include A end class C include B end p C.new.a (2) module A def a 42 end end module B end class C include B end module B include A end p C.new.a
http://golf.shinh.org/p.rb?Modular+Exponentiation 危うく31Bのまま1位タイが取れないところだった.しかも短くなったのがpidという基本技だったという…るびまゴルフのおかげで思い出して助かった. setpid後一発で通らなかったら死んでた. setpidの後,…
binding.eval("self") より binding.eval { self } よね.Object#instance_evalとかはできるのに,なんでこっちはできないんだろう.
100切ってる人も居る中,353bytesだったので久々にやってみたら213までいった.それでも上位陣との差は歴然.なんか根本的にやり方が違う気がするのだが,真面目に解くのが間違ってるのか?
getoptとかって言語(やライブラリ)によってかなり使い方が違っていて,いつも困る.しかも,どれも(慣れるまで)それなりに分かりにくくて,どう書くのがその言語 "らしい" のかよくわからないことが多い.特にOCamlのArg.parseは何故か副作用ばりばりでやり…
RubyでQuineでgolfしてみた.
NEWSに書いてあるメソッドが入ってない気がするんだけど気のせいだろうか. <
themeは,タイトルスライドで theme を指定して選択する.例: : theme rabbit自分でthemeを書く場合は,theme名がhogeなら rubyの$LOAD_PATH/rabbit/theme/hoge/hoge.rb のように配置する. この間使ったthemeの一部. include_theme("rabbit") include_the…
define_method(:"#{x}") { 2行目でtab押すとこんなエラーメッセージが出てインデントされない. ruby-forward-string: Search failed: #("[^\\]\\(\\\\\\\\\\)*[\"]" 0 14 nil 14 15 (selection-face nil candidate-face nil action nil fontified t face fo…
どうやら,1.9のtest/unitは1.8のそれとは別物で,中身はminitest/unitらしい.AutoRunner.runを使おうとしたらなかった.代替手段は示されてないように見える.というかそもそもリファレンスマニュアルがry 1.9.1が出たからにはここら辺は揃ってるのかと思…
部分式呼び出しを使って短くしてみた.一度treeを作ってから再帰的に正規表現を構成する戦略. naiveな実装で1124bytes,頑張って探索して11141110bytes.名前付きグループがあると括弧の意味が変わる問題がなければ909bytes(Gオプションが使えれば910bytes…
この前から気になってたんだけど,名前参照と番号参照を同時にしたくて困った. http://www.geocities.jp/kosako3/oniguruma/doc/RE.ja.txt 名前付きキャプチャがあるかないかで()の意味が変わってしまう.今,プログラムで正規表現を生成してて,人間が付け…
昨日までの正規表現にバグがあった. /\.#{digit}+#+\.#*#{suffix}/ は /#{digit}+#+\.#*#{suffix}/ が正解.短い方は1957bytesに,長い方は2793bytesになった.
鬼車の,名前付きキャプチャがあると()がキャプチャしなくなるのを利用して1969bytes.これ以上は部分式呼び出しを使わないと大幅な削減は厳しそう. いろいろキャプチャするバージョンは3061bytesになった.強欲マッチを止めれば2805bytes. 部分式呼び出し…
テストの仕方に問題があって,ある文字列にきっちりマッチするかどうかで確かめてたんだけど,トークンとして抜き出してくるにはそれでは不適切なことがわかった.そこで肯定先読みを使って,区切り文字が続いてるかどうかを調べるようにした. それから,問…
短くしてたんだけど,\dが使えない所為で1割伸びた.2217bytes. /(?:(?:#b(?:#[ei])?|(?:#[ei])?#b)(?:(?:[+-]?(?:(?:[01]+#*)|(?:[01]+#*\/[01]+#*)) )|(?:[+-]?(?:(?:[01]+#*)|(?:[01]+#*\/[01]+#*))@[+-]?(?:(?:[01]+#*)|(?:[01]+#*\/[ 01]+#*)))|(?:[+-…
irb:0> /\d/ =~ "5" => 0 irb:0> /\d/.encoding => #<Encoding:US-ASCII> irb:0> /\d/n.encoding => #<Encoding:US-ASCII> irb:0> re = Regexp.new(/\d/.source.force_encoding(Encoding::ASCII_8BIT)) => /\d/ irb:0> re.encoding => #<Encoding:US-ASCII>ぎゃーす. irb:0> /\d(?:\x80(?!))?/n =~ "5".force_encodin</encoding:us-ascii></encoding:us-ascii></encoding:us-ascii>…
indexでは参照できるけど名前では参照できなかったので,参照できるようにしてみた. (2009-10-25修正):マッチしてない部分の名前での参照がバグってたので修正. --- orig_strscan.c 2009-10-18 18:39:10.000000000 +0900 +++ strscan.c 2009-10-25 00:26:…
3839bytes.もっと短くしたいなぁ.見辛いので適当に改行を挿入. /(?:(?:(?:#b)(?:(?:#[ei])?)|(?:(?:#[ei])?)(?:#b))(?:(?:(?:(?:[+-])?)(?:(?:(?:[01 ])+#*)|(?:(?:(?:[01])+#*)\/(?:(?:[01])+#*))|(?:(?!))))|(?:(?:(?:(?:[+-])?)(?:(?: (?:[01])+#*)|(?…
開き括弧と閉じ括弧から,正規表現を生成. def charsetq(c) case c when "[", "-", "]", "\\" "\\#{c}" else c end end def _rec_regexp(str) Array.new(str.length) {|i| [Regexp.quote(str[0, i]), charsetq(str[i, 1])] } end def rec_regexp(s1, s2) a1…
自信はない. re = /(?<block>#\|(?:(?:[^#|]|#[^|]|\|[^#])++|\g<block>)*+\|#)/ str = <</block></block>
ところで,require_relativeっていいよね.1.9から入ったのかな. なんかhttp://svn.ruby-lang.org/repos/ruby/trunk/NEWSに書いてあるけど,1.9.1の途中から入ったのかな?
実行速度測ってみた. CPUは,2 GHz Intel Core 2 Duo. $ ruby19 -v ruby 1.9.1p243 (2009-07-16 revision 24175) [i386-darwin9.8.0] $ time ./sample/calc2.rb 19985 real 0m1.085s user 0m1.066s sys 0m0.014srequire_relative '../rdpg.rb' Lexer = Par…
構文規則(の左辺)を文字列リテラルでも書けるようにした. Lexer = ParserGenerator::Lexer.new(/[ \t\n\r\v]+/) { token(:operator, /[+-]/) {|ma| ma[0].to_sym } token(:operator2, /[*\/]/) {|ma| ma[0].to_sym } token(:integer, /[0-9]+/) {|ma| ma[0]…
度重なる仕様変更でこんな感じに書くようになった. Lexer = ParserGenerator::Lexer.new(/[ \t\n\r\v]+/) { token(:operator, /[+-]/) {|ma| ma[0].to_sym } token(:operator2, /[*\/]/) {|ma| ma[0].to_sym } token(:integer, /[0-9]+/) {|ma| ma[0].to_i …