ガジェット通信 GetNews

見たことのないものを見に行こう

【謎解きプログラム】色の数値は?【RGB】解答と解説

DATE:
  • ガジェット通信 GetNewsを≫

【謎解きプログラム】色の数値は?【RGB】

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

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

問題のオープニング

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

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

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

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

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

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

説明

色の数値を求めよ!

画面には、「#ffffff」形式のRGBの色が提示されています。これは、先頭の#を除き、左から2文字がRの値、次の2文字がGの値、次の2文字がBの値を、それぞれ16進数2桁で表しています。

10進数で表記すると、「#000000」は「RGB(0, 0, 0)」となり、「#ffffff」は「RGB(255, 255, 255)」となります。

提示された「#ffffff」形式の色に対応する「RGB(0, 0, 0)」形式の色を、選択肢から選んでください。

問題1

#01fe01

// 選択肢
RGB(1, 256, 1)
RGB(1, 255, 1)
RGB(1, 254, 1)

「#」に続く16進数の数字を2つずつ区切ると、「01」「fe」「01」になります。

16進数「01」は、10進数で「1」になります。

16進数「fe」は、10進数で「1」になります。

16進数「01」は、10進数で「254」になります。

そのため、3番目の選択肢の『RGB(1, 254, 1)』が答えになります。

Javaサンプル

以下、サンドボックス(言語は「Java8」)で、実行確認できるコードを示します。コード欄に、下記のコードをコピペして、INPUTは空で、RUNボタンを押してください。

// 参考コード
import java.util.regex.Pattern;
import java.util.regex.Matcher;

class Main{
static final String col = “#01fe01”;
// main
public static void main(String[]args) throws Exception {
Pattern pattern = Pattern.compile(“[0-9a-f]{2}”, Pattern.CASE_INSENSITIVE);
Matcher m = pattern.matcher(col);
String[] arr = new String[3];
int i = 0;
while (m.find()) {
arr[i ++] = “” + Integer.parseInt(m.group(), 16);
}
// 出力
System.out.println(“rgb(” + String.join(“, “, arr) + “)”);
}
}

// 出力
rgb(1, 254, 1)

JavaScriptサンプル

以下、ブラウザのコンソールで確認できるように、JavaScriptのコードを示します。

// 参考コード
var col = ‘#01fe01’;
var fnc = function(c) {
var arr = c.match(/[0-9a-f]{2}/ig);
arr = arr.map(function(x) {
return parseInt(x, 16);
})
return ‘rgb(‘ + arr.join(‘, ‘) + ‘)’;
};
console.log(fnc(col));

// 出力
rgb(1, 254, 1)

問題2

#001020

// 選択肢
RGB(0, 15, 31)
RGB(0, 16, 32)
RGB(0, 17, 33)

「#」に続く16進数の数字を2つずつ区切ると、「00」「10」「20」になります。

16進数「00」は、10進数で「0」になります。

16進数「10」は、10進数で「16」になります。

16進数「20」は、10進数で「32」になります。

そのため、2番目の選択肢の『RGB(0, 16, 32)』が答えになります。

Javaサンプル

以下、サンドボックス(言語は「Java8」)で、実行確認できるコードを示します。コード欄に、下記のコードをコピペして、INPUTは空で、RUNボタンを押してください。

// 参考コード
import java.util.regex.Pattern;
import java.util.regex.Matcher;

class Main{
static final String col = “#001020”;
// main
public static void main(String[]args) throws Exception {
Pattern pattern = Pattern.compile(“[0-9a-f]{2}”, Pattern.CASE_INSENSITIVE);
Matcher m = pattern.matcher(col);
String[] arr = new String[3];
int i = 0;
while (m.find()) {
arr[i ++] = “” + Integer.parseInt(m.group(), 16);
}
// 出力
System.out.println(“rgb(” + String.join(“, “, arr) + “)”);
}
}

// 出力
rgb(0, 16, 32)

JavaScriptサンプル

以下、ブラウザのコンソールで確認できるように、JavaScriptのコードを示します。

// 参考コード
var col = ‘#001020’;
var fnc = function(c) {
var arr = c.match(/[0-9a-f]{2}/ig);
arr = arr.map(function(x) {
return parseInt(x, 16);
})
return ‘rgb(‘ + arr.join(‘, ‘) + ‘)’;
};
console.log(fnc(col));

// 出力
rgb(0, 16, 32)

問題3

#ffeff0

// 選択肢
RGB(255, 237, 238)
RGB(255, 238, 239)
RGB(255, 239, 240)
RGB(255, 240, 241)

「#」に続く16進数の数字を2つずつ区切ると、「ff」「ef」「f0」になります。

16進数「ff」は、10進数で「255」になります。

16進数「ef」は、10進数で「255-16」なので「239」になります。

16進数「f0」は、10進数で「255-15」なので「240」になります。

そのため、3番目の選択肢の『RGB(255, 239, 240)』が答えになります。

Javaサンプル

以下、サンドボックス(言語は「Java8」)で、実行確認できるコードを示します。コード欄に、下記のコードをコピペして、INPUTは空で、RUNボタンを押してください。

// 参考コード
import java.util.regex.Pattern;
import java.util.regex.Matcher;

class Main{
static final String col = “#ffeff0”;
// main
public static void main(String[]args) throws Exception {
Pattern pattern = Pattern.compile(“[0-9a-f]{2}”, Pattern.CASE_INSENSITIVE);
Matcher m = pattern.matcher(col);
String[] arr = new String[3];
int i = 0;
while (m.find()) {
arr[i ++] = “” + Integer.parseInt(m.group(), 16);
}
// 出力
System.out.println(“rgb(” + String.join(“, “, arr) + “)”);
}
}

// 出力
rgb(255, 239, 240)

JavaScriptサンプル

以下、ブラウザのコンソールで確認できるように、JavaScriptのコードを示します。

// 参考コード
var col = ‘#ffeff0’;
var fnc = function(c) {
var arr = c.match(/[0-9a-f]{2}/ig);
arr = arr.map(function(x) {
return parseInt(x, 16);
})
return ‘rgb(‘ + arr.join(‘, ‘) + ‘)’;
};
console.log(fnc(col));

// 出力
rgb(255, 239, 240)

CodeIQ運営事務局より

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

カテゴリー : デジタル・IT タグ :
CodeIQ MAGAZINEの記事一覧をみる ▶
  • 誤字を発見した方はこちらからご連絡ください。
  • ガジェット通信編集部への情報提供はこちらから
  • 記事内の筆者見解は明示のない限りガジェット通信を代表するものではありません。