Sie und einige Freunde gehen bowlen. Es gibt insgesamt N Bowler. Es gibt jedoch nur N- 1-Stühle. Die Lösung ist einfach: Wer gerade an der Reihe ist, bekommt keinen Stuhl. Dann, wenn sie an der Reihe sind, sitzen sie auf dem Stuhl der Person, die als nächstes geht.
Nehmen wir ein Beispiel. Sagen Sie den Namen A und Ihre vier Freunde sind benannt B , C , D und E . Jeder Spieler bewegt sich in alphabetischer Reihenfolge, so dass Sie zuerst gehen können. Da es 5 Spieler gibt, gibt es nur 4 Sitze. Deine Freunde sitzen auf den vier Plätzen in dieser Reihenfolge:
CEBD
Du gehst und du bekommst einen Streik! Als nächstes ist B an der Reihe, und Sie setzen sich auf seinen Stuhl. Nun sieht es so aus:
CEAD
B geht. Gutterball! Dann setzt er sich in C ‚s Stelle und C geht nächsten Zug.
KORN
dann C sitzt in der D ‚s Stuhl.
BEAC
und D sitzt in Es Stuhl
BDAC
und zuletzt sitzt E auf deinem Stuhl.
BDEC
Sie werden feststellen, dass jetzt alle Sitzplätze (pseudo) gemischt sind. Sie müssen herausfinden , wer nach X Kurven wo sitzen wird?
Eingang
Ihr Programm muss zwei Eingaben vom Benutzer annehmen, eine Zeichenfolge und eine Zahl. Es sind keine Eingabeaufforderungen erforderlich. Die Zeichenfolge besteht aus 1 bis 51 alphabetischen Zeichen (BZ und az) ohne Wiederholungen. Dies ist die Reihenfolge, in der Ihre Freunde sitzen. Es wird kein A in Großbuchstaben geben, denn das bist du und du gehst immer zuerst. Die Anzahl ist die Gesamtanzahl der Runden (keine Spiele), die Sie und Ihre Freunde spielen. Diese Zahl ist positiv und hat eine angemessene Größe (weniger als 1000).
Ausgabe
Ihr Programm muss die Reihenfolge ausdrucken, in der Ihre Freunde nach X Runden sitzen und wer an der Reihe ist. Wenn also zum Beispiel nach X Runden die Reihenfolge BEDGCAHF war und Z an der Reihe war, muss Ihr Programm genau dies ausgeben :
BEDGCAHF
It is Z's turn.
Hier einige Beispiele für Ein- und Ausgänge.
input: E, 4
E
It is A's turn.
input: E, 5
A
It is E's turn.
input: Bb, 2
AB
It is b's turn.
input: dgOPZXKDQYioHflFhpqzUsSaeILwckVNEtGTCJBvnruRyWMmjxb, 999
JNuvFDqjwEPVnMSlOWXgAZyGKordIRBtkamziphcUYbxfCsTQeH
It is L's turn.
Regeln
Jeder geht in alphabetischer Reihenfolge vor, wobei Großbuchstaben Vorrang vor Kleinbuchstaben haben.
Dies ist Code-Golf, daher gelten Standard-Regelungslücken, und Einsendungen werden in Bytes gewertet .
{({}[()])({}<({}<(([])<{{}({}<>)<>([])}{}<>>)<>>)<>{({}[()]<({}<>)<>>)}{}<>>)}
Antworten:
Pyth, 37 Bytes
Online-Demonstration: Pyth-Compiler / -Executor
Der Algorithmus basiert auf der @ isaacg-Lösung. Wie er beginne ich mit der anfänglichen Sitzreihenfolge und benutze wiederholt die Ersetzungsfunktion von
X
, um den nächsten Spieler durch den aktuellen Spieler zu ersetzen.Aber im Gegensatz zu seiner Implementierung, die das Zeichen des nächsten Spielers durch das Zeichen des aktuellen Spielers in der Sitzordnung ersetzt, verwende ich es umfassender. Ich ersetze jedes Zeichen des aktuellen Spielers durch das nächste Zeichen und jedes Zeichen des nächsten Spielers durch das aktuelle Zeichen. Dies wird erreicht, indem beide Spieler als zweites Argument übergeben und das dritte Argument (
XG"ab")
anstelle vonXG"a""b"
) weggelassen werden . Da der aktuelle Spieler nicht Teil der Saite ist (er spielt), hat der erste Ersatz überhaupt keine Wirkung. Aber es erlaubt mir, beide Spieler gleichzeitig zu generieren, während @isaacg sie einzeln generieren muss.Eine andere verrückte neue Funktion, die ich benutze, ist der Zuweisungsoperator. Bis vor kurzem
=N1
wurde übersetztN = 1
, was mit Python ausgeführt wurde. Aber heutzutage kompiliert es zuassign('N',1)
. Diese Funktion weistN
1 zu und gibt den Wert zurück (druckt ihn aber nicht aus). Dies ermöglicht das Speichern von Zwischenergebnissen, die beispielsweise bei einer Reduktionsoperation auftreten. Auf diese Weise konnte ich das zuletzt geänderte Spielerpaar speichern und den zweiten Spieler drucken.Ausführliche Erklärung
quelle
Pyth,
3938 BytesDies basiert auf wiederholten Anwendungen der Such- und Ersetzungsoperation
X
. Das erste Bit definiert eine Suchfunktiony
, die denb
Spieler in der Reihenfolge findet , in der er spielt. Dann führen wir wiederholt Ersetzungen durch, um die endgültige Sitzordnung zu ermitteln, und drucken schließlich aus, wer an der Reihe ist.Amüsanterweise ist der Code zum Auffinden der endgültigen Sitzordnung kürzer (18 Byte) als der zu druckende Code, der an der Reihe ist (21 Byte).
Der Code nimmt die Sitzfolge in der ersten Zeile von STDIN und die Anzahl der Umdrehungen in der zweiten Zeile.
Demonstration.
Erläuterung:
quelle
%
Sie niemals , wenn Sie nur eine Sache einfügen. Auch++
würde ein Byte speichern, aber der beste Weg (2 Bytes) ist die Verwendung vonp
:pyQ"It is ""'s turn
++
also die gleiche Byteanzahl wie%
undp
speichert nur 1 Byte.CJam,
494543 BytesIch denke das funktioniert. Der Algorithmus wird so ausgeführt, wie er ist.
Probieren Sie es online aus.
Erläuterung
quelle
Python 3, 110
Eine optimierte Version der Sp3000-Lösung mit
replace
. Die ListeS
durchläuft die Buchstaben der Reihe nach. Wir führen wiederholte Ersetzungen in der angegebenen Zeichenfolge jedes ZeichensS
durch die vorherige Zeichenfolge durch.quelle
Clip 10 ,
5956 BytesBeispiel
Erläuterung
Die erste Eingabe ist die Liste der Spieler, die der Variablen zugewiesen sind
x
.Die zweite Eingabe ist die Anzahl der Umdrehungen, die das Programm erhält
ny
.Vielen Dank an Sp3000 für die Idee, "replace" zu verwenden.
quelle
Python 3, 128 Bytes
Nimmt zwei Eingabezeilen über STDIN auf - anfängliche Sitzreihenfolge, dann Anzahl der Umdrehungen.
Dies ist im Grunde die gleiche Idee zum Suchen und Ersetzen wie bei meiner CJam-Lösung . Der einzige schwierige Teil ist , dass wir halten
A
an der Rückseite der Bowling Ordnung und machen unseren Indexi
des Index des nächsten Bowler, also Vorteil der Indexierung Einnahme von -1 und der Vermeidung vonIndexError
s.Dies ist in Python 2 ein paar Bytes kürzer, aber ich veröffentliche Python 3 zum Vergleich mit der OP-Lösung.
quelle
int(input())
in Zeile 4 zu input (-4) wird, so dass die Eingabe abgebrochen wird. Entfernen Sie dann die Klammern vom Ausdruck und fügen Sie ein Leerzeichen für insgesamt 127 ein. Fehlt mir etwas?exec
JavaScript (ES6) 116
116 Bytes als Programm mit E / A über Popup-Fenster. 114 als testbare Funktion.
Führen Sie zum Testen das Code-Snippet in Firefox aus.
quelle
PowerShell, 168 Byte
Ich habe beschlossen, dass alle meine Antworten auf dieser Website in PowerShell erfolgen. Eines Tages werde ich eine Antwort haben, die mithalten kann ...
Rufen Sie die Funktion folgendermaßen auf:
x Bb 2
quelle
Diese Antwort wird nicht gewinnen, aber ich werfe sie trotzdem raus.
Python 3, 167 Bytes
quelle
Pip , 54 Bytes
Nicht sehr wettbewerbsfähig, aber zumindest kann ich Pips veränderbare Saiten und den Swap-Befehl vorführen. Nimmt die Sitz Reihenfolge und die Anzahl von Runden als Befehlszeilenargumente (die zugewiesen zu bekommen
a
undb
, jeweils).Erläuterung:
Es wäre 49 gewesen, wenn ich mich die Mühe gemacht hätte, zur
SS
gleichen Zeit wie ich zu implementieren (als Zeichenketten zuSN
sortieren) (numerische Sortierung) ... Nun, die Gefahren, eine Sprache in der Entwicklung zu haben.quelle
Python 2 , 105 Bytes
Probieren Sie es online!
Golf von:
quelle
Perl 5 , 102 + 1 (-n) = 103 Bytes
Probieren Sie es online!
Eingang
Sitzreihenfolge, gefolgt von der Anzahl der Runden ohne Leerzeichen:
quelle