if文や三項演算子を使わずに書け

http://twitter.com/KOBA789/status/51837062164381697

Q, 入力値a, bをとる。このときaは1か0である(それ以外は考えない)。
aが1ならbの符号を反転させた値を、aが0ならbのそのままの値を表示する。
以上のプログラムをC言語でif文や三項演算子を使わずに書け。 

小学生の頃、BASIC で ON GOTO 文使ってたのを思い出して懐かしくなりました。
色んなパラメータの条件を 1,2,3 等の番号にマップするんですよね。

途中式

設題は、(a:1,0) => (-b, b) なので、

  • 大小の向きを合わせる
 1 - a => -1 0
  • 中心を合わせる
 0.5 - a => -0.5 0.5
  • スケールを合わせる
 1 - 2*a => -1 1
  • 最後に b をかける
 b*(1 - 2*a) => -b b

以上。