Contribution
Chaîne codée non vide composée de caractères ASCII imprimables (dans la plage 32-126), dans laquelle certaines lettres manquantes ont été remplacées par _
.
Sortie
Chaîne décodée de même longueur avec toutes les lettres en minuscule, y compris les lettres manquantes.
Comment?
Edit: Comme mentionné par @Deusovi dans les commentaires, il s'agit d'une variante du chiffrement de Bacon .
- Rassemblez toutes les lettres de la chaîne d'origine et regroupez-les par 5. Les lettres supplémentaires qui ne font pas partie d'un groupe de 5 sont ignorées.
- Convertissez chaque groupe en binaire: minuscule = 0 , majuscule = 1 . Cela conduit à une liste d'entiers.
- Utilisez chaque valeur N dans cette liste pour remplacer chacune
_
dans la chaîne d'origine par la N- ème lettre de l'alphabet (indexé par 0), dans l'ordre d'apparition.
Exemple: prOGraMMIng PuZZleS & cOde ____
prOGr --> 00110 --> 6 --> 7th letter = 'g'
aMMIn --> 01110 --> 14 --> 15th letter = 'o'
gPuZZ --> 01011 --> 11 --> 12th letter = 'l'
leScO --> 00101 --> 5 --> 6th letter = 'f'
En remplaçant les lettres manquantes et en reconvertissant le tout en minuscules, la chaîne d'origine est dévoilée:
programming puzzles & code golf
C'est la sortie attendue.
Clarifications et règles
- Les lettres manquantes sont garanties pour apparaître à la fin de la chaîne. Plus formellement: il n'y aura jamais de lettre après la première
_
dans la chaîne d'entrée. Cependant, il peut exister d'autres caractères ASCII imprimables tels que des espaces et des signes de ponctuation. - Il est garanti que l’entrée ne contient aucune lettre majuscule inutile : toutes les lettres majuscules sont des bits mis à 1 qui sont nécessaires pour décoder les lettres manquantes. Tout le reste est en minuscule.
- La chaîne d'entrée est garantie d'être valide. Surtout:
- Il contiendra toujours suffisamment de groupes complets de 5 lettres pour décoder les traits de soulignement.
- Les entiers codés en binaire sont garantis dans la plage [0-25] .
- Il peut ne pas y
_
en avoir du tout dans la chaîne d'entrée, auquel cas il vous suffit de renvoyer l'entrée. - C'est du code-golf , donc la réponse la plus courte en octets gagne!
Cas de test
Input : hello!
Output: hello!
Input : helLO, worl_!
Output: hello, world!
Input : i aM yoUr faTh__.
Output: i am your father.
Input : prOGraMMIng PuZZleS & cOde ____
Output: programming puzzles & code golf
Input : Can YOu gUesS tHE ENd oF This ____?
Output: can you guess the end of this text?
Input : THe qUICk brown FOx JUMps oVEr the la__ ___.
Output: the quick brown fox jumps over the lazy dog.
Input : RoadS? wHERe we're goinG WE doN't need _____.
Output: roads? where we're going we don't need roads.
Input : thE greatESt Trick thE DeVIl EVer PUllEd wAs CONvInciNg tHe WorLD h_ ____'_ _____.
Output: the greatest trick the devil ever pulled was convincing the world he didn't exist.
Quelques cas de test supplémentaires:
Input : BInar_
Output: binary
Input : 12 MonKey_
Output: 12 monkeys
Input : hyPerbolIZ__
Output: hyperbolized
Input : {[One Last Test ca__]}
Output: {[one last test case]}
_
de chaîne d'entrée est un cas particulier.The input is guaranteed not to contain any useless capital letter
s'il n'y avait pas de caractère de soulignement, il n'y aurait pas non plus de lettre majuscule.[32-126]
. J'ai ajouté un autre cas de test.Réponses:
05AB1E , 18 octets
Code:
Utilise le codage 05AB1E . Essayez-le en ligne!
Explication:
la source
Python 2 , 113 octets
Essayez-le en ligne!
la source
Perl 5
-pF -MList::Util=sum
, 75 octetsEssayez-le en ligne!
Explication:
-pF
lit une ligne d'entrée dans la variable$_
et, divisée en caractères, dans le tableau@F
.@a=grep!/\W|\d/,@F
définit le tableau comme@a
égal aux membres de@F
qui ne satisfont pas l'expression rationnelle\W|\d
.\W
est tout sauf des lettres, des chiffres et_
;\d
est des nombres. Il en\W|\d
va de même pour les lettres et_
, et@a
toutes les lettres et tous les_
caractères. Nous ne finirons jamais par examiner les_
personnages@a
. (Notez que cela ne fonctionne que parce que l'entrée est garantie en ASCII.)map{a gt shift@a&&16/2**$_}0..4
effectue les opérations suivantes pour les opérations de 0 à 4: décale le prochain élément@a
, le raccourcit et évalue s'ila
est supérieur ou inférieur à cet élément (c'est-à-dire si cet élément est en majuscule). Si c'est le cas,&&
n'est pas court-circuité, nous obtenons donc 16 divisé par 2 à la puissance de la valeur d'entrée (0 à 4). Sinon&&
est court-circuité et nous obtenons 0.map
renvoie la liste des cinq nombres àsum
qui les ajoute.a..z
, et c'est ce que nous obtenons(a..z)[…]
.s!_!…!eg
convertit chacun_
à$_
son tour en la lettre appropriée.$_=lc
se convertit$_
en minuscule et l’-p
imprime.la source
J ,
6261 octetsEssayez-le en ligne!
la source
Gelée ,
28 2726 octets-1 merci à Erik l'Outgolfer & Dylnan
Pas un défi très jelly-friendly!
Un lien monadique acceptant et renvoyant des listes de caractères.
Essayez-le en ligne!
Comment?
la source
Retina ,
9190 octetsEssayez-le en ligne! Explication:
Traduisez en minuscules
a
et majusculesA
, en supprimant tout le reste.Diviser le
Aa
s en groupes de 5.Convertissez les valeurs binaires en unaires en considérant
A
1 eta
0. Comme il y avait 5Aa
secondes à l'origine, il en reste 5a
, plus un nombre deA
secondes en fonction de la position souhaitée dans l'alphabet.Incrémenter le dernier en
a
fonction du nombre deA
s suivants .Préposer l'entrée d'origine.
Remplacez
_
les lettres s par la lettre décodée suivante.Supprimez toutes les lettres décodées de rechange.
Tout en minuscule.
Retina 0.8.2 , 117 octets
Essayez-le en ligne! Explication:
Dupliquer l'entrée.
Minuscule la première copie.
Traduire les lettres minuscules
a
en deuxième copie.Traduire les lettres majuscules en
A
. Ceux-ci doivent être dans la deuxième copie car la première copie était déjà en minuscule.Supprimer tout le reste de la deuxième copie.
Divisez la deuxième copie (maintenant juste
Aa
s) en groupes de 5.Décodez les lettres et insérez-les comme avant.
la source
APL (Dyalog Unicode) , SBCS 46 octets
Anonyme lambda, Assume
⎕IO
(Index Origin)0
.Essayez-le en ligne!
{
...⋄
...}
fonction à deux déclaration;⍵
est l'argument,⋄
sépare les déclarations⊢
argument (fonction non-op)'_'=
où égal à un trait de soulignement (c.-à-d. une fonction de mappage booléen)_←
affecte cette fonction à_
A[
...]@_⍵
mettre les caractères suivants deA
à des positions de underscores dans l'argument de⎕A
la majuscule A lphabetA←
assignons àA
819⌶
ce minuscule ( 819 ≈ gRANDE , sans aucun moyen d'argument gauche pas grand, par exemple en minuscules)A,
précédez l'alphabet en majuscules; cela nous donne toutes les lettres⍵∩
intersection de l'argument et cela; juste les lettres de l'argumentA∊⍨
qui sont de l'alphabet majuscule; majuscules des bits(
...)5⍴
r Eshape que pour le nombre suivant de lignes et cinq colonnes:_⍵
le masque de soulignement dans l'argument+/
somme; nombre de traits de soulignement⍉
transposer (pour traiter chaque ligne comme un nombre plutôt que comme une position de bit)2⊥
évalue en819⌶
minuscule la base 2la source
Scala , 189 octets
Essayez-le en ligne!
Explication:
la source
JavaScript (Node.js) ,
125124 octetsEssayez-le en ligne!
la source
Gelée , 26 octets
Essayez-le en ligne!
Approche différente de celle de Jonathan Allan. EDIT: Donc, apparemment, j’ai pensé à la même réduction d’octets que Jonathan Allan, il n’ya donc pas de mal à mentionner son nom à nouveau.
la source
CJam , 43 octets
Essayez-le en ligne!
la source
Propre ,
180... 150 octetsEssayez-le en ligne!
Définit la fonction
$ :: [Char] -> [Char]
avec@ :: [Char] [Char] -> [Char]
comme aide pour remplacer les caractères de soulignement et? :: [Char] -> [Char]
comme aide pour générer les caractères de remplacement.la source
i<-:""
pièce? Les caractères sont-ils implicitement convertis en nombres lors de leur addition ou de leur addition?JavaScript (Node.js) , 100 octets
Essayez-le en ligne!
Grâce à @Arnauld, enregistre 2 octets.
la source
/[a-z]/gi
maintenant.R ,
153135113 octetsEssayez-le en ligne!
Emet quelques avertissements avec l'utilisation de
matrix
mais cela ne devrait pas affecter le résultat. Également émet des avertissements, car l'[<-
affectation supprimera les objets assignés superflus par défaut.40 octets de moins (!) Grâce aux améliorations de JayCe
la source
,length(L)%/%5
[<-
les éléments qui dépasseraient la longueur des index risquent de disparaître ...intToUtf8
C (gcc) ,
111109101100 octetsEdit: Ajout de la minuscule par le commentaire de @ FrownyFrog; merci à Lynn, Christoph et user5329483 pour leurs suggestions!
Essayez-le en ligne!
la source
i+=i+(*s<97)
.j
en insérant un marqueuri
et en réécrivant le second pour asfor(i=1;i<32;s++)
. Et compenser le supplément de 32 à l'extérieur pour. En tant que newbee ici, je compte sept octets de réserve.for(i=3;i<96;s++)
ramène le 65 à un nombre à un chiffre, aka1
.Go,
219217192210209156 octetsSauvegardé 25 octets grâce à @Lynn! 53 octets sauvés grâce à @ovs!
Devait perdre 18 octets à cause d'un bogue avec des chaînes sans caractère de soulignement :(
Essayez-le en ligne!
la source
Stax , 22 octets
Exécuter et déboguer
L’approche générale consiste à remplacer
"_"
par une expression régulière l’ utilisation d’une fonction de rappel qui coupe les lettres des entrées pour calculer chaque caractère de remplacement.Exécuter celui-ci
la source
Rouge , 247 octets
Essayez-le en ligne!
Plus lisible:
la source
Java 10, 186 octets
Essayez-le en ligne.
Explication:
la source
Ruby ,
107106103 octetsEssayez-le en ligne!
la source
Japt, 25 octets
L'essayer
Explication
la source
Pyth, 36 octets
Essayez ici
Explication
la source
Python 3.5 , 296 octets
Essayez-le en ligne
Premier code golf :)
(Je sais que ce n'est pas petit en octets, je m'amusais juste à faire un code d'une ligne)
Voici l'explication:
Entrée utilisateur
Trouve l'index du premier _ de la chaîne et le stocke
efface la chaîne de tous les caractères non alpha
Divise la chaîne alpha en un tableau avec chaque élément composé de 5 caractères
Ex. ['THeqU', 'ICkbr', 'ownFO', 'xJUMp', 'soVEr', 'thela']
Puis convertit les caractères minuscules en 0 et les caractères majuscules en 1
Ex. ['11001', '11000', '00011', '01110', '00110', '00000']
et convertit la chaîne binaire en entier, ajoute 65 et la convertit en caractère
Ex. ['z', 'y', 'd', 'o', 'g', 'a']
trouve tous les caractères après le premier _ et les place dans le tableau z à leurs emplacements respectifs (définis ci-dessus)
Ex. ['z', 'y', '', 'd', 'o', 'g', '.', 'a']
diviser notre chaîne en une liste de caractères
coupez notre chaîne du premier _ à la fin de la liste et remplacez-la par le tableau z. Je devais également couper le tableau z à la longueur de la chaîne scindée du premier _ à la fin car j'avais un caractère supplémentaire dans l'exemple de chien paresseux (le "a" à la fin des exemples ci-dessus)
* imprimer la réponse *
la source
o.islower()
etelse
, et je pense'1'
etfor
. En outre, vous pouvez changerif d!="_"
enif"_"!=d
, mais le commentaire ci-dessus le fait déjà.Haskell , 165 octets
Essayez-le en ligne! Exemple d'utilisation:
g"" "BInar_"
rendements"binary"
.la source
PowerShell , 121 octets
Essayez-le en ligne!
Moins joué au golf:
la source
Perl 5
-p
, 78 octetsEssayez-le en ligne!
la source