〜2007年2月中旬〜
あなごるのversion infomationsを見るとawkはmawkなので、
やはり同じもんがいいだろうとインストールを試みるもyumでは存在しないという。
ソースを取ってきてconfigureを実行すると
checking for -lm... no checking for log... no configure: error: Cannot find a math library. You need to set MATHLIB in config.user
と言われてしまう。古いautoconfで作られたconfigureだとFC6では合わないらしい。
configure.inもあるのでautoconf 2.59を実行したらなんかやたらと時間がかかる。
そのまま放っておいたら急に重くなった。
gkrellmを見ると使用メモリスワップ共に最大に張り付いてる。
これはやばい。が、もう時既に遅し。どうにもならなくなってしかたくリセット。
再起動後もう一度実行してtopで見てみたらm4がどんどん膨らんでいく。
これはm4のバグなのかな。頃合いを見て^Cで止めた。
面倒なので直接configureをいじることにした。問題なのは
configure:532: error: too few arguments to function 'log'
ってことなので引数に1.0を与えておしまい。これでmawkもインストール完。
- About:
- GDC is a D language front end for the GNU Compiler Collection. It supports a number of targets and nearly all features of Digital Mars D.
- About:
- FSVS stands for ?Fast System VerSioning?, ?File System VerSioning? or ?Full System VerSioning?. It aims to become a complete backup/restore tool for all files in a directory tree or whole filesystems, with a subversion repository as the backend.
Square rootを解いてみると
mawkとgawkの違いで大きな差になることがわかる。
というわけでmawkをインストールすることをすすめる。
行シリーズを出題。相変わらず簡単な問題。
- About:
- Bakefile is cross-platform, cross-compiler native makefiles generator. It takes compiler-independent description of build tasks as input and generates native makefile (autoconf's Makefile.in, Visual C++ project, bcc makefile etc.).
ついsplitには正規表現を指定しがちなんだけど、
% gawk 'BEGIN{split("hoge",a,//);for(i in a)print a[i]}' e h o g % mawk 'BEGIN{split("hoge",a,//);for(i in a)print a[i]}' hoge
のようにmawkは//じゃだめなのだ。
% mawk 'BEGIN{split("hoge",a,"");for(i in a)print a[i]}' h o g e
のように""を指定するように。もうね、2日ぐらい悩んだよ。 ちなみにソートされてるように見えるのは短い文字列のうちだけなので使えないよ。
さすがにこんなsubjectのメールがきたら開くよねえ。
中身はダイエット関連のspam。そう来たか。
明日はもっと高くなるらしいよ。
入力なくてもsedが使えるようになったから楽しい。
Smiley Triangle
はサイズが同じだから同じなんだろうなと思ったら同じだった(くどい。
i:\n:- s/$/:-)/ :l p s/$/))/ /.\{64\}/!bl
微妙に数値が違うけど、適当にそのあたりの数字を試しただけなので。
つねに行き当たりばったり。
今日はsed版 Hole in oneを縮めた。
% echo 'ooo' | sed 's/o/x/2' oxo
というのを使って。ピンポイントで置き換えられて気持ちいい。
これを元にawkで書き直してみたら2倍近くのサイズに。
s///pとsub();printじゃ比較にならないしなあ。
別の方法を考えないと。
そのままで動くよ?バージョンの違いかな。
% cat x.sh gawk '{print NR, $0}' <<"EOF" | nl abc $PWD $TMP def EOF % bash x.sh 1 1 abc 2 2 /tmp 3 3 4 4 def % bash --version GNU bash, version 3.1.17(1)-release (i686-redhat-linux-gnu) Copyright (C) 2005 Free Software Foundation, Inc.
変数を展開させるなら"EOF"じゃなくてEOFで。
出した後で行よりは文字のほうが面倒臭くてよかったかなと思った。
Rubyはgolfを考えなくてもこう書くという方法で。
PerlはSchw(ryで。AWKは、あ、まだか。明日解こう。
golfで1Bかせぐためにvim '+se bin noeol'するのは常套手段ではあるが、
すぐ忘れるし面倒になってきたんで~/.vimrcに
autocmd BufRead,BufNewFile *golf/* setl bin noeol
ってのを追加してみた。これで*golfって名前のディレクトリ配下のファイルが
勝手にそういう状態になる。
それにしてもnoeolってなんでbinaryじゃないと効かないんだろう?
multi_key sortの前にsort charactersをバケットソートからバブルソートへ変更。
10Bほど減った。しかしあと11Bもあるのか。うーむ。
みんなまじめに解いてないんだなと安心した。
出題するときはoutputのサイズは多目にしよう。
awkにはjoinがないが、$1,$2,$3,..へつっこんで$0で参照するとjoinのできあがり。
逆にFS="/";$0="hoge/foo"とすれば$1,$2で参照できてsplitもどき。
$を制するものはawkを制す。
結局sedでソートはしてない。というか無理、そんなの。
同じ文字がいっぱいあるので圧縮を試みた。
すぐに思い浮かぶのは
s/A/aaaa/g s/B/bbbb/g
のように置き換えることだが、これは思ったほど縮まない。
そこでinfo sedしてみると\Lという素敵な機能を発見した。これにより
s/[A-Z]/\L&&&&/g
と書ける。すばらしい。あとは&の数はサイズが最小になる値を見つけるだけ。
それはRubyでone-linerで書いたんだけど、すでにない。
/H/c\ !,Hdellloorw s|.*|..///:AAAABcccDDEEEEEeeeFGggggHHhhIIIijkkLLlMNNNNnnnOOOOoopppRrrrrSSSsssTTTTTTttUuvvvvWwyyy| s/[A-Z]/\L&&&&&/g
正直sedだとこんなんばかり。