Tantangan
Buat program konsol untuk menampilkan setiap byte file.
Kemenangan
Karena ini adalah kode-golf , byte paling sedikit menang.
Aturan
- Program harus berupa aplikasi konsol , artinya akan dijalankan dari semacam juru bahasa command-line;
- Setiap byte harus berbentuk heksadesimal, dipisahkan oleh spasi, dan harus 2 digit; (cantumkan angka 0 sebelum itu jika memiliki 1 digit)
- File harus dibaca menggunakan IO atau alternatif, dan bukan kode-keras;
- Jalur file harus ditentukan sebagai argumen baris perintah atau prompt pengguna (seperti STDIN) ;
- Tolong , jangan ada celah ;
Contoh
test.txt (diakhiri dengan LF)
Hello World!
$ ./hexdump.exe test.txt
48 65 6C 6C 6F 20 57 6F 72 6C 64 21 0A
hello.txt
file teks sederhana sebagai contoh sebagai input dan seperti apa output yang diharapkan. Sebagai contoh, jika kata yanghello.txt
terkandung hanya berisihello
satu baris, bagaimana ini akan diekspresikan dalam output? Apakah Anda mengelompokkan byte dalam kata 16-bit, 32-bit atau 64-bit? Atau apakah setiap byte dinyatakan sebagai hex dua digit? Apakah spasi dapat diterima setelah setiap byte sebagai hex, atau setelah setiap kata x-bit? Apakah Anda memerlukan0x
pra-perbaikan untuk setiap byte?Jawaban:
C (gcc) pada * nix,
7371 byteCobalah online! Suite uji
-2 byte berkat Johan du Toit
Ini bergantung pada
O_RDONLY == 0
dan diint_one == 1
manaint int_one; *(char*)&int_one = 1;
.sumber
Ruby , 26 byte
Cobalah online!
sumber
$<
alih-alih beralih ke membaca dari STDIN.PowerShell ,
4540 byteCobalah online!
-5 byte berkat mazzy
sumber
./.input.tio
. 40 byte dengan CRLF dipertahankan.Java 11,
156154 byte-2 byte terima kasih kepada @ Holger .
Cobalah online dengan menggunakan
./.input.tio
path file argumen, yang akan memiliki input yang diberikan sebagai file-konten.Penjelasan:
sumber
interface
bukanclass
?interface
lebih pendek dariclass
+public
.Path.of
sebagai gantinyaPaths.get
public
, tetapi merekapublic
dinyatakan secara eksplisitprivate
.PHP ,
605954 byteCobalah online!
sumber
?>
dan menyimpan 2 byte, atau jika itu tidak berhasil maka ganti?>
dengan titik koma dan simpan 1 byte.implode(file($x))
sebagai gantifile_get_contents($x)
(-4 bytes).wordwrap()
, dengan1
sebagai parameter terakhir, satu byte lebih pendek darichunk_split()
.Perl 5 (
-aF//
), 23 byteTIO
sumber
APL (Dyalog Unicode) , 16 byte
Fungsi awalan diam-diam anonim. Mengembalikan (dan secara implisit mencetak, jika nilainya tidak digunakan) matriks dua baris dengan 4 bit teratas direpresentasikan sebagai angka desimal 0–15 di baris atas dan 4 bit terbawah sama diwakili di baris bawah. Artinya, matriks memiliki kolom sebanyak file memiliki byte.
Cobalah online!
⎕MAP
memetakan nama file argumen ke array∘
dengan parameter:¯1
seluruh panjang file83
dibaca sebagai bilangan bulat 8-bit16 16⊤
convert (anti-base) menjadi 2-posisi hexadecimalsumber
H
adalah 72, yaitu 4 × 16¹ + 8 × 16⁰ atau [4,8] ₁₆. Karenanya kolom pertama dalam contoh berbunyi[4,8]
.Python 3, 59 byte
-11 byte, terima kasih kepada Mostly Harmless!
-8 Bytes berkat James K Polk!
-24 byte terima kasih kepada Blue!
Cobalah online!
Ini sangat mudah; itu membuka nama file yang diberikan sebagai input pada STDIN, membacanya, mengubah setiap karakter ke nilai ASCII-nya, mengubah setiap angka menjadi hex, menghapus semua
"0x"
yang mendahului nilai hexademical dengan Python, membungkus nilai dengan nol jika perlu, kemudian bergabung dengan nilai-nilai bersama dengan spasi.sumber
'%02X'%ord(i)
bukannya memotong output hex.upper()
import sys
menggunakanraw_input()
sebagai nama file sebagai gantinya; aturan memungkinkan pengguna meminta.input()
Bash ,
3323 byte... dengan banyak bantuan:
-3 berkat manatwork
-4 berkat spuck
-3 berkat Nahuel Fouilleul
Cobalah online!
Perhatikan bahwa tautan TIO di atas menggunakan input - kita dapat menulis file secara lokal, jadi ini menunjukkan itu berfungsi sebagai program yang mengambil jalur file.
sumber
xxd -u -p $1|fold -2|tr \\n \
.\n
dan\
bekerja di versi tautan 'ini'? EDIT: Saya menambahkan karakter pelarian lain.xxd -c1 -p -u $1|tr \\n \
Kotlin ,
1301271049392 byteCobalah online!
Edit: -11 byte terima kasih kepada @ChrisParton
Edit: Bekerja TIO
Sunting: -1 byte terima kasih kepada @KevinCruijssen
sumber
File
sebagaijava.io.File
gantinya?./.input.tio
sebagai argumen jalur file, dan itu akan menggunakan STDIN sebagai konten file. :)a:Array
, jadi saya pikir Anda dapat menghemat satu byte.Dart ,
140134 byteCobalah online!
-6 byte karena saya lupa mengurangi nama variabel
sumber
Haskell,
145143 bytesumber
import Data.ByteString
plusmain=getArgs>>=Data.ByteString.readFile.(!!0)>>=mapM_(printf"%02X ").unpack
.Rust, 141 byte (versi kontribusi)
Rust, 151 byte (versi asli)
sumber
bash + Stax, 6 + 4 + 1 = 11 byte
Ini adalah teori kerajinan lengkap pada saat ini. Anda tidak dapat benar-benar menjalankan ini. Jika semuanya bekerja sesuai dengan spesifikasinya, ini akan berhasil, tetapi belum semuanya belum.
Skrip bash adalah
dan program stax harus dikompilasi dan disimpan ke] is
Setel karakter Anda ke ISO 8859-1 (Windows-1252 tidak akan berfungsi di sini) dan lanjutkan
Dibongkar dan dijelaskan
sumber
Emojicode ,
186162 byteCobalah online di sini.
Tidak Disatukan:
sumber
Perl 6 , 45 byte
Cobalah online!
@*ARGS[0]
adalah argumen baris perintah pertama..IO
mengubah nama file (yang diduga) menjadiIO::Path
objek..slurp(:bin)
membaca seluruh file menjadiBuf
buffer byte. (Tanpa:bin
isi file akan dikembalikan sebagai string Unicode.).list
mengembalikan daftar nilai byte dari buffer..fmt('%02X')
adalahList
metode yang memformat elemen daftar menggunakan string format yang diberikan, kemudian bergabung dengan spasi. (Mudah!).say
mencetak string itu.sumber
.list
untuk 41 byteD , 98 Bytes
Cobalah secara Online!
sumber
Python 3, 75 byte
Sebagian besar salinan jawaban python Maxwell 2.
sumber
sys.argv[1]
. dengansys.argv[0]
skrip ini berfungsi lebih seperti quine ;-)Racket, 144 byte
Kiriman ini menghasilkan spasi tambahan, dan tidak ada tambahan baris baru. Beritahu saya jika ini dianggap sebagai celah :)
Dibersihkan
sumber
Keempat (gforth) , 71 byte
Cobalah online!
TIO memiliki
3 arg
di baris terakhir karena TIO melewati "-e bye" ke parser baris perintah sebelum melewati kodePenjelasan Kode
sumber
Javascript, 155 byte
sumber
VBScript, 143 byte
sumber
Bahasa Wolfram (Mathematica) ,
9489 byteCobalah online!
Kode ini cukup jelas karena nama perintah yang panjang. Itu harus dibaca sebagian besar dari kanan ke kiri:
sumber
Gema , 45 karakter
Contoh dijalankan:
Cobalah online!
sumber
Pyth , 12 byte
Cobalah online!
Mengambil input sebagai prompt pengguna (tidak ada cara untuk mengakses argumen baris perintah AFAIK).
(*) Saya tidak 100% yakin apakah ini dimaksudkan, tetapi satu basis 256 digit (seperti dalam, satu karakter), akan selalu dikonversi menjadi tepat 2 digit hex, menghilangkan kebutuhan untuk mengisi dengan nol.
sumber
Node.js, 118 byte
Seperti apa hasilnya:
Btw konten
test.txt
dalam contoh adalah sebagai berikut:sumber
C # .NET Framework 4.7.2 -
235213203191175140 byteCobalah online!
sumber
05AB1E , 18 byte
Cobalah online!
Penjelasan:
sumber