タグ

ブックマーク / memo.sugyan.com (20)

  • Rustでつくる もう一つの将棋ライブラリ - すぎゃーんメモ

    昨年末に出版された「強い将棋ソフトの創りかた」というを読んで、自分も将棋AIを作ってみたいと思った。 強い将棋ソフトの創りかた 作者:山岡忠夫,加納邦彦マイナビ出版Amazon このでは主にPythonでの実装が紹介されていたが、自分は最近はRustが好きなのでRustで自分で実装してみたい、と考えた。 最近では自作詰将棋SolverもRustで書いている。 memo.sugyan.com 局面探索、パフォーマンス まず、局面の探索について考えた。 詰将棋Solverの場合も同様だが、将棋ソフトを作る場合にも、とにかく「今の局面からこの先どのような局面が発生し得るか」を高速に大量に探索していく必要がある。 現局面を根とするゲーム木を、合法手を辿って次々と子ノードに移ったり戻ってきたりして探索することになる。 これは、「各局面における合法手の列挙」と「指し手の適用(また、その巻き戻し)に

    Rustでつくる もう一つの将棋ライブラリ - すぎゃーんメモ
    studio3104
    studio3104 2022/03/06
    野菜
  • Rustでつくる詰将棋Solver - すぎゃーんメモ

    ついカッとなって先週からRustで詰将棋ソルバを書き始めてしまい、ようやくdf-pnで何らかの解答を出せるようになったところ。ここからもうちょっと調整していくぞ、、 pic.twitter.com/XM9iPJqocv— すぎゃーん💯 (@sugyan) November 2, 2021 というわけで突然Rustで詰将棋ソルバを作りたくなり、作った。 github.com 現時点ではまだ完成度は低くて6割ほどかな…。 とはいえそこらの素直な詰将棋問題なら普通に解けると思う。 冒頭の画像は看寿賞作品の3手詰「新たなる殺意」を2秒弱で解いたもの。 先行事例 将棋プログラムの多くはC++で書かれていて 最近はRustも増えてきているのかな? しかし「詰将棋を解く」ことに特化しているものはあまり多くはなさそうだった。 なかでもRustで書かれているものはna2hiroさんによるものくらいしか無さ

    Rustでつくる詰将棋Solver - すぎゃーんメモ
  • N番目の素数を求める - すぎゃーんメモ

    SNSなどで話題になっていたので調べてみたら勉強になったのでメモ。 環境 Pythonでの実装例 例1 例2 例3 エラトステネスの篩 Rustでの実装例 試し割り法 エラトステネスの篩 アトキンの篩 おまけ: GMP Benchmark 高速化のテクニック 上限個数を見積もる Wheel factorization オチ Repository References 環境 手元のMacBook Pro 13-inchの開発機で実験した。 2.8 GHz Intel Core i7 16 GB 2133 MHz LPDDR3 Pythonでの実装例 例1 最も単純に「2以上p未満のすべての数で割ってみて余りが0にならなかったら素数」とする、brute force 的なアプローチ。 import cProfile import io import pstats import sys def m

    N番目の素数を求める - すぎゃーんメモ
    studio3104
    studio3104 2021/02/06
    ベンチマークによる事実の積み重ねとそれを踏まえた考察。素数を求める必要があって困ったときにまた読む...
  • Advent of Code 2020 完答した - すぎゃーんメモ

    studio3104
    studio3104 2020/12/26
    さすぎゃーん
  • 逆算方式による詰将棋の問題生成プログラム - すぎゃーんメモ

    将棋を始めた ので、詰将棋を毎日のように解いているのだけど、せっかくなら詰将棋の問題を自動生成してみたい、と思って試してみた。 前提知識 詰将棋とはどんなものか 攻め方(先手)が玉方(後手)の玉を詰ますのが目的。 攻め方は必ず王手をかける(玉方は必ず王手をはずす)。 玉方は盤上と攻め方の持駒以外すべての駒(ただし玉は除く)を合駒として使用できる。 玉方は最善を尽くし、最も長く手数がかかるように逃げる。 玉方は無駄な合駒をしない。 その他は指し将棋のルール通り。二歩、打ち歩詰め、行き所のない駒、連続王手の千日手はいけない。 (日将棋連盟の詰将棋ページより) 手法 コンピュータによる詰将棋の解答・問題生成というのは20年くらい前から既に様々な論文などで研究されているようだ。生成については、主に「ランダム法」「逆算法」といった方式があるらしい。 あまり論文にちゃんと目を通して調べてはいないけど

    逆算方式による詰将棋の問題生成プログラム - すぎゃーんメモ
  • "Write Code Every Day" 1年 - すぎゃーんメモ

    1年前のjava-ja.OSSで @t_wada さんの話を聴いた翌日から実践し始めた"Write Code Every Day"、どうにか1年間つづけることが出来た pic.twitter.com/scVbkZFZI9— すぎゃーん💯 (@sugyan) October 6, 2016 元記事 John Resig - Write Code Every Day 日語訳 毎日コードを書くこと - snowlongの日記 この記事を読んだときは「へー」くらいにしか感じていなかったのだけど、 1年前の10月5日のjava-ja.OSSでのid:t-wadaさんの発表を聴いて、実際に身近な知っている人たちが実践しているのを知って、「よし自分もやってみよう」と始めたのがきっかけ。 OSS についてあれこれ from Takuto Wada www.slideshare.net 元記事で ブログ

    "Write Code Every Day" 1年 - すぎゃーんメモ
    studio3104
    studio3104 2016/10/06
    すぎゃんさん謙虚すぎるから成果ないとか言っててもハナシを10000倍くらいで想像するとだいたいちょうどいいです
  • TensorFlowでのDeep Learningによるアイドルの顔識別 のためのデータ作成 - すぎゃーんメモ

    続・TensorFlowでのDeep Learningによるアイドルの顔識別 - すぎゃーんメモ の続き、というかなんというか。 前回までは「ももいろクローバーZのメンバー5人の顔を識別する」というお題でやっていたけど、対象をより広範囲に拡大してみる。 様々なアイドル、応援アプリによる自撮り投稿 あまり知られていないかもしれないけど、世の中にはものすごい数のアイドルが存在しており、毎日どこかで誰かがステージに立ち 歌って踊って頑張っている。まだまだ知名度は低くても、年間何百という頻度でライブを中心に活動している、所謂「ライブアイドル」。俗に「地下アイドル」と言ったりする。 ライブアイドル - Wikipedia そういったアイドルさんたち 活動方針も様々だけど、大抵の子たちはブログやTwitterを中心としてWebメディアも活用して積極的に情報や近況を発信していたりする。 そんな中、近年登

    TensorFlowでのDeep Learningによるアイドルの顔識別 のためのデータ作成 - すぎゃーんメモ
  • TensorFlowによるディープラーニングで、アイドルの顔を識別する - すぎゃーんメモ

    以前は MNISTの例を使って画像識別を試してみた けど、次はカラー画像についての識別を試してみる。 「アイドルなんてみんな同じ顔に見える」って 最近も言われてるのかどうか知らないけど、自分もつい5年前くらいまではそう思っていたわけで。その識別を機械学習でやってみよう という試み。 最近はほとんどライブに行かなくなってしまったけど大好きなももいろクローバーZちゃんを題材にしてみることに。 5人のメンバーの顔は機械学習によってどれくらい分類できるようになるのか?? CIFAR-10 CIFAR-10 という、32×32サイズのカラー画像を10種類のクラスに分類する識別課題があり、そのデータセットが公開されている。これを実際にTensorFlowで学習するための畳み込みニューラルネットワークのモデルや関数などがtensorflow.models.image.cifar10パッケージに同梱されて

    TensorFlowによるディープラーニングで、アイドルの顔を識別する - すぎゃーんメモ
    studio3104
    studio3104 2016/01/12
    やりおったな
  • Perl6で記号Hello worldする - すぎゃーんメモ

    一番簡単なHello worldです。 ::('!{.(?'~^'.~!)~'~^')^.^^'~^'?!^?('~^'??)!{')('!?}}~~(!^~{~))(.{~('~^'))?^?.).(?.}?)().!~'~^'~!.?}?~.^.{?!)~}!).'~^'}!!.~(}(!?}~{!}).(('~^')^(^.(.)~?!.()!})?)')普通に実行できると思います。 $ cat hello.pl6 ::('!{.(?'~^'.~!)~'~^')^.^^'~^'?!^?('~^'??)!{')('!?}}~~(!^~{~))(.{~('~^'))?^?.).(?.}?)().!~'~^'~!.?}?~.^.{?!)~}!).'~^'}!!.~(}(!?}~{!}).(('~^')^(^.(.)~?!.()!})?)') $ perl6 hello.pl6 Hello,

    Perl6で記号Hello worldする - すぎゃーんメモ
    studio3104
    studio3104 2015/10/22
    な、なんて簡単なんだろう...
  • percolを使ってターミナル操作を早く、便利に。 - すぎゃーんメモ

    先日、shell勉強会で「zawを使ってシェル操作を快適に」というお話を聴いて、自分ももう少しそのあたりの環境を整えよう、と思い立った。 nanapi勉強会 vol2 - Shellの活用でこれだけ毎日が便利になる - nanapi勉強会 | Doorkeeper zawで快適シェル生活 // Speaker Deck 自分が使う選択をしたのは zaw ではなく percol 。 軽く調べてみたかんじでは zawってのは設定してある(もしくは自作する)決められたsourceを使って決められた操作を行うもので、zshに密接に結び付いているツールで。percolはそういうのではなく純粋に「入力をフィルタリングする」だけのツールなので、パイプなどを使って各コマンドと組み合わせることで色々な使い方ができそう。 percolの導入 https://github.com/mooz/percol Pyt

    percolを使ってターミナル操作を早く、便利に。 - すぎゃーんメモ
    studio3104
    studio3104 2015/08/19
    tmux のとこマネしよう
  • Pythonの辞書は存在しないキーでアクセスしてはいけない → 改め、存在しないキーでアクセスする場合はget()を使う - すぎゃーんメモ

    Perlではハッシュから存在しないキーで値を取り出そうとするとundefが返ってくる。それを評価してプログラムを書いても動く。 $ perl -w %hash = (foo => 'hoge', bar => 'fuga'); print $hash{baz} ? "あるよ!\n" : "ないよ!\n" ^D ないよ! Pythonの場合、存在しないキーで値を取り出そうとした瞬間にエラーが発生してしまう。 >>> hash = {'spam': 'hoge', 'ham': 'fuga'} >>> print 'あるよ!' if hash['eggs'] else 'ないよ!' Traceback (most recent call last): File "<stdin>", line 1, in <module> KeyError: 'eggs' ので、"has_key()"関数で辞書

    Pythonの辞書は存在しないキーでアクセスしてはいけない → 改め、存在しないキーでアクセスする場合はget()を使う - すぎゃーんメモ
  • ターミナル操作の記録(ttyrec)からGIFアニメを生成するツールを作った - すぎゃーんメモ

    ttyrec で録画したデータを使ってターミナル上で再生しつつ、そのスクリーンキャプチャを使ってアニメーションGIFを生成するツールをGoで作ってみた。 https://github.com/sugyan/ttygif Releases Mac, Linux Desktopで動作。再生速度はオプションで変更可能。 背景 percolを使ってターミナル操作を早く、便利に。 - すぎゃーんメモ のような記事を書いたりする際に、ターミナル操作を録画してGIFアニメにしたい需要があり。 そういった用途に使える汎用のデスクトップ録画ツールとしてはLICEcapやGifzoなどがある。 Cockos Incorporated | LICEcap http://gifzo.net/ これらはWindows, OSXあたりが対象で、Linuxの場合はまた他のツールがあるらしい(よく知らない)。 汎用的なキ

    ターミナル操作の記録(ttyrec)からGIFアニメを生成するツールを作った - すぎゃーんメモ
  • IRCの通知をirssiプラグインでGrowlかim.kayac.comに送る - すぎゃーんメモ

    自分はIRCクライアントとしてirssiを使っていて、これをさくらVPSで動かしてるサーバ上でTerminal multiprexer(screenとかtmuxとか)を使って繋ぎっぱなしにしておいて、この上でIRCを使うようにしている。 Irssi で、このirssiはPerlスクリプトでプラグインが書けるので特定キーワードが流れたらim.kayac.comで自分に通知するように"hilight2im"を使ってきてた。 irssi-plugins/hilight2im.pl at master · typester/irssi-plugins · GitHub irssiをインストールしてからやったことのまとめ - Webtech Walker ところで先日記事に書いた通りGrowl 1.3を使うとGNTPで通知を行えるのでSSHのRemoteForwardを使うことでサーバ側から自分のロ

    IRCの通知をirssiプラグインでGrowlかim.kayac.comに送る - すぎゃーんメモ
  • GNTPとRemoteForwardを使ってGrowl 1.3にリモートマシンから通知する - すぎゃーんメモ

    今更ながらMac OS X Lionを使い始めていて(マウススクロールが逆になったのはあまり問題なく慣れた)、そういえば10.7向けのGrowl 1.3以降ではGNTPがサポートされているから以前にチャレンジしようとして失敗したリモートマシンからの通知も簡単にできるようになったはず、と思って試してみた。 簡単にGNTPを使えるGrowl::GNTPを使用。 Yasuhiro Matsumoto / Growl-GNTP - search.cpan.org まずはちゃんとコレを使って通知ができるか試してみる。 #!/usr/bin/env perl use strict; use warnings; use Growl::GNTP; my $growl = Growl::GNTP->new; $growl->register([ { Name => 'hoge' }, ]); $growl-

  • #perlcasual で再びライブコーディングさせていただいた - すぎゃーんメモ

    PerlCasual #05 : ATNDにて、@yusukebeさんに声をかけていただき、再びライブコーディングをさせていただいた。 前回やらせていただいたのは2年半以上前なのか… 第6回 yokohama.pmPerl Casual でライブコーディングに挑戦してみた - すぎゃーんメモ 前回はちょっとしたスクリプト的なものだったけど、今回はWebアプリっぽいのはどうか、ということでAmon2を使ってWebアプリを作成する、というお題にしてみた。 まっさらな状態から始めて OAuth2ログインを使って 掲示板的なアプリを Herokuにデプロイして動くものをリリースする という目標でやってみた。 掲示板的なのは実はAmon2のtutorialにあるやつですね。 Tutorial - Create BBS site — Amon2 documentation 結局できたのは htt

    #perlcasual で再びライブコーディングさせていただいた - すぎゃーんメモ
    studio3104
    studio3104 2013/03/30
    面白かったので30分あっという間でした。
  • FluentdとGrowthForecastを使って自分の行動をロギング・可視化する - すぎゃーんメモ

    おそらくはそれさえも平凡な日々: もにかじでオレオレ監視ツールについて話してきました GrowthForecast.plで自分ロギングしてみた - by edvakf in hatena の記事のように、FluentdやGrowthForecastを使ったロギングって面白そうだなーと思って自分でもやってみた。 アプリケーション毎のアクティブな時間を取る まず考えたのはこれ。キーイベント発火回数ほど細かくなくても、「アクティブにしている時間の割合」が取れたらそれはそれで良いかな、と。 1秒ごとにアクティブなアプリを調べてロギングしていく。Mac OS Xにおいてアクティブなアプリケーションを調べるならAppleScriptが簡単。 name of (info for (path to frontmost application)) これだけでアクティブにしているアプリケーション名が取れる。

    FluentdとGrowthForecastを使って自分の行動をロギング・可視化する - すぎゃーんメモ
    studio3104
    studio3104 2013/03/14
    パッケージ化してほしい
  • rbenvの切り替えの仕組み…と、他言語での実験 - すぎゃーんメモ

    rbenvを使ってみる - すぎゃーんメモの続き。 現時点でのrbenvのバージョンは0.2.1。 rbenvを使っていると.rbenv-versionファイルの有無でrubyコマンド打ったときに実行されるrubyが違うものになる、というのがちょっと新鮮で、これはどういう仕組みで動いているのだろう?と思って少し調べてみた。 上記記事のようにrbenvの設定をした環境では、 $ which ruby /Users/sugyan/.rbenv/shims/rubyとなり、${RBENV_ROOT}/shims以下のrubyを指すことになる。ここへのPATHは$HOME/.rbenv/libexec/rbenv-initに echo 'export PATH="'${RBENV_ROOT}'/shims:${PATH}"' と書かれているので、eval "$(rbenv init -)"してあれ

    rbenvの切り替えの仕組み…と、他言語での実験 - すぎゃーんメモ
  • ももいろクローバーZにハマっている件について - すぎゃーんメモ

    じつは今、「ももいろクローバーZ」(通称ももクロ)というアイドルグループにハマっています。 まさか28歳になって突然アイドルにハマり始めるとは予想だにしていなかった。 3ヶ月前までは名前すら知らなかったくらいなのに、どうして突然ハマったのか過去の発言を振り返ってみた。 出会い 同僚に熱烈にオススメされたので ももいろクローバー聴いてる 2011-05-26 10:45:04 via Twitter for Mac ももクロがすごいのは何となく理解できた気がする。「DVD貸すよ!」って言ってくれた同僚に「要らない」って言っちゃったけどやっぱり貸して欲しいかも 2011-05-27 00:19:34 via Twitter for Mac とりあえずももクロDVDを観始めたところ 2011-05-28 12:39:24 via Twitter for iPhone あっという間にハマった もも

    studio3104
    studio3104 2013/03/01
    おれもこうなる可能性あるのか。来年28歳だし。
  • 特定のキーワードをim.kayac.comに通知するZNCモジュール書いた - すぎゃーんメモ

    IRCで自分の名前が呼ばれたときとかにiPhoneに通知してくれるようなやつ、いわゆるhilight2im的なもの。を、ZNCのモジュールとして作った。IRC Bouncer上で動かしておけば、weechatなどのクライアントからの接続が無い状態でも通知してくれるので便利。 リポジトリ https://github.com/sugyan/ZNC-NotifyImkayac 使い方 NotifyImkayac.pmを~/.znc/modules/以下に配置。clientからzncにコマンドを送って /msg *status LoadMod NotifyImkayac username=sugyan keyword=sugyan,すぎゃーんのように読み込ませるか、~/.znc/configs/znc.confなどの設定ファイル上で <User hoge> ... LoadModule = No

    特定のキーワードをim.kayac.comに通知するZNCモジュール書いた - すぎゃーんメモ
    studio3104
    studio3104 2012/10/04
    便利っぽい
  • tiarra+stoneを卒業してZNCを使い始めた - すぎゃーんメモ

    IRC Bouncers(IRC Proxy)あれこれ - すぎゃーんメモでIRC Bouncerを調べたりしつつも結局tiarra(+SSL接続のためにstone併用)でやっていたけど、ようやくZNCに以降できたっぽいのでメモを書き残しておく。 ZNCの特徴 yumなどのpackage managerで簡単にインストールできる 設定ファイルを対話的に作成できる Web管理画面を使った設定確認/変更も可能 様々なプラグイン機構(あんまり試してないけど) SSL接続可能 複数ネットワークに接続するためには複数ユーザを作る必要がある 最後のがちょっとネックではあるけれど、逆にその方が自然な気もするしそれで良いのかも知れない。 ZNCのインストール $ sudo yum install znc ZNCの初期設定 znc --makeconfで対話的に設定を行うことができる。例: $ znc --

    tiarra+stoneを卒業してZNCを使い始めた - すぎゃーんメモ
  • 1