トップ 追記

yuizumi's diary

2008|01|02|03|04|05|06|07|08|09|10|11|12|
2009|01|02|03|04|05|06|

2009-06-23

健康診断

一説には新入社員にとって最大の仕事とも言われる健康診断を受診した.今年は豆粒との戦いを制したらしく 1.5/1.5 を記録した.結果が読み上げられたときに思わず「えっ」と叫んでしまった(大声ではない).

思わず叫ぶあたり,まだ学生気質が抜けきっていない.


2009-06-22

定期券

昨日のこと.武蔵小杉から都内某駅まで最短経路で向かったのだが,武蔵小杉から日比谷線を経由する定期券があるので,そっちを回ると安上がりになる.ところが,実際のところは,最短経路で行こうが定期区間を経由しようが,改札の駅が完全一致するので,どちらの経路を利用しようと安上がり経路で料金が計算されるらしい.気づかなかった.

ちなみに帰りは溝の口を回ったのだが,途中に定期区間を含めると安いようで,なかなかあり得ない経路で料金が計算された.


2009-06-21

ひとりごとの垂れ流し

一部の人にはオフラインで明らかにしてしまったので. ひとりごとの垂れ流しを始めました.たいしてひとりごとを放つこともないと思いますが,興味のある人がいればどうぞ.


2009-06-20

身近な負論理(否定論理)

携帯電話の電波だけをオフにしたいとき,私の端末(W63H)では「電波OFFモード」を「ON」に設定する.なんとわかりにくい.


2009-06-18

人身事故

22:00 を過ぎているのに人身事故で電車の運転見合わせとか勘弁して欲しい.とりあえず市バスをつかまえたはいいのだが,どうも遠回り経路のバスに乗ってしまったらしい.隣駅まで行くだけなのに妙に時間がかかる.しかも今どこを走っているかわからない.素直に歩くなり待つなりすべきだったか.

帰ったらバスの経路を勉強しておこう.

ちなみに事故は東海道線内で発生して,京浜東北線と南武線が巻き添えを食らったらしい.


2009-06-09

UTPC 2009 (続き)

最近は実践から離れていたから,きっと今一つな成績になるだろう思っていたが,結局は 8 位と昨年並みでなかなかの成績だった.

昨年度と比べると,最初のほうの問題は若干易化したが,後半の問題が難化しているので,全体としては難化したと言ってよいのではなかろうか.実際の結果を見てもそのとおりになっている.

続きを読む


2009-06-07

UTPC 2009

とりあえずぶつだけさらしておくことにする.

提出物一式NYSL


2009-06-02

時間帯に対して不変の事実

東横線の各駅停車(の 8 号車)が混雑するのは渋谷(特に中目黒)から都立大学までの区間と決まっている.


2009-05-31

またまた経路探索

いつになっても武蔵新城駅というのは最適経路がわからない.

問. 有楽町駅と日比谷駅のいずれかから武蔵新城駅まで向かうとき,以下の条件のもとで終電をつかまえるには,一番遅い場合でそれぞれどの駅からどの電車に乗ってどのような経路をたどればよいか.

  1. 武蔵小杉駅を経由するとき
  2. 武蔵溝ノ口駅を経由するとき
  3. 武蔵中原駅から徒歩で帰ることを認めたとき

ちなみに,今日(正確には昨日)は 1. のケースにあたる経路で帰ってきたのだが,定期券が活用できるとかいうひどい理由で選択したわりには最適経路を選んでいた.

続きを読む

豚インフルエンザのとばっちり

今年はいまだにくしゃみが出るので今日(正確には昨日)も耳鼻咽喉科に向かった.木曜日が薬を飲んでもきつかったとか,今日は薬を飲み忘れたわりには何ともないとか(夕方になってから鼻の中がかゆくなってきたので飲んだけれど),症状の強弱は相変わらず先生ご自身と一致しているらしい.もっとも,正確な原因はわからないそうだ.

マスクが貴重品になってしまっておいそれと使えない.


2009-05-18

Xi

最近は行き帰りの電車内でソリティア(クロンダイク)をしていることが多かったが,もう少しゲームらしいもの(ソリティアのファンがいたら申し訳ない)をやろうと思ったので,Xi の Advanced [es] 対応版を購入した.数年ぶりながらゲームの感覚はわりとすぐに思い出したのだが,カーソルキーの操作にはなかなか慣れない.特に,右に移動するときに少しずれて隣の電源ボタンを押してしまうと…!!

〔追記〕 だんだん慣れてきて,とりあえず ENDLESS モードで 2 万点はとれた.しかし,これをケータイでやると親指がとても痛くなる.やりすぎると確実に身体上の問題を引き起こしそう.


2009-05-17

花粉症

求愛活動の巻き添えだったらそろそろ終わってもいいものなのに,今年はどうも鼻水やらくしゃみが止まらない.心配になってきたので以前にもお世話になった耳鼻科に駆け込んでみたら,先生が「花粉,花粉w」(表現に誇張あり)とのたまう.何でも先生ご自身も花粉症持ちのようで,木曜日がきつかったことを伝えたところ「私とおんなじ」(原文そのまま)とのこと.残念ながら認めざるを得ないようだ.ヒノキはそろそろ終わっているはずだから,イネあたりじゃないかとのこと.げげ,イネって飛散時期が長かった気がするぞ.


2009-05-13

作業量の見積もり

どうも最近は作業量を過小予測することが多くてよくない.今日はとうとう深夜残業にまで手を出してしまった.といってもほんの 30 分ばかりなので,人によっては「俺(or 私)よりも全然早い」とか言われてしまいそうだが.

ところで

最近レベル年齢が上がって 19 進法で 19 歳になった.


2009-05-11

空気清浄器

今年は求愛活動が(一部を除いて)終わったはずだが,くしゃみと鼻水が止まらない.特に部屋にいるときに症状が現れることが多いような気がしていたので(ただし外出中でも時折現れる),これはハウスダストの影響かもしれない,ということで安物の空気清浄器を買ってみた.効果のほどは…今のところよくわからない.


2009-05-01

ひさしぶりに

d.y.d. の記事に関して.とりあえず cointoss という名前ははなはだまずい(明らかに random() を思い浮かべる).名前を変えるだけでも明瞭さに違いが現れそう.

まあ,名前の問題は置いておくことにして,単純に任意引数の関数を用意するだけでも十分という気はする.

def where_is_max(array)
    max_i = 0

    for i in 1...(array.size)
        if array[max_i] < array[i]
            max_i = i
        elsif array[max_i] == array[i]
            max_i = arbitrary(max_i, i)
        end
    end

    max_i
end
def merge(xs, ys)
    zs = []

    until xs.empty? || ys.empty?
        if xs[0] < ys[0]
            zs.push(xs.shift)
        elsif xs[0] > ys[0]
            zs.push(ys.shift)
        else
            zs.push(arbitrary(xs, ys).shift)
        end
    end

    zs + xs + ys
end

将来の言語処理系は以下のプログラムに対して median-of-median とかを持ち出したりするのだろうか.

def partition(array, i, j, pivot)
    # ...
end

def qsort(array, i, j)
    unless i == j
        k = partition(array, i, j, arbitrary *(i..j))
        qsort(array, i, k - 1)
        qsort(array, k + 1, j)
    end
end

最低要件を満たすだけならば,以下の関数を定義するだけで足りる.実用上の利便を考えてランダムチョイスにしておいたけれど,別に先頭要素を返すだけでも構わない.

def arbitrary(*args)
    args[rand(args.length)]
end

上の補足(05/02)

ひとつ気づいたことがあるので補足しておきたい.k.inaba 氏のアイデアは cointoss にしても either { ... } or { ... } 構文にしても,「どちらの文を実行しても構わない」という,どちらかと言えば「制御の流れ」に着目しているところがあるが,上の arbitrary() は「どちらの値をとっても構わない」という,どちらかと言えば「値」に着目しているところがある.なお,二項演算子 |?| は後者の立場に近いが,氏は cointoss に対する糖衣構文的に持ち出している点には注意すべきかもしれない.

たとえば,(あまり適切な例でないかもしれないが)以下のようなコードがあったとしよう.

void do_something(int n)
{
    either {
        for(int i = 0; i < n; i++) { ... }
    }
    or {
        while(n-- > 0) { ... }
    }
}

これを cointoss に置き換えることは容易だが,arbitrary() で置き換えるには,それぞれのブロックについて中身の処理を実行して無意味な値を戻すような関数を用意するか,以下のような少々不自然なコードを書かなければならない.

void do_something(int n)
{
    if(arbitrary(true, false)) {
        for(int i = 0; i < n; i++) { ... }
    }
    else {
        while(n-- > 0) { ... }
    }
}

ただし,上記の例を見てわかるように,cointoss は arbitrary() から容易に実装できるし,また逆もしかりなので,おそらくは本質的な問題ではないだろうと思われる.