先日リリースした『IT謎解き』は、スマホから遊べるということもあり大変ご好評いただき、多くの方が挑戦してくださいました。
各種キャンペーンは終了しましたが、まだまだ謎解きには挑戦できますので、ぜひ遊んでみてください!(誰かに相談するのもOK!)
この記事では、前回の続きとして問題09以降の解説をおこなっていきます。ネタバレになるため、これからチャレンジしてみたいという方はご注意ください。
ちなみに問題01~08までは以下の記事で解説しています。
09:ASCIIコード(1)
これは文字コードです。
問題文からは少し情報が足りないように感じますが、使われている数字がASCIIコードの小文字アルファベットの範囲内と分かれば、推測可能です。
(参考)ASCIIコード表 - IT用語辞典 e-Words
ちなみにアルファベットのa
が「97」で、z
が「122」です。これを覚えておくと日常のいろんなところで役に立つ……かもしれません。
実際にコード変換してみると、
ASCIIコード(10進) | 文字 |
---|---|
97 | a |
122 | z |
105 | i |
97 | a |
112 | p |
となるので
aziap
が正解です。
10:paizaロゴ
実はこの問題は、ITに全然関係ない、脱出ゲームなどで見るようなひらめき問題です。
問題内のアルファベットは、それぞれ「Red」と「White」の頭文字です。下に表示されたURL(https://paiza.jp/entertainment)にアクセスしてみるとpaizaのエンタメコンテンツページが表示されます。
少し下にスクロールしていただくと、
もうピンと来た方もいますよね?
paizaロゴの入った服を着ているので、paizaロゴの色を確認してみましょう。左から、赤 白 白 赤 赤 赤 白 白
です。
つまり、「?」となっている箇所は左から4番目の人物(弊社代表の片山)の位置なので、正解は赤
つまりR
となります。
11:ASCIIコード(2)
09に続き、これもASCIIコードの問題ですが、少しひねっています。問題文から、ここではascii
はhzjpp
になることが示されています。
ascii
は、ASCIIコードで表現すると97 115 99 105 105
です。
hzjpp
は、ASCIIコードで表現すると104 122 106 112 112
です。
何か規則が見えてきませんか?
そうです、ASCIIコード上で「+7」した位置にある文字に置き換えられているのです。
こういった「単純に文字をn文字分ずらすだけ」の暗号をシーザー暗号(他に、カエサル式暗号、シフト暗号とも)と呼びます。ちなみにシーザー暗号は、単一換字式暗号の一種です。
IZ*sZ
は、ASCIIコードで表現すると73 90 42 115 90
です。
これをすべて「+7」すると80 97 49 122 97
となるので、さらに文字に直すとPa1za
になります。これが答えです。
12:paiza.IOの活用
真面目にコードを読んでトレースするより動かしたほうが話が早いので、下のURL(https://paiza.io/ja/projects/new?language=scala)をクリックしてpaiza.IOに遷移し、コードを実行してみましょう。言語はScalaです。
実行結果が21
と出ました。これが答えとなります。
ちなみにpaizaラーニングでは、全編無料の学習講座「Scala体験編」を公開しています。コピペで実行してみたけど、ちゃんとScalaの文法を知りたい!という方はぜひご利用ください。
ここまでが初期から表示されている問題です。次の13と14はエクストラ問題となります。出現条件はぜひ『IT謎解き』を遊んで見つけてみてください!
ちなみに問題13のページに行くためのヒントは…問題1から12までの正解画面に表示される文字列をつなげてURLに………(分かりやすすぎ?)
13:Brute Force
Brute Force*1ということで総当たりしてみましょう!
と言いたいところですが、実は不正解時の画面に表示されるヒントで、提出内容が正解より高いか低いかが分かるようになっています。つまり、二分探索が使えます。
(参考)二分探索 - Wikipedia
3桁 = 000~999 の1000パターンの走査なので、二分探索を試していくと
回数 | 走査範囲 |
---|---|
1 | 1000 |
2 | 500 |
3 | 250 |
4 | 125 |
5 | 63 |
6 | 32 |
7 | 16 |
8 | 8 |
9 | 4 |
10 | 2 |
11 | 1 |
となるため、せいぜい11回試せば答えが分かります。運がよければもっと早く正解にたどり着けると思います。二分探索を知らない人は総当りする必要がありますが、1000回程度なのでなんとか頑張れる範囲です。
なお、この問題は人によって(正確にはブラウザによって)正解が異なります。
そして正解後のページにこれまで表示されていたキーワードは表示されないように見えますが……スルーしてしまわないように気をつけてください。
ちなみにプログラミングの練習問題を集めた「レベルアップ問題集」では、「二分探索メニュー」という問題集を公開しています。現在、Python3・C++の解答コード例を参照可能です。
二分探索の問題をもっと解いてみたい!という方はぜひ取り組んでみてください。他にも「線形探索メニュー」や「幅優先探索・深さ優先探索メニュー」などの探索の問題集もあります。
14:polyglot image
最後の問題は、ひらめかないとなかなか難しい問題となっていますが、問題に表示されている画像に答えが隠れています。
Congratulations!
でしょうか?違います。
画像ファイル名のbGFzdA==
?違います。ならばbGFzdA==
を復号してlast
だ!これも違います。
「これ本当に画像なのか?」と思った方、鋭いですね。ということで、ひとまずこの画像を保存してみましょう。
保存したファイルの名前変更で、拡張子を.png
から.zip
に変えてみてください。これでzipファイルになりました。
Windowsの場合はこれをそのまま開くことができます。中身を見ると、テキストファイルが入っていて答えが書いてあります。これが正解です。
Macの場合、Finderからはこのファイルは開けないのでコマンドで解凍します。画像をDesktopに置いて、次にターミナルを開いてコマンドを打ってください。
cd $HOME/Desktop; unzip bGFzdA==.zip
デスクトップにanswer.txtが現れたと思います。これがzipの中身です。
モバイル端末ではこの手順が難しいので、ヒントも兼ねてこのファイルをDLする初期コードを書いたpaiza.IOのURL(https://paiza.io/projects/vvVSeoVGqsAQlILF0DiZTg)も載せています。そのため同じ方法でpaiza.IOでも解くことが可能です。
ちなみに問題に表示されている「Steganography」(ステガノグラフィ)というのは、以下の通りです。ヒントと言えなくもない…?
画像や動画、音声などのデータに、人間には知覚できない形式で情報を埋め込んで伝達する技術。電子透かしの元になった技術で、画像データなどの一部をわずかに改変し、一見して分からないよう情報を埋め込むことができる。
(余談)png画像に偽装したzipファイルの仕組み
問題14でダウンロードしたファイルは、png画像に偽装したzipファイルです。もっというと、「png画像としてもzipファイルとしてもふるまうことができるファイル」です。
なぜこういうことができるのかというと、pngのデータ構造とzipのデータ構造それぞれに理由があります。
難しい話になるので、興味がある方は以下の記事などを参考にしてみてください。
ちなみにこういった技術を悪用したマルウェアが世の中に実在します。画像だと思ったら実行ファイルだった!というようなものです。
とはいえ、この手法は古く、既知の技術なので簡単に解析や検出が可能です。しっかりとウイルス対策をしていればそれほど怖がらなくても大丈夫です。
ここまで『IT謎解き』の解説をおこなってきました。解けない問題があった方はぜひ参考にしてみてください。
なお、paizaは先日新作プログラミングゲーム『エンジニア騎士とクエリの魔女』をリリースしました!こちらはコードを剣に、SQLを魔法に、RPG世界で楽しくプログラミングを学べるコンテンツとなっています。リリース記念キャンペーンも実施していますのでぜひ覗いてみてください。
「paizaラーニング」では、未経験者でもブラウザさえあれば、今すぐプログラミングの基礎が動画で学べるレッスンを多数公開しております。
詳しくはこちら
そしてpaizaでは、Webサービス開発企業などで求められるコーディング力や、テストケースを想定する力などが問われるプログラミングスキルチェック問題も提供しています。
スキルチェックに挑戦した人は、その結果によってS・A・B・C・D・Eの6段階のランクを取得できます。必要なスキルランクを取得すれば、書類選考なしで企業の求人に応募することも可能です。「自分のプログラミングスキルを客観的に知りたい」「スキルを使って転職したい」という方は、ぜひチャレンジしてみてください。
詳しくはこちら
*1:ブルートフォースアタックは、総当たり攻撃と言われる暗号解読方法のひとつで、可能な組合せをすべて試すやり方です。