13
で1:17発注
R-助けに興味深い質問がありました:完璧な正方形のペア
「の数字に17を使用して、ラインでそれらを書き出すことができますまでのいずれかを実行しますが、そのようにしている番号のすべてのペア互いに隣り合って、合計して正方形の数字を与えるのですか? "
私の解決策は以下の通りで、特別なものではありません。私はより洗練された、そして/または強固な解決策について興味があります。可能であれば、任意の数の文字列を取り、このような順序で並べ替えることができるソリューションですか?
sq.test <- function(a, b) {
## test for number pairs that sum to squares.
sqrt(sum(a, b)) == floor(sqrt(sum(a, b)))
}
ok.pairs <- function(n, vec) {
## given n as a member of vec,
## which other members of vec satisfiy sq.test
vec <- vec[vec!=n]
vec[sapply(vec, sq.test, b=n)]
}
grow.seq <- function(y) {
## given a starting point (y) and a pairs list (pl)
## grow the squaring sequence.
ly <- length(y)
if(ly == y[1]) return(y)
## this line is the one that breaks down on other number sets...
y <- c(y, max(pl[[y[ly]]][!pl[[y[ly]]] %in% y]))
y <- grow.seq(y)
return(y)
}
## start vector
x <- 1:17
## get list of possible pairs
pl <- lapply(x, ok.pairs, vec=x)
## pick start at max since few combinations there.
y <- max(x)
grow.seq(y)
2!私にできることであれば。それは非常にクールだ、私はハミルトンがスマートな男だったことを知っていた! – Justin
NP完全ハミルトニアン経路を解くことは、読者の練習として残されています。 – piccolbo