タグ

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

  • flagir: 国旗手書き検索 - まめめも

    2016/08/11 追記 Java アプレットと自宅サーバが滅びたので、Android アプリとして作り直しました。 https://play.google.com/store/apps/details?id=io.github.mame.flagir 国旗を描いて検索するアプレットです。国際競技の観戦などのお供にどうぞ。 ref: http://dame.dyndns.org/misc/flagir/ スクリーンショット。 フランス イタリア スイス カナダ ネパール 思った国旗がうまく出ないときは色が微妙に間違ってる可能性があります。明るい青とか暗い青とか変えて試行錯誤してみてください。細かい形は見ていないので、その辺にこだわってもたぶんダメです。 アルゴリズム 飛廉さんに聞いただけのにわか知識。 画像を 3x3 分割 *1 して、それぞれの位置を RGB ごとにヒストグラム *2

  • Seven Trees - まめめも

    id:bonotake さんに教えてもらった問題。すごく面白い。 ref: http://d.hatena.ne.jp/m-hiyama/20081022/1224640248 この問題を Haskell で言うと、 data Tree = Leaf | Node Tree Tree deriving Eq type Tree7 = (Tree, Tree, Tree, Tree, Tree, Tree, Tree) で定義される普通の二分木と、二分木の 7 つ組を考える。このとき f :: Tree7 -> Tree g :: Tree -> Tree7 の型になる 2 つの関数 f と g を定義せよ。ただし以下の 3 つの条件が満たされるものとする。 Tree 型の任意の値 x に対して x == f (g x) Tree7 型の任意の値 x に対して x == g (f x) f

    Seven Trees - まめめも
  • rirb を github に登録して gem 化した - まめめも

    はるか昔に rirb (Remote IRB) というのを作って放置していましたが、github に登録して gem を公開してみました。せっかくなので再紹介。 rirb (Remote IRB) とは 実行中の Ruby プログラムにアタッチして irb プロンプトを開かせることができます。グローバルな状態を観察したり変更したりできます。 インストール $ gem install mame-rirb --source=http://gems.github.com/ 使い方 以下は数字をカウントアップするだけのサンプルコード。 $i = 0 loop do p $i $i += 1 sleep 0.5 end これを -rrirb 付きで実行します *1 。 $ ruby -rrirb count.rb 0 1 2 3普通にカウントアップしますね。 別のターミナルから同じディレクトリで r

    rirb を github に登録して gem 化した - まめめも
  • 記号だけで brainfuck インタプリタ - まめめも

    Ruby 1.9 の新機能のひとつに「lambda { ... } を -> { ... } と書ける」というのがあります。この表記は反対意見が根強い *1 ですが、確実にすばらしい点があって、全部記号だということです。これによって Ruby が記号だけでチューリング完全になります *2 。 デモとして、brainfuck インタプリタを記号だけで書いてみました。 $___,@_,@__,$_=(@@__="")=~//,?#=~/$/,->(_){_<(__="####"=~/$/)**__&&(@@__<< _;@__[_+@_])},[*$<]*@@__;@__[$___];$____,$_,@___,$__,@__=$_[@_+($_+?!=~/!/ )..-@_],$`,[],[],->(_){(__=$_[_];__=~/[><+\-\.,]/?$__<<$_[_]:__==?

    記号だけで brainfuck インタプリタ - まめめも
  • ペル方程式の解の列挙方法 - まめめも

    Project Euler 66 のネタバレです。見たくない人は見ないでください。質的には全然理解できてないですが、それなりに有用な情報だと思ったので、解き方だけメモします。 ペル方程式とは (ただし D は平方数でない自然数) という形の不定方程式をペル方程式というそうです。 これを満たす整数 x と y は無数にあります。ですが、D の値によっては最小解でもかなり大きい値になることがあり、1 から順番に探していくことは事実上不可能です。たとえば D = 166 のときは以下が最小解です。 p(1700902565**2 - 166 * 132015642**2) #=> 1 最小解の見つけ方 最小解を高速に探し出す方法があります (参考: 二次無理数の連分数展開とペル方程式の解の構成) 。D の平方根の連分数表示を使って、漸化式で解けるとのこと。 例えば、14 の平方根の連分数表示は

    ペル方程式の解の列挙方法 - まめめも
  • Ruby で packrat parser - まめめも

    packrat parsing というパーサの実装方法があります。特徴は、再帰下降パーサ + 無限先読み可能 + memoize*1 という感じです。僕が下手な説明をするより、英語わからなくても Haskell わかればわかる素晴らしいスライドやPappy (reference implementation) を参照してもらったほうがいいです。 で、練習として Ruby で packrat parser を使って足し算と掛け算だけの電卓を作ってみました。 $ ruby arith.rb 1 + 2 + 3 => 6 1 + 2 * 3 => 7 1 + 2 * (3 + 4) => 15文法はこんな感じ。 式      = 空白 加算式 文字列終端 加算式    = 乗算式 ("+" 乗算式)* 乗算式    = プリミティブ ("*" プリミティブ)* プリミティブ = 数値 / "("

    Ruby で packrat parser - まめめも
  • 1