16 進から (未加工の) 2 進への変換に関するこの質問への回答として、「5 ~ 10 行の C またはその他の言語」で解決できるというコメントがありました。
(一部の) スクリプト言語で実現できると確信しており、その方法を知りたいと思っています。Cについても、そのコメントが正しいことを証明できますか?
注意: これは 16 進数からASCIIバイナリへの変換を意味するものではありません。具体的には、出力は入力 ASCII 16 進数に対応する生のオクテット ストリームである必要があります。また、入力パーサーは空白をスキップ/無視する必要があります。
edit (by Brian Campbell) 一貫性を保つために、次のルールを提案してもよろしいですか? これらが役に立たないと思われる場合は、自由に編集または削除してください。ただし、特定のケースがどのように機能するかについていくつかの議論があったため、いくつかの明確化が役立つと思います.
- プログラムは stdin から読み取り、stdout に書き込む必要があります (コマンドラインで渡されたファイルからの読み取りと書き込みを許可することもできますが、どの言語でも stdin と stdout よりも短いとは思えません)
- プログラムは、基本の標準言語ディストリビューションに含まれているパッケージのみを使用する必要があります。C/C++ の場合、これはそれぞれの標準ライブラリを意味し、POSIX ではありません。
- プログラムは、コンパイラまたはインタープリターに渡される特別なオプションなしでコンパイルまたは実行する必要があります (したがって、「gcc myprog.c」または「python myprog.py」または「ruby myprog.rb」は問題ありませんが、「ruby -rscanf myprog.rb」は問題ありません)。 ' は許可されていません; モジュールの要求/インポートは文字数にカウントされます)。
- プログラムは、オプションで空白で区切られた、隣接する 16 進数のペア (大文字、小文字、または大/小文字混合) で表される整数バイトを読み取り、対応するバイトを出力に書き込む必要があります。16 進数の各ペアは、最上位ニブルから順に書き込まれます。
- 無効な入力 ( 以外
[a-fA-F \t\r\n]
の文字、個々のバイト内の 2 つの文字を区切るスペース、入力の 16 進数の奇数) に対するプログラムの動作は未定義です。不正な入力に対する任意の動作 (ユーザーのコンピューターまたは何かに積極的に損害を与えることを除く) は許容されます (エラーをスローする、出力を停止する、不正な文字を無視する、1 文字を 1 バイトの値として扱う、すべて OK) - プログラムは、追加のバイトを出力に書き込むことはできません。
- ソース ファイル内の合計バイト数が最も少ないコードがスコア付けされます。(または、元の課題により忠実にしたい場合、スコアはコードの行数が最も少ないことに基づいています。その場合、1 行あたり 80 文字の制限を課します。 1行のタイ)。