Votre tâche: écrire un programme / une fonction qui, lorsqu'il reçoit une chaîne contenant uniquement des caractères ASCII, génère / renvoie la chaîne en sens inverse.
Exemple:
1) Entrée
Hello, World!
2) Nombre de caractères uniques en entrée. (Chaîne d'entrée séparée par des tuyaux ( |
) pour plus de lisibilité)
H|e|l|l|o|,| |W|o|r|l|d|!
1 2 3 4 5 6 7 8 9 10
3) Pour les caractères en double, recherchez la première occurrence de ce caractère et numérotez le caractère en double avec le même numéro que le premier.
H|e|l|l|o|,| |W|o|r|l|d|!
1 2 3 3 4 5 6 7 4 8 3 9 10
4) Inversez la chaîne, mais pas les chiffres.
!|d|l|r|o|W| |,|o|l|l|e|H
1 2 3 3 4 5 6 7 4 8 3 9 10
5) Supprimez les caractères au-dessus des numéros de répétition. (Caractères supprimés représentés par un astérisque.)
!|d|l|*|o|W| |,|*|l|*|e|H
1 2 3 3 4 5 6 7 4 8 3 9 10
6) Remplacez les caractères supprimés par le caractère qui apparaît sur la première occurrence du nombre sur lequel le caractère supprimé est terminé.
!|d|l|l|o|W| |,|o|l|l|e|H
1 2 3 3 4 5 6 7 4 8 3 9 10
7) Sortie
!dlloW ,olleH
Cas de test:
Input -> Output
"Hello, World!" -> "!dlloW ,olleH"
"18464399" -> "99343488"
"Code Golf" -> "floG eloC"
"abcdefgABCDEFG" -> "GFEDCBAgfedcba"
"Mmm, marshmallows" -> "swwllwmhsrwm mms"
"15147" -> "74751"
Réponses:
Pyth , 1 octet
Vérifiez tous les cas de test.
Pyth a de magnifiques fonctionnalités intégrées :-)
Pyth ,
87 octetsVérifiez tous les cas de test.
Comment ça fonctionne
Il s'agit de l'approche non intégrée la plus intéressante.
la source
Python 2 ,
4641 octets-5 octets grâce à Artyer
Essayez-le en ligne!
la source
lambda x:''.join(x[~x.find(n)]for n in x)
au lieu d'inverser puis d'indexerGelée , 5 octets
Essayez-le en ligne!
la source
CJam , 7 octets
Essayez-le en ligne!
Explication
la source
y
travaille comme ça.y
travaille comme ça. : PMATL , 6 octets
Essayez-le en ligne!
la source
05AB1E , 2 octets
Essayez-le en ligne!
Explication:
la source
Alice , 17 octets
Essayez-le en ligne!
Explication
Ceci est juste le modèle habituel pour le code linéaire en mode Ordinal. Si nous déplions cela, le programme réel devient simplement:
L'idée ici est similaire à celle de ma réponse CJam . Puisqu'Alice n'a aucun moyen facile d'indexer dans des chaînes avec des entiers, il est plus facile de répliquer ce comportement avec translittération (
y
dans Alice). Cependant, la sémantique de translittération d'Alice est beaucoup plus générale que celle de CJam, ce qui signifie qu'Alice ne fait pas que négliger les mappages répétés. Par exemple, si nous voulions simplement translittérerMmm, marshmallows
dans le sens inverse, cela représenterait la liste de mappages suivante:Notez que nous avons, par exemple,
m -> w
,m -> o
,m -> a
etm -> a
. CJam rejetterait tout, sauf le premier mappage, mais Alice les parcourrait à la place. Ainsi, le premierm
serait mappé surw
, le second suro
, le cinquième surw
et ainsi de suite. Dans ce cas, cela n'est pas utile, car en général, si nous jouonsy
surAAB
(pour certaines chaînesA
etB
) comme nous l'avons fait dans CJam, nous allons toujours simplement entrerB
dans Alice.Alors, comment calculer un mappage qui fonctionne
y
(c'est-à-dire comment éliminer manuellement les mappages répétés)? Bien sûr, en utilisant une autre translittération. :)La source du mappage que nous voulons doit être le nœud de l'entrée (c'est-à-dire l'entrée dédupliquée). Si nous appliquons le mappage ci-dessus au nœud, alors chaque caractère n'apparaît qu'une seule fois, nous n'utilisons donc que le premier de chacun des mappages répétés. Donc, en translittérant le nœud avec l'entrée et son inverse, nous éliminons simplement les mappages dupliqués. Nous pouvons ensuite utiliser le nœud et ce nouveau résultat comme mappage pour l'entrée d'origine. Je suis sûr que cela avait du sens pour quelqu'un ...
Donc le code:
la source
Pyke , 7 octets
Essayez-le ici!
la source
Perl 5 , 23 + 1 (
-p
) = 24 octetsEssayez-le en ligne!
Merci à l'entrée Alice de @ MartinEnder pour l'idée de translittération
la source
JavaScript ES6 50 octets
3 octets économisés grâce à Justin Mariner
Essaye-le:
la source
R ,
6865 octetsVérifiez les cas de test!
Ports 05AB1E Erik méthode pour 3 octets moins. Ce n'était pas le premier, mais c'était le premier que j'ai vu.
ancienne version:
Vérifiez tous les cas de test - imprime le vecteur avec l'entrée en tant que noms et la sortie entre guillemets ci-dessous.
Une implémentation assez naïve, mais je ne pense pas que cela raccourcisse dans R (et j'ai hâte de me tromper à ce sujet). Il s'agit essentiellement d'un port R de la réponse python de Rod, mais il a été développé indépendamment.
Explication non golfée:
la source
C (gcc) , 98 octets
Essayez-le en ligne!
L'argument doit être une chaîne modifiable; la chaîne est modifiée sur place.
la source
Röda , 27 octets
Essayez-le en ligne!
Cela prend une liste de caractères en entrée et renvoie un flux de caractères.
En utilisant le type de données chaîne (40 octets):
Essayez-le en ligne!
la source
Python ,
191128 octetsEssayez-le en ligne
la source
Java 10,
1009997 octetsPort de la réponse C de @ LeakyNun . Je doute que cela puisse être fait plus court sans faire quelque chose de similaire en Java.
-1 octet grâce à @ceilingcat .
Entrez en tant que
char[]
(tableau de caractères) et modifiez cette entrée au lieu d'en renvoyer une nouvelle pour enregistrer les octets.Essayez-le ici.
la source