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段簡単にした問題で考えてみました。
答は以下の4通り。
よく見ると並び方に規則があります。
これをもとにすれば、先の1段階大きな三角形でも何とかなると思う。
せっかくなので、私も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)) )