Fixer le Meeesesessessesseesseessessed uppp teeexexextext

38

Ceci est inspiré par Monday Mini-Golf # 6: Meeesesess uppeeexexextext

Contexte

Les productions ETH ont du mal à saisir du texte sur sa page Web habituelle. Chaque fois qu'il utilise des chiffres ou des lettres, le texte sera alors mesuré. Votre tâche consiste à l’aider à taper de manière à obtenir le comportement normal.

La transformation

La transformation affecte les exécutions de caractères alphanumériques ( [0-9A-Za-z]) délimités par des caractères non alphanumériques. Dans l'exemple suivant, la première ligne serait transformée en seconde (les autres lignes montrent le détail de la transformation)

An12num:
Annn1n12n12nn12nn12nun12nun12numn12num
A
 nn
   n1
     n12
        n12nn12n
                n12nun12nu
                          n12numn12num

En particulier, tout caractère alphanumérique après le premier d'une série sera transformé en une série complète, à l'exception du premier caractère . De plus, si le caractère est une lettre (par opposition à un chiffre), le caractère sera transformé en une double course.

Heureusement, le retour arrière effacera le dernier caractère et réinitialisera également le début de la course.

Tâche

Cette fois, votre tâche n'est pas d'effectuer la transformation. Au lieu de cela, étant donné une chaîne d'entrée, vous devez renvoyer un texte codé qui, s'il est transformé, donnera lieu à l'entrée. La sortie doit être aussi courte que possible, \<char>comptée comme un seul caractère.

Le texte est codé comme suit:

\                   -> \\
backspace character -> \b
linefeed            -> \n

Vous pouvez écrire un programme ou une fonction en prenant l’entrée via STDIN (ou l’alternative la plus proche), un argument de ligne de commande ou une argumentation de fonction et en générant le résultat via STDOUT (ou l’alternative la plus proche), une valeur de retour de fonction ou un paramètre de fonction (out).

Cas de test

Chaque cas de test est constitué de deux lignes, la première étant entrée, la deuxième sortie.

Heeeeeelp me. It shouldn't be messed up.
Hee \blp\b me\b. It\b sh\bou\bld\bn't be\b me\bss\bed\b up\b.

alert("Hello, world!");
al\ber\bt("He\bll\bo, wo\brl\bd!");

1223234234523456
123456
Akangka
la source
6
C'est bien défini, mais pourquoi il n'y a pas de réponse?
Akangka
1
D'une certaine manière j'ai manqué ceci belle spin-off! J'essaierai peut-être d'écrire une réponse plus tard.
ETHproductions
Cela me rappelle la fois où un de mes amis a envoyé un texte via UDP
TRGWII
1
Je pense que votre cas de test final a besoin d'une solution. Vous incluez le premier caractère (à 1chaque fois) dans les analyses.
Leif Willerts
Honnêtement, je ne comprends pas ce que je suis censé faire ... Désolé. Pourriez-vous ajouter des entrées et des sorties et ajouter des exemples avec l'explication? Désolé.
Yassin Hajaj

Réponses:

10

CJam, 207

{_,1>{:E1<_0{:I2$,+E=:C+:R1>C'9>)*+:P,E,<{EP#{L0}{PRI)1}?}{PE#L{R8cP,E,-*+}?0}?}g}&}:U;LqS+'a+{_'[,_el^A,s+&,V={+}{s\V!:V{L{:BU_aL?B,,1>Bf{_2$<U_{_W=8>S8c+*+\@>j+}{?;}?}+{,}$0=}j}|\}?}%s'\8cN++'\"\bn"f+er-2<

Essayez-le en ligne

Explication:

J'ai presque oublié d'écrire ceci: p

Le problème est résolu en plusieurs étapes:

  • le texte est séparé en une série de caractères alphanumériques (appelons-les des mots) et une série de caractères non alphanumériques (non-mots)
  • les non-mots sont imprimés tels quels et les mots sont fixes
  • la correction d'un mot se fait de manière récursive (avec mémoization): divisez le mot en 2 morceaux de toutes les manières possibles (y compris le 2e morceau vide), essayez d'annuler le premier morceau (voir ci-dessous), corrigez le 2e morceau et joignez les résultats avec un espace. -backspace si nécessaire; prendre la solution la plus courte
  • annuler un bloc signifie rechercher une chaîne minimale de caractères alphanumériques éventuellement suivie de quelques espaces arrière (mais sans espace arrière au milieu) qui, lorsqu'ils sont mélangés, génèrent le bloc donné; cela se fait avec un simple algorithme glouton, allant de gauche à droite, construisant en parallèle la chaîne non vouée et sa version foirée, et déterminant le prochain caractère nécessaire à chaque étape; certains morceaux ne peuvent pas être ignorés
Aditsu
la source
1
Sainte vache ... c'est un sacré programme CJam! Bon travail.
ETHproductions