CodeIQ MAGAZINECodeIQ MAGAZINE

【謎解きプログラム】テキストのバイナリは?【テキスト バイナリ】解答と解説

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

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

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

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

【謎解きプログラム】テキストのバイナリは?【テキスト バイナリ】

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

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

問題のオープニング

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

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

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

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

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

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

問題1

あなたは、テキストファイルのバイナリについて問題を解くことになりました。

最初の問題は、ファイルサイズについてです。

以下の、Shift-JISで保存された文字列(改行はない)の、ファイルサイズを、以下の選択肢から選んでください。

あいうえおabcde
// 選択肢
10byte
15byte
20byte

Shift-JISでは、asciiコードの文字は1byte、日本語全角文字などは2byteです。

「あいうえお」で、5文字×2byteで10byte。「abcde」で、5文字×1byteで5byte。合計15byteになります。

// バイト数
あいうえお → 5文字×2byte=10byte
abcde → 5文字×1byte=5byte
↓
合計15byte

というわけで、2番目の選択肢『15byte』が答えになります。

以下、バイナリエディタで見た場合の値も掲載しておきます。

// ファイルの文字列
あいうえおabcde

// バイナリエディタで見た場合
82 A0 82 A2 82 A4 82 A6 82 A8 61 62 63 64 65

// 文字の対応
82 A0 | 82 A2 | 82 A4 | 82 A6 | 82 A8 | 61 | 62 | 63 | 64 | 65
あ    | い    | う    | え    | お    | a  | b  | c  | d  | e

問題2

あなたは、テキストファイルのバイナリについて問題を解くことになりました。

2番目の問題は、改行についてです。

改行は、以下の3種類が利用されています。

// 改行 3種類
「LF」……ラインフィード、\n、Unix、Linux他
「CR」……キャリッジリターン、\r、Mac OSバージョン9まで他
「CR」+「LF」……\r\n、Windows他
<p>「CR」「LF」のバイナリで、正しい組み合わせを、以下の選択肢から選んでください。</p>
// 選択肢
「CR」0x0D、「LF」0x0A
「CR」0x0A、「LF」0x0D
「CR」0x0A、「LF」0x0A
「CR」0x0D、「LF」0x0D

「CR」は「0x0D」、「LF」は「0x0A」です。

// 改行
「CR」は「0x0D」。
「LF」は「0x0A」。

というわけで、1番目の選択肢『「CR」0x0D、「LF」0x0A』が答えになります。

以下、コンソールから実行可能なJavaScriptのコードで、改行コードのバイナリの値を確認してみましょう。

// 改行コードの確認
var cr = '\r'.charCodeAt(0);  // キャリッジリターン
var lf = '\n'.charCodeAt(0);  // ラインフィード

console.log('CR', cr, cr.toString(16), '// キャリッジリターン');
console.log('LF', lf, lf.toString(16), '// ラインフィード');
// 出力
CR 13 d // キャリッジリターン
LF 10 a // ラインフィード

問題3

あなたは、テキストファイルのバイナリについて問題を解くことになりました。

3番目の問題は、BOM(バイトオーダーマーク)についてです。

BOMは、Unicodeの文字列において、テキストの先頭につける数バイトのデータのことです。

UTF-8では、BOM(バイトオーダーマーク)が付く時と付かない時があります。

UTF-8のBOMとして、適切なバイナリを、選択肢から選んで下さい。

// 選択肢
0xEF
0xEF 0xBB
0xEF 0xBB 0xBF

Unicodeの種類によって、BOMのバイナリは違います。

UTF-8では、「0xEF 0xBB 0xBF」の3byteになります。

というわけで、3番目の選択肢『0xEF 0xBB 0xBF』が答えになります。

以下、BOM付きUTF-8のテキストファイルを、バイナリエディタで見た場合の値を掲載します。

// ファイルの文字列
あいうabc

// バイナリエディタで見た場合
EF BB BF E3 81 82 E3 81 84 E3 81 86 61 62 63

// 文字の対応
EF BB BF | E3 81 82 | E3 81 84 | E3 81 86 | 61 | 62 | 63
         | あ       | い       | う       | a  | b  | c

CodeIQ運営事務局より

柳井さん、ありがとうございました!
柳井さんの次の問題にご期待ください。

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

■関連記事

数学の問題をプログラミングで解こう!「ウッド・キーパー」問題解説... 問題のおさらい n 本の丸太があります。これらの向きと端をそろえ、地面に積みます。 積む際には次のルールに従います。 地面には好きな本数の丸太を置けます。隣り合う丸太は接して置きます。 左右に隣り合う 2 本の丸太の上に、新たな丸太を 1 本置けます。 全ての丸太は一...
【息抜き】平均値と中央値【言語不問】解答と解説... 【息抜き】平均値と中央値【言語不問】 本問題は、表題のテーマで、簡単なプログラムを書くものです。 それでは以下、問題とその解答を見ていきましょう。 問題 改行区切りの文字列の各行(最大行数30)は、半角数字のみの整数(最大桁数8)になっています。 この各行の平均値と中央値を求めて下さい。小...
【息抜き】右位置揃え【言語不問】解答と解説... 【息抜き】右位置揃え【言語不問】 本問題は、表題のテーマで、簡単なプログラムを書くものです。 それでは以下、問題とその解答を見ていきましょう。 問題 改行区切りの文字列の各行は、半角数字のみの整数(最大桁数32)になっています。 この各行の先頭に任意の数の半角のアンダーバー(_)を挿入して...
【謎解きプログラム】どんな配列が得られる?【フィルター,マップ】解答と解説... 【謎解きプログラム】どんな配列が得られる?【フィルター,マップ】 本問題は、表題のテーマで、プログラムにちなんだ謎を解くというものでした。 それでは以下、各問題とその解答を見ていきましょう。 問題のオープニング ある日、出社すると、あなたのPCのログイン画面に、謎の挑戦状が表示されていた。 ...
数学の問題をプログラミングで解こう!「タンジェント・フラクション」問題解説... 問題のおさらい α と β を、0 < α < β < π/2 を満たす実数とします。 α, β の組のうち、tan(α), tan(β), tan(α+β) がすべて単位分数(分母が自然数、分子が 1 の分数として書き表せる数)となるものを考えましょう。(α, β の単位はラジアンと見なします...
【謎解きプログラム】どう比較する?【ソート】解答と解説... 【謎解きプログラム】どう比較する?【ソート】 本問題は、表題のテーマで、プログラムにちなんだ謎を解くというものでした。 それでは以下、各問題とその解答を見ていきましょう。 問題のオープニング ある日、出社すると、あなたのPCのログイン画面に、謎の挑戦状が表示されていた。 「24時間以内に謎...

今週のPickUPレポート

新着記事

週間ランキング

CodeIQとは

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

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

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