No Such Blog or Diary
wake で golf して wake up な
- 2010-07-23 (Fri)
- プログラミング ( sed/wake/awk )
起きて朝飯食いながら wake golf して楽しく頭の体操.
最近気づいた wake golf で大事なこと:投げっぱなしジャーマン.
Haskell golf でも同じなのだけど,必要な出力が終わったらエラーで停止しても問題ないので,最後のエラー回避のためのコードは必要ない.エラーは投げっぱなしで.例えば,最後には空文字列になってしまうようなものはエラー回避に":"だけの行が必要となるが,こんなのは書くだけ無駄であると.
それに連動して,エラーで停止する前に必要な出力を負えなければならないので,string literal をアクションの前に置くようなスタイルにしておかないと投げっぱなしジャーマンできない(今のインタプリタがアクション部分を前方から処理してるから&多分make的にそういうセマンティクスだからだけど).
ということで,投げっぱなし Smileys Triangle.
:":\n:-":-) .{1,65}:"\n$&"$&))
そして,sed の y コマンドのありがたみを感じる今日この頃.y のおかげで物事の大小比較が非常にコンパクトに書けていた気がする.今のところ wake で大小比較をコンパクトに実現する方法が思いついていないので,その辺をもっと修業しないとなかなかソート系に手が出ない.頑張ろう.
- Comments: 0
- TrackBack (Close): -
何故低速時のブレーキングに前ブレーキを使うと怒られるのか
- 2010-07-22 (Thu)
- 一般
理由:「後ろブレーキの方が効きが鈍いから安定して停まれるでしょ」
今日の1時間目は青4ゼッケンで,回避と経路設定といつものコース周回と.
で,低速時に前ブレーキをチョンッと使ってしまうくせについてまた注意を受ける.停止状態から2m進んで止まるだけに前ブレーキ使うな,後ろブレーキだけで十分だ,とか.ただ…,後ろで十分だからといって前を使ってはいけない理由になっていないわけで.まあ,積極的に使う理由もないのだけど.そして後ろブレーキで十分なら後ろブレーキの方が安定するというかスムーズというかカッコいいというかなのも納得出来る.
とはいえ,「後ろブレーキと前ブレーキで安全なのは後ろブレーキだ.何故なら後ろのほうが効きが鈍いからだ」ってのはどうなのだろうか? 重心の進行方向に対する力点とサスペンションの位置の違いのせいなんじゃないのかなぁとか.それを言っても肯定も否定もされず上の回答を頂いたのだけど… タイヤしか考えない状態でも前後のブレーキの効きが違うのかどうか私は把握していない.そして,仮にバイクを後ろ向きに走らせたなら,どちらのブレーキがより効くのだろうか? そしてどちらが安全なのだろうか?
もう一つ.色々邪魔が入るので直線で30km/h弱で走ったのだけど,出来るなら40km/h位の速度を出しなさいと言われた.まあ,交通を円滑にする必要があるのだから速度を出せるなら出すべきであるというその言葉には納得.が,その理由として「速度を出したほうが安定するんだから速度出せ」という言い方はどうなのだろうか? 20km/hも出ていれば十分安定して走行できる.故に安定のために40km/hを出せというのはおかしい.今ひとつ理路整然としない説明ばかりだったなぁという感想.
そういえば,コース周回中にすぐ後ろとかすぐ横を原付に乗って追っかけられたのだけど… 色々な点の確認だとは思うけれどそういうことするなら先に言っておいて欲しい.はっきり言って煽り耐性とか突然の危険への対処とかのテストかと思った.
ついでに,運転にはメリハリが大事だと言われたのだが,同様に指導にもメリハリは大事だよね,とか.常に淡々と同じ調子でしゃべるので,どれが重要なことなのかの重み付けが全く分からなかった.メリハリの利いた教官だとそこら辺が分かりやすくて安心なんだけどなぁ… とりあえず今日の人とは色々と相性良くなかった気がする.
その次の時間はセット教習で,シミュレータ+1時間の学科.危険な行動を取るNPCが沢山の世界を安全に動きまわるのが使命.でも1回死んだ! 左に停車中の車があり,対向車線には大きいトラックが来ていて,その右奥の小道から車が右折してきている,とかいう状況で右折車にあたった.ぶっちゃけ右奥の小道を認知していなかったのが原因.流石に道を認知していなかった以上,危険予測も何もあったものではない.事故の85%が認知に原因がある(他は判断ミスと操作ミス)ってのも非常に納得.ちなみに3人同時にシミュレータだったのだけど死んだの俺だけorz
さて,次回は青5でみきわめ一歩手前.スラロームとか一本道のバランス走行あたりかね.
- Comments: 0
- TrackBack (Close): -
wake で(ry その2
- 2010-07-22 (Thu)
- プログラミング ( sed/wake/awk )
wake がバージョンアップしてアクション部分でのエスケープが許可された.これは空白とか改行と入れるのに有効かなと.
ということで,ゴルフしたコードを書き換えた.ついでに,PCRE(ないしperl)の正規表現で^と$が文字列中のnewlineにどこでもマッチできることに気がついたので,それ関連で\nを置換しまくる.
char pyramid.前のは無駄ばかりだったけどだいぶすっきりした感じ.
:$< ([^ ]+)([^ ].*):$1\ $2 ( *)\S(.*):$1$2\ "$&\n" +:
swap lines.アクションのエスケープと正規表現の^とで縮めた結果,murky-satyrさんに追いついた.
-:$<\n (.+?)(^.+?\n)(.*):"$2$1"$3
追いつく前のは\nを付けるの面倒だなぁとかやってごちゃごちゃと:
-:$< (.*?\n)(.*?)(\n|\Z)(.*):"$2\n$1"$4
あとはもう少し複雑そうなのをということで Half Sierpinski をば.なんとなく同じパターンがたくさん現れるので(下のl関数とu関数)… そろそろ foldr とか map とかの高階関数が欲しくなってくるかなぁと思いつつ,実現すんのは(要素への区切り方というかリストの表現とかが結局)面倒だなぁとか思ってみたり.
-:$(x) x:"#~" c(.*?) *~(.*):"$1\n"c$2 .* {16}.:c$& u(.*?)~(.*):"$1$(U$1)~"u$2 l(.*?)~(.*):"$1$1~"l$2 U.(.*):" "U$1 [A-z]*: .+:$(l$&)$(u$&)
- Comments: 0
- TrackBack (Close): -
カーブと急制動
- 2010-07-21 (Wed)
- 一般
今日も物凄く暑かったけれど,1時間目は幸いにしてシミュレータ.街中走行で昼と夜と.教官との雑談により,第二段階からはMTとATの人を混ぜてシミュレータ教習していいと法で定められていると知る.実際,今日はATの人もいたので途中でガシャコンとシートを取り外してMT⇔ATの換装を目の前で見れた.無駄がなくていいねぇ.でもソフト面ではそのOSのサポート期限っていつ迄でしたっけとか聞いてみたかったな…
んで,2時間目は実車に乗ってカーブと急制動.カーブは時速30kmとかで曲がるのと,障害物を避けるのと,指定されたところで曲がっている途中で止まるのと.ぶっちゃけ最後のカーブ中に停車とかマジきつかった,不安定.障害物避けは,障害物がど真ん中に落ちていたのでカーブの内側に避けた.多くの人が外側に避けるらしいけどそんなもんなのだろうか? そして時速30kmでカーブは車体寝かせりゃ余裕なので問題なし.カーブ出口で時速40kmまで加速していたのは内緒.話によると,車体倒せなくて膨らんで外のパイロンへ激突という人がいるらしい.車体倒しすぎて滑ってく人はいたのだろうか? 急制動は第一段階から余裕だったので問題なし.心配があるとすれば雨降ったときにどうなるか分からないところ.
おまけで一本橋やってた感想:腕の力を抜く&ニーグリップ&姿勢を正す&半クラ&後ろブレーキ,という指示通りの状態をかけ合わせると時間が倍でもオッケーなくらい安定.腕の力抜くってのが意外と効く気がした.
そして次回は青4で何かを体験(多分指示に従って左右中央に移動して止めるヤツかね)らしい.
- Comments: 0
- TrackBack (Close): -
wake で(ry
- 2010-07-21 (Wed)
- プログラミング ( sed/wake/awk )
eval を使うようにしてみた.
char pyramid.eval 使って空白入れられるのね.
:$< ~:" " ([^ ]+)([^ ].*):$1$(~)$2 (.*)%:"$1\n" ( *)[^ ](.*):$1$2$(~) $&% +:
palindromize.eval を使うと評価位置を限定できるのでプログラムがすっきりする.
-:$< (.*)#.?\1(.*):"$2" (.)(.*#)(.*):$2$1$3 : ([^\n]+)(\n(.*))?:"$1$($1#)\n"$3
とりあえず,空白入れたり評価位置を特定するのにevalを使うということは理解した.
- Comments: 0
- TrackBack (Close): -
wake で遊び続けている
- 2010-07-21 (Wed)
- プログラミング ( sed/wake/awk )
なんか大昔に Makefile だけで n回Hello, world! をやった時を思い出すなぁ(make から呼べるコマンドは echo と make のみという縛りで,コマンドライン引数に n が指定される).
char pyramid.右辺で空白入りのトークンをどうやって作ればいいかわからず,とりあえずチルダをセパレータにしておいて最後に空白化している.無駄だ…
-:$< ([^~]+)([^~].*):$1~$2 (~*)[^~%]([^%]*):$1$2~ $&% ~+: ~(.*%):" "$1 (.)(.*%):"$1"$2 %:"\n"
Permutations.昨日のと同じ.これも最後の空白挿入の操作がお馬鹿なのでどうにかしたい.
:!012345% (.*)(!.*)(.)%(.*):$1$2%$3$4 $1$3$2$4% .*!%.+: (.)(.+!%):"$1 "$2 (.)!%:"$1\n"
palindromize.sed バージョンの移植.正規表現にターゲット全体をマッチさせるというのに慣れない.s コマンドののりで一部にマッチするパタンを書いてしまう.一度別のターゲットに分解してしまうと他のターゲットの情報を使えないので(evalを使えば結合できるから問題ない気がする),自分のプログラムだと全体をひとつのターゲットとして保持したまま一部を書き換えるということが多い.そこで前後の文脈部分のマッチを忘れて動かないとか叫ぶことしばしば.うーむ.eval の使い方を考えるか.
-:$< ([^\n%]+)(\n(.*))?:$1%$1# $3 (.*)%(.*)#.?\2(.*):"$1$3\n" (.*)%(.)(.*#)(.*):$1%$3$2$4
意外と仕様に合わせた出力のフォーマッティングが面倒な気がする.何かが分かっていないだけかもしれなけれど.
そして,さっき気づいたけど wake って googlability 低い名前だなぁ…
TODO: eval を使ったプログラミング作法を考える.
- Comments: 0
- TrackBack (Close): -