Wyzwanie
Utwórz program konsoli, aby wyświetlić każdy bajt pliku.
Zwycięski
Ponieważ jest to golf kodowy , wygrywa najmniej bajtów.
Zasady
- Program musi być aplikacją konsolową , co oznacza, że będzie uruchamiany z jakiegoś interpretera wiersza poleceń;
- Każdy bajt musi być wielkimi literami szesnastkowymi, oddzielonymi spacją i musi składać się z 2 cyfr; (wstaw cyfrę 0, jeśli ma 1 cyfrę)
- Plik musi być odczytany przy użyciu IO lub alternatywnie i nie może być zakodowany na stałe;
- Ścieżka do pliku musi być określona jako argument wiersza polecenia lub monit użytkownika (np. STDIN) ;
- Brak luki podobać ;
Przykład
test.txt (kończy się na LF)
Hello World!
$ ./hexdump.exe test.txt
48 65 6C 6C 6F 20 57 6F 72 6C 64 21 0A
hello.txt
plik tekstowy jako przykład jako dane wejściowe i jakie powinno być oczekiwane wyjście. Na przykład, jeślihello.txt
zawiera po prostu słowohello
z podziałem wiersza, jak wyraziłoby się to w wyniku? Czy grupujesz bajty w słowa 16-bitowe, 32-bitowe lub 64-bitowe? A może każdy bajt jest wyrażony jako dwucyfrowa liczba szesnastkowa? Czy spacje są akceptowane po każdym bajcie jako szesnastkowym, czy po każdym słowie x-bitowym? Czy potrzebujesz0x
wstępnej poprawki dla każdego bajtu?Odpowiedzi:
C (gcc) na * nix,
7371 bajtówWypróbuj online! Zestaw testowy
-2 bajty dzięki Johan du Toit
To zależy
O_RDONLY == 0
od tego,int_one == 1
gdzie i gdzieint int_one; *(char*)&int_one = 1;
.źródło
Rubinowy , 26 bajtów
Wypróbuj online!
źródło
$<
zamiast tego przełącza się na odczyt ze STDIN.PowerShell ,
4540 bajtówWypróbuj online!
-5 bajtów dzięki mazzy
źródło
./.input.tio
. 40 bajtów z zachowanym CRLF.Java 11,
156154 bajtów-2 bajty dzięki @Holger .
Wypróbuj online , używając
./.input.tio
jako argumentu ścieżki do pliku, która będzie miała dane wejściowe jako zawartość pliku.Wyjaśnienie:
źródło
interface
zamiastclass
?interface
jest krótszy niżclass
+public
.Path.of
zamiastPaths.get
public
, ale nie sąpublic
jawneprivate
.PHP ,
605954 bajtówWypróbuj online!
źródło
?>
i zapisać 2 bajty, a jeśli to nie zadziała, zastąp?>
średnikiem i zapisz 1 bajt.implode(file($x))
zamiastfile_get_contents($x)
(-4 bajtów).wordwrap()
,1
jako jako ostatni parametr, jest o jeden bajt krótszy niżchunk_split()
.Perl 5 (
-aF//
), 23 bajtyTIO
źródło
APL (Dyalog Unicode) , 16 bajtów
Anonimowa ukryta funkcja prefiksu. Zwraca (i domyślnie drukuje, jeśli wartość nie zostanie w inny sposób zużyta), macierz dwurzędową z 4 górnymi bitami przedstawionymi jako liczba dziesiętna 0–15 w górnym rzędzie i 4 dolne bity podobnie reprezentowane w dolnym rzędzie. Oznacza to, że macierz ma tyle kolumn, ile plik ma bajtów.
Wypróbuj online!
⎕MAP
zamapuj nazwę pliku argumentu na tablicę∘
z parametrami:¯1
cała długość pliku83
odczytywana jako 8-bitowe liczby całkowite16 16⊤
konwertuj (anty-bazowy) na szesnastkowy 2-położeniowyźródło
H
72, czyli 4 × 16¹ + 8 × 16⁰ lub [4,8] ₁₆. W związku z tym w pierwszej kolumnie w przykładzie odczytuje[4,8]
.Python 3, 59 bajtów
-11 bajtów dzięki przeważnie nieszkodliwemu!
-8 bajtów dzięki Jamesowi K Polkowi!
-24 bajty dzięki Blue!
Wypróbuj online!
To jest całkiem proste; otwiera nazwę pliku podaną jako dane wejściowe na STDIN, czyta ją, konwertuje każdy znak na jego wartość ASCII, konwertuje każdą liczbę na szesnastkową, oddziela tę,
"0x"
która poprzedza wartości szesnastkowe w Pythonie, w razie potrzeby uzupełnia wartość zerową, a następnie łączy wartości wraz ze spacjami.źródło
'%02X'%ord(i)
zamiast przekrawać dane wyjściowe heksadecymalne.upper()
import sys
, używającraw_input()
zamiast tego nazwy pliku; Reguły zezwalają na monitowanie użytkownika.input()
Bash ,
3323 bajty... z dużą pomocą:
-3 dzięki manatwork
-4 dzięki spuck
-3 dzięki Nahuel Fouilleul
Wypróbuj online!
Należy zauważyć, że związek TIO powyżej wejścia zastosowań - możemy zapisywać pliki lokalnie, więc tym pokazuje, że pracuje jako programu biorąc ścieżkę do pliku.
źródło
xxd -u -p $1|fold -2|tr \\n \
.\n
i\
pracować w „tej” wersji linku? EDYCJA: Dodałem kolejną postać ucieczki.xxd -c1 -p -u $1|tr \\n \
Kotlin ,
1301271049392 bajtyWypróbuj online!
Edycja: -11 bajtów dzięki @ChrisParton
Edycja: działające TIO
Edycja: -1 bajt dzięki @KevinCruijssen
źródło
File
jakojava.io.File
zamiast?./.input.tio
jako argumentu ścieżki do pliku, a on użyje STDIN jako zawartości pliku. :)a:Array
, więc myślę, że możesz zapisać bajt.Dart ,
140134 bajtówWypróbuj online!
-6 bajtów, ponieważ zapomniałem zredukować nazwy zmiennych
źródło
Haskell,
145143 bajtówźródło
import Data.ByteString
plusmain=getArgs>>=Data.ByteString.readFile.(!!0)>>=mapM_(printf"%02X ").unpack
.Rdza, 141 bajtów (wersja przekazana)
Rdza, 151 bajtów (wersja oryginalna)
źródło
bash + Stax, 6 + 4 + 1 = 11 bajtów
W tym momencie jest to kompletna jednostka teoretyczna. Nie możesz tego uruchomić. Jeśli wszystko działa zgodnie ze specyfikacją, działałoby, ale jeszcze nie wszystko.
Skrypt bash jest
i program stax musi zostać skompilowany i zapisany w] is
Ustaw swój zestaw znaków na ISO 8859-1 (Windows-1252 nie będzie tu działał) i idź
Rozpakowano i wyjaśniono
źródło
Emojicode ,
186162 bajtówWypróbuj online tutaj.
Nie golfowany:
źródło
Perl 6 , 45 bajtów
Wypróbuj online!
@*ARGS[0]
jest pierwszym argumentem wiersza poleceń..IO
zamienia tę (przypuszczalnie) nazwę pliku wIO::Path
obiekt..slurp(:bin)
wczytuje cały plik doBuf
bufora bajtów. (Bez:bin
zawartości plik byłby zwracany jako ciąg Unicode.).list
zwraca listę wartości bajtów z bufora..fmt('%02X')
toList
metoda, która formatuje elementy listy przy użyciu podanego ciągu formatu, a następnie łączy je spacjami. (Wygodna!).say
wypisuje ten ciąg.źródło
.list
do 41 bajtówD , 98 bajtów
Wypróbuj online!
źródło
Python 3, 75 bajtów
Przeważnie kopia odpowiedzi Maxona na python 2.
źródło
sys.argv[1]
. zsys.argv[0]
tym skryptem działa bardziej jak quine ;-)Rakieta, 144 bajty
To przesłanie generuje końcowe miejsce i brak końcowego nowego wiersza. Daj mi znać, jeśli uważa się to za lukę :)
Oczyszczone
źródło
Dalej (gforth) , 71 bajtów
Wypróbuj online!
TIO znajduje się
3 arg
w ostatnim wierszu, ponieważ TIO przekazuje „-e pa” do parsera wiersza poleceń przed przekazaniem koduObjaśnienie kodu
źródło
JavaScript, 155 bajtów
źródło
VBScript, 143 bajty
źródło
Wolfram Language (Mathematica) ,
9489 bajtówWypróbuj online!
Kod jest dość zrozumiały ze względu na długie nazwy poleceń. Należy go czytać głównie od prawej do lewej:
źródło
Gema , 45 znaków
Przykładowy przebieg:
Wypróbuj online!
źródło
Pyth , 12 bajtów
Wypróbuj online!
Pobiera dane wejściowe jako monit użytkownika (nie ma możliwości uzyskania dostępu do argumentów wiersza polecenia AFAIK).
(*) Nie jestem w 100% pewien, czy jest to zamierzone, ale jedna podstawowa 256 cyfra (jak w, jeden znak) zawsze zamieni się na dokładnie 2 cyfry szesnastkowe, eliminując potrzebę wypełniania zerami.
źródło
Node.js, 118 bajtów
Jak wygląda wynik:
Btw zawartość
test.txt
w przykładzie jest następująca:źródło
C # .NET Framework 4.7.2 -
235213203191175140 bajtówWypróbuj online!
źródło
05AB1E , 18 bajtów
Wypróbuj online!
Wyjaśnienie:
źródło