問題
下記の記事で紹介されているパズルを、Goで解いてみた。
これをjsで解けと会社の上司に言われたんですが全然わからん。
— ケイセイ@JavaScriptと仲良くなりたい (@keisei_otsuka) February 2, 2020
誰かわかります?笑 pic.twitter.com/ZM6VmigaVQ
Ruby: Array#permutationでクイズを解いてみた
https://techracho.bpsinc.jp/hachi8833/2020_02_20/88192
Haskell: ピーターからの問題を解いてみた
https://techracho.bpsinc.jp/jhonda/2020_02_21/89044
回答
Go (go 1.12.1)
https://ideone.com/3AB5t2
package main
import "fmt"
func main() {
n := 9
ans := make([]int, n)
for i := range ans {
ans[i] = i + 1
}
evaluate := func(a []int) bool {
div0 := a[1]*10 + a[2]
div1 := a[4]*10 + a[5]
div2 := a[7]*10 + a[8]
return a[0]*div1*div2+a[3]*div0*div2+a[6]*div0*div1 == div0*div1*div2
}
// (開発用)生成したpermutationの総数を確認
cnt := 0
_ = cnt
var permutate func(int)
permutate = func(s int) {
if s+2 < n {
permutate(s + 1)
} else {
if evaluate(ans) {
fmt.Println(ans)
}
cnt++
}
for i := s + 1; i < n; i++ {
ans[s], ans[i] = ans[i], ans[s]
permutate(s + 1)
ans[s], ans[i] = ans[i], ans[s]
}
}
permutate(0)
// fmt.Println(cnt) // must be n!
}