円周率を一般化してみた

こんにちは。今回はタイトルの通り、円周率を一般化してみたいと思います。 円周率とは 小学校でも教わったとおり、円周率は円周の長さを直径の長さで割ったものです。大きさの異なる円であっても、この比の値は一定であることから、数学定数として定められ…

2024年 京大理系数学 第5問 解いてみた

こんにちは。久しぶりに入試問題を解いたので、私の解答を記事にしたいと思います。 問. は を満たす定数とする. 座標平面上で, 次の4つの不等式が表す領域を とする. 次の問いに答えよ. (1) の面積 を求めよ. (2) を求めよ. ※面倒だったのでグラフは用意し…

最近やっていること

こんにちは。珍しく散文的な記事を書いてみようと思います。最近、セカンドベストの必勝法を解析した記事をいくつか書きました。 smooth-pudding.hatenablog.com smooth-pudding.hatenablog.com smooth-pudding.hatenablog.com一番最後の記事の最後で、「絶…

セカンドベストの最適戦略ルートをグラフにしてみた

こんにちは。前回の記事↓では、後退解析の結果を深堀してみました。 smooth-pudding.hatenablog.comこの記事の中で、両者が最適戦略を取った場合の局面のバリエーションを数えました。今回は、この最適戦略のルートを可視化してみます。なお今回の記事は以下…

セカンドベストの最善手・次善手について

こんにちは。前回の記事↓で行ったセカンドベストの解析結果を少し深堀します*1。 smooth-pudding.hatenablog.comこの記事は下記のアドベントカレンダーに参加しています。 adventar.org セカンドベストって何? 後退解析の結果をざっくり 最良のプレイングで…

セカンドベストは後手必勝だった

こんにちは。 先日の記事でセカンドベストというボードゲームの局面数を数えました。その結果、気合を入れて解析していた Tokyo Doves よりもはるかに局面数が少なく、解析の難易度もさほど高くなさそうなことが分かりました。ということで、解析するコード…

とあるダイソーのボドゲの実現可能局面数を見積もってみた(バーンサイドの補題)

お久しぶりです。今日は Tokyo Doves とはまた別のダイソーのボドゲについてお話しします。 今回のテーマ ざっくり概観 単純にカウント 対称性を考える 対称性を加味して改めてカウント s=16 のケース (a) 単位元 (b) ポジションを180°回転させるもの (c) ポ…

【Tokyo Doves】Rust のクレートを crates.io に公開しました

タイトルの通りですが、Tokyo Doves の解析で使った Rust のコア部分を抽出して整理したものを crates.io に公開しました。URL は以下です。 https://crates.io/crates/tokyodoves使い方は上記ページにある Documentation のページに詳しめに書いたので、そ…

Rust の cargo test でセキュリティソフトと格闘していたら doctest 激重問題が解消された件

こんにちは。Rust の doctest まわりでひとつ問題回避に成功したので、メモとして残しておきます。 doctest でエラー発生 回避策を模索 解決編 うれしい副産物編 おまけ doctest でエラー発生 先ほど元気に Rust の開発をしていたら、doctest で以下のような…

Rust の Rc<T> をディープコピーする方法

こんにちは。Rust には参照カウント方式で複数の所有権を持たせるスマートポインタの Rc ("R"eference "C"ount) があります。 doc.rust-lang.org こいつのディープコピー、すなわち参照カウントが1で参照先が clone された状態のものを作りたい状況があった…

Rust で入れ子のコンテナを平たくイテレートするイテレータ

こんにちは。 Rust のイテレータまわりでちょっと手こずったので、後日のためのメモです。まずは次のコードを見てください: fn main() { let vec = vec![vec![0], vec![1, 2], vec![3, 4, 5]]; for sub_vec in vec.iter() { for x in sub_vec.iter() { print…

【Tokyo Doves】棋譜の書き方

お久しぶりです。ここ数カ月いろいろバタバタしていて久しぶりの更新です。今回は Tokyo Doves の棋譜の記法について考えた案を紹介したいと思います。 ハトの種類の表記法 座標の表記法 操作の表記 棋譜の例 ハトの種類の表記法 ハトは6種類います。それぞ…

謎のボードゲーム「OQ」のルールを類推してみた

こんにちは。今日たまたまこんな youtube チャンネルを見つけました↓ www.youtube.com 投稿者さんの自作?のボードゲームで自己対戦する動画をひたすら投稿されています。 見てみると結構面白いゲームだな~となったので、数本みて類推したルールを書き出し…

【Tokyo Doves】後退解析により勝敗確定局面を全列挙する(中断)

お久しぶりです。前回宣言したように、今回は後退解析についてお話ししたいと思います。 解析の進捗 後退解析とは? 局面の分類 局面の分類の全列挙 Lose から Win を列挙する方法 Win から Lose を列挙する方法 まとめ 解析の進捗 本題に入る前に、現在の最…

【Tokyo Doves】強力な必要条件を駆使して詰み局面を全列挙する

引き続き Tokyo Doves の記事です。板についてきました。今回は詰み局面の全列挙の方法について紹介します。 詰み局面の定義 探索の方針 ハト配置の形状が与えられたときの詰み局面の全列挙 包囲度 詰み局面となるための必要条件 詰みのための必要条件の証明…

【Tokyo Doves】実現可能局面数をざっくり見積もってみる

引き続き Tokyo Doves のシリーズです。今回は Tokyo Doves の実現可能局面数について見積もってみます。 実現可能局面数とは? 実現可能局面数とは、実際にゲームの進行で実現しうる盤面の状態すべての数です。参考までに他のボードゲームの実現可能局面数…

【Tokyo Doves】自滅しない手が常に存在することの証明

あいかわらず Tokyo Doves の解析にドハマりしているぷりんです。 ゲームの進行について考察していると、以下の性質に気づきました。 手番で実行可能な手のうち、自滅しないものが必ず存在する。 (※千日手禁止ルール*1を採用しない場合) ここで「自滅する手…

【Tokyo Doves】ダイソーで買ったハトのボドゲが面白かったのでルールを考察してみた

先日ダイソーで「トウキョウのハト エサバ・バトル」(英語名 Tokyo Doves) というボドゲを買いました(こんなゲームです↓)。もちろん100円です*1。couple-game.netなんか以前ネット上でバズったゲームらしく、100円で買えるのが驚きなほど面白くて奥深いゲ…

Rust の文字列操作がややこしいので Python の記法と比べながらまとめてみた

最近 Rust にハマりつつあるぷりんです。n 番煎じですが、Rust の文字列操作をまとめてみました。せっかくなので、個人的に一番親しみのある Python の構文と比較しながら見ていきます。 参考にしたサイト 文字/文字列の定義 それぞれの型の間の変換 文字列…

改良版じゃんけん「ツーペン」の効率について

こんにちは。最近「ゆる言語学ラジオ」という youtube チャンネルをよく視聴するのですが、そのチャンネルのとある動画でじゃんけんの改良版「ツーペン」が紹介されていました↓ 動画ではルールの紹介のあと、通常のじゃんけんとの効率性の比較の際に数学が役…

デコレータで遊ぶ(python) :: 特定の時間以外は挙動を変える

こんにちは。 ふとデコレータで遊びたくなったので書いてみました。 import datetime as dt from typing import Callable def time_limit(begin: dt.time, end: dt.time, default: Callable): def deco(func: Callable): def wrapper(*args, **kwargs): now …

enum.py を使った定数管理

こんにちは。いろいろ開発していると、システムに用いる定数を管理したいことがあります。ファイルに保存したりデータベースで管理したりすることも多いかと思いますが、今回は標準モジュール enum を使って Python ファイル内で Python から呼びやすい形で…

イテラブル(list, tuple 等)から数個ずつ取り出したい(Python)

こんにちは。今回はイテラブルから特定の個数ずつ要素を取り出していく方法について語ろうと思います。「イテラブルとはなんぞや?」という方もいらっしゃると思いますが、ざっくりいうと for 文を使って要素を取り出せるようなオブジェクトです。 # こうい…

「Julia が Python より約25倍速いとあるコード」を Rust で書いたらさらに1.5倍速かった

こんにちは。 タイトルが完全にネタバレですが、以下のコードを Rust で書き直してみたという記事です。 smooth-pudding.hatenablog.com上の記事と同様のロジックで「10万以下の素数の個数を数えるコード」をRust で書くとこんな感じになりました: fn main()…

Python でトランプカードを作る方法 n 選 (クラスの書き方紹介)

こんにちは。日々プログラミングをしていると、ふとトランプカードが欲しくなるときがありますよね。そこで今回はいろんな方法で52枚のトランプカードを Python で表現する方法を紹介します。 前提 方法その1: 文字列を全列挙 方法その2: 各カードをタプルで…

フットスイッチの設定をするGUIを作ってみた話

こんにちは。 この記事は↓の続きです。 smooth-pudding.hatenablog.com キーの設定が面倒くさい 前回の記事で、キーを割り当ててフットスイッチを使えるようになりました。ただ、設定するには footswitch のバイナリのあるディレクトリに移動して 特定のコマ…

フットスイッチを買ってPCにつないでみた話(インストール+使用感)

こんにちは。 最近 Amazon でこんな商品を買いました↓ www.amazon.co.jp 普通パソコンを操作するときって手で操作しますけど、足も使えるとなんかいい感じなんじゃね?という発想です。 インストール Ubuntu 向けのドライバインストール手順がない。。。 商…

LINE Bot でトランプゲーム実装してみた(Python+Heroku)

こんにちは。 最近 LINE Bot を使ってトランプゲームを実装してみたので、そのやり方を紹介しようと思います。LINE Bot ですこし気の利いたものを作りたい方などに、実装の一例として参考になれば幸いです。 とりあえず遊んでみる 前提 設計概要 設計詳細 co…

Python で日記書いてみた

~$ python3 Python 3.8.5 (default, Jan 27 2021, 15:41:15) [GCC 9.3.0] on linux Type "help", "copyright", "credits" or "license" for more information. >>> import me >>> from today_events import * >>> print(me.is_awake()) True >>> import date…

functools.py が革命的に便利そうなのでまとめてみた

こんにちは、ぷりんです。いつものようにネットサーフィン(死語)をしていると、functools.py という Python の標準モジュールがあることを知りました↓↓ docs.python.org 関数やクラスを定義するときに補助的に使うものっぽいですが、これがなかなかに「かゆ…