Codeforces 143 A. Help Vasilisa the Wise 2

問題

4つの□に、1〜9の相違なる整数を入れる。
□□
□□
入れた後の数字の、各列の和、各行の和、対角線の和が与えられる。
このとき、数字の入れ方として正しいものをどれか1通り出力せよ。


正しい入れ方が存在しないときは-1を出力せよ。

制約条件

c1,c2,r1,r2,d1,d2≦20

方針

総当り。
rubyで書いてみた。
.permutationを使うと簡潔に書けるっぽい。

ソースコード

r1, r2 = gets.split(" ").map(&:to_i)
c1, c2 = gets.split(" ").map(&:to_i)
d1, d2 = gets.split(" ").map(&:to_i)

for a11 in 1..9
 for a12 in 1..9
  for a21 in 1..9
   for a22 in 1..9
    if [a11, a12, a21, a22].uniq.length == 4 &&
       a11+a12 == r1 && a21+a22 == r2 &&
       a11+a21 == c1 && a12+a22 == c2 &&
       a11+a22 == d1 && a12+a21 == d2
       puts [a11, a12].join(" "), [a21, a22].join(" ")
       exit
    end
   end
  end
 end
end
p -1