面白い問題おしえて~な 30問目at MATH
面白い問題おしえて~な 30問目 - 暇つぶし2ch784:132人目の素数さん
20/01/20 07:10:21 eVrMliO5.net
>>745
無思考解のRでのプログラム(未検証)

n=5
TE=gtools::permutations(2,n,v=0:1,rep=T) # TE : 第1行が00000 で始まり最終行が11111で終わる行列
colnames(TE)=LETTERS[1:n] # 各列の名前A~E


foo <- function(x){ # TEの各行を判定する関数
cond <- function(P,Q) !(P & !Q) # P ⇒ Qの真偽を返す関数
all(c( # all : c()内の , で区切られた命題が全て正しいかTRUE/FALSEで返す
# c(Aが正直者で証言が正しい|Aが嘘つきで証言が嘘, Bが正直者で証言が正しい|Bが嘘つきで証言が嘘, ...)
(x[1]==1 & x[2]==1) | (x[1]==0 & x[2]==0),
(x[2]==1 & x[1]==1 ) | (x[2]==0 & x[1]==0),
(x[3]==1 & cond(x[2]==0,x[3]==0)) | (x[3]==0 & !cond(x[2]==0,x[3]==0)),
(x[4]==1 & cond(x[3]==1,x[4]==1)) | (x[4]==0 & !cond(x[3]==1,x[4]==1)),
(x[5]==1 & (cond(x[4]==0,x[5]==0)|cond(x[4]==1,x[5]==1)) )
|  (x[5]==0 & !(cond(x[4]==0,x[5]==0) | cond(x[4]==1,x[5]==1)) )
))

}

TE[apply(TE,1,foo),] # 各行にfooを適用して返り値がTRUEのものを表示


次ページ
続きを表示
1を表示
最新レス表示
レスジャンプ
類似スレ一覧
スレッドの検索
話題のニュース
おまかせリスト
オプション
しおりを挟む
スレッドに書込
スレッドの一覧
暇つぶし2ch