CodeIQ MAGAZINECodeIQ MAGAZINE

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

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

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

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時間以...
数学の問題をプログラミングで解こう!「ループ・トラッキング」問題解説... 問題のおさらい 自然数 n に対し、関数 Fn(x) を次のように定義します(floor():床関数)。 例えば n=10, x=1 のとき、F10(1) = floor(4×1×9÷10) = 3 です。 さて、整数 k(0 ≦ k ≦ n)に対して、関数 Fn による変換を繰り返し行い...
【謎解きプログラム】どんな結果になる?【アロー関数】解答と解説... 【謎解きプログラム】どんな結果になる?【アロー関数】 本問題は、表題のテーマで、プログラムにちなんだ謎を解くというものでした。 それでは以下、各問題とその解答を見ていきましょう。 問題のオープニング ある日、出社すると、あなたのPCのログイン画面に、謎の挑戦状が表示されていた。 「24時間...
数学の問題をプログラミングで解こう!「カウント・スリー」問題解説... 問題のおさらい 自然数を 1 から順に書き並べていきます。 このとき、3 の数字が現れる回数を数えます。 自然数 n に対し、ちょうど n 個目の 3 の数字が現れたときに書いている数を F(n) と定義します。 例えば F(10)=35 です。 下の通り、10 個目の 3 は、35 を書いて...
【息抜き】カードを上手く並べよう【言語不問】解答と解説... 【息抜き】カードを上手く並べよう【言語不問】 本問題は、表題のテーマで、簡単なプログラムを書くものです。 それでは以下、問題とその解答を見ていきましょう。 問題 あなたは、11から99までの、89枚のカードを持っています。問題では、横幅と高さの整数が与えられます。この横幅と高さで作られるマス...
【コードミステリ】数字に隠されたメッセージ【言語不問】解答と解説... 【コードミステリ】数字に隠されたメッセージ【言語不問】 本問題は、表題のテーマで、簡単なプログラムを書くものです。 喜屋武ちあきさんによるCodeIQ MAGAZINEでのブックレビューに合わせて、『顔貌売人』(文藝春秋)とのコラボ問題として出題されたものです。 それでは以下、問題とその解...

今週のPickUPレポート

新着記事

週間ランキング

CodeIQとは

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

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

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