ScalaでSEND+MORE=MONEY
30分プログラム、その682。ScalaでSEND+MORE=MONEYを解いてみました。
Scalaのforはモナドらしいです。モナドと言えばリストモナド、リストモナドと言えばSEND+MORE=MONEYです。
というわけで、SEND+MORE=MONEYを解いてみました。
使い方
$ fsc SendMoreMoney.scala $ time scala SendMoreMoney List((9567,1085,10652)) scala SendMoreMoney 13.77s user 0.43s system 69% cpu 20.312 total
ソースコード
object SendMoreMoney{ def num(args: Int*) = args.foldLeft(0)(_ * 10 +_) def without(xs : Int*) = xs.foldLeft((0 to 9).toList)(_ - _) def solve() = for { s <- without(0) m <- without(0,s) e <- without(s,m) n <- without(s,m,e) d <- without(s,m,e,n) o <- without(s,m,e,n,d) r <- without(s,m,e,n,d,o) y <- without(s,m,e,n,d,o,r) if num(s,e,n,d) + num(m,o,r,e) == num(m,o,n,e,y) } yield (num(s,e,n,d),num(m,o,r,e),num(m,o,n,e,y)) def main(args : Array[String]) = println(solve()) }