A HAPPY NEW YEAR!!

皆様新年明けましておめでとうございます。正月気分が抜けない藤田スーパサブ2016でございます。
今年も弊社ともどもこちらのsudo rm -rf /をどうぞよろしくお願い致します。

今年も数日しか経っていませんが年始らしいお話を。
まずは箱根駅伝。
青山学院大学の完全優勝には驚きました。
10区間中6区間で区間賞ではどの大学も追いつけないし、抜かすことはできませんよね。
来年も青山学院大学が優勝するのか?それとも青山学院大学を脅かす大学が出てくるのか楽しみですね。

次は新日本プロレス。
あのももいろクローバーZの小さな巨人こと有安杏果がリングに上がるということ自体驚きでしたが、メイン終了後IWGPチャンピオンを襲撃してKOしてしまうという衝撃。
しかも、それを受けて新日本側が次期挑戦者に有安杏果に決定するというスターダストプロモーションとの血で血を洗う戦い。今後の新日本からまさに目が離せません。
ちなみに9割5分は嘘です。

そんな与太話はさておきまして、今回のブログの内容は

新年あけましておめでとうございます記念!!システムソリューション事業部のみんなで何か作ってみようカップ

になりました。

何をするかとというと前回行った[緊急開催]FizzBuzz選手権のようなものをもう一度やるということです。

今回の内容は、新年にふさわしい題材としまして「おみくじ」プログラムを各自で作成して公開する!!
そこで、どんなレギュレーションにするか、おみくじ作成委員会を組織しまして、連日連夜熱い会議が行われました。

会議の結果、以下のレギュレーションにて「おみくじ」プログラムを作成します。

・言語は何でも良し!!
・元三大師(がんさんだいし)御神籤帳をベースにした浅草寺のおみくじ確率で結果を表示する。
※元三大師やおみくじの順番に関しては下記のサイトを参考
http://yakudate.com/lot/

・確率は以下の通りであること。
大吉  17%
吉   35%
半吉  5%
小吉  4%
末小吉 3%
末吉  6%
凶   30%
・表示する内容は吉や大吉だけでも良いし、”願い事:叶うでしょう”などを表示しても良し。

※浅草寺のおみくじ確率については下記のサイトを参考
http://r25.yahoo.co.jp/fushigi/wxr_detail/?id=20150101-00039809-r25&vos=ngt20130501001

それでは皆さんの実装した「おみくじ」プログラムを紹介して行きます。

まずは私から。

言語はPHPで作成しました。
簡単に作成することを考えて条件分岐で作成することに。
今回は”switch”で作成してみました。

実装したコードは以下になります。

<?php

$num = rand(1,100);

switch ($num)
{
  case $num <= 17:
  echo '大吉';
  break;

  case $num <= 52:
  echo '吉';
  break;

  case $num <= 57:
  echo '半吉';
  break;

  case $num <= 61:
  echo '小吉';
  break;

  case $num <= 64:
  echo '末小吉';
  break;

  case $num <= 70:
  echo '末吉';
  break;

  case $num <= 100:
  echo '凶';
  break;

  default:
  echo '平';
}

rand関数を利用して、ランダムで1から100までの数字を1つ取ってきます。
その数字をswitch文を使って判別し、おみくじの結果を表示します。
レギュレーションに忠実な安心、安定のこれぞおみくじプログラムというものを作ってみました。
ただし、これをそのまま使うとものすごく地味なおみくじサイトが出来上がります。

次はinoueさんになります。

inoueさんが出来たよとURLを送ってきました。

/works/711/inoue

……コードは?

inoueさんくれたコメントが以下になります。

  • 1年に一度しか引けないおみくじにしてみました
  • 厳密に制限することは出来ないので、セッションで我慢しました
  • 年末までの時間を計算して、Cookieの有効期限にセットしてます。
  • 本物のくじはいろいろと有難いお言葉が書かれてますが、よくわからないので、関連する画像を表示するようにしてみました。
  • サイトはSilexを使ってみました。
  • 使う必要は全然なかったんですが、こういう簡単なサイトを作るのには適してます
  • つまらなかったので、思いつくことを端からやりました。

使った言語:Silex/PHP

とのことです。
コードを見たって見に来てくれた人はつまらないだろうと気を使ってくれた結果、このような形になっております。
使い方まで説明するとはおみくじを引く人のことを考えてくれた素晴らしいサイトになっていますね。
しかもおみくじの結果をGoogleの画像検索と組み合わせるという私には考えもつかない実装ですよ。
よろしければ、ソーシャルボタンを使って結果をシェアしてください。

なんと下記のURLをクリックすると「10000回実行した結果」もわかります。

/works/711/inoue/test

続きましてにssさんです。

ssさんもURLを送ってくれました。

/works/711/ss

うん?デジャブ?
どこかで見たことがあるサイトと思い、ssさんに確認してみると
サイトの表示はinoueさんをオマージュしたとのことです。
ただし、inoueさんはPHPを使用していましたが、ssさんはシェルスクリプトを使っています。
下記がssさんのコードになります。

#!/bin/sh

num=`expr $RANDOM % 100`

#大吉  17%
if test $num -le 16 ; then
echo '大吉'

#末小吉 3%
elif test $num -ge 16 -a $num -le 19 ; then
echo '末小吉';

#小吉  4%
elif test $num -ge 19 -a $num -le 23 ; then
echo '小吉'

#半吉  5%
elif test $num -ge 23 -a $num -le 28 ; then
echo '半吉'

#末吉  6%
elif test $num -ge 28 -a $num -le 34 ; then
echo '末吉'

#吉   35%
elif test $num -ge 34 -a $num -le 69 ; then
echo '吉'

#凶   30%
elif test $num -ge 69 -a $num -le 99 ; then
  if test $num -eq 99 ; then
    echo '大凶'
  else
    echo '凶'
  fi

else
echo 'NG'
fi

一か所レギュレーション違反をしている箇所がありますが、わかりますでしょうか。
“凶”の1%の確率で”大凶”が出る仕様となっております。
レギュレーション違反なのですが、色々なところからこのレギュレーションだと面白くできないと苦情が来ておりましたので、目をつむることにしました。
“大凶”が出るまで是非ともお楽しみください。

次はfuchigamiさんです。

fuchigamiさんもURLを送ってくれました。

/works/711/fuchigami

fuchigamiさんはJavaScriptで作成してくれました。
カメラ付きPCで自分の画像を取ったり、保存されている自分の画像で占いができる仕様となっております。
ソースを見るとコードが確認できます。
fuchigamiさんのコメントは以下です。

  • アップした画像または撮影した写真のファイルサイズ末尾2ケタ(00~99)で大吉~凶振り分るようにしてみました。
  • 使えないブラウザあるとおもいます!

とのことです。
Chrome、Firefoxでは確認済みです。
IE、スマホは……わかりません!!
決め顔で取った画像が”凶”でも苦情等は一切受け付けおりません。御了承下さいませ。

次はyamamotoさんです。

/works/711/yamamoto

yamamotoさんもJavaScriptで作成してくれました。
fuchigamiさんと同じでソースを見ればコードが確認できます。

yamamotoさんのコメントは以下です。

  • どうやっても面白くならないので、アニメーションで誤魔化そうかと思いました。

……レギュレーション間違ったかな~。
皆さんどうにかして面白くしようと色々と試行錯誤をしてくれました。
yamamotoさんのはスロット風なおみくじになっております。

最後にtakedaさんです。

takedaさんはperlで作成してくれました。
takedaさんのコメントは以下になります。

ランダムにこだわったおみくじを作ってみました。
皆さんプログラムで使っているrand関数とかあるじゃないですか。あれって実はいうほどランダムじゃないらしいです。
何言ってんだこいつって感しますがランダムっぷりにムラっけがあるらしいです。
最強言語であるperlではより自然なランダムを提供してくれるCPANモジュール[Math::Random::MT ]があるので使ってみます。
rand関数とMath::Random::MTとで100万回おみくじを引いてみればそれはそれは偏りがみられるだろうと考えてます!

my $max = 1000000;
use Math::Random::MT qw/rand srand/;
srand time^$$;

my %count_by_result = ();
for my $i (1 .. $max) {
    my $rand = int(rand 100);
    my $result =  &_omikuji($rand);
    $count_by_result{$result} = ref $count_by_result{$result} ? 1 : $count_by_result{$result} + 1;
}

print "大吉   " . $count_by_result{'大吉'}. "\n";
print "吉    " . $count_by_result{'吉'}. "\n";
print "半吉   " . $count_by_result{'半吉'}. "\n";
print "小吉   " . $count_by_result{'小吉'}. "\n";
print "末小吉  " . $count_by_result{'末小吉'}. "\n";
print "末吉   " . $count_by_result{'末吉'}. "\n";
print "凶    " . $count_by_result{'凶'}. "\n";

sub _omikuji{
    my $rand = shift;
    if($rand <= 17){
        return '大吉';
    }elsif ($rand <= 52){
        return '吉';
    }elsif ($rand <= 57){
        return '半吉';    
    }elsif ($rand <= 61){
        return '小吉';    
    }elsif ($rand <= 64){
        return '末小吉';    
    }elsif ($rand <= 70){
        return '末吉';    
    }elsif ($rand <= 100){
        return '凶';    
    }else{
        die 'bad rand!';
    }
}

その結果はというと・・・・

びっくりするほどいっしょですね。。。100万回程度じゃ誤差でないのかも知れません。
実装間違ってんのかな・・・

とのことでした。

takedaさんにもサイトを作ってもらおうかと思ったのですが、サーバにperlモジュールインストールして既存のシステムに影響与える可能性もあるとのことだったので今回はなしということになりました。

これで全てのおみくじプログラムが出揃いました。
またまたみなさん色んな言語で作成してくれ、色々な遊びも追加してくれました。
是非ともみんなのおみくじで今年の運勢を占ってみてください!!
“大吉”出なくてもしょげないでください!!
“大凶”出た人はめでたくないけど、自慢してください!!

それでは皆さんまた会う日まで。さようなら~。

……inoueさんをリスペクトということで
/works/711/fujita