🐡
数学パズル(整数問題)
はじめに
twitterのタイムラインに次のような問題が流れてきました。
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
原tweetで "0 can = 1st digit of the surface area" とあるので表面積
034
はOKですが、3辺x,y,z
は0
は不適切ではないでしょうか?(直方体にならないので)だとすれば0,7,9→126
は除外した方が良いと思います。すると21通りですね。もし表面積だけに注目するなら
1,2,7→046
と1,3,5→046
は同じ値なのでそれを同一視するとさらに1件減って20通りになります(たぶんこっちは意味ないですけれど)。あとJulia的なことで言えば、リスト(配列)から最大値・最小値を取り出すだけなら
maximum()
/minimum()
/extrema()
という関数がありますよ。コメントありがとうございます。そうですね。3辺の0,7,9は外しておいた方がいいですね。他の方もそのようなツイートしていました。それと,表面積が同じになる縦横高さの組み合わせが確かにあるのですね。これはもしかしたら,1つの展開図で,2通りの直方体が作りれるものかもしれません。(そんなのがあったように記憶しています)考えてみます!
juliaのコマンドもありがとうございました!