コードゴルフでは、通常は印刷できない文字を使用したことがあるため、コードの16進ダンプが必要になる場合があります。それでは、Hex Dumps自体のプログラムを作成してみませんか?
チャレンジ
この課題は、入力がなければ、ソースコードの16進ダンプを次の形式で出力することです。
0000: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
0010: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
0020: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
0030: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
または、たとえば、プログラムが print("SomeString"):rep(123)
0000: 70 72 69 6e 74 28 5c 22 53 6f 6d 65 53 74 72 69 print("SomeStrin
0010: 6e 67 5c 22 29 3a 72 65 70 28 31 32 33 29 g"):rep(123)
仕様
16進ダンプは3つの部分からなる行に分割され、各行はソースコードの16バイトを表します。
最初の部分はメモリアドレスです。コード内の現在の行の開始位置を指定します。2バイトの16進数として記述され:
、その後に、次にスペースが続きます。
2番目は、Hex Dump自体です。これは、スペースで区切られた16進形式で記述された16バイトのソースコードです。これは、コードのエンコーディングを使用した正確なバイト表現でなければなりません。
最後に、2つのスペースのギャップの後、コード自体です。これはコードの16文字であり、印刷できない文字は次のように記述されます。.
ノート
- これはあるクワイン挑戦なので、標準クワインルール適用されます。
- これもコードゴルフの挑戦なので、標準の抜け穴が適用されます。
- 2番目の例に示すように、EOFの後にバイトを書き込まず、代わりに空白を使用します。
- 末尾の空白は問題ありません。
- 組み込みのHexダンプは、たまたまこの特定の形式である場合、禁止されていませんが、眉をひそめています。
- 印刷不可能な文字とは、単一のバイトとしてのみ表される任意の文字を指し、単一の間隔のグリフとして表すことはできません。UTF-8の場合、これは
0-31
、を意味し128-255
ます。ためゼリーコードページのすべての文字を単一の離間グリフとして表すことができるように、何の非印刷可能な文字が存在しません。
xxd
それを読むことができませんか?