Défi
Créez un programme de console pour afficher chaque octet d'un fichier.
Gagnant
Puisqu'il s'agit de code-golf , le moins d'octets gagne.
Règles
- Le programme doit être une application console , ce qui signifie qu'il sera exécuté à partir d'une sorte d'interpréteur de ligne de commande;
- Chaque octet doit être en hexadécimal majuscule, séparé par un espace, et il doit être composé de 2 chiffres; (mettez le numéro 0 devant s'il a 1 chiffre)
- Le fichier doit être lu en utilisant IO ou une alternative, et non codé en dur;
- Le chemin du fichier doit être spécifié sous forme d' argument de ligne de commande ou d'invite utilisateur (comme STDIN) ;
- Pas d' échappatoires s'il vous plaît ;
Exemple
test.txt (se termine par LF)
Hello World!
$ ./hexdump.exe test.txt
48 65 6C 6C 6F 20 57 6F 72 6C 64 21 0A
hello.txt
fichier texte comme exemple d' entrée et quelle devrait être la sortie attendue. Par exemple, si lehello.txt
contenait simplement le mothello
avec un saut de ligne, comment cela serait-il exprimé dans la sortie? Regroupez-vous les octets en mots 16 bits, 32 bits ou 64 bits? Ou chaque octet est-il exprimé en hexadécimal à deux chiffres? Les espaces sont-ils acceptables après chaque octet en hexadécimal ou après chaque mot de x bits? Avez-vous besoin d'un0x
préfixe pour chaque octet?Réponses:
C (gcc) sur * nix,
7371 octetsEssayez-le en ligne! Suite de tests
-2 octets grâce à Johan du Toit
Cela dépend de
O_RDONLY == 0
et surint_one == 1
oùint int_one; *(char*)&int_one = 1;
.la source
Rubis , 26 octets
Essayez-le en ligne!
la source
$<
passe à la lecture de STDIN à la place.PowerShell ,
4540 octetsEssayez-le en ligne!
-5 octets grâce à mazzy
la source
./.input.tio
. 40 octets avec CRLF préservé.Java 11,
156154 octets-2 octets grâce à @Holger .
Essayez-le en ligne en utilisant
./.input.tio
comme argument chemin-fichier, qui aura une entrée donnée comme contenu-fichier.Explication:
la source
interface
au lieu declass
?interface
est plus courte queclass
+public
.Path.of
place dePaths.get
public
, mais elles le sontpublic
sauf si explicitement déclaréesprivate
.PHP ,
605954 octetsEssayez-le en ligne!
la source
?>
et enregistrer 2 octets, ou si cela ne fonctionne pas, remplacez-le?>
par un point-virgule et enregistrez 1 octet.implode(file($x))
au lieu defile_get_contents($x)
(-4 octets).wordwrap()
, avec1
comme dernier paramètre, est un octet plus court quechunk_split()
.Perl 5 (
-aF//
), 23 octetsTIO
la source
APL (Dyalog Unicode) , 16 octets
Fonction de préfixe tacite anonyme. Renvoie (et imprime implicitement, si la valeur n'est pas consommée autrement) une matrice à deux lignes avec les 4 bits supérieurs représentés sous la forme d'un nombre décimal 0–15 dans la ligne supérieure et les 4 bits inférieurs représentés de manière similaire dans la ligne inférieure. Autrement dit, la matrice a autant de colonnes que le fichier a d'octets.
Essayez-le en ligne!
⎕MAP
mapper l'argument nom de fichier à un tableau∘
avec des paramètres:¯1
toute la longueur du fichier83
lu comme des entiers 8 bits16 16⊤
convertir (anti-base) en hexadécimal à 2 positionsla source
H
, 72, soit 4 × 16¹ + 8 × 16⁰ ou [4,8] ₁₆. Par conséquent, la première colonne de l'exemple indique[4,8]
.Python 3, 59 octets
-11 octets grâce à Mostly Harmless!
-8 octets grâce à James K Polk!
-24 octets grâce à Blue!
Essayez-le en ligne!
C'est assez simple; il ouvre un nom de fichier donné en entrée sur STDIN, le lit, convertit chaque caractère en sa valeur ASCII, convertit chaque nombre en hexadécimal,
"0x"
supprime le qui précède les valeurs hexadécimales en Python, remplit la valeur avec un zéro si nécessaire, puis joint les valeurs avec des espaces.la source
'%02X'%ord(i)
au lieu de découper la sortie hexadécimale.upper()
import sys
en utilisantraw_input()
à la place comme nom de fichier; les règles autorisent les invites utilisateur.input()
Bash ,
3323 octets... avec beaucoup d'aide:
-3 grâce à manatwork
-4 grâce à spuck
-3 grâce à Nahuel Fouilleul
Essayez-le en ligne!
Notez que le lien TIO ci-dessus utilise une entrée - nous pouvons écrire des fichiers localement, donc cela montre qu'il fonctionne comme un programme prenant un chemin de fichier.
la source
xxd -u -p $1|fold -2|tr \\n \
.\n
et\
travailler dans la version "this" du lien? EDIT: J'ai ajouté un autre personnage d'échappement.xxd -c1 -p -u $1|tr \\n \
Kotlin ,
1301271049392 octetsEssayez-le en ligne!
Edit: -11 octets grâce à @ChrisParton
Edit: Travailler TIO
Edit: -1 octet grâce à @KevinCruijssen
la source
File
à lajava.io.File
place?./.input.tio
comme argument de chemin de fichier, et il utilisera le STDIN comme contenu de fichier. :)a:Array
, donc je pense que vous pouvez enregistrer un octet.Fléchette ,
140134 octetsEssayez-le en ligne!
-6 octets car j'ai oublié de réduire les noms de variables
la source
Haskell,
145143 octetsla source
import Data.ByteString
plusmain=getArgs>>=Data.ByteString.readFile.(!!0)>>=mapM_(printf"%02X ").unpack
.Rust, 141 octets (version contribuée)
Rouille, 151 octets (version originale)
la source
bash + Stax, 6 + 4 + 1 = 11 octets
C'est un métier de théorie complet à ce stade. Vous ne pouvez pas réellement exécuter cela. Si tout fonctionne selon ses spécifications, cela fonctionnera, mais tout ne fonctionne pas encore.
Le script bash est
et le programme stax doit être compilé et enregistré dans] est
Réglez votre jeu de caractères sur ISO 8859-1 (Windows-1252 ne fonctionnera pas ici) et allez
Déballé et expliqué
la source
Emojicode ,
186162 octetsEssayez-le en ligne ici.
Non golfé:
la source
Perl 6 , 45 octets
Essayez-le en ligne!
@*ARGS[0]
est le premier argument de ligne de commande..IO
transforme ce nom de fichier (présumé) enIO::Path
objet..slurp(:bin)
lit le fichier entier dans unBuf
tampon d'octets. (Sans le:bin
contenu du fichier serait retourné sous forme de chaîne Unicode.).list
renvoie une liste des valeurs d'octets du tampon..fmt('%02X')
est uneList
méthode qui formate les éléments de la liste en utilisant la chaîne de formatage donnée, puis les joint avec des espaces. (Pratique!).say
imprime cette chaîne.la source
.list
pour 41 octetsD , 98 octets
Essayez-le en ligne!
la source
Python 3, 75 octets
Surtout une copie de la réponse de Maxwell en python 2.
la source
sys.argv[1]
. avecsys.argv[0]
ce script fonctionne plus comme une quine ;-)Raquette, 144 octets
Cette soumission génère un espace de fin et aucune nouvelle ligne de fin. Faites-moi savoir si cela est considéré comme une échappatoire :)
Nettoyé
la source
Forth (gforth) , 71 octets
Essayez-le en ligne!
TIO a
3 arg
dans la dernière ligne car TIO passe "-e bye" à l'analyseur de ligne de commande avant de passer le codeExplication du code
la source
Javascript, 155 octets
la source
VBScript, 143 octets
la source
Wolfram Language (Mathematica) ,
9489 octetsEssayez-le en ligne!
Le code est assez explicite en raison des noms de commandes longs. Il doit être lu principalement de droite à gauche:
la source
Gema , 45 caractères
Exemple d'exécution:
Essayez-le en ligne!
la source
Pyth , 12 octets
Essayez-le en ligne!
Prend l'entrée comme invite utilisateur (aucun moyen d'accéder aux arguments de la ligne de commande AFAIK).
(*) Je ne suis pas sûr à 100% si cela est prévu, mais un chiffre de base 256 (comme dans, un caractère), sera toujours converti en exactement 2 chiffres hexadécimaux, éliminant ainsi la nécessité de remplir avec des zéros.
la source
Node.js, 118 octets
À quoi ressemble le résultat:
Btw le contenu de
test.txt
dans l'exemple est le suivant:la source
C # .NET Framework 4.7.2 -
235213203191175140 140 octetsEssayez-le en ligne!
la source
05AB1E , 18 octets
Essayez-le en ligne!
Explication:
la source