カテゴリー
技術

人が見ていると恥ずかしがってちゃんと動かないソート関数

Lynnさん(@chordbug)がツイッターで公開したデモがこちら。

「見てる時だけちゃんと動くソート関数を書いてみた」

JavaScript で書かれた sort() という関数に配列を与えて呼び出しています。

カメラに正面から顔が映っている状態では正しくソートされた結果が返ってくるのに対して、横を向いたリ顔を隠したりした状態で呼んだ時には、結果は毎回異なる適当な順番になっています。

もう一つの動画もあって、こちらは逆に「見ていると緊張して正しくソートできない」関数のデモ

リプライでの質問に対して、Lynnさんはこのウェブページのソースコードを公開してくれています。

tracking.jsという人の顔を認識するライブラリのサンプルをベースに、顔が認識されている時のフラグを用意して、フラグがオンの時だけ正しくソートし、そうでない時はランダムに並べていることがわかります。

ブラウザのカメラ入力を許可し、JavaScriptコンソールで同じように sort() を呼び出すと、手元でも動かすことができました。

手近にあった顔の映った写真を使いました。仕組み上は視線の向きは関係ないので…

ブラウザ上のカメラ入力からの顔認識、こんなに手軽に使えるようになっているんですね。今回の「顔が映ってたら画面を見てることにする」というアイデアだけでなく、これまで無かったページ上のギミックが考えられそうです。

カテゴリー
データ

is-vegan 菜食主義者のための食品判定ライブラリ in JavaScript

肉や魚だけでなく、牛乳など直接は命を奪わない食材も忌避する完全菜食主義(ヴィーガン)のためのライブラリが is-
vegan
です。

利用例はこんな感じ。牛乳はダメで、豆乳はOKと。


import * as isVegan from 'is-vegan';

// example for single ingredient
isVegan.isVeganIngredient('soy'); // true
isVegan.isVeganIngredient('milk'); // false

作りとしては src/util/canbevegan.json と nonvegan.json に食材の名前が列挙してあるだけのシンプルなもの。これを訳せば日本語でも使えるかもしれないですね。レシピサイトの材料リストを見て、菜食主義対応かどうかを表示する、なんていう拡張を作ったりできそうです。

食べ物の規制ということだとイスラム教のハラールについても is-haral 的なライブラリが有ったりするのかな、とGitHub を探してみましたが、見つかりませんでした。あちらは単純に食材の種類で決まるわけではないので同じ手は使えないのかもしれませんね。

via Hacker News

カテゴリー
技術

「ギャンブラーの誤謬」ダイスプログラム

「ギャンブラーの誤謬(ごびゅう)」と呼ばれる言葉がある。コイン投げで表、表、表と連続して表が出ると、次は裏が出そうな気がする心理傾向である。実際は何回表が連続して出ようとも、次に表が出る確率は1/2である。なぜなら、コイン投げは、毎回独立事象(前回の結果と次のコイン投げは無関係)だからである。

ギャンブラーの誤謬 : カイジに学ぶ

現実のサイコロをまっとうにプログラムで再現すれば、乱数を使って毎回同じ確率で出るようになりますが、あえてギャンブラーが間違うような結果を出すサイコロを書くこともできます。Javascript で書かれたギャンブラーダイス

このダイスクラス、コンストラクタで与えた数字の面のサイコロとなります。6ならD6, 20ならD20。物理的な制約がないのでD7でもD13でも何でもできます。

このダイスでは、6面サイでたとえば1が出ると、次回は1が出にくくなります。何度も1が出れば、次に1が出る確率はどんどん下がっていきます。「これだけ1が続いたから、次は1は来ないだろう」というギャンブラーの思い込みが、本当に再現してしまうわけですね。

ボードゲームでこのようなダイスを用意するのは大変ですが、コンピューターゲームなら、こういった判定機を使うことで、プレイヤーがギャンブラーの誤謬のせいで「こんなはずはない」「騙されている気がする」と感じにくいようにすることもできるんでしょうね。実際やってるゲームがあるのかも。

via Hacker News
image credit: Flickr James Bowe