問題:5円玉の山二つ の答え合わせ。
答えは c = a + b + a × b 。
計算すれば、正しいことがわかるが・・・。
論理演算の「and と xor を使って or を表す」のに対応している。
(x xor y) xor (x and y) = x or y
x y x xor y(①) x and y(②) ① xor ②
0 0 0 0 0
0 1 1 0 1
1 0 1 0 1
1 1 0 1 1
5円の下一桁計算式では×がand 、+が xorの役割を果たしている。また、0は「10で割り切れる」、1は「10で割り切れない」を表している。
not を実現するためには、「後で返すからさぁ、5円玉一枚貸してよ~」と頼む必要がある?(笑)
/////
社内のWSSさんから投稿後間もなく正解メールを頂いた。反応があるのは嬉しい。あまりの素早さに「瞬殺ですね」と返信した。
私は
c = not (not a and no
で考えました。
いわいさんが書かれているように not は5円足すのに相当するので、
c = 5 + ((5 + a) * (5 + b
= 5 + (25 + 5a + 5b +
= 30 + 5a + 5b + ab
問題の条件から 30 ≡ 0, 5a ≡ a, 5b ≡ b なので、
c = a + b + ab
山を増やすのも簡単で、上の式をc(a, b)とすると、山三つ(x, y, z)の場合は
c(x, y, z) = c(c(x,
= c((x+y+xy
= (x+y+xy) + z
= x+y
で、四つ以上の場合も容易に推測できます。
瞬殺wssさん、tioakさんコメントありがとうございます。
問題作成時(数ヶ月前)はtioakさんと同じ考えをしたように思います。
でも時間がたって自分でも判らなくなり、今回の別解的解説になりました。
「難易度は易しい」って書いてあったので。。。
Excelなんかで式(1行プログラミング)書く時、こういうアイディアが役にたつよね。
でも時間がたつと
自分でも判らなくなるんだけどね。