Ihre Aufgabe: Schreiben Sie ein Programm / eine Funktion, die / die eine Zeichenfolge mit nur ASCII-Zeichen in umgekehrter Reihenfolge ausgibt / zurückgibt.
Beispiel:
1) Eingabe
Hello, World!
2) Nummerieren Sie eindeutige Zeichen in der Eingabe. (Eingabezeichenfolge durch Pipes ( |
) zur besseren Lesbarkeit getrennt)
H|e|l|l|o|,| |W|o|r|l|d|!
1 2 3 4 5 6 7 8 9 10
3) Suchen Sie bei doppelten Zeichen das erste Vorkommen dieses Zeichens und nummerieren Sie das doppelte Zeichen mit derselben Nummer wie das erste.
H|e|l|l|o|,| |W|o|r|l|d|!
1 2 3 3 4 5 6 7 4 8 3 9 10
4) Kehren Sie die Zeichenfolge um, aber nicht die Zahlen.
!|d|l|r|o|W| |,|o|l|l|e|H
1 2 3 3 4 5 6 7 4 8 3 9 10
5) Löschen Sie die Zeichen über den Wiederholungsnummern. (Gelöschte Zeichen, die mit einem Sternchen dargestellt sind.)
!|d|l|*|o|W| |,|*|l|*|e|H
1 2 3 3 4 5 6 7 4 8 3 9 10
6) Ersetzen Sie die gelöschten Zeichen durch das Zeichen, das beim ersten Auftreten der Nummer angezeigt wird, bei der das gelöschte Zeichen abgelaufen ist.
!|d|l|l|o|W| |,|o|l|l|e|H
1 2 3 3 4 5 6 7 4 8 3 9 10
7) Ausgabe
!dlloW ,olleH
Testfälle:
Input -> Output
"Hello, World!" -> "!dlloW ,olleH"
"18464399" -> "99343488"
"Code Golf" -> "floG eloC"
"abcdefgABCDEFG" -> "GFEDCBAgfedcba"
"Mmm, marshmallows" -> "swwllwmhsrwm mms"
"15147" -> "74751"
Antworten:
Pyth , 1 Byte
Überprüfen Sie alle Testfälle.
Pyth hat wundervolle Einbauten :-)
Pyth ,
87 BytesÜberprüfen Sie alle Testfälle.
Wie es funktioniert
Dies ist der interessantere nicht eingebaute Ansatz.
quelle
Python 2 ,
4641 Bytes-5 Bytes dank Artyer
Probieren Sie es online aus!
quelle
lambda x:''.join(x[~x.find(n)]for n in x)
anstatt umzukehren und dann zu indizierenGelee , 5 Bytes
Probieren Sie es online aus!
quelle
CJam , 7 Bytes
Probieren Sie es online aus!
Erläuterung
quelle
y
gearbeitet.y
gearbeitet. : PMATL , 6 Bytes
Probieren Sie es online aus!
quelle
05AB1E , 2 Bytes
Probieren Sie es online aus!
Erläuterung:
quelle
Alice , 17 Bytes
Probieren Sie es online aus!
Erläuterung
Dies ist nur die übliche Vorlage für linearen Code im Ordnungsmodus. Wenn wir dies entfalten, wird das eigentliche Programm einfach:
Die Idee hier ähnelt der meiner CJam-Antwort . Da Alice keine einfache Möglichkeit hat, Zeichenfolgen mit ganzen Zahlen zu indizieren, ist es am einfachsten, dieses Verhalten mit Transliteration (
y
in Alice) zu replizieren . Die Transliterationssemantik von Alice ist jedoch viel allgemeiner als die von CJam, was bedeutet, dass Alice wiederholte Zuordnungen nicht einfach ignoriert. Wenn wir beispielsweise nurMmm, marshmallows
umgekehrt transliterieren möchten, würde dies die folgende Liste von Zuordnungen darstellen:Beachten Sie, dass wir haben, zum Beispiel
m -> w
,m -> o
,m -> a
undm -> a
. CJam würde nur alle außer der ersten Zuordnung verwerfen, aber Alice würde stattdessen diese durchlaufen. Also würde der erste zugeordnetm
werdenw
, der zweite aufo
, der fünfte erneut aufw
und so weiter. In diesem Fall, der nicht hilfreich, weil in der Regel , wenn wir führeny
aufAAB
(für einige SaitenA
undB
) , wie wir in CJam haben, werden wir immer bekommen , nurB
in Alice.Wie berechnen wir ein Mapping, für das es funktioniert
y
(dh wie verwerfen wir die wiederholten Mappings manuell)? Natürlich mit einer anderen Transliteration. :) :)Die Quelle des gewünschten Mappings muss der Knoten der Eingabe sein (dh die deduplizierte Eingabe). Wenn wir die obige Zuordnung auf den Knoten anwenden, wird jedes Zeichen nur einmal angezeigt, sodass wir nur die erste der wiederholten Zuordnungen verwenden. Indem wir den Knoten mit der Eingabe und ihrer Umkehrung transliterieren, werden die duplizierten Zuordnungen einfach verworfen. Wir können dann den Knoten und dieses neue Ergebnis als Zuordnung für die ursprüngliche Eingabe verwenden. Ich bin sicher, das hat für jemanden Sinn gemacht ...
Also der Code:
quelle
Pyke , 7 Bytes
Probieren Sie es hier aus!
quelle
Perl 5 , 23 + 1 (
-p
) = 24 BytesProbieren Sie es online aus!
Vielen Dank an @ MartinEnders Alice-Eintrag für die Transliterationsidee
quelle
JavaScript ES6 50 Bytes
3 Bytes dank Justin Mariner gespeichert
Probier es aus:
quelle
R ,
6865 BytesTestfälle überprüfen!
Ports Eriks 05AB1E- Methode für 3 Bytes weniger. Es war nicht das erste, aber es war das erste, das ich sah.
alte Version:
Überprüfen Sie alle Testfälle - druckt den Vektor mit der Eingabe als Namen und der Ausgabe in Anführungszeichen aus.
Eine ziemlich naive Implementierung, aber ich denke nicht, dass dies in R kürzer wird (und ich freue mich darauf, falsch zu liegen). Es ist im Wesentlichen ein R-Port von Rods Python-Antwort, aber es wurde unabhängig entwickelt.
Ungolfed Erklärung:
quelle
C (gcc) , 98 Bytes
Probieren Sie es online aus!
Das Argument muss eine veränderbare Zeichenfolge sein. Zeichenfolge wird an Ort und Stelle geändert.
quelle
Röda , 27 Bytes
Probieren Sie es online aus!
Dies nimmt eine Liste von Zeichen als Eingabe und gibt einen Strom von Zeichen zurück.
Verwenden des String-Datentyps (40 Byte):
Probieren Sie es online aus!
quelle
Python ,
191128 BytesProbieren Sie es online aus
quelle
Java 10,
1009997 BytesPort von @ LeakyNuns C-Antwort . Ich bezweifle, dass es kürzer geht, ohne etwas Ähnliches in Java zu tun.
-1 Byte dank @ceilingcat .
Geben Sie als
char[]
(Zeichen-Array) ein und ändern Sie diese Eingabe, anstatt eine neue zurückzugeben, um Bytes zu speichern.Probieren Sie es hier aus.
quelle