7:00 前に起床。よその部屋での目覚めはどうしても気分が悪いものだ。 昨日の宿題であるベッドのシーツの洗濯を始める。曇り空だが、今日は本当に晴れるのか。

朝飯がないので外出。隅田公園、言問橋、浅草へ。 途中コンビニの雑誌コーナーを確認。近代麻雀を発見。中は覗けない。むこうぶちが気になる。

7:55 西友浅草 ROX 店で食料を調達。ここのセレフレジはいつもエラーになる。

  • レーズンロール (5)
  • ポテチ塩
  • おにぎり野沢菜
  • おにぎりおかか

8:20 向島の部屋に戻る。シーツを洗濯機から取り出してベランダのステンレス物干し竿に干す。 なんと竿に触れたシーツが真っ黒になる。慌てて雑巾で竿を拭き取る。こんなんばっかり。

テレビでスッキリを見ながらおにぎりを食う。PC を開いてこれを書いたり予定を確認したりする。 本日もろくな一日にならなそうだ。

10:20 PC を持参して外出。なぜか業平公園西口の電話ボックスへ移動。 インターネットに接続してフリーメールアドレスを確保する。 次に錦糸町に行くつもりだったが、やはり鞄が重いのでいったん部屋に帰る。

蒸し暑いのでやはり重いのを我慢して用事を済ますべきだったかと後悔する。

11:10 戻る。メールを取得したので、関係する紙もファイルも更新する。 天気予報を見ると今日と明日とで暑いだの雷雨だの面倒くさいことになっている。

12:05 またぞろ外出する。大横川親水公園、オリナス錦糸町、錦糸公園、オリナスと移動しておやつ休憩。

次にアルカキット錦糸町に移動。9 階の書店をぐるりと回り 6 階の au ショップで当世の携帯電話事情を勉強させてもらう。 いちばん安いプランを見積ってもらうが、ローンの期間によって大差なく月々 4500 円前後とのことだ。 私の感覚が完全にズレている。基本料金で千円くらいのコースが存在しているかと思った。 とりあえず見積もりメモを受け取り辞去。頭を抱える。

ハローワーク墨田に行って電話番号がブランクのままの求職票を提出する。ありがたいことに受理される。 窓口職員が OCR のカードを見ながら端末にキーボードでデータを入力しているのでたいへんだと思った。 とにかくハローワーク受付票を入手する。これで紹介状がもらえるようになった。

15:25 カスミオリナス錦糸町店で食料を調達。665 円。

  • エビチリ&麻婆茄子丼
  • 絹豆腐 (3)
  • 野菜ジュース (900ml)
  • ベビーチーズ (4)

そういえばさっきから暑い。業平をダラダラ帰る。

16:10 向島の部屋に戻る。ベランダからシーツを回収してベッドに戻す。暑い。

16:35 PC を開いて現状をまとめる。事務手続きが多くてまとめないとダメになる。 テレビを点けておく。M リーグを観ると手が止まる。黒沢プロの最後の 567 三色セレブリーチフリテン高目ツモはすごい。

マキバオーも再放送しているのか。あのエンディングソングをもう一度聴ける。 そしてルパン三世も再放送だ。ああ、この尼サンに既視感が。次元の墓参シーンが渋い。

19:00 晩飯。あとは風呂まで Bash Guide を読んだり麻雀の練習をしたりする。

21:00 入浴。30 分くらいで出て服を着て隅田公園に出る。看板前でインターネット。 ハローワークのアカウントセットアップと日課?のなじみのページの見回り。 ハローワークの求職票の有効期限が 8 月末というのはグズな私にはきつい。

22:10 部屋に戻る。スカイツリーのライトアップが毎日違うのが洒脱だ。 PC を電源につないで消灯まで適当に過ごす。今日は私はよく動いた。

Programming Notes

牌モジュールの関数 succ() はドラ表示牌からドラを返すのに利用する。 今回はコーディングの都合上、IME からの直接入力ができずコピーアンドペーストが容易でない牌字ではなく文字名を使う。

TILE_SUCC_MAP = {
    '\N{MAHJONG TILE NORTH WIND}': '\N{MAHJONG TILE EAST WIND}',
    '\N{MAHJONG TILE WHITE DRAGON}': '\N{MAHJONG TILE GREEN DRAGON}',
    '\N{MAHJONG TILE GREEN DRAGON}': '\N{MAHJONG TILE RED DRAGON}',
    '\N{MAHJONG TILE RED DRAGON}': '\N{MAHJONG TILE WHITE DRAGON}',
    '\N{MAHJONG TILE NINE OF CHARACTERS}': '\N{MAHJONG TILE ONE OF CHARACTERS}',
    '\N{MAHJONG TILE NINE OF BAMBOOS}': '\N{MAHJONG TILE ONE OF BAMBOOS}',
    '\N{MAHJONG TILE NINE OF CIRCLES}': '\N{MAHJONG TILE ONE OF CIRCLES}',
}

def succ(tile):
    """Return the dora tile from dora indicator tile.

    If the dora indicator is a suit tile, the dora is the next tile in the
    same suit, e.g. seven bamboo is dora if six bamboo is the dora indicator.

    >>> succ('\N{MAHJONG TILE SIX OF BAMBOOS}')
    '\N{MAHJONG TILE SEVEN OF BAMBOOS}'

    If the indicator is a nine, the dora is the one in the same suit.

    >>> succ('\N{MAHJONG TILE NINE OF CHARACTERS}')
    '\N{MAHJONG TILE ONE OF CHARACTERS}'
    >>> succ('\N{MAHJONG TILE NINE OF CIRCLES}')
    '\N{MAHJONG TILE ONE OF CIRCLES}'
    >>> succ('\N{MAHJONG TILE NINE OF BAMBOOS}')
    '\N{MAHJONG TILE ONE OF BAMBOOS}'

    If the indicator is a dragon, the dora is also a dragon, and the following
    order applies: red points to white, white points to green and green points
    to red.

    >>> succ('\N{MAHJONG TILE WHITE DRAGON}')
    '\N{MAHJONG TILE GREEN DRAGON}'
    >>> succ('\N{MAHJONG TILE GREEN DRAGON}')
    '\N{MAHJONG TILE RED DRAGON}'
    >>> succ('\N{MAHJONG TILE RED DRAGON}')
    '\N{MAHJONG TILE WHITE DRAGON}'

    For winds, likewise, the following order applies:
    east-south-west-north-east.

    >>> succ('\N{MAHJONG TILE EAST WIND}')
    '\N{MAHJONG TILE SOUTH WIND}'
    >>> succ('\N{MAHJONG TILE SOUTH WIND}')
    '\N{MAHJONG TILE WEST WIND}'
    >>> succ('\N{MAHJONG TILE WEST WIND}')
    '\N{MAHJONG TILE NORTH WIND}'
    >>> succ('\N{MAHJONG TILE NORTH WIND}')
    '\N{MAHJONG TILE EAST WIND}'
    """

    assert isinstance(tile, str) and len(str) == 1
    return TILE_SUCC_MAP.get(tile, chr(ord(tile) + 1))

練習問題:TILE_PREC_MAP を一行で定義して、上の関数の逆関数 prec() を書け。