10個の数字の計算パズル

「日本お笑い数学協会」というTwitterに流れていた問題 >> https://twitter.com/owaraisugaku?lang=ja



気になったのでメモを書き残して仕事に出かけて、帰ってきたら家族がものすごく計算してた!


>> https://ameblo.jp/rikunora/entry-12420444729.html

で、私と言えばオヤジのメンツを保つため、こっそりパソコンの力で解いたのはここだけの秘密です。
※ 以前紹介した Coprisで解けます(下を参照)>> [id:rikunora:20181025]
※(答えるときはリプライは避け、引用RTなどでお願いします!)とあったので、答は載せません。

同じTwitterに、こんな問題もありました。

やはりパソコンの力を借りて答を列挙したところ、
合計 17 となる答が 2 通り、
合計 19 となる答が 4 通り、
合計 20 となる答が 6 通り、
合計 21 となる答が 4 通り、
合計 23 となる答が 2 通り、
全部で18通りの答がありました。

いきなり上の三角形に挑むのは少々しんどいので、もう1段簡単にした問題で考えてみました。

赤、青、緑の線の足し算が同じになるように、○の中に1〜6の数を1つづつ入れよう!

答は以下の4通り。

よく見ると並び方に規則があります。

これをもとにすれば、先の1段階大きな三角形でも何とかなると思う。

せっかくなので、私も1問考えてみました。

赤、青、緑の線の足し算と、赤、青、黄の菱形の中の足し算が全て同じになるように、○の中に0〜9の数を1つづつ入れよう!

答は2通りある。
ヒント:合計は 19 になる。


/**
* □□÷□=□□÷□=□×□=□□を解く Scala + Copris スクリプト.
*/
import jp.kobe_u.copris._
import jp.kobe_u.copris.dsl._

// 10個の変数を用意する
for( n <- 0 until 10 ){
	int('x(n), 0, 9)	// 0〜9の整数
}

// 10個は全て異なる
var lst = List[Term]()
for( n <- 0 until 10 ){
	lst :+= 'x(n)
}
add( Alldifferent( lst ) )

// 問題の式
var last_term = 'x(8) * 10 + 'x(9)
add( ('x(0) * 10 + 'x(1)) === 'x(2) * last_term )	// 割り算は直接書けないので
add( ('x(3) * 10 + 'x(4)) === 'x(5) * last_term )
add( 'x(6) * 'x(7) === last_term )

/* 10の位は0にならない。0で割り算しない。この条件は無くても可 **
'x(0) !== 0
'x(2) !== 0
'x(3) !== 0
'x(5) !== 0
'x(8) !== 0
**/

find
printf( "%d%d ÷ %d = %d%d ÷ %d = %d × %d = %d%d\n",
	solution('x(0)), solution('x(1)), solution('x(2)), solution('x(3)), solution('x(4)),
	solution('x(5)), solution('x(6)), solution('x(7)), solution('x(8)), solution('x(9))
)