Problem 61

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)
          }
        }
      }
    }
  }
}
}