Hatena::Grouprubyist

krystal: プログラミング超初心者(文系)

2008-12-05 (Fri)Ruby練習問題

send more money

11:40

  • send + more = money を満たすそれぞれ異なる 0 以上 9以下の数 s, e, n, d, m, o, r, y を求めよ。(ただし s, m は 0 でない)

8重forで解いてみる

for s in 1..9
  for e in 0..9
    next if s == e
    for n in 0..9
      next if s == n or e == n
      for d in 0..9
        next if s == d or e == d or n == d
        for m in 1..9
          next if s == m or e == m or n == m or d == m
          for o in 0..9
            next if s == o or e == o or n == o or d == o or m == o
            for r in 0..9
              next if s == r or e == r or n == r or d == r or m == r or o == r
              for y in 0..9
                next if s == y or e == y or n == y or d == y or m == y or o == y or r == y
                send = s * 1000 + e * 100 + n * 10 + d
                more = m * 1000 + o * 100 + r * 10 + e
                money = m * 10000 + o * 1000 + n * 100 + e * 10 + y
                if send + more == money
                  p send.to_s + "+" + more.to_s + "=" + money.to_s  #=> "9567+1085=10652"
                end
              end
            end
          end
        end
      end
    end
  end
end

9秒くらいかかった。

Prinyさんは Array#permutation で解いてみたようです。

http://rubyist.g.hatena.ne.jp/priny/20081208

ufcppufcpp2008/12/05 20:23next ifの行の下、インデント一段下げる必要ないと思います。

cuziccuzic2008/12/07 12:21制約緩和法を使うのが基本だと思うな。

krystalkrystal2008/12/08 17:02>ufcppさん
ご指摘ありがとうございます。
修正しました。

>cuzicさん
コメントありがとうございます。
「制約緩和法」は初耳です。かなりハイレベルのアルゴリズムだそうですね。

rubikitchrubikitch2008/12/09 21:11ここにも答えのコード置いてます。手で解くのも不可能ではない。
http://d.hatena.ne.jp/rubikitch/20081209/1228823996

krystalkrystal2008/12/10 17:18>rubikitchさん
答えのコード、ありがとうございます。
やはり皆さんpermutationを使ってますね。

ShikamaruShikamaru2012/10/16 01:08This has made my day. I wish all positgns were this good.

bamjoihbamjoih2012/10/16 21:14bL3WVc <a href="http://oervgeigtetf.com/">oervgeigtetf</a>

qrrefzszrcqrrefzszrc2012/10/19 13:32SqXEYS , [url=http://gyieiiutwzlt.com/]gyieiiutwzlt[/url], [link=http://eevaidttpegq.com/]eevaidttpegq[/link], http://ezfsffemznil.com/

xjvyudvpxjvyudvp2012/10/20 01:02xmT2IA <a href="http://adrczmmvgrse.com/">adrczmmvgrse</a>