閲覧者数: ...

数字当て

[20の扉] [闇スープ]

下の変換を用いた時、「3581」が出力されるような4桁の数字を当ててください。



出題者:
出題時間: 2017年11月5日 15:07
解決時間: 2017年11月5日 18:01
© 2017 人参 作者から明示的に許可をもらわない限り、あなたはこの問題を複製・転載・改変することはできません。
転載元: 「数字当て」 作者: 人参 (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(排他的論理和)を用いている。

XOR(排他的論理和)

AとBの排他的論理和をA ^ Bと表記する(累乗ではないので注意)。  
2進数表記された数字の各桁について、以下のルールで計算する。
0 ^ 0 = 0
0 ^ 1 = 1
1 ^ 0 = 1
1 ^ 1 = 0 

XORの性質

XORには、演算を二度行うと元の値に戻るという性質がある。
すなわち、
(A ^ B) ^ B = A  ・・・(*) 

本問題は、入力された数値Aと、あらかじめ用意しておいた数値Bについて
A ^ Bを計算し、その値を返すという仕組みになっている。
Bに対応する値としては、1448を用いている。

今求めたい数値をXとすると、
X ^ 1448 = 3581
であればよいため、(*)を利用すると、Xは

X = (X ^ 1448) ^ 1448
= 3581 ^ 1448

となる。
したがって、問題欄の変換を用いて
X = 2133 を得る。


出題者:
参加するには または してください
パトロン:
アシカ人参
と 匿名パトロン 3 名
Donate using Liberapay
Avatars by Multiavatar.com
Cindy