タグ

ブックマーク / mametter.hatenablog.com (14)

  • 6x6リバーシの神 - まめめも

    絶対に勝てない6x6リバーシを作りました。あなたは黒番、AIが白番です。 絶対に勝てない6x6リバーシを作りました! ぜひ挑戦してみてくださいhttps://t.co/Ul5n3q9jMp— Yusuke Endoh (@mametter) December 30, 2021 これは何? 6x6の盤面のリバーシは後手必勝 *1 であることが知られています。 このAIは白番(後手)で完璧にプレイします。つまり黒番のあなたは絶対に勝てません。無力感を楽しんでください。 技術的な話 このAIWebAssemblyになっているので、全部あなたのブラウザの上で動いてます。真のサーバーレスです。 AIのソースコードはRustで書きました。わりと堅実なゲーム木探索になってます。UIは普通にTypeScriptとthree.jsで実装しました。 github.com 作った順に説明します。 盤面の表現

    6x6リバーシの神 - まめめも
    todesking
    todesking 2022/01/05
  • CPU律速なRuby/Pythonコードはデフォルト設定のdocker上で遅くなる - まめめも

    English version 要約 dockerはデフォルトでセキュリティ機構(Spectre脆弱性の対策)を有効にします。この影響で、RubyPythonのようなインタプリタは速度が劣化します。特にCPU律速なプログラムで顕著に遅くなります(実行時間が倍くらいになることがあります)。 現象 Rubyで1億回ループするコードを、直接ホスト上で実行する場合と、docker上で実行する場合で実行時間を比較してみます。 直接ホスト上で実行した場合: $ ruby -ve 't = Time.now; i=0;while i<100_000_000;i+=1;end; puts "#{ Time.now - t } sec"' ruby 2.7.1p83 (2020-03-31 revision a0c7c23c9c) [x86_64-linux] 1.321703922 sec docker

    CPU律速なRuby/Pythonコードはデフォルト設定のdocker上で遅くなる - まめめも
    todesking
    todesking 2020/05/23
  • パイプライン演算子の歴史 - まめめも

    (You can read this article in English.) Ruby の開発版にパイプライン演算子(pipeline operator)が試験的に導入されましたが、いろいろあってプチ炎上になっています(チケット)。 せっかくの機会なので、パイプライン演算子の歴史を調べてみました。付け焼き刃の調査なので、間違ってたら教えてください。 パイプライン演算子とは こんな感じのものです。 x |> f |> g |> h # h(g(f(x))) と同じ意味 h(g(f(x))) という関数適用の式は、関数が呼ばれる順序(f→g→h)と、プログラムの字面上の順序(h→g→f)が逆でわかりにくいとされます。この問題は、特に、関数が大きくなったときに顕著になります。 wonderful_process_h( marvelous_process_g( fantastic_process

    パイプライン演算子の歴史 - まめめも
    todesking
    todesking 2019/06/15
  • Quine Tweet: 自分自身へのリンクを持つ再帰的ツイート - まめめも

    This tweet is recursive. https://t.co/bZISaPd3Ts— Quine Tweet (@quine_tweet) 2016年9月19日 「このツイートはありません」となっていますが、URL をクリックすれば自分自身に飛べます。 以下、このツイートが生まれるまでの経緯を長々と書きます。 問題設定 そのツイート自身の URL を埋め込んだツイートを作ります。ツイートの URL はツイートをした後でないと決まらないし、ツイート文面を後から更新する手段はない(と思う)ので、単純ですが意外に難しい問題です。 調査 ご存知のように、現在のツイートの URL は次のような形式です。 https://twitter.com/<username>/status/<id>username はそのままなので、id を事前に予測できれば解決です。*1 調べてみるとこの id

    Quine Tweet: 自分自身へのリンクを持つ再帰的ツイート - まめめも
    todesking
    todesking 2016/09/20
  • Optcarrot: Ruby で書かれたファミコンエミュレータ - まめめも

    ウソみたいな当の話。Ruby でファミコンエミュレータを書いてみました。 気になる速度ですが、自分の環境では 20 fps ちょっと出ます。ファミコンは 60 fps なので、実速の 1/3 です。Ruby3x3 (Ruby 3 は Ruby 2 の 3 倍速い)という matz の宣言が実現すれば、実速が達成されることになりますね! 試してみたい人はこんなふうに実行してください。 $ gem install ffi $ git clone http://github.com/mame/optcarrot.git $ cd optcarrot $ bin/optcarrot examples/Lan_Master.nesSDL2 か SFML が適切にインストールされている必要があります。Debian/Ubuntu なら apt-get install libsdl2-dev で。 Ru

    Optcarrot: Ruby で書かれたファミコンエミュレータ - まめめも
    todesking
    todesking 2016/04/02
  • [Ruby] Ruby 3.0 の特大の非互換について - まめめも

    タイトルは釣りです。すみません。Ruby 3.0 はかなり先の将来の話なので、最終的にどうなるかはわかりません。でも Ruby 3.0 に重大な変更が予定されているのは事実なので、一緒に考えて欲しいと思います。 immutable string literal Ruby 3.0 では文字列リテラルをデフォルトで immutable (破壊的変更不可) にする、という方針が『決定』しました。(Feature #11473: Immutable String literal in Ruby 3) つまり、次のようなプログラムが動かなくなります。(当チケットから少し改変して引用) sql = "SELECT #{sec_id}, pt.path, st.doc_count " sql << "FROM #{stats_tablename} AS st " #### ←ここで例外: can't m

    [Ruby] Ruby 3.0 の特大の非互換について - まめめも
    todesking
    todesking 2015/10/04
    Rubyもりあがってる
  • 放射線耐性 Quine (1 文字消しても動く Quine) - まめめも

    ref: https://github.com/mame/radiation-hardened-quine 放射線はメモリエラーを引き起こすらしいです。そんな放射線が飛び交う過酷な環境でも、できることなら Quine したい。 ということで、プログラム内の 1 文字をランダムに消しても元のプログラムを出力する、なんともロバストな Quine を書きました。*1 何を言っているかわからないと思いますが、こんなふうに動くものです。 # ランダムに 1 文字消すスクリプト $ cat mutate.rb src = $<.read src[rand(src.size), 1] = "" print src # rrquine.rb からランダムに 1 文字消したプログラムを生成する $ ruby mutate.rb rrquine.rb > broken.rb # 壊れたプログラムを実行する (

    放射線耐性 Quine (1 文字消しても動く Quine) - まめめも
    todesking
    todesking 2014/02/20
    唖然としている
  • 空中 Quine (空中に自分自身を出力するプログラム) - まめめも

    何を言っているかわからないと思いますので、まずは動画を見てください。 つまり、LED の残像として空中に自分自身を「出力」するプログラム (+回路) です。こんな風に空中に字を描くのを POV (Persistance of Vision = 残像) とか Light writing とか言うらしいですね。やることは LED 光らせるだけなのに、やってみるとかなり楽しい。 というわけで、最近 Arduino とかいうマイコンで遊んでます。アナログ電気回路の知識は中学生レベル *1 ですが、USB で PC に繋いで IDE の upload ボタンを押すだけで C プログラムをマイコン上で実行できるので、まあそれなりに遊べます。 最初に作るのは当然 Quine なわけですが、シリアル通信で Quine 出力するのは既出だったので、ちょっと凝ってみました。もっと読みやすいコードにしたかったの

    空中 Quine (空中に自分自身を出力するプログラム) - まめめも
    todesking
    todesking 2012/02/09
    やばすぎる
  • あけましておめでとうございます 2012 - なめらかライフゲーム - まめめも

    あけましておめでとうございます。日のプログラマには古来より「正月はフラクタル」という習わしがあります。正月はフラクタルに触れて心穏やかに過ごそうというものです。 というわけで動画を作りました。何かわかるでしょうか。 答えは、ライフゲームのグライダーとブロックの衝突です。セルをそのまま四角で表示するのではなく、アニメーションでなめらかにつないで表示してみました。 グライダー銃 (上) と宇宙船 (下) をグライダーから作る様子。 銀河 (左) とヒキガエル (中央) とパルサー (右) 。かなりきもい。 まあ、ライフゲームはフラクタルかというと違う気がしますが気にしない。一応フラクタルらしいドラゴン曲線も。辰年だし。 実装を簡単にいうと 普通のマスの代わりに電荷みたいなものを配置して、ポテンシャル場を計算する ポテンシャル場に対して marching squares で等高線を描く という

    あけましておめでとうございます 2012 - なめらかライフゲーム - まめめも
    todesking
    todesking 2012/01/02
  • Merry Quine-mas 2010 - まめめも

    今夜は、年に一度の W. V. Quine の命日イブです。 %;';;X= %q(x=1; z="%c"% 32;eval %w(w=N= Merry =128;r= z*79+$/; ;p=open" / dev/dsp ","w"rescue$_;/ / ;eval"s rand(%s)"%$*[ d=0];a=[];s=(r+z+% (%;';;X=#{z* 3}%q(#{X});e val(X)) +r*=23).l ines.map{|l|l.chop+ r};t=proc{|y|s [y][x-1,w].sca n(/\S /){s[y+1][m=x -1+$` .size ,1]== z&&a< <[$&,m, y,s[y ][m]=$/]};y};t[ 23];f =(0.. 1071) .map{|i|c,x,y =a.shuffle!. pop;s [y][x]=z

    Merry Quine-mas 2010 - まめめも
    todesking
    todesking 2010/12/24
    やばすぎる
  • RubyKaigi 2010 終了 - まめめも

    参加してました。 「超絶技巧 Ruby プログラミング」の発表資料と、発表で使ったソースコードを以下に置いておきます。 ref: http://dame.dyndns.org/misc/rubykaigi2010/rubykaigi2010-endoh.ppt ref: http://dame.dyndns.org/misc/rubykaigi2010/rubykaigi2010-endoh.zip 追記: slideshare にもアップロードしました。でも一部崩れてるので、なるべく ppt でご覧ください。 @mrkn さんに「pdf に直してからアップロードすればよい」と教えてもらいました! 超絶技巧 Ruby プログラミング - Esoteric, Obfuscated Ruby ProgrammingView more presentations from mametter. 動

    RubyKaigi 2010 終了 - まめめも
    todesking
    todesking 2010/08/31
    やばすぎる
  • RubyKaigi 2010 発表予告 (と山手 quine 英語版) - まめめも

    今月末の RubyKaigi 2010 で、「超絶技巧 Ruby プログラミング」という発表をする予定です。2 日目の 13:30-14:00 、大ホールでの発表です。 主にこのブログで紹介しているコードたちを紹介する予定です。その背景の意外な深遠さや、それを可能にする Ruby の素晴らしさも語れたらいいなあと思っています。 発表言語は日語なのでスライドくらいは英語に、と思って、去年の暮れに書いた 山手 quine の英語版を作りました。 z=27;eval$s=%w!c,s=["H+{K}8k->dXNpv-cD~@?(zhAi~>JOv<-;A(]oH+MFKs*+KOB825i$%QX9~P=HC{iIlj*Sh# v=3U62LhUXhtnCx^{F=nuTtGG}@85_(xVvIWQ|Vllp[Gt22x&`^K3*ui;IW@O9-(`Z6V_T.E]%WHXYGa{O9

    RubyKaigi 2010 発表予告 (と山手 quine 英語版) - まめめも
    todesking
    todesking 2010/08/09
    やばい
  • Functional Programming IAT : 関数型指数心理テスト - まめめも

    http://dame.dyndns.org/misc/fpiat/ あなたの潜在意識の関数型指数を測定する IAT です。10 分ほどのテストであなたが関数型言語派か手続き型言語派かわかります。ジョークなので気にしないでください。 「素晴らしい」などのいい言葉、「苦悩」などの悪い言葉、「Haskell」などの関数型言語*1、「C」などの手続き型言語を素早く分類してもらいます。「いい言葉 or 関数型言語」と「悪い言葉 or 手続き型言語」で分類したり、今度は「いい言葉 or 手続き型言語」と「悪い言葉 or 関数型言語」で分類したりします。そうするとあなたの関数型指数 (プラスほど関数型人間) がわかります。IAT の詳細は前のセクションを見てください。 そのうち統計を取って (分布図の棒グラフにするくらいしか考えてないけど) 公開したいと思っています。個人が特定されないようにするつも

    Functional Programming IAT : 関数型指数心理テスト - まめめも
    todesking
    todesking 2007/06/20
    C++は関数型言語ですよ!
  • befunge-wiki - まめめも

    夜更かしをするとテンションが高くなって、どうでもいいネタでもなぜか面白く感じてしまい、手が勝手に動いているうちに気がついたら夜が明けている、という若さ故のあやまちは誰にでも経験があることだと思います。 そんなノリで生まれた、befunge で書かれた wiki です。以下コード。 #!/var/local/lib/zfunge >8*1>-: v >$$00"daer>ydob<" > >:v >v@,,,,,,,,,,,,, < v3 n ^1$\_$ 1025*:"lmth/txet :epyt-tnetnoC"^ >:''- ],_$:|>$ ^y< >v >v >v >v >v >v <>0p:'/-#^_00'y "tiruces>"v>'r'e ' ,,^ >- |# >- |# >- |# >- |# >- |# >- |# ^0 <# # >25*'> "ydob/"v >

    befunge-wiki - まめめも
    todesking
    todesking 2007/06/03
    これはおそろしい
  • 1