面白い問題おしえて~な 30問目at MATH
面白い問題おしえて~な 30問目 - 暇つぶし2ch775:132人目の素数さん
20/01/20 19:19:04.08 MTgckgfx.net
>>746
Eの記述を簡略化
n=5
TE=gtools::permutations(2,n,v=0:1,rep=T) # TE : 第1行が00000 で始まり最終行が11111で終わる行列
colnames(TE)=LETTERS[1:n] # 各列の名前A~E
fn <- function(x){
if(sum(x)==n|sum(x)==0) return(FALSE) # 全員が正直か嘘つきならFALSEを返す
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 & (x[4]==x[5]) ) | (x[5]==0 & (x[4]!=x[5]) )
))
}
TE[apply(TE,1,fn),] # 各行にfnを適用して返り値がTRUEのものを表示
実行結果
A B C D E
1 1 1 1 0
Eが嘘つき


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