下の変換を用いた時、「3581」が出力されるような4桁の数字を当ててください。
転載元: 「数字当て」 作者: 人参 (Cindy) URL: https://www.cindythink.com/puzzle/85
2133
もちろん0000から順に試してもいいし、変換ルールを考えても答えは導けるが、
もっと楽な解き方がある。
少し実験すれば、この変換アルゴリズムは可逆的だと推測することができる。
例えば100→1484、1484→100となる。
変換が可逆的であると仮定すれば、求めたい数字をXとすると、
X →(変換)→ 3581 ならば、
3581 →(変換)→ X
が成り立つ。
問題欄にある変換を使えば3581→2133なので、
X = 2133
と予想できる。
実際に2133を入力してみれば、3581が出力されることを確認でき、
2133が答えになっていることが確かめられる。
上の解説では「変換は可逆的である」という仮定から答えを見つけたが、
この仮定は実際正しくて、変換アルゴリズムとしてXOR(排他的論理和)を用いている。
AとBの排他的論理和をA ^ Bと表記する(累乗ではないので注意)。
2進数表記された数字の各桁について、以下のルールで計算する。
0 ^ 0 = 0
0 ^ 1 = 1
1 ^ 0 = 1
1 ^ 1 = 0
XORには、演算を二度行うと元の値に戻るという性質がある。
すなわち、
(A ^ B) ^ B = A ・・・(*)
本問題は、入力された数値Aと、あらかじめ用意しておいた数値Bについて
A ^ Bを計算し、その値を返すという仕組みになっている。
Bに対応する値としては、1448を用いている。
今求めたい数値をXとすると、
X ^ 1448 = 3581
であればよいため、(*)を利用すると、Xは
X = (X ^ 1448) ^ 1448
= 3581 ^ 1448
となる。
したがって、問題欄の変換を用いて
X = 2133 を得る。