Có một câu hỏi thú vị về trợ giúp R:Đặt hàng 1:17 theo cặp hình vuông hoàn hảo
"Lấy số một lên đến 17. Bạn có thể viết chúng ra thành một dòng để mỗi cặp số bên cạnh nhau, thêm lên để đưa ra một số vuông? "
Giải pháp của tôi dưới đây và không đặc biệt đặc biệt. Tôi tò mò về một giải pháp thanh lịch và/hoặc mạnh mẽ hơn. Có lẽ một giải pháp có thể lấy một chuỗi số tùy ý và ra lệnh cho họ như thế này nếu có thể?
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! nếu tôi có thể. Điều đó rất tuyệt, tôi biết Hamilton là một người thông minh! – Justin
Và giải quyết đường dẫn Hamilton NP-complete được để lại như một bài tập cho người đọc. – piccolbo