概要
- [ A ] + [ B ] = [ C ]
という形式で数式が与えられる。A, B, C はそこに含まれるバーティカルバー( '|' )の本数に対応する値を表す。
A, B, C 間で棒を動かす操作が一回まで許される。等式を成立させることができるならば、そのような数式を(入力と同じ形式で)一つ表示せよ。不可能な場合は "Impossible" を印字せよ。
解法
最初から等しくなっている場合を除くと、右辺と左辺の差が 2 であるときに限り、適当に動かせば両辺を等しくすることができます。左辺から右辺に動かすとき、A, B のいずれかが 0 にならないようにする必要があります。
コード
a, b, c = gets.strip.split( /[+=]/ ).map( &:length ) if a + b + 2 == c then a = a + 1 c = c - 1 elsif a + b == c + 2 then if 2 <= a then a = a - 1 else b = b - 1 end c = c + 1 elsif a + b != c a = -1 end if a == -1 then print "Impossible" else print "|" * a + "+" + "|" * b + "=" + "|" * c end