CodeIQ MAGAZINECodeIQ MAGAZINE

【謎解きプログラム】どんな結果になる?【アロー関数】解答と解説

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

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

言語不問で、プログラムにちなんだ謎を解く「謎解きプログラム」。

あなたは見事、謎を解けましたか? というわけで、出題者の柳井さんによる解答と解説をどうぞ!
by CodeIQ運営事務局

【謎解きプログラム】どんな結果になる?【アロー関数】

本問題は、表題のテーマで、プログラムにちなんだ謎を解くというものでした。

それでは以下、各問題とその解答を見ていきましょう。

問題のオープニング

ある日、出社すると、あなたのPCのログイン画面に、謎の挑戦状が表示されていた。

「24時間以内にが解けない場合は、このPCのデータは消失する。

 は、あなたが真のプログラマーなら解けるものだ」

これは挑戦状ではなく脅迫状だ!

そこには、見たことのない謎が掲載されていた。

あなたは歴戦のプログラマーとして、データを救うために、この謎に挑むことになった。

問題1

アロー関数は、最近のプログラミング言語ではよく見る記法です。この記法は、配列の反復メソッドと相性がよく、配列の加工に使われることが多いです。

以下の擬似コードを元に、変数resの中身がどのような配列になるか、当てて下さい。特に書いていない内容については、特殊ではない一般的なプログラミング言語のルールに従います。

● 擬似コードのルール

res = 0 …… 変数resに、数値0を入れる。
[5, 6, 7] …… 要素0が5、要素1が6、要素2が7の配列。
x => x …… アロー関数。「=>」の左辺が引数、右辺の計算結果が戻り値。
.map(関数) …… 関数の戻り値の要素の、新しい配列を作成。

● 問題

res = [10, 20, 30, 40, 50].map(x => x * x);

● 選択肢

// 選択肢1
[10, 20, 30, 40, 50]

// 選択肢2
[20, 40, 60, 80, 100]

// 選択肢3
[100, 400, 900, 1600, 2500]

// 選択肢4
[1000, 8000, 27000, 64000, 125000]

「x => x * x」の部分は以下のとおりです。

左辺「x」:各要素を取る引数。
右辺「x * x」:この計算結果が戻り値。各要素の2乗。

「.map()」により、この戻り値の配列が作られます。そのため、変数「res」に格納される配列は、元の配列の各要素を2乗したものになります。

[10, 20, 30, 40, 50]
↓
各要素を2乗
↓
[100, 400, 900, 1600, 2500]

というわけで、答えは選択肢3の「[100, 400, 900, 1600, 2500]」になります。

以下、JavaScriptによるサンプルコードです。Webブラウザのコンソールで実行できます。

res = [10, 20, 30, 40, 50].map(x => x * x);
console.log(res);

問題2

以下の擬似コードを元に、変数resの中身がどのような配列になるか、当てて下さい。

● 擬似コードのルール

res = 0 …… 変数resに、数値0を入れる。
10 % 2 …… 10を2で割った余り。
[5, 6, 7] …… 要素0が5、要素1が6、要素2が7の配列。
x => x == 0 …… アロー関数。「=>」の左辺が引数、右辺の計算結果が戻り値。
.filter(関数) …… 関数の戻り値が真の要素だけの、新しい配列を作成。

● 問題

res = [11, 22, 33, 44, 55].filter(x => x % 2 == 0);

● 選択肢

// 選択肢1
[11, 22, 33, 44, 55]

// 選択肢2
[1, 2, 3, 4, 5]

// 選択肢3
[2, 4]

// 選択肢4
[22, 44]

「x => x % 2 == 0」の部分は以下のとおりです。

左辺「x」:各要素を取る引数。
右辺「x % 2 == 0」:この計算結果が戻り値。各要素を2で割った値が0(偶数)ならtrue、それ以外(奇数)ならfalse。

「.filter()」により、trueを戻した要素のみの配列が作られます。そのため、変数「res」に格納される配列は、元の配列の各要素の中から、偶数のものになります。

[11, 22, 33, 44, 55]
↓
偶数のみ
↓
[22, 44]

というわけで、答えは選択肢4の「[22, 44]」になります。

以下、JavaScriptによるサンプルコードです。Webブラウザのコンソールで実行できます。

res = [11, 22, 33, 44, 55].filter(x => x % 2 == 0);
console.log(res);

問題3

以下の擬似コードを元に、変数resの中身がどのような配列になるか、当てて下さい。

● 擬似コードのルール

res = 0 …… 変数resに、数値0を入れる。
10 % 2 …… 10を2で割った余り。
[5, 6, 7] …… 要素0が5、要素1が6、要素2が7の配列。
x => x …… アロー関数。「=>」の左辺が引数、右辺の計算結果が戻り値。
.map(関数) …… 関数の戻り値の要素の、新しい配列を作成。
.filter(関数) …… 関数の戻り値が真の要素だけの、新しい配列を作成。

● 問題

res = [11, 22, 33, 44, 55]
    .map(x => x % 10 * 10)
    .filter(x => x % 4 == 0);

● 選択肢

// 選択肢1
[11, 33, 55]

// 選択肢2
[10, 30, 50]

// 選択肢3
[1, 3, 5]

// 選択肢4
[22, 44]

// 選択肢5
[20, 40]

// 選択肢6
[2, 4]

まずは、「.map()」から処理です。「x => x % 10 * 10」の部分は以下のとおりです。

左辺「x」:各要素を取る引数。
右辺「x % 10 * 10」:この計算結果が戻り値。各要素を10で割った余りに、10を掛けた値。

「.map()」により、この戻り値の配列が作られます。ここで生成される配列は、以下になります。

[11, 22, 33, 44, 55]
↓
x % 10 * 10
↓
[10, 20, 30, 40, 50]

次は、「.filter()」の処理です。先ほどの計算結果「[10, 20, 30, 40, 50]」の配列に対して処理を行ないます。「x => x % 4 == 0」の部分は以下のとおりです。

左辺「x」:各要素を取る引数。
右辺「x % 4 == 0」:この計算結果が戻り値。各要素を4で割った値が0ならtrue、それ以外ならfalse。

「.filter()」により、trueを戻した要素のみの配列が作られます。そのため、変数「res」に格納される配列は、以下になります。

[10, 20, 30, 40, 50]
↓
4で割った余りが0の場合のみ
↓
[20, 40]

というわけで、答えは選択肢5の「[20, 40]」になります。

以下、JavaScriptによるサンプルコードです。Webブラウザのコンソールで実行できます。

res = [11, 22, 33, 44, 55]
    .map(x => x % 10 * 10)
    .filter(x => x % 4 == 0);
console.log(res);

CodeIQ運営事務局より

柳井さん、ありがとうございました!
現在、柳井さんの最新問題が出題中です。
ぜひ挑戦してみてくださいね!

【PR】あなたの本当の評価がわかる!年収確約サービス「moffers」

登録した詳細な経験・スキル情報に基づき、企業が「年収」を明示した形でスカウトを行う、ITエンジニアのための転職サービス「moffers」がオープンしました!

あなたの本当の評価がわかる「moffers」に登録してみませんか?

【moffers参加企業】
日産自動車、富士通、本田技術研究所、三菱電機、サイバーエージェント、ソニーネットワークコミュニケーションズ、リクルートテクノロジーズ、アマゾン ウェブ サービス ジャパン(AWS)、ほか

WebからIoT、自動運転、AIまで幅広い業種・職種がラインナップしています。この機会にぜひご登録ください!

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

■関連記事

【謎解きプログラム】どう防ぐ?【無限ループ】解答と解説... 【謎解きプログラム】どう防ぐ?【無限ループ】 本問題は、表題のテーマで、プログラムにちなんだ謎を解くというものでした。 それでは以下、各問題とその解答を見ていきましょう。 問題のオープニング ある日、出社すると、あなたのPCのログイン画面に、謎の挑戦状が表示されていた。 「24時間以内に謎...
数学の問題をプログラミングで解こう!「タワー・ビルディング」問題解説... 問題のおさらい A を一辺が 1 の立方体のブロックとし、B を縦が 1、横が 1、高さが 2 の直方体のブロックとします。 (下は横から見た図です。) 自然数 n, a, b に対し、A を最大 a 個、B を最大 b 個使って、縦が 1、横が 1、高さが n の直方体の塔を作ります。 こ...
【謎解きプログラム】正しいコードは?【一人すごろく】解答と解説... 【謎解きプログラム】正しいコードは?【一人すごろく】 本問題は、表題のテーマで、プログラムにちなんだ謎を解くというものでした。 それでは以下、各問題とその解答を見ていきましょう。 問題のオープニング ある日、出社すると、あなたのPCのログイン画面に、謎の挑戦状が表示されていた。 「24時間...
数学の問題をプログラミングで解こう!「ペア・ドロップ」問題解説... 問題のおさらい n を自然数とします。1 から n までの自然数が 1 つずつ書かれた n 枚のカードが 2 組あります。 これら 2n 枚のカードをよく混ぜ、A と B の 2 人に n 枚ずつ配ります。 A と B は、それぞれ自分の持ち札の中に番号が一致するカードがあればその 2 枚を捨...
【謎解きプログラム】中身はどうなる?【出し入れ】解答と解説... 【謎解きプログラム】中身はどうなる?【出し入れ】 本問題は、表題のテーマで、プログラムにちなんだ謎を解くというものでした。 それでは以下、各問題とその解答を見ていきましょう。 問題のオープニング ある日、出社すると、あなたのPCのログイン画面に、謎の挑戦状が表示されていた。 「24時間以内...
【謎解きプログラム】座標の移動【Matrix】解答と解説... 【謎解きプログラム】座標の移動【Matrix】 本問題は、表題のテーマで、プログラムにちなんだ謎を解くというものでした。 それでは以下、各問題とその解答を見ていきましょう。 問題のオープニング ある日、出社すると、あなたのPCのログイン画面に、謎の挑戦状が表示されていた。 「24時間以内に...

今週のPickUPレポート

新着記事

週間ランキング

CodeIQとは

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

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

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