2021.05.06
仕事がはじまってしまいました。
さっそく、絶望的なまでの低レベルすぎる内容でした。
予想はしていましたが・・・
連休あけで、ブルーすぎるのでちょっと簡単な謎解きをしてみました。
割と初期のころから遊んでおります、「とある魔術の禁書目録 幻想収束」。
現在、NieRとコラボ中で、コラボ無いで(自称)不幸な男、上条当麻に届いたメッセージがあります。



まぁ、上の画像を見てもらうとおり、以下のことが分かります。
1. 文字は「0〜9、a〜f」で記述さていていること
2. メッセージであること
3. 先頭の文字が「e」であること
上記のことから、「ユニコード」である可能性が高いと判断。
じゃ、推測どおりであるか確認してみたいと思います。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 |
#include <stdio.h> #include <stdlib.h> #include <unistd.h> int main(int argc, char **argv) { // e6 9c ac e5 bd 93 e3 81 ab e3 80 81 char a[] = { 0xe6, 0x9c, 0xac, 0xe5, 0xbd, 0x93, 0xe3, 0x81, 0xab, 0xe3, 0x80, 0x81, 0x00 }; // e6 9c ac e5 bd 93 e3 81 ab e3 81 82 char b[] = { 0xe6, 0x9c, 0xac, 0xe5, 0xbd, 0x93, 0xe3, 0x81, 0xab, 0xe3, 0x81, 0x82, 0x00 }; // e3 82 8a e3 81 8c e3 81 a8 e3 81 86 char c[] = { 0xe3, 0x82, 0x8a, 0xe3, 0x81, 0x8c, 0xe3, 0x81, 0xa8, 0xe3, 0x81, 0x86, 0x00 }; // e3 81 94 e3 81 96 e3 81 84 e3 81 be char d[] = { 0xe3, 0x81, 0x94, 0xe3, 0x81, 0x96, 0xe3, 0x81, 0x84, 0xe3, 0x81, 0xbe, 0x00 }; // e3 81 97 e3 81 9f e3 80 82 char e[] = { 0xe3, 0x81, 0x97, 0xe3, 0x81, 0x9f, 0xe3, 0x80, 0x82, 0x00 }; printf("%s,", a); printf("%s,", b); printf("%s,", c); printf("%s,", d); printf("%s\n", e); exit(0); } |
っというわけでサッくとやってみました。

さて、実行結果をごらんいただきますと分かりますとおり、「UNICODE」で、「本当に、本当にありがとうございました。」と出力されました。
つまり
1 2 3 4 5 |
e69cace5bd93e381abe38081(本当に、) e69cace5bd93e381abe38182(本当にあ) e3828ae3818ce381a8e38186(りがとう) e38194e38196e38184e381be(ございま) e38197e3819fe38082(した。) |
と表示されていたことが分かります。
ちなみに、昔は2バイト文字(EUCやJIS)でしたが、unicodeは3〜4バイト使用されているため、あるハッシュ計算をすると一意性が担保できずに、大変こまったことが起こって僕の歯が3本かけたり割れたりするほどのプロジェクトがありました。

こちらは、まだクリアできていません。
つえぇよ。