プログラミング

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

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

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

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

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

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

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

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

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

デコレータで遊ぶ(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 関数やクラスを定義するときに補助的に使うものっぽいですが、これがなかなかに「かゆ…

Python で「へぇ〜ボタン」を作る(tkinter)

みなさん、へぇ〜ボタンをご存知でしょうか。15年ほど前にテレビで放映されていた「トリビアの泉」という雑学紹介番組で出てきたアイテムで、ゲストが「へぇ〜」と思った度合いに応じて押すボタンです。この番組は当時かなり人気で、へぇ〜ボタンのガチャガ…

引数の自然数番目の素数を返す Python プログラム

なんかTLに流れてきたので自己流で書いてみました。 upper_bound は wikipedia の素数定理のページの結果を鵜呑みにしてます。 ja.wikipedia.orgベラボーにでかい n だと float の精度の問題でだめになると思いますが、そんな場合はどうせそもそも計算終わら…

素数を無限に生成するイテレータを定義したい

すむーずぷりんです。 イテレータとは Python で for 文でどんどん要素出せるやつです。例えば for i in range(10): print(i) のときの range(10) みたいなやつです(正確には多分 range(10) に対応するイテレータオブジェクトの iter(range(10)) が生成され…

ひさくんガチ恋bot自動化進捗(2)

ついに twitterAPI を手に入れたのでbotを自動化しました。当 bot は晴れて自動化されました。毎時00分にガチ恋ツイートをRT/ふぁぼします。— ひさくんガチ恋bot (@hisa_gachikoi) January 5, 2021 前回の記事(下記)からの進捗に加えて、試行錯誤した点をま…

ひさくんガチ恋bot自動化進捗(1)

明けましておめでとうございます。 昨年末に思い立って初めたひさくんガチ恋botの自動化ですが、思ったより進捗したので共有します。 概要 twitterAPI の権限の取得 Python コード開発 Heroku 登録 結論 蛇足 概要 端的には以下の通りです: twitterAPI の権…

ひさくんガチ恋bot自動化プロジェクト

お久しぶりです。年の瀬ですね。ひさくんガチ恋bot(手動) というのをご存知でしょうか。とあるアカウントが「ガチ恋」したツイートをRTするというシンプルな手動bot(???)です。 ただ手動を続けるのは限界があるというもので、11月頭あたりから更新が止まって…

黒峰問題が未解決問題に逆戻りした件について

「黒峰問題」と界隈で呼ばれている問題をご存知でしょうか。具体的には以下の問題です。 次を満たす整数 をすべて求めよ。 黒峰氏( @kuromineharuto ) が twitter で解答を求めたところいろんな人が群がり、ぷりんが勝手に「黒峰問題」と呼び出したのが最初…

Julia パッケージ作成用の雛形を作ってみたメモ

ずっと育てている Julia のコードを野良パッケージ化するために、Github に雛形を作ってみたので、メモを残しておきます。 自分で試す場合は、"mat-der-D" の部分や "SpectralMethodTools" の部分は適宜自分の環境に合わせて読み替えてください。目次 参考に…

Julia の FFTW.jl で使える fft, ifft, rfft, irfft の挙動に関する備忘録

Julia で CFD で使うスペクトル法ライブラリの開発のため、備忘録として FFTW.jl の fft, ifft, rfft, irfft の挙動をまとめておく。目次: はじめに インストール 関数 fft 関数 ifft 関数 rfft 関数 irfft はじめに Julia では簡単に fftw (高速フーリエ変…

Julia が Python より約25倍速いとあるコード

とある集会で「Julia は速いぞ!」というアピールのために、Python と Julia で同じように書いているのに20倍以上速度の違うコードを見せました。ということを twitter で書いたところ反響があったので、ここに残しておきます。(もっと速いように書けるだろ…