〜2008年1月中旬〜
改行の扱いが結構面倒。
ふつうの問題なら最終行の改行の有無は問題にならないが、
Quineだけは厳密に同じものを求められる。
すでに
Quineを解いているので、それをベースにBashはできた。
Bashにはif,fiやcase,esacがあって一番相性がいい言語と思われる。
いや実のところ今日記を書いてて思いついただけで出番はまったくなかった。
これを解くには頻繁に文字列を反転する必要にせまられるが、
vimなら
:.!rev
で現在行を反転することができる。revコマンドは別に必要。
さすがにそんなことは。
sedの別解を晒しとこう
s:$: ('-')\ /|_|\\\ | |: /l/{s:):&/:;s:\\::} /r/{s: :\\:;s: /: :} s:.*t::
で77B。最初は両手を下げているとこから始まる。
lがあれば左手を上げ、rがあれば右手を上げる。
特に変なこともしてない。
たとえば複数形のsを処理したい時、って99 bottles限定な気もするけど、
"bottle#{i>1&&:s}"
と書けるわけです。
"bottle#{'s'if i>1}"
よりも2B短い。
色がつかないと寂しいので
au BufNewFile,BufRead *.grb setl filetype=ruby
を~/.vimrcに追加。
某ふらたんからのパッチを全面的に取り入れた。
アルゴリズムが全面的に変わって、
1文字ごとに.*を入れるとみなす正規表現で検索することになった。
たとえばputsはpsでいけるようになる。
% goruby -e 'p Kernel.methods.grep(/^p.*s.*/)[0]' :puts
こうなると予想不可能なので、これを探すのがshortest_abbreviation。
% goruby -e 'p shortest_abbreviation :puts' "ps"
のように教えてくれる。また
% goruby -e 'p shortest_abbreviation :shortest_abbreviation' "sh"
なので
% goruby -e 'p sh :puts' "ps"
でok。
あとStringにArrayのmethodが混入というか、
% goruby -e 'p "123".map{|x|x*2}' "112233"
ということができるようになってたりとか、
do_whileやdo_untilが入ってたりする。
MIDIアニメ職人が帰ってきてた。
vimには-Wオプションがあるからこれを利用するとgolf作業が楽になる。
-W <scriptout> 入力した全コマンドをファイル <scriptout> に保存する
実際には
% vim -u NONE -W foo.log # いろいろ試行錯誤 % mv foo.log foo.vim % vim foo.vim # 無駄を省く % vim -u NONE -W foo.log -s foo.vim # いろいろ試行錯誤 % mv foo.log foo.vim % vim foo.vim # 無駄を省く % vim -u NONE -W foo.log -s foo.vim # いろいろ試行錯誤
というように段階踏むような感じで繰り返していけば間違いなく作業できる。
about:configでextensions.checkCompatibilityと
extensions.checkUpdateSecurityをfalseに。
keyconfigは
この変更で。
Tab Mix Plusは
開発バージョンを使う。
あとはそのままで問題なく動いてる。
Fx2に比べるとすごく軽い。このまま使ってみることにした。
いつのまにかスペースバーがjとスクロールが合体したような感じになってて心地いい。
スペースバーだけ押してれば未読が全部読める。
Azureusがなんかテーマがらみでエラーになって立ち上がらないわけで。
[1 20, 00:50] Error initialize Main Window org/gnu/gtk/IconTheme
ぐぐってみると
New azureus doesn't work
まさにそのものだ。
jvmを変えるといけるとの情報もあるがそんなの面倒だしなあ。
とりあえず、野良のazureusを起動したら動いた。というかなんか別物になってる!
テーマが変わりすぎだ。Advancedってタグを選んだら戻った。
いやVUZEってロゴはそのままだな。なんだよVUZEって。
Shibuya.rbのNice Boat.がRuby 1.9で動かないと、
会長が嘆いていた。問題は今ruby-devでも話題になってるString#[]。
'Nice Boat.'.gsub(/./){|m|$Z||=[5,-1,6,-3,85,55,-14,-51,-2,52];(m[0]+$Z.shift).chr}
のm[0]が1.9だとStringになってしまうのでまずい。
m.ordにすれば通るが1.8では通らない。
というわけで、1.8にもordをという話も出てたりする。
見た感じbytesしてzipを使いたいところだが、
zipはブロックを使うとnilを返すからなあ。
そこが使い辛いな。
ああ、mapを挟めばいいのか。
'Nice Boat.'.bytes.zip([5,-1,6,-3,85,55,-14,-51,-2,52]).map{|m,z|(m+z).chr}.join