javascript で SEND + MORE = MONEY
覆面算を append map の深さ優先探索で解いてみる。
参考 ocaml-nagoya:ネタ記録庫
function solve() { // var digs = [0,1,2,3,4,5,6,7,8,9]; var digs = $A($R(0,9)); var m = 1; var o = 0; var s = 9; return digs.without(m,o,s).map(function(e) { return digs.without(m,o,s,e).map(function(n) { return digs.without(m,o,s,e,n).map(function(d) { return digs.without(m,o,s,e,n,d).map(function(r) { return digs.without(m,o,s,e,n,d,r).map(function(y) { if (1000 * s + 100 * e + 10 * n + d + 1000 * m + 100 * o + 10 * r + e == 10000 * m + 1000 * o + 100 * n + 10 * e + y) return ''+s+e+n+d+'+'+m+o+r+e+'='+m+o+n+e+y; else return []; })})})})}).flatten(); }
prototype.js の Array.without() が便利。
時間がかかるので m o s は決定済み。
解を文字列で返せばflatten()につぶされません。
解を[s,e,n,d,m,o,r,y]で返そうとすると問題になるかとおもいきや、
どうせ解は1個なんでつぶされても見分けがつきます(ぉ