体験を伝える―『ガジェット通信』の考え方

面白いものを探しにいこう 本物を体験し体感しよう 会いたい人に会いに行こう 見たことのないものを見に行こう そしてそれをやわらかくみんなに伝えよう [→ガジェ通についてもっと詳しく] [→ガジェット通信フロアについて]

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

【謎解きプログラム】色の数値は?【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サンプル

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