🐡

数学パズル(整数問題)

2021/02/19に公開2

はじめに

twitterのタイムラインに次のような問題が流れてきました。

https://twitter.com/TimBrzezinski/status/1362517284829487107

Juliaで解いてみる

juliaで解いてみたくなったので,やってみました。

function af()
list=[]
for x=0:9,y=x+1:9,z=y+1:9
        k=2*(x*y+y*z+z*x)
        l=k ÷ 100
        m=(k %100)÷10
        n=k % 10
    if (l != x && l != y && l != z 
            &&m !=x && m !=y && m !=z 
            && n != x &&n != y &&n != z
            && l != m && m != n && n != l)
            push!(list,k)
        println(x,",",y,",",z,"→",l,m,n)
        end
    end
    println("maximum =",findmax(list)[1])
    println("minimum =",findmin(list)[1])
end

af()

0,7,9→126
1,2,5→034
1,2,7→046
1,2,9→058
1,3,5→046
1,3,6→054
1,3,7→062
1,3,9→078
1,5,6→082
1,5,7→094
2,4,5→076
2,5,6→104
2,5,9→146
3,4,6→108
3,4,9→150
3,5,7→142
3,5,9→174
3,8,9→246
5,6,7→214
5,7,9→286
5,8,9→314
6,7,9→318
maximum =318
minimum =34

さっとでた。22通りある。何か規則性あるのかな。ちょっと考えてみよう。

Discussion

antimon2antimon2

原tweetで "0 can = 1st digit of the surface area" とあるので表面積 034 はOKですが、3辺 x,y,z0 は不適切ではないでしょうか?(直方体にならないので)だとすれば 0,7,9→126は除外した方が良いと思います。
すると21通りですね。もし表面積だけに注目するなら 1,2,7→0461,3,5→046 は同じ値なのでそれを同一視するとさらに1件減って20通りになります(たぶんこっちは意味ないですけれど)。

あとJulia的なことで言えば、リスト(配列)から最大値・最小値を取り出すだけなら maximum()/minimum()/extrema() という関数がありますよ。

julia> maximum(list)
318

julia> minimum(list)
34

julia> extrema(list)
(34, 318)
清水団清水団

コメントありがとうございます。そうですね。3辺の0,7,9は外しておいた方がいいですね。他の方もそのようなツイートしていました。それと,表面積が同じになる縦横高さの組み合わせが確かにあるのですね。これはもしかしたら,1つの展開図で,2通りの直方体が作りれるものかもしれません。(そんなのがあったように記憶しています)考えてみます!

juliaのコマンドもありがとうございました!