No Such Blog or Diary
judge Janken @sed 44Bへの道
- 2007-03-20 (Tue)
- プログラミング ( sed/wake/awk )
なんとなく収束してそうだしネタばれ的に書いてみる.この問題の鍵は勝敗判定部分を如何に簡単にするかだと思って組み始めた.とくに,じゃんけんはグー・チョキ・パーを巡回させても勝敗が変わらないので,適当な正規化をしてやるというのが短いコードへの近道かなぁと.
ということで,最初に考えたのが次の 73B のプログラム.
s/P\w*/5/g s/[SC]\w*/2/g s/[GR]\w*/0/g : y/025/250/ /^0/!b /2/c> /5/c< c=
こいつは,まず各種グー・チョキ・パーを 0・2・5 に変換し,次に一人目の手がグーであるように両者の手を回転させ,最後に二人目の手を見て勝敗を判定する.判定は,一人目がグーであるので,二人目がチョキなら '>',パーなら '<',残りは '=' となる.
基本アルゴリズムはこのままで,以降最初と二番目のステップが縮まっていく.
一段階縮まったプログラムは次の 64B のプログラム.
s/P/5/g s/[SC]/2/g s/[GR]/0/g : y/025/250/ /^0/!b /2/c> /5/c< c=
最初の一文字だけ見ればいいので無駄な置換をしないことにした.これで最初のステップの部分がだいぶ小さくなった.
が,一文字しか置換しないなら・・・ y コマンドでいいじゃん,と.この書き換えを始めて次の 49B を得た.
y/PSCGR/52200/ : y/025/250/ /^0/!b /2/c> /5/c< c=
で,yが二つに分かれてるのは無駄だなぁということで,先頭の y をひとつにくっつけてしまって最終的に次の 44B になった.
: y/PSCGR025/05522250/ /^0/!b /2/c> /5/c< c=
すっきり爽快無駄のないコード.Perl の現時点のコードより短い.やっぱり sed はいいなぁ.
- Comments: 0
- TrackBack (Close): -
magic_quotes_gpc のせいではまる…
phpプログラムに dat=<?xml version="1.0" encoding="UTF-8"?> というクエリを URLエンコードして POST で送ったら,あるサーバでは echo $_REQUESTdat
; の結果が <?xml version="1.0" encoding="UTF-8"?> になり,別のサーバは <?xml version=\"1.0\" encoding=\"UTF-8\"?> のようにクオーテーションがエスケープされてしまった.んで,原因がまったくわからず自分のプログラムがおかしいと思って無駄な時間を費やし…
結論としては magic_quotes_gpc などというものが勝手にエスケープしてくれていると.てきとうに調べると次のようなコードが見つかったので使ってみた.get_magic_quotes_gpc() というのがフラグになってるのねと.
function gpc_stripslashes($st) { if (get_magic_quotes_gpc()==1) { return stripslashes($st); } else { return $st; } }
参考:
http://www.spencernetwork.com/Forums/bin/YaBB.cgi?board=cgi;action=display;num=1122598707
- Comments: 0
- TrackBack (Close): -
Suica で地下鉄
- 2007-03-18 (Sun)
- 一般
ようやく Suica で地下鉄乗れるようになったそうなので早速使ってみたり.パスネットを取り出すのに比べてだいぶ楽だ… あとは Suica が全国で使えるようになってくれれば文句なし.ついでに,ETCみたいに通り抜けるだけになってくれるとありがたいなぁ.
- Comments: 0
- TrackBack (Close): -
そういや Same Origin Policy とかってあったけなぁ
結局 javascript 単体で他のホストの Web Servide を REST アクセスで利用するのも無理と.ブラウザ側の設定かえてすべてアクセス許可とかやればいいけどそんな作業をやらせたくない.しゃーないからメインのページを php で書いて通信をリダイレクトさせるか… だいぶ面倒になってきた.
- Comments: 0
- TrackBack (Close): -
Emacs Lisp をいじるの覚書 - プロパティというか face というか
- 2007-03-17 (Sat)
- ソフトウェア ( Meadow/Emacs )
テキストのプロパティは get-text-property で手に入る.face もプロパティなので (get-text-property (point) 'face) でカーソル位置の face がわかる.カーソル位置の face が適当な face だったら処理をするとかを次のように書ける.
(if (let ((prop (get-text-property (point) 'face))) (or (eq 'line-number-face prop) (eq 'over-under-full-face prop))) (しょり~))
これの場合 'line-number-face か 'over-under-full-face だったらなにかすると.
face の指定時に mouse-face を付けてあげるとマウスに反応して face を変えられる.font-lock-defaults に渡す font-lock-keywords のなかで,
(cons "\\(.*full ..box.*\\)\\(line.*\\)" '((1 over-under-full-face) (2 line-number-face)))
とか書くところを
(cons "\\(.*full ..box.*\\)\\(line.*\\)" '((1 (progn (set-text-properties (match-beginning 1) (match-end 1) '(mouse-face highlight)) 'over-under-full-face)) (2 (progn (set-text-properties (match-beginning 2) (match-end 2) '(mouse-face highlight)) 'line-number-face))))
のようにプロパティを設定する関数 set-text-properties を呼ぶようにする.よくわからんが 1 とか 2 とかの数字はマッチした subexpression の番号らしい.あとは,マウスが押されたときに関数を呼ぶように mode の設定のとこで
(local-set-key [mouse-1] 'hogehoge-suru-function)
とか設定しとけばいいみたい.
- Comments: 0
- TrackBack (Close): -
PEAR & Text_Highlighterをインストール
- 2007-03-16 (Fri)
- ソフトウェア ( Linux/coLinux )
http://faq.sakura.ne.jp/wiki/wiki.cgi?cgi%a4%c8php#i16 を参考にしつつ PEAR のローカルコピーを作る.最大の難点は download_dir の設定が抜けていたためダウンロードできずに嵌ったことだった.つーわけで,ここらを考慮しつつ以下のようなコマンド列を発行してどうにか成功.
pear config-create /home/user/pear .pearrc pear install -o PEAR pear config-set download_dir $HOME/pear/temp pear install -o channel://pear.php.net/Text_Highlighter-0.6.9
ついでに,php.ini にパスを通す記述をしておく.
include_path=".:/home/user/pear/pear/php"
ちょっとディレクトリ名があれかもしれない…
なにはともあれ,これで C++ や Java も使えるようになった.あとは elisp とか sed とかのための設定を作ればよいのかな.
- Comments: 0
- TrackBack (Close): -