Ecrire un programme qui passe par une chaîne de caractères non-blancs (vous pouvez supposer qu'ils sont des chiffres 0
à 9
, mais rien dans la façon dont ils doivent être traités en dépend) et ajoute des espaces selon les règles suivantes.
- Soit le jeton actuel la chaîne vide et les jetons précédemment émis un ensemble vide.
- Parcourez les caractères de la chaîne. Pour chaque personnage, ajoutez d'abord le personnage au jeton actuel. Ensuite, si le jeton actuel n'est pas déjà dans l'ensemble des jetons précédemment émis, ajoutez le jeton actuel à cet ensemble et laissez le nouveau jeton actuel être la chaîne vide.
- Si lorsque vous atteignez la fin de la chaîne, le jeton actuel est vide, sortez les jetons précédemment émis par ordre d'émission, séparés par un caractère espace. Sinon, affichez la chaîne originale textuellement.
Contribution
L'entrée du STDIN doit être une séquence de chiffres.
Sortie
Le programme doit imprimer le résultat comme spécifié à l'étape 3.
Échantillons
Exemples d'entrées
2015
10101010
4815162342
101010101010
3455121372425
123456789101112131415
314159265358979323846264338327950288419716939937
Exemples de sorties
2 0 1 5
10101010
4 8 1 5 16 2 3 42
1 0 10 101 01 010
3 4 5 51 2 1 37 24 25
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
3 1 4 15 9 2 6 5 35 8 97 93 23 84 62 64 33 83 27 95 0 28 841 971 69 39 937
C'est du golf de code, donc les règles CG standard s'appliquent. Le programme le plus court en octets gagne.
(Veuillez demander des éclaircissements dans les commentaires. Je ne suis pas encore au courant. Merci!)
4815162342
Je vois ce que tu as fait là-bas, brotha .1 0 10
, l'itération suivante trouvera1
(déjà utilisé), puis en avancera une pour trouver10
(déjà utilisée), puis avancera une pour trouver101
, ce qui est nouveau et serait «ajouté». Il ajouterait alors un espace et vous obtiendriez un nouveau0
, qui a déjà été utilisé, mais est ici à la fin de la chaîne. Par conséquent, la sortie serait1 0 10 101 0
, qui n'est pas valide (0
est répétée), et le script doit alors simplement sortir la chaîne d'entrée. Il ne pouvait faire que1010
s'il101
avait déjà été utilisé.If a unique number cannot be formed at the end of the string, then the input should be printed verbatim
10101010 ne peut pas être divisé, il est donc imprimé tel quel.1
, ce qui serait une répétition. Au lieu de cela, vous vous déplacez à droite dans l'espace 5, puis vous vous déplacez à nouveau à droite à l'étape 4, et vous entrez à nouveau dans l'étape 5 et créez101
.Réponses:
Pyth, 22 octets
L'espace de tête est important.
la source
Rétine ,
6861 octets<empty>
est une ligne vide. Notez l'espace de fin sur la ligne 3. Vous pouvez exécuter le code ci-dessus à partir d'un seul fichier avec l'-s
indicateur.Explication
Cette première étape implémente les règles 1 à 6. Il s'agit d'une substitution d'expression régulière qui est appliquée à plusieurs reprises jusqu'à ce que la chaîne cesse de changer (c'est à cela que
+
sert). À chaque étape, nous ajoutons un seul espace dans la chaîne de gauche à droite (en suivant les règles du défi). L'expression régulière correspond à la chaîne de chiffres la plus courte qui n'apparaît pas dans la partie déjà traitée de la chaîne. Nous nous assurons que nous regardons un préfixe de la chaîne restante avec le mot limite\b
et vérifions que nous pouvons atteindre la fin de la chaîne sans passer d'espaces avec(\w+)$
. Ce dernier garantit également que nous n'effectuons qu'un seul remplacement par étape.Cela correspond à n'importe quel espace (qui se trouve à la fin de l'expression régulière), à condition que le dernier segment de la chaîne soit le même que tout autre segment de la chaîne, et les remplace par la chaîne vide. Autrement dit, nous annulons la première étape si elle aboutissait à un segment final non valide, mettant en œuvre la règle 7.
la source
Pyth,
2423 octetsEssayez-le ici .
Merci à @FryAmTheEggman d'avoir enregistré un octet: o)
la source
Python 3, 92 octets
Fondamentalement, une version très golfée de la solution de @ Willem.
la source
[" ".join(o),i][n>""]
bool(n)
mais je n'y pensais pasn>""
.Python 3,
10099 octetsla source
else "
.Brachylog , 91 octets
Cela m'a fait réaliser qu'il y a beaucoup de choses sur la syntaxe que je dois changer ...
Explication
la source
CJam, 26 octets
Testez-le ici.
Explication
la source
JavaScript (ES6), 109
Mon format de sortie n'est pas exactement le même que celui des échantillons de sortie dans la quête (il y a un espace de tête). Je ne vois pas cela comme un défaut, car le format de sortie n'est pas spécifié (juste Le programme devrait imprimer le numéro après le numéro ... )
Testez l'exécution de l'extrait ci-dessous dans un navigateur compatible EcmaScript 6. Développé avec Firefox, testé et fonctionnant sur le dernier Chrome.
la source
GNU sed,
83777371 octets(Marquez un extra parce que nous avons besoin d'un
-r
drapeau)La boucle interne teste une séquence répétée et ajoute des caractères selon les besoins jusqu'à ce qu'un numéro unique apparaisse après le séparateur
_
. La boucle extérieure se déplace_
.Version étendue et annotée:
la source
t
en un./((\b[^ ]+).*\b\2)_/{
Peut également être réécrit comme/(\b[^ ]+).*\b\1_/{
, aucune raison pour 2 groupes de capture.\1
!Ruby, 57 + 1 = 58 octets
Utilise l'indicateur de ligne de commande
-p
(oupl
si votre entrée a une nouvelle ligne de fin). Exploite plusieurs traits des dictionnaires Ruby Hash: vous pouvez muter en toute sécurité la chaîne que vous avez utilisée pour définir une clé sans que cela change la clé (ce qui ne fonctionne pas pour les autres types mutables),.keys
retourne les clés dans l'ordre dans lequel elles ont été insérées et l'[]||=
opérateur fournit un moyen concis de ramifier si une clé donnée est déjà là.la source
Haskell, 105 octets
f
le fait.la source
PHP - 148 octets
Défi cool, beaucoup de plaisir!
la source