米国政府が1億5000万円かけたあのアプリをC#で再現してみた(random)

      2016/04/23

先日アメリカ政府の関連機関が1.5億円払って作ったというiPadアプリがちょっと話題になりました。そのアプリは空港のセキュリティチェック時に列を右に左に振り分けるというもの。

画面をタップして表示された矢印に従い、あなたは右~

YourR画面をタップして表示された矢印に従い、あなたは左~

YourL

動画を見てもらうとわかりやすいです。

さてこのアプリの名前は「TSA Randomizer」。TSA(アメリカ国土安全保障省の運輸保安庁認定施錠機構の総称)のランダマイザー。つまりランダムデータ生成装置ですね。

今回はこの「Randomizer」をC#で再現してみます。

 

C#で乱数(ランダムな数値)を取得する

C#での乱数(疑似乱数)はSystem.Randomクラスを使用することで取得することができますのでまずはボタンタップで乱数を取得。その乱数が偶数なら左、奇数なら右。向きに合わせた画像を画面に表示して…

…あとは、にこやかに誘導する。以上!できちゃいました。

Action01Action02

 

C# System.Randomクラス

再現がすんなりと出来てしまったので、C#のSystem.Randomクラスについてもう少しみてみます。この乱数の生成には時間に依存する規定のシード値(種となる値)を使用しRandomクラスのインスタンスを初期化します。そして、Next()メソッドで0以上のランダムな整数を取得しています。(数値の範囲を絞ることも可能)

 

C# System.Randomクラスの注意点

乱数(疑似乱数)と初めに書いたようにこの乱数は疑似であって厳密な乱数というわけではありません。シード値に同じ数値を入れて初期化した場合、生成される乱数は予測できるものとなってしまいます。そのテストとして先ほどのコードを以下のように書き換えてみました。施行3回とも同じ数値となっています。

実行結果(一部抜粋)

 

C# System.Randomクラス 引数なしでは?

System.Randomクラスで引数なしの場合は時間に依存するシード値としてEnvironment.TickCountがシード値として使われます。システムタイマーから得られる値をシード値として使用しているのでその数値が異なるタイミングであれば生成される数値は異なります。

実行結果(一部抜粋)

TickCountが変わるより早い速度で乱数を用いる場合には注意が必要ですが、今回再現したC#版「TSA Randomizer」では、画面タップ(ボタンクリック)のタイミングで乱数を生成しているので、得られる疑似乱数は左右を振り分けるには十分ランダムな数値になりますね。

無事、噂のランダマイザーがC#で再現できました。あとは1.5億円での受注を再現するのみです!

 

 

 - 未分類