Inverser et inverser une chaîne
Défi
Dans ce défi. Vous allez écrire un programme qui affichera ou renverra l'entrée, inversée et inversée.
Tout d'abord, chaque caractère doit être converti en son code de caractère. Ensuite, cela devrait être converti en base-2. Ensuite, cette chaîne doit être inversée. Après, la chaîne doit être inversée (1 -> 0 et 0 -> 1). Enfin, cela devrait être reconverti en base 2, puis reconverti en personnage. Si un personnage s'avère être non imprimable, vous pouvez éventuellement le sortir mais il n'est pas nécessaire de le supprimer.
H -> 72 -> 1001000 -> 0001001 -> 1110110 -> 118 -> v
e -> 101 -> 1100101 -> 1010011 -> 0101100 -> 44 -> ,
l -> 108 -> 1101100 -> 0011011 -> 1100100 -> 100 -> d
l -> 108 -> 1101100 -> 0011011 -> 1100100 -> 100 -> d
o -> 111 -> 1101111 -> 1111011 -> 0000100 -> 4 -> (unprintable)
, -> 44 -> 101100 -> 001101 -> 110010 -> 50 -> 2
-> 32 -> 100000 -> 000001 -> 111110 -> 62 -> >
W -> 87 -> 1010111 -> 1110101 -> 0001010 -> 10 -> (newline)
o -> 111 -> 1101111 -> 1111011 -> 0000100 -> 4 -> (unprintable)
r -> 114 -> 1110010 -> 0100111 -> 1011000 -> 88 -> X
l -> 108 -> 1101100 -> 0011011 -> 1100100 -> 100 -> d
d -> 100 -> 1100100 -> 0010011 -> 1101100 -> 108 -> l
! -> 33 -> 100001 -> 100001 -> 011110 -> 30 -> (unprintable)
Notation
Le code le plus court en octets gagne.
-15% Bonus: si votre programme supprime les non imprimables de la sortie. Ce doit être au moins tous les caractères inférieurs à 32 sauf les sauts de ligne (caractère 10)
GBktnkZs
0010000
, il devrait être traité comme10000
si l'inverse serait00001
Réponses:
CJam, 14
Essayez-le en ligne
Explication:
Assez simple:
Version "imprimable", 20 - 15% = 17
la source
Pyth, 14 octets
Essayez-le en ligne.
Comment ça marche
la source
smCi!MvM_.Bd2z
smCi.r_.Bd`T2z
smCiqR\0_.Bd2z
Perl,
5751 caractères(Code de 50 caractères + option de ligne de commande de 1 caractère.)
Exemple d'exécution:
la source
-p
s/./$_=unpack b8,$&;s|0+$||;"chr 0b".y|10|01|r/gee
.unpack b8,$&
est plus court quesprintf'%b',ord$&
, et décode en outre dans l'ordre inverse. Malheureusement, il produit également des 0 de fin, qui doivent être supprimés.unpack
est encore un terrain inexploré pour moi.-p
s/./"chr 0b".unpack(b8,~$&)=~s|1+$||r/gee
. Inversez le personnage, pas besoin de translittérer;)JavaScript (
ES6ES7),119114108 octetsCela s'est avéré beaucoup plus long que prévu :(
Merci à @vihan pour 5 octets enregistrés! Merci à @ETHProductions pour encore 6 octets enregistrés!
Pour tester: exécutez l'extrait de code ci-dessous, entrez une entrée comme
"Hello, World!"
et cliquez sur Tester!la source
parseInt
avec+('0b'+<code>)
comme décrit ici et un autre en utilisant auw^1
lieu de+!+w
x=>String.fromCharCode(...[for(y of x)if((c=+('0b'+[...y.charCodeAt().toString(2)].reverse().map(z=>z^1).join``)) >31||c==10)c])
(127 - 15% = 107,95). il ne gère que10 == \n
, non13 == \r
. @ Vɪʜᴀɴ quelle est votre opinion?Unexpected token '>'
lorsque j'essaie d'exécuter l'extrait de code.JavaScript (ES7), 126 octets - 15% = 107,1
Je jouais avec cette réponse pour voir si le bonus en valait la peine. Apparemment, ça l'est. La suite de tests a été volée à partir de la même réponse, mais j'ai ajouté ma propre touche: prise en charge complète du bonus de 15%! :)
la source
getScore()
fonction qui vérifie laHello, World!
conformité du cas de test (il contient commodément à la fois une nouvelle ligne et des caractères non imprimables), et renvoie le score multiplié par 0,85 ou 1, selon le résultat. Et oui, l'accès à l'extrait de code non réduit serait formidable. :)PHP -
187182163 octetsPassez la valeur comme
GET["s"]
.array_map renvoie un tableau avec tous les éléments du deuxième paramètre (un tableau) après avoir appliqué la fonction de rappel (premier paramètre) à chacun d'eux.
Je ne sais pas si je devrais retirer les 15%, car
echo
ne génère pas de caractères non imprimables, mais je ne les ai pas supprimés.Je suis content d'avoir terminé, car c'est le premier défi auquel je participe.
la source
$m='array_map';echo join($m("chr",$m("bindec",$m(function($v){return strtr($v,[1,0]);},$m("strrev",$m("decbin",$m("ord",str_split($s))))))));
.STDIN
. Soit dit en passant, vous n'avez pas besoin d'utiliser des guillemets autour de la chaîne ("chr"
,"bindec"
...) puisque nous ne se soucient pas des avertissements. Cela devrait vous faire économiser 12 octets.str_split($s)
parstr_split(fgets(STDIN))
exemple.K5, 28 octets
C'est un peu gênant car l'
decode
opérateur de K5 effectue une conversion de base à largeur fixe, donc pour me conformer à l'énoncé du problème, je dois couper les zéros en tête. Le lambda{x@&|\x}
accomplit cette étape.Frottis:
Recueillir:
Sélectionner:
L'ensemble du programme en action:
Je crois que le comportement naturel de oK avec les non imprimables le rend éligible à -15%, ce qui lui donne un score de 28 * 0,85 = 23,8 .
la source
Julia, 77 octets - 15% = 65,45
Cela crée un functon sans nom qui accepte une chaîne et renvoie une chaîne. Les caractères non imprimables sont supprimés, ce qui le qualifie pour le bonus.
Non golfé:
la source
filter(isprint,)
et seulement 11,55 octets enregistrés grâce au bonus.s->map(c->Char(parse(Int,join(1-digits(Int(c),2)),2)),s)
(pour 56 octets)filter(isprint,)
deux le qualifie pour le bonus et le rend conforme aux règles.\x04
la même manière), alorsprint()
coûte sept, ce qui porterait 56 à 63.PowerShell,
199 175(171-15%) = 145,35Utilise
une quantité regrettable decertains appels / intégrés .NET, ce qui gonfleconsidérablementle code.Expliqué:
Prend l'entrée
param(..)
et la transforme en unchar[]
afin que nous puissions y travailler de manière appropriée.Le bit suivant
(..)-join''
recueille et joint notre sortie ensemble.À l'intérieur de ces parens, nous itérons avec
$a|%{..}
une boucle foreach.À l'intérieur de la boucle:
$b
, qui est notre lettre d'entrée castée en int+$_
et[convert]
ed en base2
$c
, est délicat, alors commençons à l'intérieur et travaillons notre chemin$b
avec(-join$b[$b.length..0])
"$(..)"
[convert]
estToInt32
de la base2
, qui est finalement stockée que dans$c
$c
est supérieur31
ou égal à10
, nous le convertissons en caractère et cette valeur est laissée sur le pipeline pour la sortie (ce qui est collecté et-join''
édité ensemble, ci-dessus), sinon rien ne reste sur cette itération particulièrePhew.
Se qualifie également pour le bonus de -15%.
Exemple
la source
Fonction C, 63
la source
𝔼𝕊𝕄𝕚𝕟, 39 caractères / 73 octets
Try it here (Firefox only).
la source
Minkolang 0,11 , 26 octets
Essayez-le ici.
Explication
la source
MATLAB, 60 octets
Fondamentalement, chaque caractère à son tour est converti en une chaîne binaire (sans zéros non significatifs). Le tableau est inversé et est soustrait de 97 ('0' + '1') qui inverse le caractère. Ceci est reconverti en décimal. Une fois que tous les caractères ont été traités, l'ensemble du tableau est ensuite reconverti en caractères avant d'être renvoyé.
la source
Python 3,
9591Mise en œuvre simple.
Non golfé:
la source
Ruby, 62 caractères
Exécutez Samply:
la source
C #, 156 octets - 15% = 132,6
Indentation et nouvelles lignes pour plus de clarté:
la source
Javascript 123 octets
la source
Rétine ,
1107629 octets - 15% = 534,65 (non concurrent)Utilise des fonctionnalités ajoutées après la date du défi. (Comportement implicite de
$*
,¶
, tri)La rétine n'a pas de fonction intégrée pour convertir un personnage en ordinal ASCII ou en arrière ... alors voyez sa longueur brillante. Cela gère ASCII imprimable et supprime les non imprimables ainsi que les nouvelles lignes. Le nombre d'octets suppose un codage ISO 8859-1.
Le code contient des caractères non imprimables.
Essayez-le en ligne
Si vous consultez le tutoriel Retina pour l'arithmétique unaire , vous reconnaîtrez plusieurs morceaux différents de mon code comme venant de là.
Merci à Martin d'avoir joué à des centaines d'octets
la source
Java, 205 - 15% = 174,2
Non golfé:
Je pense que cette solution est un peu intéressante dans son utilisation des
Integer
méthodesInteger.reverse
etInteger.numberOfLeadingZeros
qui font ce à quoi elles ressemblent, et le décalage de l'-1 >>> s
endroit oùs
est le nombre de zéros en tête, pour obtenir le masque pour masquer les bits élevés que nous ne voulons pas. Je regrette juste que le nom de cette dernière méthode soit tellement verbeux, mais c'est ce que j'obtiens pour jouer au golf à Java.Sortie:
la source
Japt, 25 octets
Vous voulez créer un programme JavaScript golfy, mais la méthode la plus courte implique de nombreux noms de fonction longs? C'est pour ça que Japt était fait. :)
Essayez-le dans l' interprète en ligne !
Comment ça marche
En utilisant la version actuelle de Japt (à partir de la v1.4.4), le nombre d'octets peut être réduit à 14:
Testez-le en ligne!
la source
Haskell, 167 octets
Malheureusement, Haskell devient assez verbeux lorsqu'il a besoin de lire / imprimer dans une autre base…
la source
Perl 6, 66 octets
Tout faire en supprimant les caractères de contrôle non imprimables me fait (83 + 1) -15% = 71,4
Si je supprime le code qui supprime les caractères de contrôle, j'économise un peu 65 + 1 = 66
(J'ai utilisé
»
au lieu de>>
pour plus de clarté)la source
Gelée , 6 octets (non concurrent)
Essayez-le en ligne!
Explication:
la source
Raquette 250 Bonus de 15% = 212 octets
Non golfé:
Essai:
Sortie:
la source
PHP, 80 octets
prend l'entrée de STDIN; courir avec
-R
.version bonus,
97110octets -> score 93,5imprime ASCII 10 et 32 à 126 (nouvelle ligne et imprimables)
panne, TiO et si possible un peu de golf suivra; Je suis fatigué en ce moment.
la source