0:00 路面電車の映像を観ながら寝る……。

目が覚めて時刻を確認すると 7:35 くらい。しばらくしてから起き上がる。 朝飯は納豆とスパゲッティーのホワイトソースがけ。食っている途中に昨晩投函した封筒に切手を貼っていなかったことに気づく。 むしろ気づくのが寝る前でなくて良かった。イライラして一晩過ごすことになっていたはずだ。

急いで外出。ポスト前に張り付く。9:45 頃に回収するとある。 区役所が前にあるのでトイレを済ませておく。雨が降ってくる。

定刻に郵便局の車が来る。高齢の係員に無理を言って切手を貼らせてもらう。 ほんとうは郵便局まで赴いて手続きする必要があるとの係員の弁だが、 ここ(吾妻橋一丁目)から本所郵便局(太平四丁目)まで徒歩で行くのは厳しい。 誰も困らないのだから、貼り忘れた切手を貼るのは認めてもよいのではないかな。

きのう切手を買った直後に封筒に貼り付けようとしたら、筆記机が埋まっていて後回しにしようとしてそのまま忘れたようだ。 夜のコピーから部屋に戻るときには切手を貼ろうと思っていたことは憶えている。 ああ、封筒をシールするときに注意がそちらへ行ってしまったのだ。

10:00 いったん部屋に戻る。きのうの応募をスプレッドシートに控えておく。 福祉事務所に提出予定の活動記録も更新する。

ワイドショーを観ながら麻雀のコードを書く。

12:00 疲れて 20 分ほど昼寝をする。しばらくして雨が激しくなる。

13:30 外出。三省堂書店経由で四ツ目通りへ。

14:20 ビッグエー墨田業平店。208 円。

  • ふっくらおむすび明太マヨ
  • すっぱムーチョ梅
  • コッペパンブルーベリー

柳島児童遊園で水を汲んで団地軒下に移動。雨が強くなってくる。

横川コミュニティー会館図書室。いつものやつを読む。二項分布から Poisson 分布へ。 そして会館の外に出ると大雨。傘はあるが足りない。雨合羽とレインパンツ破片着用。 オリナスへ移動する。今日はハローワーク墨田行きは無理だ。

ヤマダ電機で M リーグを少し観たあとにゲーセンへ。案の定 MJ のスコアが悪い。 この三日で今月の稼ぎの半分を溶かした。段位も魔神に戻った。

6/30の戦績
【SCORE】
合計SCORE:-127.9

【最終段位】
四人打ち段位:魔神 幻球:6

【6/30の最新8試合の履歴】
1st|--------
2nd|***---*-
3rd|---*----
4th|----**-E
old         new

【順位】
1位回数:0(0.00%)
2位回数:4(50.00%)
3位回数:1(12.50%)
4位回数:3(37.50%)
平均順位:2.88

プレイ局数:40局

【打ち筋】
アガリ率:15.00%(6/40)
平均アガリ翻:3.33翻
平均アガリ巡目:13.17巡
振込み率:12.50%(5/40)

【6/30の最高役】
・跳満

18:45 カスミオリナス錦糸町店。336 円。きくらげと豚肉の炒め丼。 外へ出たら雨がほとんどやんでいる。

19:05 ビッグエー墨田業平店。201 円。

  • 小粒納豆 (3)
  • シュークリーム
  • レーズンロール (4)

また雨が降ってくる。19:20 向島の部屋に戻る。 晩飯を食って PC を持って電話ボックスへ。電話ボックスを締め切ると暑い。 しかし戸を開けておくと雨が背中に当たる。conda update --all をしておく。 インストールが最後まで終わらないがフタを締めて作業を止める。

20:30 部屋に戻る。風呂に入って出る。雨が強くなってくる。 白ブリーフ一丁で PC 作業。股のボツボツは最近になって足と同じで水虫なのではという気がしている。

気がクサクサするので国士無双のシャンテン数を決定するコードを今書く。以外な落とし穴があり面白い。

Programming Notes

国士無双用シャンテン数計上関数。十三面待ちに対応する Counter オブジェクトと手牌から么九牌・字牌を抽出するための Counter オブジェクトを用意すると理解しやすい。

# 抜粋なのでわからないが、これは十三面待ちテンパイ手牌を意味する。
_thirteen_orphans = Counter(
    chain(tiles.TILE_RANGE_HONORS, tiles.TILE_TERMINALS))

# 十三面待ちテンパイ手牌を 4 倍したもの。
_thirteen_orphans_value_filter = Counter(
    {tile: 4 for tile in _thirteen_orphans})

def resolve_melds_thirteen_orphans(player_hand):
    """Resolve all the waiting tiles as Thirteen Orphans.

    >>> hand = _thirteen_orphans
    >>> shanten, waiting_tiles = resolve_melds_thirteen_orphans(hand)
    >>> shanten
    0
    >>> all(tiles.is_honor(t) or tiles.is_terminal(t) for t in waiting_tiles)
    True
    >>> len(waiting_tiles)
    13

    >>> hand = _thirteen_orphans.copy()
    >>> hand.subtract(tiles.TILE_RANGE_WINDS)
    >>> hand.update((tiles.TILE_ONE_OF_BAMBOOS,))
    >>> shanten, waiting_tiles = resolve_melds_thirteen_orphans(hand)
    >>> shanten
    3
    >>> all(lhs == rhs for lhs, rhs in zip(
    ...     waiting_tiles, tuple(tiles.TILE_RANGE_WINDS)))
    True
    """

    assert isinstance(player_hand, Counter)

    # 手牌から中張牌を除外する
    terms_or_honors = _thirteen_orphans_value_filter & player_hand

    waiting_tiles = _thirteen_orphans - terms_or_honors
    if any(dup > 1 for dup in terms_or_honors.values()):
        # 重複する牌があれば雀頭候補だから単騎待ちの国士
        # Thirteen Orphans of a single wait
        return (len(waiting_tiles) - 1, tuple(waiting_tiles.elements()))

    # 孤立牌しかなければ十三面待ち
    # Thirteen Orphans of the 13-wait
    return (len(waiting_tiles), tuple(terms_or_honors))