#元ネタ
#コードJavaの講義、試験が「自作関数を作り記述しなさい」って問題だったから
— てくも (@kumiromilk) 2016, 3月 9
「ズン」「ドコ」のいずれかをランダムで出力し続けて「ズン」「ズン」「ズン」「ズン」「ドコ」の配列が出たら「キ・ヨ・シ!」って出力した後終了って関数作ったら満点で単位貰ってた
kiyoshi.R
kiyoshi<-function(){
x <- c()
repeat{
x<-c(sample(c("ズン","ドコ"), 1,replace=T),x)
print(x[1])
if(length(x)>4&prod(x[1:5] == c("ドコ","ズン","ズン","ズン","ズン"))==1){
cat("キ・ヨ・シ!(", length(x),"回ズンドコしました)\n",sep = "")
break
}
if(length(x)>999){
print("キ・ヨ・シ!はできませんでした")
break
}
}
}
#要約
Rではsample関数によって復元抽出を行うことができます。
選ばれた"ズン" あるいは"ドコ" を用意したベクトルの先頭に挿入します。
"キ・ヨ・シ!" への分岐条件は、ベクトルの最初の5つの要素と
"ズン" "ズン" "ズン" "ズン" "ドコ" を逆さまにしたベクトルを比較することで行います。
この比較の結果はベクトルで返されるので、if文にあてはめるためにprod関数でベクトル内の要素を全てかけ合わせます。
TRUE = 1, FALSE = 0なので"ズン" "ズン" "ズン" "ズン" "ドコ" 全てがマッチしたときだけ1になります。
結果はcat関数で、せっかくなのでズンドコした回数もベクトルの長さを取得して出力します。
#余談
Rはこういう仕事向いていないんじゃないかなあ