Korrigieren Sie die Meeesesessessesseesseessedessed upp teeexextext


38

Dies ist inspiriert von Monday Mini-Golf # 6: Meeesesessess upp teeexexextext

Hintergrund

ETH-Produktionen haben Schwierigkeiten, Text auf seiner gewohnten Webseite einzugeben . Wann immer er Ziffern oder Buchstaben verwendet, wird der Text meeesessessesseesseessedess up. Ihre Aufgabe ist es, ihm beim Tippen zu helfen, damit das normale Verhalten erreicht wird.

Die Transformation

Die Transformation wirkt sich auf Läufe von alphanumerischen ( [0-9A-Za-z]) Zeichen aus, die durch nicht- alphanumerische Zeichen begrenzt sind. Im folgenden Beispiel wird die erste Zeile in die zweite Zeile umgewandelt (die anderen Zeilen zeigen die Aufteilung der Umwandlung).

An12num:
Annn1n12n12nn12nn12nun12nun12numn12num
A
 nn
   n1
     n12
        n12nn12n
                n12nun12nu
                          n12numn12num

Insbesondere wird jedes alphanumerische Zeichen nach dem ersten in einem Lauf bis auf das erste Zeichen in den gesamten Lauf umgewandelt . Wenn das Zeichen ein Buchstabe ist (im Gegensatz zu einer Ziffer), wird das Zeichen außerdem in den doppelten Durchlauf umgewandelt.

Glücklicherweise löscht die Rücktaste das letzte Zeichen und setzt auch den Beginn des Laufs zurück.

Aufgabe

Diesmal besteht Ihre Aufgabe nicht darin, die Transformation durchzuführen. Stattdessen müssen Sie bei einer gegebenen Eingabezeichenfolge einen codierten Text zurückgeben, der bei der Transformation zur Eingabe führt. Die Ausgabe muss so kurz wie möglich sein, wobei \<char>sie als einzelnes Zeichen gezählt wird.

Der Text ist wie folgt kodiert:

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

Sie können ein Programm oder eine Funktion schreiben, indem Sie eine Eingabe über STDIN (oder die nächstgelegene Alternative), ein Befehlszeilenargument oder ein Funktionsargument vornehmen und das Ergebnis über STDOUT (oder die nächstgelegene Alternative), einen Funktionsrückgabewert oder einen Funktionsparameter (out) ausgeben.

Testfälle

Jeder Testfall besteht aus zwei Zeilen, von denen die erste die Eingabe und die zweite die Ausgabe ist.

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

6
Es ist gut definiert, aber warum gibt es keine Antwort?
Akangka

1
Irgendwie habe ich das verpasst; schöner Ableger! Vielleicht versuche ich später eine Antwort zu schreiben.
ETHproductions

Dies erinnert mich an die Zeit, als ein Freund von mir
TRGWII

1
Ich denke, Ihr letzter Testfall muss behoben werden. Sie fügen den ersten Buchstaben ( 1jedes Mal) in die Läufe ein.
Leif Willerts

Ich verstehe ehrlich gesagt nicht, was ich tun soll ... Entschuldigung. Könnten Sie einige Ein- und Ausgänge hinzufügen und einige Beispiele mit der Erklärung hinzufügen? Es tut uns leid.
Yassin Hajaj

Antworten:


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<

Probieren Sie es online aus

Erläuterung:

Fast vergessen, dies zu schreiben: p

Das Problem wird in mehreren Schritten gelöst:

  • Der Text ist in Reihen von alphanumerischen Zeichen (nennen wir sie Wörter) und Reihen von nicht alphanumerischen Zeichen (nicht Wörter) unterteilt.
  • Nichtwörter werden so gedruckt, wie sie sind, und Wörter werden korrigiert
  • Das Reparieren eines Wortes erfolgt rekursiv (mit Merken): Teilen Sie das Wort auf jede mögliche Weise in 2 Teile auf (einschließlich des leeren zweiten Teils), versuchen Sie, den ersten Teil zu entmessen (siehe unten), reparieren Sie den zweiten Teil und verbinden Sie die Ergebnisse mit einem Leerzeichen -Rücktaste bei Bedarf; nimm die kürzeste Teillösung
  • Ein Chunk zu entmessen bedeutet, eine minimale Folge von alphanumerischen Zeichen zu finden, möglicherweise gefolgt von einigen Backspaces (aber ohne Backspaces in der Mitte), die, wenn sie durcheinander sind, zu dem angegebenen Chunk führen. Dies geschieht mit einem einfachen, gierigen Algorithmus, der von links nach rechts geht, die nicht gemessene Zeichenfolge und ihre gemessene Version parallel aufbaut und bei jedem Schritt das nächste benötigte Zeichen ermittelt. Einige Stücke können nicht unbemerkt bleiben

1
Heilige Kuh ... das ist eine Scheiße für ein CJam-Programm! Gute Arbeit.
ETHproductions
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.