Remarque: la première moitié de ce défi provient du précédent défi de Martin Ender, Visualize Bit Weaving .
Le langage de programmation ésotérique mal a une opération intéressante sur les valeurs d'octets qu'il appelle "tissage".
Il s'agit essentiellement d'une permutation des huit bits de l'octet (peu importe de quelle extrémité nous commençons à compter, car le motif est symétrique):
- Le bit 0 est déplacé vers le bit 2
- Le bit 1 est déplacé vers le bit 0
- Le bit 2 est déplacé vers le bit 4
- Le bit 3 est déplacé vers le bit 1
- Le bit 4 est déplacé vers le bit 6
- Le bit 5 est déplacé vers le bit 3
- Le bit 6 est déplacé vers le bit 7
- Le bit 7 est déplacé vers le bit 5
Pour plus de commodité, voici trois autres représentations de la permutation. En cycle:
(02467531)
En tant que cartographie:
57361402 -> 76543210 -> 64725031
Et comme une liste de paires de la cartographie:
[[0,2], [1,0], [2,4], [3,1], [4,6], [5,3], [6,7], [7,5]]
Après 8
tissages, l'octet est essentiellement réinitialisé.
Par exemple, le tissage du nombre 10011101
(qui est 157
en base 10) produira 01110110
(qui est 118
en base 10).
Contribution
Il n'y a que des 256
entrées valides, à savoir tous les entiers compris entre 0
et 255
inclus. Cela peut être pris dans n'importe quelle base, mais il doit être cohérent et vous devez le spécifier si la base que vous choisissez n'est pas la base dix.
Vous ne pouvez pas mettre à zéro vos entrées.
Production
Vous devez sortir le résultat du tissage des bits, dans n'importe quelle base, qui doit également être cohérent et spécifié sinon en base dix.
Vous pouvez mettre à zéro vos sorties.
Connexe: Visualize Bit Weaving
la source
Réponses:
Python 2.7,
44-> 36 octetsla source
|
au lieu de+
et masquez après le décalage, vous pouvez raser 8 octets en supprimant les parenthèses.<strike></strike>
autour de votre ancien score d'octets pour indiquer la progression :-)Mal, 3 personnages
Essayez-le en ligne!
L'entrée est en base 256, (par exemple ASCII), par exemple pour entrer le chiffre 63, entrez ASCII 63 qui est
?
.Explication:
Cette façon se sent comme de la tricherie.
la source
CJam,
1512 octetsMerci à FryAmTheEggman pour avoir économisé 3 octets.
Entrée en base 2. Sortie également en base 2, complétée à 8 bits avec des zéros.
Testez-le ici.
Explication
la source
MATL , 14 octets
L'entrée est en décimal. La sortie est un binaire à remplissage nul.
Essayez-le en ligne!
Explication
la source
Gelée, 11 octets
Traduction de la réponse CJam de Martin. Essayez-le ici.
la source
JavaScript (ES6), 30 octets
la source
J, 12 octets
Utilise la permutation intégrée
A.
avec un indice de permutation6532
qui correspond à l'opération de tissage de bits.Usage
L'entrée est une liste de chiffres binaires. La sortie est une liste à 8 chiffres binaires complétée par zéro.
Explication
la source
Rétine , 39 octets
Entrée et sortie en base 2, la sortie est remplie à gauche.
Essayez-le en ligne!
Explication
Cela vient de remplir l'entrée avec des zéros. le
+
indique que cette étape est répétée jusqu'à ce que la chaîne cesse de changer. Il correspond au début de la chaîne tant qu'il contient moins de 8 caractères et insère un0
dans cette position.Maintenant pour la permutation réelle. La solution simple est la suivante:
Cependant, c'est douloureusement long et redondant. J'ai trouvé une formulation différente de la permutation qui est beaucoup plus facile à implémenter dans la rétine (
X
représente un échange de bits adjacents):Maintenant, c'est beaucoup plus facile à mettre en œuvre:
Cela correspond simplement à deux caractères et les échange. Comme les correspondances ne se chevauchent pas, cela permute les quatre paires.
Maintenant, nous voulons refaire la même chose, mais nous voulons sauter le premier caractère. La manière la plus simple de le faire est d'exiger que la correspondance ne commence pas à la limite d'un mot avec
\B
.la source
code machine x86, 20 octets
En hex:
C'est une procédure prenant l'entrée et renvoyant le résultat via le registre AL
Démontage
la source
C (macro non sécurisée), 39 octets
C (fonction), 41 octets
C (programme complet), 59 octets
(retourne via le code de sortie, donc appelez avec
echo "157" | ./weave;echo $?
)C (programme complet conforme aux normes), 86 octets
C (programme complet conforme aux normes sans avertissements du compilateur), 95 octets
C (programme complet conforme aux normes sans avertissement du compilateur qui peut lire à partir des arguments ou stdin et inclut la vérification des erreurs / plage), 262 octets
Panne
À peu près la même chose que beaucoup de réponses existantes: décaler tous les bits en place en utilisant
<<2
(*4
),<<1
(*2
),>>1
(/2
) et>>2
(/4
), puis|
tout cela ensemble.Le reste n'est que des saveurs différentes de chaudronnerie.
la source
Mathematica, 34 octets
Fonction anonyme. Prend une liste de chiffres binaires et génère une liste remplie de 8 chiffres binaires.
la source
PowerShell v2 +, 34 octets
Traduction de la réponse de @ LegionMammal978 . Programme complet. Prend l'entrée via l'argument de ligne de commande sous forme de nombre binaire, les sorties sous forme de tableau binaire, avec un zéro.
La
"{0:D8}"-f
partie utilise des chaînes de format numérique standard pour ajouter0
à l'entrée$args
. Puisque l'-f
opérateur prend en charge la prise d'un tableau en entrée, et que nous avons explicitement dit d'utiliser le premier élément{0:
, nous n'avons pas besoin de faire l'habituel$args[0]
. Nous encapsulons cette chaîne en parens, puis l'indexons[1,3,0,5,2,7,4,6]
avec le tissage. Le tableau résultant est laissé sur le pipeline et la sortie est implicite.Exemples
(la valeur
.ToString()
par défaut pour un tableau a le séparateur comme`n
, c'est pourquoi la sortie est séparée par des sauts de ligne)la source
Matlab,
494844 octetsPrend l'entrée sous forme de chaîne de valeurs binaires. Sortie rembourrée. 4 octets enregistrés grâce à @Luis Mendo.
Explication:
la source
V , 17 octets
Essayez-le en ligne!
Cela prend l'entrée et la sortie en binaire. La plupart du nombre d'octets provient du remplissage avec des 0. Si le remplissage de l'entrée était autorisé, nous pourrions simplement faire:
Merci à la solution de Martin pour la méthode d'échange de caractères, par exemple:
Explication:
la source
05AB1E,
1412 octetsExplication
L'entrée est en base 10. La
sortie est en base 2.
Emprunte l'astuce de permutation de la réponse CJam de MartinEnder
Essayez-le en ligne
la source
Pyth, 19 caractères
L'entrée et la sortie sont en base 2.
Loin d'un expert en Pyth, mais comme personne d'autre n'a encore répondu, je lui ai donné un coup de feu.
Explication:
la source
Labyrinthe ,
2726 octetsEntrée et sortie en base 2. La sortie est rembourrée.
Essayez-le en ligne!
la source
UGL , 50 octets
Essayez-le en ligne!
Div-mod à plusieurs reprises par 2, puis
%
échangez et@
roulez pour les mettre dans le bon ordre.Entrée en base dix, sortie en base deux.
la source
vi, 27 octets
Où
<ESC>
représente le caractère d'échappement. Les E / S sont en binaire, la sortie est complétée. 24 octets dans vim:la source
<ESC>
a besoin de backticks autour d'elle. J'éditerais, mais je n'arrive pas à trouver 4 octets de plus à changer ...En fait, 27 octets
Essayez-le en ligne!
Ce programme fait l'entrée et la sortie sous forme de chaîne binaire (la sortie est complétée par zéro à 8 bits).
Explication:
la source
JavaScript, 98 octets
L'entrée est prise en base-2 sous forme de chaîne, la sortie est également en base-2 sous forme de chaîne
la source