Problem 61 - Project Euler
早いには早いけどちょっと見苦しい気がするなぁ.こんなもんだろうか.
polynum <- function(n,p){ ((p-2)*n^2 - (p-4)*n)/2 } is.poly <- function(k,p){ (((p-4)+sqrt((p-4)^2 + 8*k*(p-2)))/(2*(p-2)))%%1==0 } is.connect <- function(a, b){ a%%100 == floor(b/100) } cand <- numeric(10^5) i <- 1 for(p in 3:8){ n <- 1 while(polynum(n,p) < 1000) n <- n+1 while(polynum(n,p) < 10000){ cand[i] <- polynum(n,p) i <- i+1 n <- n+1 } } cand <- unique(cand[cand>0]) f <- function(){ for(i1 in cand){ for(i2 in cand[is.connect(i1, cand)]){ for(i3 in cand[is.connect(i2, cand)]){ for(i4 in cand[is.connect(i3, cand)]){ for(i5 in cand[is.connect(i4, cand)]){ for(i6 in cand[is.connect(i5, cand)]){ if(!is.connect(i6, i1)) next candy <- c(i1, i2, i3, i4, i5, i6) count <- 0 use <- logical(6) for(j in 1:6){ if((a <- sum(is.poly(candy, j+2)))>0){ if(a==1){ if(use[is.poly(candy, j+2)]) next use[is.poly(candy, j+2)] <- TRUE } count <- count+1 } } if(count == 6) return(candy) } } } } } } }