Ihr Freund ist nicht so gut mit Computern umgehen zu können, so dass jemand als Scherz die Buchstaben (az) auf seiner Tastatur verschlüsselt. Als er sich hinsetzte und versuchte, seinen Namen über die Tastatur einzugeben, bemerkte er, dass die Buchstaben verschlüsselt waren und bat um Ihre Hilfe.
Sie sind schlau und wissen, dass es ihm irgendwann gelingen wird, seinen Namen einzugeben, wenn er seinen Namen eingibt und dann wiederholt eingibt, was auf dem Bildschirm statt seines Namens erscheint. Sie sind auch nett und ordnen die Schlüssel neu an, möchten aber wissen, wie viele Runden nötig wären, um erfolgreich zu sein.
Deine Aufgabe ist es, ein Programm oder eine Funktion zu schreiben, die die Anzahl der Umdrehungen berechnet, wenn die Buchstaben gemischt werden und der Name des Freundes.
Eingabedetails:
- Zwei Zeichenfolgen werden als Eingabe in einer für Ihre Sprache geeigneten Struktur angegeben.
- Die erste Zeichenfolge ist die Liste der neuen Kleinbuchstaben in alphabetischer Reihenfolge der alten. (Das erste Zeichen befindet sich an der Position von
a
, das letzte an der Position vonz
.) In der Zeichenfolge treten immer einige Änderungen auf. - Die zweite Zeichenfolge ist der Name. Es kann jedes druckbare ASCII-Zeichen enthalten, es werden jedoch nur die Groß- und Kleinbuchstaben gemischt, sofern vorhanden. Der Name selbst könnte bei al nicht gemischt werden.
Ausgabedetails:
- Die Ausgabe ist eine einzelne Ganzzahl, deren Anzahl an Windungen minimal erforderlich ist. Newline ist optional.
Beispiele:
Eingabe:
'abcfdeghijklmnopqrstuvwxyz' 'Mr. John Doe'
(d, e, f Positionen geändert)
Ausgabe:
3
(Die angezeigten Namen sind: Mr. John Fod
=> Mr. John Eof
=> Mr. John Doe
)
Eingabe:
'nopqrstuvwxyzabcdefghijklm' 'Mr. John Doe'
(die ROT13-Chiffre )
Ausgabe:
2
(Jeder Eingabename, der Buchstaben enthält, benötigt 2
Runden, um den ursprünglichen Namen zu erzeugen.)
Eingang:
'aebcdjfghiqklmnopzrstuvwxy' 'John Doe'
Ausgabe:
140
Dies ist Code-Golf, also gewinnt der kürzeste Eintrag.
quelle
aebcdjfghiqklmnopzrstuvwxy
(Ausgabe 1260 fürMr John Doe
). Dies ist das maximal mögliche - es besteht aus Zyklen der Ordnung 4, 5, 7, 9 (und einem unverändertena
), und jeder Name, der mindestens einen Buchstaben aus jedem Zyklus enthält, ergibt 1260. Und ich nehme das Alphabet selbst als Eingabe oder die Verwendung eines nicht betroffenen Namens sind ebenfalls wichtige Randfälle.EOF
total erstaunlich!Antworten:
Pyth, 16 Bytes
Probieren Sie es hier aus.
Die Eingabe sollte in zwei Zeilen erfolgen: Name und dann Permutation. Die Permutation sollte angegeben werden. Der Name kann in Anführungszeichen oder ohne Anführungszeichen stehen. Beispielsweise:
Gibt 140.
Erläuterung:
quelle
CJam,
31 27 2524 BytesNimmt Eingaben in Form von:
dh erste Zeile - Alphabete, zweite Zeile - Name.
Wie es funktioniert :
Probieren Sie es hier online aus
quelle
Rubin, 58
Erläuterung
Enumerable#find
(danke @Ventero!) UndString#tr!
, um Zeichen zu ersetzen, bis das ErsetzteString
mit dem tatsächlichen Namen übereinstimmt.quelle
""+n
ist ein bisschen kürzer alsn.dup
, und Sie können ein weiteres Byte speichern, indem SieEnumerable#find
anstelle eines expliziten Zählers kreativ verwenden :(1..1e4).find{t.tr!(...)==n}
n.downcase!
).A-Z
und+a.upcase
A-Z+a.upcase
undn.downcase!\n
haben die gleiche Länge :)CJam,
3231 BytesTeste es hier. Es nimmt die Permutation in der ersten Zeile und den Namen in der zweiten Zeile der Eingabe an.
Erläuterung
quelle
Pyth 26
Probieren Sie es hier online aus.
Es gibt einige unglückliche Konsequenzen, die dieses Programmbyte kosten, wie das Speichern von G in K, um es in der Reduzierung zu verwenden, und das Verwenden von not (nicht (J)), um den Filter zu starten. Aus diesem Grund gehe ich davon aus, dass dies noch gespielt werden kann.
Dies ist ein Programm, das Eingaben wie folgt entgegennimmt:
(Beachten Sie das Fehlen von Anführungszeichen im ersten Argument)
Erklärung nach lähmender Erschöpfung zu kommen;)
quelle
Haskell 131 Bytes
Rufen Sie
f
mit der Permutationszeichenfolge und dem Namen auf, um das Ergebnis zu erhaltenErläuterung
quelle
GolfScript (33 Bytes)
Nimmt die Eingabe als zwei (einfach oder doppelt) zitierte Zeichenfolgen, die durch Leerzeichen voneinander getrennt sind. z.B
Online-Demo
Präparation
Die Transliteration beruht auf der Tatsache, dass alle Zeichen betroffen sind (
{'ABC'?'abc'=}%
wobei die sortierte ZeichenfolgeA$
ersetzt'ABC'
und die PermutationA
ersetzt wird'abc'
). Die allgemeineren Alternativen sparen nicht genug, weil der Filter für alphabetische Zeichen so billig ist.Dies setzt auch
-1$
den Zugriff auf den Boden des Stapels voraus, was ein relativ seltener GS-Trick ist.quelle