# 4組のカップル(合わせて8人)が無作為に横一列に並ぶ。
# どのカップルについても彼氏と彼女が隣り合わない確率を求めよ。
library(gtools)
x=c(1:4,-1:-4)
lx=length(x)
perm=permutations(n=lx,r=lx,v=x,set=FALSE)
head(perm) ; tail(perm)

contact <- function(x){
n=length(x)
i=1
y=x[1]+x[2]
if(y==0) return(TRUE)
while(y!=0 & i<n){
y=x[i]+x[i+1]
if(y==0) return(TRUE)
i=i+1
}
return(FALSE)
}
cnt=sum(apply(perm, 1, contact)) # contact
(a=nrow(perm)-cnt)
(b=nrow(perm))
gcd <- function(a,b) ifelse(!a%%b,b,gcd(b,a%%b))
a/b
a/gcd(a,b)
b/gcd(a,b)