Tâche
Étant donné une chaîne d'entrée d'un ou plusieurs caractères ASCII dont les points de code sont compris entre 0 et 128 (exclusif), procédez comme suit:
- Convertissez chaque caractère en son code ASCII 7 bits (si le code ASCII est inférieur à 7 bits, mettez les premiers bits zéro)
- Concatène tous les bits (il en résulte des
7*n
bits oùn
est le nombre de caractères) - Pour chaque bit de ce flux binaire, imprimez 1 s'il est différent du bit précédent et imprimez 0 sinon. Le premier bit de sortie est toujours 1.
Exemple
Contribution:
Hi
Production:
11011001011101
Explication:
La chaîne "Hi" a les codes ASCII
72 105
qui en bits sont:
1001000 1101001
Et les indicateurs de bits de transition:
11011001011101
C'est le golf de code. Le nombre d'octets le plus bas gagne.
Cas de test
Cas de test 1:
Hello World!
110110010101110011010101101010110001110000111110000110000001011101101010101100110001
Cas de test 2:
%% COMMENT %%
1110111111011111100001100010010100001010110101011010011101010011111110011000001101111110111
Test case 3 (crédit à Luis Mendo):
##
11100101110010
Félicitations à Luis Mendo pour la solution la plus courte avec 9 octets en MATL!
##
(0
bit principal ; certaines réponses échouent actuellement à cause de cela)Réponses:
MATL , 9 octets
Essayez-le en ligne!
Explication
la source
Python 2 , 58 octets
Essayez-le en ligne!
la source
Japt
-P
, 11 octetsProfite du fait que les espaces peuvent être contraints
0
en JavaScript lorsque vous essayez d'effectuer une opération mathématique ou, dans ce cas, au niveau du bit.Essayez-le ou exécutez tous les cas de test
la source
0100000
. De plus, le caractère% (37) serait0100101
CJam , 21 octets
Essayez-le en ligne!
Explication
Affichage de la pile avec un exemple d'entrée
5
:Pour voir si un bit est différent du bit précédent, nous faisons un vecteur (élément par élément) entre le tableau de bits et le tableau de bits sans le premier élément. Nous supprimons également le dernier bit du résultat, car il s'agit toujours du dernier bit du tableau le plus long inchangé.
la source
APL (Dyalog Unicode) , 16 octets SBCS
Programme complet. Demande la chaîne de stdin.
Essayez-le en ligne!
⍞
demande de saisie ("un devis dans une console")11⎕DR¨
modifier chaque caractère de bit booléenne D ata R ePresentation1↓¨
déposez le premier bit de chaque∊
ϵ nlist (aplatir)2≠/
différence par paire1,
ajouter unla source
Gelée , 12 octets
Essayez-le en ligne!
la source
Fusain , 25 octets
Essayez-le en ligne! Le lien est vers la version détaillée du code. Explication:
Convertissez tous les caractères en binaire et remplissez-les à une longueur de 7, puis imprimez-les, mais laissez le curseur sur le dernier chiffre.
Répétez jusqu'à ce que le curseur se trouve sur le premier chiffre.
Calculez si les chiffres sont différents et remplacez chaque chiffre par la différence.
Remplacez le premier chiffre par un
1
.la source
PowerShell ,
735649 octetsEssayez-le en ligne!
-17 octets grâce à mazzy :)
la source
Rubis
-p
,6857 octets-11 octets en volant sans vergogne la méthode utilisée par la solution Python de xnor .
Essayez-le en ligne!
Solution originale:
Essayez-le en ligne!
la source
Octave ,
3630 octetsCorrection grâce à Luis Mendo
-2 octets grâce à Sanchises
Essayez-le en ligne!
la source
de2bi
.Python 2 , 104 octets
Essayez-le en ligne!
Un coup de couteau rapide.
la source
a*128+ord(c)
! Mais n'est-ce pasreduce
etlambda
plutôt coûteux?Dart ,
213168 octetsPrécédent one-liner
Essayez-le en ligne!
Cette verbosité et ce manque d'inserts faciles à construire tuent vraiment celui-ci. Pourtant, j'ai quand même réussi à tirer une ligne.
la source
Stax ,
1312 octetsExécuter et déboguer
S'il est garanti que tous les caractères d'entrée ont le 7e bit défini, comme certaines réponses le supposent, cela peut être fait en 10 octets
la source
Kotlin , 182 octets
Essayez-le en ligne!
J'espère que je pourrai améliorer cela bientôt, j'ai l'impression qu'il doit y avoir des points à améliorer mais je ne peux pas penser en ce moment
la source
Perl 5
-p
, 60 octetsEssayez-le en ligne!
la source
C (gcc (MinGW)), 90 octets
Nécessite un compilateur fournissant
itoa()
.la source
Rubis
-p
, 50 octetsEssayez-le en ligne!
Explication
Première ligne, identique à la réponse de Value Ink :
Deuxième ligne:
Dans Ruby, vous pouvez utiliser l'interpolation dans les littéraux Regexp, par exemple
/Hello #{name}/
, et pour les variables qui commencent par$
ou@
vous pouvez omettre les accolades, donc si par exemple$&
est"0"
alors le grawlixy/#$&$/
devient/0$/
.la source
K (ngn / k) ,
913 octetsSolution:
Essayez-le en ligne!
Explication:
Remarques:
la source
#
par exemple (la sortie n'a que 6 bits)Emojicode , 263 octets
Essayez-le en ligne ici.
Non golfé:
la source
JavaScript (V8) ,
15095 octets-55 grâce à @dana
Essayez-le en ligne!
la source
Python3.8 , 72 octets
Solution:
Explication:
Depuis que Python 3.8 a introduit les expressions d'affectation (plutôt que les instructions d'affectation standard), j'ai voulu les utiliser dans une liste de compréhension qui doit se souvenir du dernier élément. Ce n'est pas la meilleure façon de procéder, mais illustre une méthode intéressante d'utilisation de l'expression d'affectation.
Le code crée une fonction lambda qui prend l'argument requis qui est la chaîne à convertir. Lorsqu'elle est appelée, la fonction se déroule comme suit. Chaque caractère dans a est converti en son code de caractère auquel 128 est ajouté pour traiter les caractères 6 bits (la représentation binaire sera toujours de 8 bits et nous pouvons couper le premier bit). Ce nombre est converti en binaire et l'en-tête (0x) et le 1 initial de l'ajout de 128 sont coupés. Ces nouvelles chaînes sont ensuite jointes en une chaîne plus grande.
Pour chaque caractère de cette nouvelle chaîne (qui contient la représentation concaténée à 7 bits du texte), il est vérifié si le caractère est le même que le caractère précédent. Que se passe-t-il avec le premier personnage? Le premier caractère de résultat doit toujours être "1", nous devons donc nous assurer que tout ce qui se trouve dans la dernière variable de caractère n'est ni "1" ni "0". Nous le faisons en réutilisant le paramètre d'origine maintenant que nous ne l'utilisons plus. Cela peut être un problème si la chaîne d'origine était un simple "0" (un seul "1" fonctionne simplement) mais nous l'ignorerons.
Pendant la comparaison, le caractère précédent a été évalué en premier, donc lorsque nous utilisons l'expression d'affectation pour définir la variable de caractère précédente sur le caractère actuel, cela n'affecte pas l'évaluation des expressions de comparaison.
La comparaison produit soit Vrai soit Faux qui peut également être utilisé comme 1 ou 0 respectivement en Python, donc ils sont utilisés pour rechercher un "1" ou "0" dans une chaîne
la source
bin(ord(i)+128)[3:]
->f"{ord(i):07b}"
Tcl ,
215167140 octetsEssayez-le en ligne!
Utilise shift-by-one et exclusif-ou pour détecter les transitions. Porte lsb du caractère actuel au msb du caractère suivant. Combine la sortie de chaque caractère en rejoignant la liste renvoyée par lmap.
Utilise des lambdas avec des arguments par défaut pour économiser des octets lors de l'initialisation et des commandes répétées.
Dépend fortement de l'ordre de fonctionnement. Fonctionne pour une chaîne vide.
la source
05AB1E (hérité) , 12 octets
Utilise la version héritée de 05AB1E, car
j
joint implicitement les chaînes ensemble, ce qui nécessite une expliciteJ
après laj
dans la nouvelle version de 05AB1E.Essayez-le en ligne ou vérifiez tous les cas de test .
Explication:
la source
Haskell , 137 octets
Essayez-le en ligne!
Le plus gros problème ici est de convertir les booléens (résultat du XOR) en '0' / '1'.
la source
Python 3 ,
8884 octetsEssayez-le en ligne!
Je pense que les affectations devraient être évitables, mais je ne pouvais pas penser à un moyen de le faire.
Mise à jour:
la source
PHP , 90 octets
Essayez-le en ligne!
la source
C # (Visual C # Interactive Compiler) , 80 octets
Essayez-le en ligne!
la source
JavaScript (V8) , 73 octets
Essayez-le en ligne!
la source