しようと思ったら先駆者の方々がたくさんいらっしゃり、私の稚拙なコードが恥ずかしくなってきました。
きっかけはこの方のツイートです。
Javaの講義、試験が「自作関数を作り記述しなさい」って問題だったから
— てくも (@kumiromilk) March 9, 2016
「ズン」「ドコ」のいずれかをランダムで出力し続けて「ズン」「ズン」「ズン」「ズン」「ドコ」の配列が出たら「キ・ヨ・シ!」って出力した後終了って関数作ったら満点で単位貰ってた
コード
特に深く考えず、突貫で作ったらこんなようになりました。
#include <stdio.h>
#include <time.h>
#include <stdlib.h>
int main (int argc, const char * argv[]){
int rnd;
int kiyoshi[5] = {0};
srand(time(NULL));
do {
rnd = rand() % 2 + 1;
switch (rnd){
case 1:
printf("ズン ");
break;
case 2:
printf("ドコ ");
break;
default:
break;
}
for(int i = 1; i < 5; i++) {
kiyoshi[i - 1] = kiyoshi[i];
}
kiyoshi[4] = rnd;
if(kiyoshi[0] == 1 && kiyoshi[1] == 1 && kiyoshi[2] == 1 && kiyoshi[3] == 1 && kiyoshi[4] == 2){
printf("キ・ヨ・シ!\n");
break;
}
}while(1);
return 0;
}
今回はBreakする条件分岐がある無限ループを使用しました。
時刻から乱数(1か2)を計算により取得、その値を元に「ズン 」「ドコ 」のいずれかの出力を繰り返しています。
乱数の履歴は判定に必要な5つ分まで配列に格納し、配列の値の並びが特定の状態になったときのみ「キ・ヨ・シ!」を出力したのち、無限ループから抜けてプログラムが終了します。
実行例
ズン ドコ ズン ドコ ズン ドコ ドコ ズン ズン ドコ ズン ズン ドコ ドコ ズン ドコ ドコ ズン ズン ドコ ズン ズン ドコ ドコ ドコ ズン ズン ズン ドコ ドコ ズン ズン ズン ズン ズン ドコ キ・ヨ・シ!
ドコ ズン ズン ズン ドコ ドコ ドコ ズン ドコ ズン ズン ズン ズン ズン ドコ キ・ヨ・シ!
ドコ ズン ドコ ドコ ズン ドコ ズン ドコ ドコ ドコ ドコ ズン ズン ドコ ドコ ドコ ドコ ドコ ドコ ズン ズン ドコ ズン ズン ズン ドコ ズン ドコ ズン ズン ドコ ズン ズン ドコ ドコ ドコ ドコ ズン ズン ドコ ズン ズン ドコ ドコ ドコ ドコ ズン ドコ ズン ズン ドコ ズン ドコ ズン ドコ ズン ドコ ドコ ドコ ドコ ズン ドコ ズン ズン ズン ドコ ドコ ズン ドコ ドコ ズン ズン ズン ドコ ドコ ズン ズン ドコ ズン ドコ ドコ ドコ ズン ズン ドコ ドコ ズン ドコ ドコ ドコ ドコ ズン ドコ ズン ドコ ズン ズン ズン ドコ ドコ ズン ズン ドコ ズン ドコ ズン ズン ズン ズン ズン ズン ドコ キ・ヨ・シ!
果たしてこの出力でいいのかわかりませんが、一応「ズン ズン ズン ズン ドコ キ・ヨ・シ!」となっているので良しとしましょう。
備考
実行環境...MacOS Monterey 12.4、Macbook Air(Apple M1、16GB)
コンパイラ...(おそらく)Clang
開発環境...Visual Studio Code 1.66.1