CodeIQ MAGAZINECodeIQ MAGAZINE

【謎解きプログラム】乱数で発生する数値は?【組み合わせ】解答と解説

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

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

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

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

【謎解きプログラム】乱数で発生する数値は?【組み合わせ】

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

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

問題のオープニング

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

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

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

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

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

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

問題1

あなたは、乱数を発生する式を提示されました。この式で発生する数値としてあり得るものを、選択肢から答えて下さい。

// 式の意味
rnd(a, b) …… a, bは、0~100の整数。a以上、b以下の整数の乱数を発生する。
+ - * / …… 加減乗除の演算子。計算結果の小数点以下は切り捨てられ整数になる。
// 問題の式
rnd(2, 4) + 1
// 選択肢
1
2
3

この問題は、実際に発生する数字をピックアップすれば、どの選択肢と一致するか知ることができます。

まずは、式を変形していく形で求めてみましょう。「rnd(a, b)」を展開したものを、「[a, a+1, ……, b-1, b]」とします。

// 式を変形
  rnd(2, 4) + 1
→ [2, 3, 4] + 1
→ [3, 4, 5]

また、コードを書いて、発生する数値の一覧を出力してみましょう。

// JavaScript コンソールに出力
for (var r1 = 2; r1 <= 4; r1 ++) {
    var res = r1 + 1;
    console.log(`rnd:${r1} + 1`, '→', res);
}
// 出力結果
rnd:2 + 1 → 3
rnd:3 + 1 → 4
rnd:4 + 1 → 5

2種類の方法で求めてみました。発生する数値は「3」「4」「5」です。このうち、選択肢にあるのは「3」になります。

というわけで、3番目の選択肢「3」が答えになります。

問題2

あなたは、乱数を発生する式を提示されました。この式で発生する数値としてあり得るものを、選択肢から答えて下さい。

// 式の意味
rnd(a, b) …… a, bは、0~100の整数。a以上、b以下の整数の乱数を発生する。
+ - * / …… 加減乗除の演算子。計算結果の小数点以下は切り捨てられ整数になる。
// 問題の式
rnd(3, 5) * 3
// 選択肢
3
5
8
12
17

この問題は、実際に発生する数字をピックアップすれば、どの選択肢と一致するか知ることができます。

まずは、式を変形していく形で求めてみましょう。「rnd(a, b)」を展開したものを、「[a, a+1, ……, b-1, b]」とします。

// 式を変形
  rnd(3, 5) * 3
→ [3, 4, 5] * 3
→ [9, 12, 15]

また、コードを書いて、発生する数値の一覧を出力してみましょう。

// JavaScript コンソールに出力
for (var r1 = 3; r1 <= 5; r1 ++) {
    var res = r1 * 3;
    console.log(`rnd:${r1} * 3`, '→', res);
}
// 出力結果
rnd:3 * 3 → 9
rnd:4 * 3 → 12
rnd:5 * 3 → 15

2種類の方法で求めてみました。発生する数値は「9」「12」「15」です。このうち、選択肢にあるのは「12」になります。

というわけで、4番目の選択肢「12」が答えになります。

問題3

あなたは、乱数を発生する式を提示されました。この式で発生する数値としてあり得るものを、選択肢から答えて下さい。

// 式の意味
rnd(a, b) …… a, bは、0~100の整数。a以上、b以下の整数の乱数を発生する。
+ - * / …… 加減乗除の演算子。計算結果の小数点以下は切り捨てられ整数になる。
// 問題の式
rnd(3, 5) * rnd(2, 3) + 1
// 選択肢
3
6
8
13
15

この問題は、実際に発生する数字をピックアップすれば、どの選択肢と一致するか知ることができます。

まずは、式を変形していく形で求めてみましょう。「rnd(a, b)」を展開したものを、「[a, a+1, ……, b-1, b]」とします。

// 式を変形
  rnd(3, 5) * rnd(2, 3) + 1
→ [3, 4, 5] * [2, 3] + 1
→ [6, 9, 8, 12, 10, 15] + 1
→ [7, 10, 9, 13, 11, 16]

また、コードを書いて、発生する数値の一覧を出力してみましょう。

// JavaScript コンソールに出力
for (var r1 = 3; r1 <= 5; r1 ++) {
    for (var r2 = 2; r2 <= 3; r2 ++) {
        var res = r1 * r2 + 1;
        console.log(`rnd:${r1} * rnd:${r2} + 1`, '→', res);
    }
}
// 出力結果
rnd:3 * rnd:2 + 1 → 7
rnd:3 * rnd:3 + 1 → 10
rnd:4 * rnd:2 + 1 → 9
rnd:4 * rnd:3 + 1 → 13
rnd:5 * rnd:2 + 1 → 11
rnd:5 * rnd:3 + 1 → 16

2種類の方法で求めてみました。発生する数値は「7」「10」「9」「13」「11」「16」です。このうち、選択肢にあるのは「13」になります。

というわけで、4番目の選択肢「13」が答えになります。

CodeIQ運営事務局より

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

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

■関連記事

【謎解きプログラム】この処理は?【コードを読もう】解答と解説... 【謎解きプログラム】この処理は?【コードを読もう】 本問題は、表題のテーマで、プログラムにちなんだ謎を解くというものでした。 それでは以下、各問題とその解答を見ていきましょう。 問題のオープニング ある日、出社すると、あなたの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

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