均等に分けてみる

ベッドルームで群論をの話。
いくつかある正の整数を2群に分けたい。
条件は、2群の要素の総和が等しい、ということで久々にスクリプトを作成する。

# 本に出ていた、分割の仕方がただ1通りしかないやつ。
a<- c(771,121,281,854,885,734,468,1003,83,62)
a
# もし、違うことをしてみたければ
#set.seed(11)
#a<- sample(1:100,size=12)
#a
# 総和が奇数だと都合が悪いので
if(sum(a)%%2!=0){
	a<- append(a,1)
}
# 群の分け方としては、1と-1で区別する。
# すべての分け方を地味に発生させる。
# 行について足して、和をみる。
bit<- list()
for(i in 1:length(a)){
	bit<- c(bit,list(c(1,-1)))
}
sequence<- t(as.matrix(expand.grid(bit)))
#sequence
Seq<- sequence[,head(g,length(g)/2)]
g<- Gg<- which(colSums(sequence*a)==0)
Dev<- lapply(mapply(rep,0,1:(length(g)/2)),unique)
for(G in 1:length(Dev)){
    G1<- a[which(sequence[,g[G]]== 1)]
    G2<- a[which(sequence[,g[G]]==-1)]
    Dev[[G]]<- list(G1,G2)
}
Dev
# 確認してみる。
for(d in 1:length(Dev)){
	print(lapply(Dev[[d]],sum))
}