CodeIQ MAGAZINECodeIQ MAGAZINE

世界の秘宝をゲットせよ!~その22~問題解説 #javascript

2015.08.19 Category:CodeIQ問題解説・リーダーボード Tag: , ,

  • 4
  • このエントリーをはてなブックマークに追加
eye_catch

JavaScriptで書かれたプログラムを正しく修正して、鍵となるアスキーアートを出力する「世界の秘宝をゲットせよ!」問題シリーズ。

22個めの秘宝「トリアイナ」はぶじゲットできましたか?

というわけで解説をどうぞ!
by クロノス・クラウン合同会社 柳井政和

今回の問題

今回の『世界の秘宝をゲットせよ22――「トリアイナ」編――』は、以下のような問題でした。

問題

あなたは、世界でもトップレベルの「トレジャーハンター」だ。そんなあなたに、「ムーン=ジェルマン」という人物から手紙が届いた。その中には、便箋と地図と10万ドルの小切手が入っていた。

「仕事を依頼したい。地図の場所にパズルボックスがある。君の手で、パズルを解き、中の秘宝を私に届けて欲しい。成功時には100万ドル支払う。小切手は手付金だ」

「また、あの人物からか」

あなたは秘境に飛び、地図の場所に行き、パズルボックスを見つけた。その箱には、JavaScriptのコードが書いてあり、所々に「正解のコードを選ぶ」ボタンが付いていた。

あなたは、その昔、プログラマーとして活躍していた。あなたは精神を統一して、コードのパズルを解き始めた。

コード

出力結果)トリアイナ

というわけで、問題を1つずつ説明して、解答を書いていきます。3つの選択肢の中から、正解を見つけていきます。

個別の問題の解説

問題1

問題1は、JavaScriptの正規表現の問題です。1行並んだ「-」の文字の中央部分を、「HHH」に置換するという処理を行っています。

この処理を実現するためには、正規表現の後方参照を利用します。「最初に選択した文字列」「中央部分の文字列」「最初に選択した文字と同じ文字列」という構成になれば、「中央部分の文字列」を置換することで、中心線を描画できます。

JavaScriptでは、正規表現中、丸括弧で囲んだ場所は、「\1」「\2」……といった文字で、あとで参照できます。

こうして丸括弧で選択した文字列は、置換の際には「$1」「$2」……という文字で利用できます。

「\1」は、最初に選択した「.+」と同じ文字を指します。

「$1」は前述の通り、置換の文字列内に含めれば、選択した文字列として利用できます。しかし、正規表現の中では利用できません。

「&1」は、特に意味がない文字列です。

そのため答えは「\1」です。そのことから、この問題では「赤」を選ぶと正解になります。少しだけ、引っかけ問題だったかもしれません。

問題2、3


問題2、3は、正規表現オブジェクトを、文字列から作る方法を問う問題です。

「Reg」は、正規表現オブジェクトではありません。

「RegExp」は、正規表現オブジェクトです。

「RE」は、正規表現オブジェクトではありません。

そのことから、この問題では「RegExp」の「緑」を選ぶと正解になります。

問題4

問題4は、正規表現で、全てを置換する際のフラグを問う問題です。

「m」は、各行の先頭と末尾に「^」「$」を一致させるフラグです。

「i」は、大文字小文字を無視するフラグです。

「g」は、全てを置換する際に用いるフラグです。

そのため、「g」の「青」を選ぶと正解になります。

正解コードまとめ

以下、コードをまとめておきます。

成績の分布

今回の問題の成績をまとめておきます。

攻略時間の平均は、72.47秒でした。前回までの平均68.69秒よりも長いです。

おそらく、1問目で間違った人が多かったのではないかと思います。

10秒単位の時間の分布は、下のグラフの通りです。今回は、60秒未満をたたき出せば、まずまずの成績だと思います。

確認回数の平均は、1.6回でした。前回までの平均1.58回より多いです。

確認回数の分布は、下のグラフの通りとなりました。

これまでの問題の攻略時間の平均と、確認回数の平均は、以下の通りです。

問題 攻略時間(秒) 確認回数
22 72.40 1.60
21 50.27 1.42
20 47.23 1.39
19 59.37 2.15
18 42.51 1.70
17 60.73 1.93
16 52.47 1.57
15 49.41 1.25
14 84.02 1.90
13 83.74 1.90
12 59.11 1.58
11 98.52 1.93
10 94.36 1.78
9 140.56 1.87
8 42.92 1.15
7 89.75 1.56
6 66.99 1.44
5 76.47 1.28
4 50.67 1.09
3 62.67 1.45
2 63.09 1.43
1 73.41 1.41
平均 68.86 1.58

CodeIQ運営事務局より

柳井さん、ありがとうございました!
現在、「世界の秘宝をゲットせよ!」シリーズの最新問題と
新作ダンジョン問題「海のダンジョン」が出題中です。
ぜひ挑戦してみてくださいね!

  • 4
  • このエントリーをはてなブックマークに追加

■この記事を書いた人

avatar

クロノス・クラウン合同会社 柳井政和

クロノス・クラウン合同会社 代表。ゲームやアプリを作ったり、プログラムを 書いたり、文章を書いたり、絵を描いたり。『マンガでわかるJavaScript』、 CodeIQの問題を解説付きでまとめた『プログラマのためのコードパズル~ JavaScriptで挑むコードゴルフとアルゴリズム』執筆。 twitter: @ruten Web Site: http://crocro.com/

■関連記事

【謎解きプログラム】乱数で発生する数値は?【組み合わせ】解答と解説... 【謎解きプログラム】乱数で発生する数値は?【組み合わせ】 本問題は、表題のテーマで、プログラムにちなんだ謎を解くというものでした。 それでは以下、各問題とその解答を見ていきましょう。 問題のオープニング ある日、出社すると、あなたのPCのログイン画面に、謎の挑戦状が表示されていた。 「24...
「放物線とマス目の関係」問題の解答と解説... table.nabe{ margin-left:30px; } .nabefloat{ float:right; } table.nabe td, table.nabe th{ padding:3px; } table.nabe th{ ...
【謎解きプログラム】データをバイナリで見てみよう【バイナリ】解答と解説... 【謎解きプログラム】データをバイナリで見てみよう【バイナリ】 本問題は、表題のテーマで、プログラムにちなんだ謎を解くというものでした。 それでは以下、各問題とその解答を見ていきましょう。 問題のオープニング ある日、出社すると、あなたのPCのログイン画面に、謎の挑戦状が表示されていた。 「...
【謎解きプログラム】データベースを扱ってみよう【SQLite】解答と解説... 【謎解きプログラム】データベースを扱ってみよう【SQLite】 本問題は、表題のテーマで、プログラムにちなんだ謎を解くというものでした。 それでは以下、各問題とその解答を見ていきましょう。 問題のオープニング ある日、出社すると、あなたのPCのログイン画面に、謎の挑戦状が表示されていた。 ...
【謎解きプログラム】弾幕の軌跡を作ってみよう【描画】解答と解説... 【謎解きプログラム】弾幕の軌跡を作ってみよう【描画】 本問題は、表題のテーマで、プログラムにちなんだ謎を解くというものでした。 それでは以下、各問題とその解答を見ていきましょう。 問題のオープニング ある日、出社すると、あなたのPCのログイン画面に、謎の挑戦状が表示されていた。 「24時間...
【謎解きプログラム】フィルターを使ってみよう【SVG】解答と解説... 【謎解きプログラム】フィルターを使ってみよう【SVG】 本問題は、表題のテーマで、プログラムにちなんだ謎を解くというものでした。 それでは以下、各問題とその解答を見ていきましょう。 問題のオープニング ある日、出社すると、あなたのPCのログイン画面に、謎の挑戦状が表示されていた。 「24時...

今週のPickUPレポート

新着記事

週間ランキング

CodeIQとは

CodeIQ(コードアイキュー)とは、自分の実力を知りたいITエンジニア向けの、実務スキル評価サービスです。

CodeIQご利用にあたって
関連サイト
codeiq

リクルートグループサイトへ