Das Ziel einer Rosetta Stone Challenge ist es, Lösungen in möglichst vielen Sprachen zu schreiben. Zeigen Sie Ihre Programmier-Mehrsprachigkeit!
Die Herausforderung
Wir haben Lauflängencodierung durchgeführt wird Vordergrund , sondern nur läuft von einem einzelnen Zeichen betrachtet. Natürlich können wir manchmal sogar noch größere Einsparungen erzielen, wenn wir Läufe mit mehreren Zeichen berücksichtigen.
Nehmen Sie aaaxyzxyzxyzdddd
zum Beispiel. Dies kann komprimiert werden 3a3{xyz}4d
. Ihre Aufgabe ist es, ein Funktionsprogramm zu schreiben, das bei einer Groß- und Kleinschreibung von Buchstaben und Leerzeichen mithilfe der Lauflängencodierung für Läufe mit mehreren Zeichen optimal komprimiert wird .
Sie können Eingaben über das Funktionsargument STDIN oder ARGV vornehmen und das Ergebnis zurückgeben oder an STDOUT drucken.
Läufe dürfen nicht verschachtelt sein, aaabbbaaabbb
müssen es 3a3b3a3b
auch nicht sein 2{3a3b}
. Dh die Zeichenfolge sollte in einem einzigen Durchgang codiert (oder decodiert) werden.
Folgen der optimalen Komprimierung
Einige Beispiele, bei denen eine naive Anwendung der Lauflängencodierung zu suboptimalen Ergebnissen führen kann:
abab
darf nicht "komprimiert" werden2{ab}
aaaabcdeabcde
darf nicht auf4abcdeabcde
sondern komprimiert3a2{abcde}
werden.
Wenn es zwei optimale Versionen gibt (z. B. aa
und 2a
oder abcabc
und 2{abc}
), ist jedes Ergebnis in Ordnung.
Beispiele
Input Output
aa aa -or- 2a
aaaaaAAAAA 5a5A
ababa ababa
abababa a3{ba} -or- 3{ab}a
foo foo bar 2{foo }bar
aaaabcdeabcde 3a2{abcde}
xYzxYz xYzxYz -or- 2{xYz}
abcabcdefcdef abcab2{cdef}
pppqqqpppqqq 3p3q3p3q
pppqqqpppqqqpppqqq 3{pppqqq}
Wertung
Jede Sprache ist ein separater Wettbewerb darüber, wer den kürzesten Beitrag schreiben kann. Der Gesamtsieger wäre jedoch die Person, die die meisten dieser Teilwettbewerbe gewinnt. Dies bedeutet, dass eine Person, die in vielen ungewöhnlichen Sprachen antwortet, einen Vorteil erzielen kann. Code Golf ist meistens ein Tiebreaker, wenn es mehr als eine Lösung in einer Sprache gibt: Die Person mit dem kürzesten Programm erhält eine Gutschrift für diese Sprache.
Wenn es ein Unentschieden gibt, ist der Gewinner die Person mit den meisten Einsendungen auf dem zweiten Platz (und so weiter).
Regeln, Einschränkungen und Hinweise
Bitte bewahren Sie alle Ihre unterschiedlichen Beiträge in einer einzigen Antwort auf.
Auch keine Shenanigans mit grundsätzlich gleicher Antwort in leicht unterschiedlichen Sprachdialekten. Ich werde beurteilen, welche Beiträge unterschiedlich genug sind.
Aktuelle Rangliste
Dieser Abschnitt wird regelmäßig aktualisiert, um die Anzahl der Sprachen und die jeweils führenden Personen anzuzeigen.
- C # (265) - edc65
- JavaScript (206) - edc65
- Python (214) - Will
- VB.NET (346) - edc65
Aktuelle Benutzerrankings
- edc65 (3)
- Will (1)
quelle
Python 214
(Einzug der zweiten Ebene ist Tabulator)
Da dies Code-Golf ist , ist dies der naive rekursive Ansatz ohne vorzeitigen Ausstieg, daher ist er wirklich sehr, sehr langsam.
quelle