ふるた
どうも、ふるたです。本日はGW明けに開催される関数じゃんけんについてお話します。
どうして関数じゃんけんを…
じゃんけんサークルには情報科学部の学生がほとんどなので、プログラミングが大好きなフレンズが多いです。そんな彼らが発案してそれがサークル内でかなり流行ったのでサークル外からも関数を募ってじゃんけんしよーぜ!って感じです。でも…
プログラミングってなに?
ってことですよ。僕はプログラミングアレルギーなので正直プログラミング知らない人が参加するのは敷居が高いと思うんですよ…
と、いうわけでプログラミングを全く知らない人でも参加できるように、かるーい解説っぽい記事を書こうかと思います。
簡単にルール解説
数学で使う関数をイメージしてください。例えばf(x)=x^2+1とするとf(1)=3、f(2)=5って要領でxの値を決めるとその式の値も定まる…、これが関数でしたよね
プログラミングにおける関数もイメージはそんな感じです。
この関数を自分で作成して式の値をじゃんけんの手に見立ててじゃんけんをするのが関数じゃんけんです。
こんな関数もかけるよ
ここからが本題です。実際にこれまでメンバーが使った関数を例にして、こういう関数が書けるっていうのを解説しようかと思います。
一応、プログラミングの関数の形で書きます。その後にこういう動作をするっていうのをプログラミングを知らない人向けに書きます。
なお、0=グー、1=チョキ、2=パーとなっております。
引数は対戦ごとに1増えていくnです。本番では相手や自分の勝利数も使うことができます。
例1
return 1;
常に1、お察しの通り定数関数となっております。
例2
int a,b;
a = n % 6;
if(a == 0) b = 0;
if(a == 1) b = 0;
if(a == 2) b = 0;
if(a == 3) b = 1;
if(a == 4) b = 1;
if(a == 5) b = 2;
return b;
見るだけでめまいがしそうですが、やってることは単純です。
まず、新しく変数であるaとbを設定します。intは「aとbは整数だよ」ってことです。(細かくいうと違いますが、整数ってことが重要です)
2行目はaの値を決めてます。aとはnを6で割った余り、という意味です。
3行目以降のifはaの値によって今度はbの値を決める、ということです。aが0ならbは0、aが3ならbは1…こんな感じです。
return b;は最終的な値です。このbを実際のじゃんけんの手として使います。
これがどういう手になるかというと、0,0,0,1,1,2,0,0,0,1,1,2,…と循環していきます。
例3
if(n <= 2000){
return ((int)pow(n, 2) * 3 + 25) % 3;
}
else{
return n * 79 % 3;
}
まず、nが2000までは(n^2)*3+25を3で割った余り、2000以降はn*79を3で割った余りです。
累乗を使っているので少し不規則になりそうですね(小並感)
例4
int a;
a = sin(M_PI * n);
if(a >= 0){
return a;
}
else{
return a * (-1);
}
新しい変数aを設定します。aはsin(π*n)です。この例と同様にcos関数なんかも使えます。
現状の傾向とアドバイス
現状の傾向としては、毎回定数関数を使う人はいます。また、サークルメンバーは関数じゃんけんに慣れつつあるので「いかに不規則に手を出せるか」がメンバーの目標?になっています。
なので、ある程度の不規則が一つのポイントとなるかと思います。1000手ごとにパターンを変えてみたりしてオリジナルの偏りを生むことが、僕のアドバイスです。
最後に…
この記事がプログラミングを知らない人にとって少しでも関数じゃんけんを気軽にとらえていただけるきっかけとなれば幸いです。
第一回関数じゃんけんについての記事はこちら
皆様の参加をじゃんけんサークル一同お待ちしております!
Tweet