SRM502 div2 反省

問題自体は易し目じゃなかったのかと思われるので、easyしかパスしなかったのが悔やまれる。

Easy

ソートして、グリーディに解けるので易しかった。

Middle

見落としでドボン。
StringのSetからあるSuffixを含むものをのぞく際に、最初の発見でbreakしていた。。。
ちょっとした勘違いだが、致命的。
しかもjava
for(String str:S){
...
if(...) S.remove(str);
}
とかできないという仕様。
便利なようで不便なfor-each文。
仕方ないので、除きたい要素をSetで持っておく。
Setの差(S1/S2)を求める関数もない模様なので、地道にfor文でremoveを繰り返す。

Hard

動的計画法がうまく出来ない
うまくいけそうだと思って書いてみたらDPテーブルが大きすぎてOutOfMemoryに。
64MByteまでらしい。
2次元配列+3重ループで綺麗にかけるっぽいのでもう少し考えてみよう。
修行が足りないでござる。。。

今回の成績


250: 221.33
500: Falied System Test
1000: Compiled
Challenge Succeeded: 0
Challenge Failed: 0

total: 221.33

評価:もっともっと頑張りましょう

SRM501反省

・作業環境はちゃんと整えておくべき
直前にPCが使えなくなった。。。
ロスとしては5分程度だったけど、やはりひびくので。
あと、ソースのテンプレートもいまいちなので、ちゃんとしておくこと。

・考え手から書く
書きながら関数の仕様変更しなきゃとかなるとぐちゃぐちゃしてくるので、疑似コード仕上げた上で書く。
なかなかあせってできないけど、結局こっちの方が速い。
訓練も足りないな。
せっかく解法は合っていたのに、細かいミスで500点問題をサブミットし損ねた。

・日頃からコードを書く
最近忙しいとか、前日にSRMの開催知ったとかあるけど、上を目指すなら地道にやるべき。
累乗したいけど、Math.何だっけみたいになってつらい。
1日1問を再開するべきかな。

・今回の成績


250: 155.44
500: Compiled
1000: Opened
Challenge Succeeded: 0
Challenge Failed: -25

total: 130.44

評価:もっと頑張りましょう

正規表現によるインクリメンタルサーチと置換

ファイルを編集するときにいちいち単語をヒットさせて消去するよりもサーチ→置換ってできたら便利だ、誰か実現してるはずと思って調べてみた。

Meadow/Emacs memo: インクリメンタルサーチと置換

どうやらデフォルトで(emacs 22で確認)C-u C-sで正規表現によるインクリメンタルサーチが出来て、サーチ中にM-%とするとそのまま置換に移れる。
サーチ中にC-RETでサーチ開始位置から終了位置までをマーク出来る。
あと、C-wでヒットしている部分の単語をヒットさせることが出来る。

終了時のカーソル位置はRETだと検索語の後ろ、Meta-mだと検索語の前、C-gだと検索時の位置になる。

充実したエディタである。

chromeでemacsキーバインド

emacsキーバインドじゃないと編集作業が出来ないので、なんとかしようとしてみた。

まず、chromeに限らずgnomeの設定でeamcsキーバインドにできるみたい。
http://www.eml.ele.cst.nihon-u.ac.jp/~momma/wiki/wiki.cgi/Ubuntu/Gnome%E3%81%A7Emacs%E3%82%AD%E3%83%BC%E3%83%90%E3%82%A4%E3%83%B3%E3%83%89.html
ただ、カーソル移動は出来るがC-yでの貼りつけが出来ないなど、ちょっと不満。

chromeの編集としては、Edit with EmacsというExtensionがあるが、emacsを起動しておく必要があるし、そこまでするならemacsで編集して貼りつけでもいいかなという気がする。
Google Chrome のテキストエリアを外部エディタで編集する Edit with Emacs - 酒日記 はてな支店

やはりfirefoxのfiremacs + LoLが現状では一番と言わざるを得ないかな。
firemacs4.0がバグってなければ。。。

magic mouseぱねぇっす

magic mouseどうなんだろうと思いつつ牽制してたんだけど、使ってみるとかなり使いやすいことに気づいた。

ブラウズするのにいちいちキーボードに手を伸ばさなくてよくなる。

トラックパッドより、キーボードよりマウスって人には向いていると思われる。

Better Touch Toolを使えばアプリごとにショートカットの設定ができる。

左右のtap、tip tap(片方に指をおいてのtap)、single finger swipe、two fingers swipeとtwo fingers tap、three fingers tapあたりにもろもろのショートカットを入れてやればかなり機能も入れられる。

swipeとかはマウスの真ん中あたり(前後的な意味で)を意識してやると判定されやすいっぽい。

macでしか使えないのが何よりの弱点ではある。。。

参考:
Magic Mouseを使い倒す! - BetterTouchToolの設定をさらしてみる - うむらうす

pdfの部分印刷

論文の先頭2ページと後ろ2ページを読めばだいたい内容がつかめるので、その部分を印刷するためのシェルスクリプト
ディレクトリprintに入っているpdfの先頭と後ろを印刷して、ディレクトリrestに入れる。
ページ数が奇数のときは後ろ3ページを印刷する仕様。



#! /bin/bash
file=`ls print`
for i in $file; do
N=`pdfinfo print/$i | grep Pages | awk '{print $2}'`
echo $N
if [ $(($N % 2)) == 1 ]; then
echo odd
pdftk print/$i cat 1-2 $(($N - 2))-$N output out.pdf
else
echo even
pdftk print/$i cat 1-2 $(($N - 1))-$N output out.pdf
fi
lpr -P Generic-PostScript-Printer-2 -o PageSize=A4 out.pdf
mv print/$i rest
done

lprでの印刷

emacsでソースの印刷したいけどlprとかよくわからんってことでぐぐってみた。
とりあえず、
nkf -e hoge.txt | e2ps | lpr
を知っておくと幸せになれるようだ。
acroreadのプリンタの設定を見たところ
lpr -P プリンタ名 -o PageSize=A4 -o Duplex=DuplexNoTumble
くらいでA4で両面印刷できるっぽい。



あと、1枚に2ページ印刷のやり方くらいを調べておきたい。

ubulog: Emacsから印刷する
http://www.swlab.ice.uec.ac.jp/announce/srcprint.html