Code Golf Measurer © 2019
Les hexdumps utilisés avec xxd
ressemblent à ceci:
00000000: 666f 6f20 6261 7220 7370 616d 2065 6767 foo bar spam egg
00000010: 730a s.
Votre tâche consiste à convertir un vidage hexadécimal sous cette forme en nombre d'octets utilisés.
Règles:
- Failles habituelles interdites.
- C'est le code-golf , donc la réponse valide la plus courte en octets l'emporte.
- Vous pouvez ou non inclure la nouvelle ligne à la fin du texte (
0a
). Cela signifie que si l'hexdump se termine par une nouvelle ligne (0a
), cette entrée peut voir sa sortie réduite d'une unité . - Une entrée vide (littéralement rien: liste / chaîne / etc. Vide) doit sortir 0.
- L'entrée peut être prise sous n'importe quelle forme
- L'entrée sera ASCII valide sans caractères de contrôle
- L'entrée doit contenir tout le vidage hexadécimal
Cas de test:
00000000: 4865 6c6c 6f2c 2077 6f72 6c64 2120 4865 Hello, world! He
00000010: 6c6c 6f2c 2077 6f72 6c64 210a llo, world!.
renvoie 28 ou 27
00000000: 0a .
renvoie 1 ou 0
00000000: 6368 616c 6c65 6e67 650a challenge.
renvoie 10 ou 9
00000000: 4865 6c6c 6f2c 2077 6f72 6c64 21 Hello, world!
renvoie 13
renvoie 0 (ce n'est littéralement rien: liste / chaîne / etc. vide)
Des explications seraient intéressantes pour les langues non standard.
code-golf
string
hexadecimal
gadzooks02
la source
la source
xxd
est alimenté une chaîne vide, il ne produit rien.objdump
démontage ou lesnasm
listes de réponses au code machine.) Je suppose que je devrais poster cela dans le bac à sable ...Réponses:
Retina 0.8.2 , 8 octets
Essayez-le en ligne! Explication:
Supprimez les 51 premiers caractères de chaque ligne. (Les lignes ne peuvent avoir qu'entre 52 et 67 caractères, donc cela correspond toujours une fois par ligne.)
Comptez les caractères non-newline restants.
7 octets si l'entrée vide ne devait pas être prise en charge:
Essayez-le en ligne! Explication:
Supprimez les 52 premiers caractères de chaque ligne. (Les lignes ne peuvent avoir qu'entre 52 et 67 caractères, donc cela correspond toujours une fois par ligne.)
Comptez 1 de plus que le nombre de caractères restants (y compris les retours à la ligne).
la source
&`.{52}
.tcsh , 12 octets
Essayez-le en ligne!
la source
V (vim) , 7 octets
Essayez-le en ligne!
Explication:
Hexdump:
la source
Rétine , 7 octets
Cela compte le nombre total de chaînes unifilaires de longueur 52. Il pourrait être possible de faire quelque chose de similaire
%52,`.
, mais je n'ai pas trouvé de moyen de résoudre ce problème.Essayez-le en ligne!
la source
&`.{52}
pour Retina 0.8.2.APL (Dyalog Extended) , 18 octets
Programme complet. Demande la liste des chaînes (c'est-à-dire des listes de caractères).
Essayez-le en ligne!
⎕
rapide49↑¨
prendre les 49 premiers caractères de chacun(
…)¨
Appliquer à chacun la fonction tacite suivante:⊢
l'argument⊆
couper en séries de personnages qui sont≠
différent du caractère de remplissage (espace)1↓
déposez le premier "mot"∊
ϵ nlist (aplatir)≢
pointage2÷⍨
diviser par deuxla source
Gelée , 5 octets
Un lien monadique acceptant une liste de lignes qui produisent le nombre d'octets entiers.
Essayez-le en ligne!
Comment?
la source
C (gcc) ,
6455 octetsEssayez-le en ligne!
9 octets rasés grâce à YSC!
Voici une version plus fragile inspirée de la solution JavaScript d'Arnauld qui échoue probablement pour de longues entrées:
C (gcc) , 50 octets
Essayez-le en ligne!
la source
return r
pourl=r
main
), il devrait être possible de l'appeler plusieurs fois.r;s[];f(l){while(*s=0,gets(s),l=strlen(s))r+=l-51;l=r;}
55 octets :)while()
a le même nombre d'octets quefor(;;)
. Ainsi,;while()
un octet est plus long quefor(;;)
.Python 3,
4846 octetsL'entrée est transmise sous forme de chaîne à la fonction. La fonction incrémente la longueur de l'entrée (y compris les retours à la ligne), puis soustrait 52 pour chaque ligne.
Essayez-le en ligne
la source
f=
peut être déplacé dans l'en-tête en tant que `f =`, laissant juste le lambda comme code et économisant deux octets: Essayez-le en ligne!f=
une habitude que j'ai prise sur le serveur de discordance Python.Japt
-x
, 5 octetsEntrez comme un tableau de lignes.
Essayez-le
la source
Perl 6 , 18 octets
Essayez-le en ligne!
Anonyme Quel que soit lambda qui prend une liste de lignes et renvoie la somme du nombre de caractères, en soustrayant 51 pour chaque ligne
la source
05AB1E ,
86 octetsEssayez-le en ligne!
Entrée sous forme de liste de chaînes.
la source
Langage de formule IBM / Lotus Notes, 53 octets
Il n'y a pas de TIO pour Formula, voici donc des captures d'écran des cas de test:
La formule se trouve dans le champ calculé qui fournit la valeur après "Retours".
Explication
C'est une bonne démonstration de la façon dont Formula appliquera récursivement une fonction à une liste sans avoir besoin d'une boucle. La formule est dans un champ calculé sur la même forme que le champ d'entrée modifiable «i».
@Left
et@Right
autoriser l'utilisation d'un délimiteur de chaîne ou d'un certain nombre de caractères. Nous recherchons donc à droite:
puis à gauche la première occurrence de deux espaces. Puisque Formula voit la nouvelle ligne comme un séparateur de liste, elle l'appliquera à chaque ligne de l'entrée.@Explode
est l'équivalent de la formule d'unesplit
fonction et par défaut à l'espace,,
ou;
. Encore une fois, il est appliqué à chaque ligne du champ, mais cette fois, les résultats sont combinés en une seule liste.@Length
sera ensuite appliqué à chaque membre de la liste. Dans chaque cas, nous divisons sa valeur de retour par 2.@Sum
toute la liste et afficher le résultat.la source
JavaScript (ES6), 34 octets
Essayez-le en ligne!
Commenté
la source
Rouge ,
8155 octetsEssayez-le en ligne!
Prend l'entrée comme une liste de chaînes.
la source
JavaScript,
3332 octetsEssayez-le en ligne!
1 octet enregistré grâce à Arnauld.
la source
Befunge-98 (FBBI) , 16 octets
Essayez-le en ligne!
la source
Stax , 5 octets
Exécuter et déboguer
la source
Zsh , 36 octets
Avec les drapeaux par défaut de zsh:
Essayez-le en ligne!
${(f)1}
se divise$1
sur les nouvelles lignes et supprime les lignes vides. Les$[ arithmetic expansion ]
gardes contre le boîtier vide, quand la boucle ne se met jamais$c
.Zsh , 28 octets
Avec
-o extendedglob
:Essayez-le en ligne!
(f)
Fractionnez sur les sauts de ligne,${ #?(#c52)}
supprimez les 52 premiers caractères,(F)
rejoignez les sauts de ligne pour que le comptage se fasse par caractère plutôt que par liste,${# }
comptez les caractères.la source
asm2bf , 135 octets
Version golfée:
Version commentée:
la source