【公式】リクルートのインターンシップ謎解きサイト #RECRUIT_CODE の解説発表

pic1

#RECRUIT_CODE 解読できる学生求む!ターミナルに残された暗号
http://recruit-jinji.jp/intern2014/recruit_code/

リクルートがサマーインターンシップに向けて2014年6月上旬に公開した、グローバルエンジニアコース向けのスペシャルサイト「#RECRUIT_CODE 解読できる学生求む!ターミナルに残された暗号」。ウェブサイト上で再現されたターミナルを操作しながら謎解きをするというものだ。このサイトはネットニュースにも掲載された。

隠しコマンドがいくつも用意されているなど、作りこまれたコンテンツだったが、全ての問題の謎を解くための解説とおまけ要素の説明を「#RECRUIT_CODE」の開発者である Fook(フック)氏と Lunkwill(ランクウィル)氏へのインタビュー形式で紹介する。

(※この記事の Fook と Lunkwill は架空の人物です)

「#RECRUIT_CODE」とは

――はじめに、このコンテンツについて紹介していただけるでしょうか。

Fook:「#RECRUIT_CODE 解読できる学生求む!ターミナルに残された暗号」という名の通りですが、ターミナルのようにコマンドを打って操作しながら用意された問題を解き進めていくというコンテンツになっています。

Fook:ターミナル上で用意されたコマンドを打つと、それに応じた結果が返ります。例えば ls と打ってエンターキーを押すと、今いる場所のファイル一覧が表示されます。コマンドの使い方については、ページ右上のパネルにある「楽しみ方のヒント」をご覧いただければと思います。

Fook:パネルの一番下には「エンジニアなりきりモード」というものがあります。「エンジニアなりきりモード」を ON にすると、何かキーを押すだけで勝手にコマンドが実行されていきます。まるでターミナルを操作している様に画面が流れていくので、コマンドが分からないという方はぜひ一度試してみてください。

pic2

Fook:ターミナルの中に問題が書いてあるファイルが置いてあり、これをコマンドを打って開くと問題文が表示されます。Q1 から Q5 までの 5 問がありますが、数学パズルのような問題もあれば、コンピュータと対戦するゲームも用意されており、プログラミングコンテストというより脱出ゲームに近い総合力試される問題構成となっています。

pic3 pic4

「#RECRUIT_CODE」問題の舞台裏

――それでは、「#RECRUIT_CODE」の舞台裏についてお話を聞いていきたいと思います。

Fook:今回のサイトは、リクルートのグローバルエンジニアコース向けサマーインターンシップを希望する学生を主に対象にしたものでした。そのため、ターミナルを使ったエンジニア向けの問題を用意しようということになりました。

――問題は Q1 から Q5 まであったようですが、特に Q5 は難し過ぎたという声がありましたが。

Lunkwill:答えを最短で見つけられる力もスキルの1つとも考えています。そのため実際に遊ばれた方は気付いたようですが、問題を解かなくても答えを推論できたり、ソースコードを読むことで知識ある人が見れば答えが分かるようになっています。

問題の解き方は人それぞれですし、本当に楽しみたい方は正攻法で挑めばよいと思っていました。解く前にキーワードが分かってしまっても、そのキーワードがなぜ手に入るのかが気になる。それを調べたくなる人こそがこれからの未来を創りだすエンジニアの姿なのではないかという思いがありました。

――ありがとうございました。それでは早速、問題の解説を見ていきましょう。

「#RECRUIT_CODE」問題の解説

Fook & Lunkwill:それでは、問題の解説を始めます。

#RECRUIT_CODE は Q1, Q2, Q3, Q4, Q5 と5つの問題から構成されていました。
全ての問題を順に解説していきます。

問題の解説 – Q1

Q1 は小問題が 4 問あり、最後に 1 つの操作が示されています。

Q1-1

Hint: 正規表現 (JavaScript)

'0123456789'.replace(/^\d.{1,4}(\w).*?(.)..$/, '$1$2')

これはヒントの通り、JavaScript の正規表現です。

そのままブラウザ等で実行してもよいですが、以下のように対応させると確定する部分が分かります。

^\d    : 0
.{1,4} : 未確定
(\w)   : 未確定
.*?    : 未確定
(.)    : 7
..$    : 89

そして最長マッチの原則に従ってマッチさせてみると、

^\d    : 0
.{1,4} : 1234
(\w)   : 5
.*?    : 未確定
(.)    : 7
..$    : 89

まで確定し、残りの .*? に 6 がマッチするため、全体としてマッチする結果を確定できました。

‘$1$2’ に置き換えているので、丸括弧でキャプチャされる部分 57 が答えになります。

Q1-2

Hint: 算数

(1, 0) = 0b11 = 3
(1, 1) = 0b110 = 6
(1, 2) = 0b1100 = 12
(1, 3) = 0b11000 = 24
(2, 1) = 0b1010 = 10
(2, 2) = 0b10100 = 20
(2, 3) = 0b101000 = 40
(3, 1) = 0b1110 = 14
(3, 2) = 0b11100 = 28
(3, 3) = 0b111000 = 56
(6, 5) = 0b110100000 = 416
(0, 5) = ?

これはある規則で並んだ数値です。
どこから計算してもよいですが、(x, y) が (x, y+1) の半分であることに注目し、
(1, 0) = 3, (2, 0) = 5, (3, 0) = 7 から、(0, 0) = 1 と推測できれば、(0, 5) は 1 を 5 回だけ倍にした 32 だと分かります。

左辺を (x, y) とすると、右辺は f(x, y) = (2*x+1) * (2^y) となる値に対応しています(2^y は指数演算です)。
中央の 2 進数表記はヒントになっています。「x の 2 進数表記」と「1」と「y 個の 0」をくっつけた 2 進数表現として考えても答えが出せます。

余談ですが、この対応は逆変換が可能な整数の割り当てになっています(より詳細には Interspersion という数学的な性質を満たす配列を基にした対応になっています)。

Q1-3

Hint: ビット操作

1 => 8
2 => 4
3 => 12
4 => 2
5 => 10
11 => 13
12 => 3
13 => 11
14 => 7
15 => 15
6 => ?

これは 4 桁の 2 進数表記に直せば、

1 = 0001 => 1000 = 8
2 = 0010 => 0100 = 4
3 = 0011 => 1100 = 12

と、ビット表記を反転させた値になっていることが分かります。

6 = 0110 => 0110 = 6

であるため、この答えは 6 となります。

Q1-4

Hint: グレイコード

 0 => 0000 (0)
 1 => 0001 (1)
 2 => 0011 (3)
 3 => 0010 (2)
 4 => 0110 (6)
 5 => 0111 (7)
 6 => 0101 (5)
 7 => 0100 (4)
 8 => 1100 (12)
 9 => 1101 (13)
10 => 1111 (15)
11 => 1110 (14)
12 => 1010 (10)
13 => 1011 (11)
14 => 1001 (9)
15 => 1000 (8)

? => 11100 (28)

この問題の想定解法は、グレイコードの変換方法を理解して手計算するものでした。

左側の値を x, 右側の値を y とすると、
y = x ^ (x >> 1)
というビット演算によって求められます。

(x >> 1) を w とおくと、最上位ビットはビットシフトにより 0 であるため、

     x: ?????
xor) w: 0????
--------------
     y: 11100

が分かり、ここから x の最上位ビットが 1 だと分かります(xor 演算より)。
すると w の次のビットが 1 だと分かります(ビットシフトより)。

     x: 1????
xor) w: 01???
--------------
     y: 11100

これの繰り返しで、次のように x が定まります。

     x: 10111
xor) w: 01011
--------------
     y: 11100

10 進数にすれば、求めたい数 x が 23 だと分かります。

このようにグレイコードの演算をしなくとも、検索して調べたりプログラムを書いて求めてもよいでしょう。

Q1

Pick up characters from PATH.

Q1 の最後の操作です。ターミナルで PATH といえば環境変数です。
echo $PATH を実行すれば、

/sbin/freedom:/usr/share:/usr/sbin:/usr/local/share:/usr/local/bin:/sbin:/bin:/usr/local/share/npm:/hoge/fuga/piyo:/usr/local/mysql/bin:/foo/bar/baz:/bin

という文字列が手に入ります。ここから、Q1 の小問題で手に入れた 57, 32, 6, 23 の場所の文字(添字としてアクセス)を見れば、l, i, f, e が手に入ります。

Q1 の答えは life です。

問題の解説 – Q2

? を 3 回実行してキーワードを探し出せ。

+------+--------+
| key  | val    |
+------+--------+
| cd   | 445    |
| cp   | 457    |
| ls   | 784    |
| rm   | 994    |
| cat  | 15941  |
| md5  | 28985  |
| pwd  | 33565  |
| ssh  | 37313  |
| echo | 669372 |
| less | 998956 |
| ?    | 1029   |
+------+--------+

文字列と数値の対応です。
表を眺めると、key の文字長と val の大きさが比例していること、同じ長さの key では val の大きさが key の辞書順になっていることに気付くことができます。
具体値は cd と cp に注目すると分かりやすいですが、 d と p が違うだけで値が 457 – 445 = 12 だけずれています。

これらの情報をもとに、36 進数表記であることに気が付く必要があります。
1029 を 36 進数表記にすると sl となり、sl コマンドを 3 回実行するとキーワードが分かるようになっています。
(3 回目以降の sl コマンドは、SLの車体にキーワードが現れます。)

Q2 の答えは universe です。

問題の解説 – Q3

Find a KEYWORD.

Q3 ディレクトリの中を ls コマンドで見ると、

answer, Question.txt, baz.txt, foo.txt, quux.txt

というファイルがあります。この問題の想定解法は、foo, baz があるのに bar がないことに気付く必要があるというものでした。
ls -a などとでも実行すれば、隠しファイル .bar.txt と .qux.txt があることが分かります。

メタ構文変数 foo, bar, baz を聞いたことがあっても qux, quux は馴染みがないかもしれません。それはさておき、隠しファイルまで見つかれば、中のテキストをメタ構文変数の順番に並べることで、一連のテキストが手に入ります。

[recruit]: cat foo.txt .bar.txt baz.txt .qux.txt quux.txt
God is dead. And finally, I got the answer "citsorca".
No.3092.
Illusion is not truth.
Hint is nothing. Nothing is hint.
This code needs broad perspective.
You are excellent engineer.
Request for Comments.
Every little helps.
Variety is the spice of life.
Every man is the architect of his own fortune.

この英文中にもヒントがありますが、下から縦読みすると EVERYTHING が手に入ります。

Q3 の答えは everything です。

補足

縦読みのヒントは「I got the answer “citsorca”」にあります。
citsorca という言葉はありませんが、これを逆から読むと acrostic となります。acrostic はいわゆる「縦読み」を意味する単語です。

また、メタ構文変数の順序については、隠しファイル .bar.txt と .qux.txt の中にヒントがあります。

[recruit]: cat .bar.txt .qux.txt
No.3092.
Illusion is not truth.
Request for Comments.

Illusion から始まる間の文は無関係ですが、No.3092 と Request for Comments から、RFC 3092 を参照すればこの順序が示されています。

問題の解説 – Q4

GameCenter の全てのゲームを攻略せよ。

1. Hit and Blow
2. Misere Nim
3. Misere Tic-Tac-Toe

これはそれぞれのゲームを攻略するというものでした。
全てのゲームをクリアするとキーワード ultimate が現れます。

Q4 の答えは ultimate です。

1. Hit and Blow

親が決めた 4 桁の秘密数を子が当てるというゲームです。
秘密数は 4 桁が全て異なる数字(0 から 9)とします。
子は予想数を言い、親はヒット数とブロー数を子に返答します。
ヒット数とは、桁の位置と数字が合っているものの個数です。
ブロー数とは、桁の位置が違うが数字は合っているものの個数です。
親が 2014 を秘密数にして、子が 1234 を予想した場合、親は 1H2B と答えます。
これを繰り返して、4H0B の返答を貰うまで(秘密数を当てるまで)子は予想数を言い続けます。

このゲームでは、子であるプレイヤーが、8 ターン以内に秘密数を言い当てなければなりません。
最善の予想数を選び続ければ、8 ターンもあれば必ず秘密数が分かるはずですが、想定解法は、クリアできるまで何度もプレイするというものでした。
秘密数の選択はランダムなため、1 回目の予想で秘密数を当てる可能性もあります。最善の予想ができなくても、ある程度良い予想を続ければ平均的には 6 ターンほどでクリアできるようになっています。

2. Misere Nim

3 個の山があり、それぞれの山に複数の石が置かれています。
交互に石を取り、最後の山の最後の石を取ったほうが負けとなります。
一度に取れる石の数に制限はありませんが、一度に複数の山から石を取ることはできません。

このゲームでは、プレイヤーが常に先手ですが、先手必勝となるパターンしか現れないようになっています。
三山崩しという名でも知られるこのゲームですが、想定解法は、必勝法を理解してその通りに操作するというものでした。コンピュータは最善手を指すため、プレイヤーが最善手を指さなければ勝てません。

必勝手順は次のようになります。

  • 全ての山が 1 個以下であれば、石が 1 個の山を奇数個残すために、どこかの山から 1 個の石を取る。
  • 石が 2 個以上の山が 1 個だけであれば、石が 1 個の山が奇数個残るように石を取る。
  • 石が 2 個以上の山が 2 個以上あれば、それぞれの山の石の数(a, b, c)に対する排他的論理和(a^b^c)が 0 になるように石を取る。

必勝手順を知らずに素直に挑んでも攻略できないので、このゲームは難しかったかもしれません。

3. Misere Tic-Tac-Toe

3×3 のマルバツゲームですが、縦・横・斜めのいずれかにマークを揃えた方が負けとなります。

このゲームでは、先手を持って勝利するか引き分けで終了することがクリア条件となっています。
実際には、コンピュータは最善手を指すため、プレイヤーが勝利することはできません。
先手後手が最善手を指し続けた場合に引き分けとなる設定のゲームになっています。

まず、このゲームは 2 人で 9 マスにマークするため、先手が 5 箇所、後手が 4 箇所にマークすることになります。
よって、マークを揃えた方が負けのこのルールでは先手不利です。

その不利な中で引き分けに持っていくためには、先手は初手で中央にマークしなければなりません。
初手で角や辺にマークした場合は先手必敗となります。

中央をマークした後は、後手の手と反対側(中央に対して点対称に)にマークすることで、自然と先手が揃うことを防げます。

※ @ はそのターンにマークする位置です。

1手目      3手目      5手目      7手目     9手目
- - -      - - -      @ - -      o X -     o X X
- @ -  =>  X o @  =>  X o o  =>  X o o  => X o o
- - -      - - -      - - X      - @ X     @ o X

この最善手に気付かない限り攻略することはできません。このゲームの想定解法は、調べるなどして最善手を知るか、実際にプレイして攻略方法に気付くというものでした。

問題の解説 – Q5

この暗号を解け。

uJnuHuyofuyaHeHeyoK

Hint 0:
drwxr-xr-x  5   recruit  staff   4096     1   1   00:00   q5

Hint について

Hint 0 は Q5 ディレクトリに対する ls -l コマンドの結果です。
Hint 0 の想定解法は、ls -l した結果の 5 という数字(ファイル数を意味する)から隠しファイルがあることに気付くというものでしたが、Q5 ディレクトリ内で ls コマンドを打てと解釈することもできました。

Q5 ディレクトリの中には、隠しファイル .hint.txt があり、次のような内容が書かれています。

Hint 1:
next if (*it < 97);

Hint 2:
6002:1980

Hint 3:
Bil or Tim

Hint 4:
Alpine, Cupcake, Innsbruck, Jelly Bean

Hint 5:
2

Hint 6:
\prod_{k=1}^n k

暗号文 uJnuHuyofuyaHeHeyoK を、Hint 1 から Hint 6 に従って復号するというのが想定解法です。

Hint 1

Hint 1:
next if (*it < 97);

このヒントは、ループ中の next 文を意味しており、*it はイテレーションの一時変数を表し、97 はアルファベットの小文字の ‘a’ の ASCII コードを表しています。
大文字の ASCII コードは小文字よりも小さいことを知っていれば、「大文字であれば読み飛ばす」という風に解釈できます。

uJnuHuyofuyaHeHeyoK から大文字を無視してみましょう。
u#nu#uyofuya#e#eyo# となります(便宜的に大文字は # で置き換えています)。

Hint 2

Hint 2:
6002:1980

この数字だけ見ても何かは分かりません。そのままウェブ検索してみると「JIS X 6002:1980 情報処理系けん盤配列」にその数字列が現れていることが分かります。
このヒントは、一般的に使われている QWERTY 配列の日本語キーボードを表しています。

Hint 1 から得た暗号文は「u#nu#uyofuya#e#eyo#」でした。
この小文字をよく見るとローマ字のみで構成されていることが分かります。
ローマ字として解釈し、平仮名に変換すると「う#ぬ#うよふや#え#えよ#」となります。

この平仮名が日本語キーボードのどこにあるのかに注目すると、全て 1 段目にあることが分かります。
(キーボード 1 段目:1ぬ、2ふ、3あ、4う、5え、6お、7や、8ゆ、9よ、0わ、-ほ、^へ)

これに従って、平仮名を数字に変換すると「4#1#4927#5#59#」となります。

Hint 3

Hint 3:
Bil or Tim

このヒントの解き方は、Bil と Tim の 3 文字について、1 文字ずつ bitwise-or (ビット論理和)を取るというものでした。

B | T = V
i | i = i
l | m = m

ここから Vim という単語が浮かび上がります。

このことに気が付かない場合には、日本語の発音をみることで「ビ・ル or ティ・ム」から「ビム」を推測できるようにしていましたが、このヒントは難しかったかもしれません。

そして Hint 1 で取り去った大文字に注目します。
元の暗号文「uJnuHuyofuyaHeHeyoK」では J, H, K が現れますが、Vim という単語から、この大文字の意味に気付く必要があります。

H, J, K, L は Vim におけるカーソル操作のキーに対応しています。
それぞれ、H=左、J=下、K=上、L=右です。

Hint 1, Hint 2 で隠していた大文字にこの方向を割り当てると「4下1左4927左5左59上」となります。

Hint 4

Hint 4:
Alpine, Cupcake, Innsbruck, Jelly Bean

これは、ウェブ検索するなどして調べれば iOS と Android のコードネームであることが分かります。
Hint 3 までで得た「4下1左4927左5左59上」があれば比較的すぐに気が付くことができるのではないでしょうか。

次に求められる操作はスマートフォンにおけるフリック入力です。方向がない数字はタップのみを意味します。
ここでフリック入力を考えますが、アルファベット入力では「4下」に対応する出力がありません。
ここでは日本語入力(かな入力)のまま、対応する番号に位置するキーを入力していきます。

【子音】
1あ 2か 3さ
4た 5な 6は
7ま 8や 9ら
     0わ

【母音】
     上=U
左=I 無=A 右=E
     下=O

「4下1左4927左5左59上」を入力すると「といたらかみになる」が得られます。

Hint 5

Hint 5:
2

日本語文字列「といたらかみになる」が得られた状態で「2」というヒントです。
Hint 2 では日本語キーボードを扱っていました。

このヒントは、もう一度、日本語キーボードでマッピングすることを示しています。
「といたらかみになる」は「SEQOTNIU.」に変換されます。

Hint 6

Hint 6:
\prod_{k=1}^n k

これは、TeX での総乗(総積)の表現です。
TeX を知らない場合でも PROD[k=1->n]{k} のように解釈できれば総乗を表していることが分かります。
1 から n までの総乗は、つまり n!(階乗)です。階乗というヒントから異なる n 個のものを並べる場合の数を類推するというものでした。

「SEQOTNIU.」を並べ替えると「QUESTION.」というキーワードが得られます。

Q5 の答えは question です。

問題の解説 – 最終問題

Q1 から Q5 までの全ての問題を解くと、ルートディレクトリに Answer というファイルが現れます。
これを実行すると、最後の答えを聞かれます。

What is the answer to the last question?

最終問題には問題文がありません。
Q1 から Q5 までのキーワードから最終問題の問題文を推測すること自体が問題となっていました。
Life, Universe, Everything, Ultimate そして Question.

これらのキーワードを見ただけで気付かれた方も多いようですが、これは『銀河ヒッチハイク・ガイド』というSF作品に登場するフレーズ「the Answer to the Ultimate Question of Life, the Universe and Everything」のキーワードになっています。そしてこの作品の中では、この質問の答えが 42 であると導き出されています。ちなみに Answer も前述のキーワードのひとつであるため、最終問題のための解答ファイル Answer も大文字から始まっていました。

最終問題の答えは 42 です。

以上が「#RECRUIT_CODE」問題の想定解法でした。

最終問題をクリアするとエンディングが始まります。

pic5

「#RECRUIT_CODE」を振り返って

――ここまでを振り返ってみて、ご感想をお聞かせ頂けるでしょうか。

Lunkwill:始めに、Linux を模したターミナルとしたものの、使えることを期待されていたコマンドがいくつか存在していなかったことについて、このコンテンツを遊ばれた方にお詫びします。

Fook:みなさんからの指摘を受けて、コンテンツ公開の 2 日後くらいにシステムを更新したのですよね。その際のメッセージは http://recruit-jinji.jp/intern2014/js/app.js をご覧いただければと思います。

Lunkwill:ターミナルとして、どのようなコマンドをどこまで実装するのか(実装できるのか)、隠しコマンドのような面白い要素をうまく組み込めるのかというところが一つの悩ましいポイントではありました。それ以上に問題を考えて、バランスを調整しながらコンテンツとして仕上げるのが難しかったのですが。

――特に Q5 が難問と言われていますが、この問題は解けると予想していたのでしょうか。

Lunkwill:一応、コンテンツを公開する前には何度か事前テストを行いました。あるタイミングの事前テストでは、10 人中 5 人が Q4 までクリアし、1 人が Hint 3 までを解けていたという感じでした。難易度調整には相当時間をかけたのでギリギリ解けないぐらいの難易度になっているかと思います。

Fook:「#RECRUIT_CODE が面白い」という声もいただけたようで大変嬉しく思います。#RECRUIT_CODEサイト(http://recruit-jinji.jp/intern2014/recruit_code/)はまだ公開されておりますので、まだ遊んでいない方も、一度プレイされた方も改めて遊んでいただければ幸いです。

「#RECRUIT_CODE」おまけ要素について

――最後に、本編とは関係のないおまけ要素について説明していただきたいと思います。

Fook:「help」コマンドを実行するとコマンド一覧が表示されますが、それ以外にも隠されたコマンドがありました。

本編で用いるコマンド

(1) cat cat コマンド、ファイルを複数連結して展開できる
(2) cd (chdir) cd コマンド、ディレクトリを移動できる
(3) echo echo コマンド、echo $PATH で環境変数 PATH を出力できる
(4) env (printenv) env コマンド、環境変数を出力できる
(5) help help コマンド、コマンドの一覧が表示できる
(6) less less コマンド風のファイル展開、別画面でファイルを表示する
(7) ls (dir) ls コマンド、a および l オプションも使える
(8) sl sl コマンド、画面上を蒸気機関車が走る

固有の機能を持ったコマンド

(9) clear 画面バッファをクリアする。Ctrl+L や Command+K も同様
(10) date 現在日時を表示する
(11) exit ターミナルを抜ける(ブラウザリロード)
(12) kill ターミナルを落とす(ウィンドウクローズ)
(13) matrix マトリックス風の演出を表示する
(14) md5 引数の文字列に対する md5 ハッシュを出力する
(15) mkdir ディレクトリを作成する
(16) pwd 作業ディレクトリのパスを表示する
(17) time プレイ時間を表示する
(18) cheat チートモード

その他のおまけコマンド

(19) factor 素因数分解の結果が表示されるが、引数を指定することはできない
(20) cp メッセージが表示される
(21) mv メッセージが表示される
(22) rm メッセージが表示される(r, f オプションもある)
(23) ssh メッセージが表示される
(24) head URL が表示される
(25) history URL が表示される
(26) recruit アスキーアートが表示される

Fook:おまけコマンドはここで紹介したもの以外にもあるので、ぜひ探してみてください。

factor コマンドの数値

Lunkwill:factor コマンドを実行すると、引数を無視して特定の値の素因数分解の結果が表示されます。

16202150803440: 2 2 2 2 3 3 5 7 17 23 41 41 67 73

Lunkwill:この値を A-Z の ASCII コード値(65 以上 90 以下)に収まるように因数をまとめると、

73
67
41 * 2 = 82
41 * 2 = 82
23 * 3 = 69
17 * 5 = 85
7 * 3 * 2 * 2 = 84

Lunkwill:より、73, 67, 82, 82, 69, 85, 84 が得られます。これを文字に直すと I, C, R, R, E. U, T となり、並べ替えると RECRUIT となるようになっています。これは考案したものの採用しなかった問題の一つでした。

チートモード

Fook:cheat コマンドを打つとモードを受け付ける状態になります。モードは次の 5 種類があります。

clear 一時的に Q1 から Q5 までを解いた状態にする
timer 経過時間をリセットする
ending エンディングに突入する
game GameCenter をクリアした状態にする
reset GameCenter と Q1 から Q5 までを解いていない状態に戻す

アルティメットモード

Lunkwill:とあるところにこのモードについてのヒントは書いてありますが、全問を解いた状態で GameCenter に入り、ゲーム選択画面で ultimate と打つとアルティメットモードの GameCenter に移行します。このモードの効果は実際にお試し頂いた際のお楽しみとします。

Fook:アルティメットモードに関係ありませんが、GameCenter では Ctrl+C でゲームを抜けたり、Ctrl+R でゲームをリセットしたり、Ctrl+Z でゲーム選択画面に戻れるようになっています。ただしこれらのショートカットキーはお使いの OS, ブラウザによっては機能しないかもしれません。

――お二人ともありがとうございました。

ここまでお読みいただきありがとうございます。いかがでしたでしょうか。気になるコマンドがあればぜひ試してみてくださいね。
リクルートホールディングス2014夏インターンのグローバルエンジニアコースは締めきってしまいましたが、ウェブイノベーションコースはまだまだ応募者受付中です。興味のある学生さんはぜひエントリーしてみてください。

お付き合いいただきありがとうございました。