LoginSignup
0
0

More than 3 years have passed since last update.

Golang: ピーターからの問題を解いてみた

Posted at

問題

下記の記事で紹介されているパズルを、Goで解いてみた。

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

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0