Einführung
In dieser Herausforderung musst du eine bestimmte Art von Ausscheidungsspiel simulieren. Im Spiel stehen die Teilnehmer in einem Kreis und jeder hält eine ganze Zahl. In jeder Runde des Spiels zeigt jeder Teilnehmer auf die Person n
, die sich entfernt, wenn n
es sich um die Nummer handelt, die er hält. Wenn n
es positiv ist, zählen sie zu ihrer Rechten, wenn n
es negativ ist, zählen sie zu ihrer Linken und wenn n
es null ist, zeigen sie auf sich selbst. Jeder Teilnehmer, auf den jemand zeigt, scheidet aus und verlässt den Kreis. Damit ist die Runde beendet. Die Runden werden fortgesetzt, bis keine Teilnehmer mehr übrig sind.
Eingang
Ihre Eingabe ist eine nicht leere Liste von ganzen Zahlen in einem beliebigen vernünftigen Format. Es stellt die Zahlen dar, die die Teilnehmer des Spiels halten.
Ausgabe
Ihre Ausgabe ist die Anzahl der Runden, die es dauert, bis das Spiel endet.
Beispiel
Betrachten Sie die Eingabeliste [3,1,-2,0,8]
. In der ersten Runde passiert Folgendes:
- Die Person, die hält,
3
zeigt direkt auf die Person, die hält0
. - Die Person, die hält,
1
zeigt direkt auf die Person, die hält-2
. - Die Person, die
-2
Punkte bei der Person, die hält, übrig hat3
. - Die Person, die
0
Punkte auf sich hält. - Die Person, die hält,
8
zeigt direkt auf die Person, die hält-2
(die Liste stellt einen Kreis dar, sodass sie an den Enden umläuft).
Dies bedeutet , dass 0
, -2
und 3
eliminiert werden, so dass die zweite Runde mit der Liste getan [1,8]
. Hier 1
zeigt auf 8
und 8
zeigt auf sich selbst, so 8
wird beseitigt. Die dritte Runde erfolgt mit der Liste [1]
, in der 1
einfach auf sich selbst zeigt und beseitigt wird. Es dauerte drei Runden, um alle Teilnehmer auszuschließen, daher ist die Ausgabe korrekt 3
.
Regeln und Wertung
Sie können ein vollständiges Programm oder eine Funktion schreiben. Die niedrigste Byteanzahl gewinnt, und Standardlücken sind nicht zulässig.
Testfälle
[3] -> 1
[0,0,0] -> 1
[-2,-1,0,1,2,3,4,5,6,7] -> 2
[5,5,5,6,6,6] -> 2
[3,-7,-13,18,-10,8] -> 2
[-7,5,1,-5,-13,-10,9] -> 2
[4,20,19,16,8,-9,-14,-2,17,7,2,-2,10,0,18,-5,-5,20] -> 3
[11,2,7,-6,-15,-8,15,-12,-2,-8,-17,6,-6,-5,0,-20,-2,11,1] -> 4
[2,-12,-11,7,-16,9,15,-10,7,3,-17,18,6,6,13,0,18,10,-7,-1] -> 3
[18,-18,-16,-2,-19,1,-9,-18,2,1,6,-15,12,3,-10,8,-3,7,-4,-11,5,-15,17,17,-20,11,-13,9,15] -> 6
n
Ist die Nummer, die die Person in der Hand hält?Antworten:
Pyth, 15 Bytes
Testsuite dank kirby
Verwendet den gleichen Iterationsmechanismus wie @orlp, ermittelt jedoch die Anzahl der Iterationen mithilfe
f
der Funktion "Wiederholen bis zur Ungenauigkeit", um das Ergebnis zu ermitteln[]
.quelle
Matlab,
91.77BytesAlte Version:
Dies ist eine Herausforderung, bei der matlab glänzt. Das Herz dieses Codes ist das Löschen der Array-Einträge.
a(mod((1:l)+a-1,l)+1)=[]
Das finde ich ziemlich elegant.quelle
CJam, 21 Bytes
Testsuite.
Nimmt Eingaben als CJam-Style-Liste auf, aber die Testsuite übernimmt die Konvertierung aus dem Format in der Challenge.
Erläuterung
quelle
ee
ist fast genau das, wonach ich gestern für eine andere Frage gesucht habe.C #,
251219211197193 BytesDie unrühmlichste nicht-esoterische Sprache schlägt wieder zu.
Dieses Programm erwartet die Eingabesequenz als Befehlszeilenargumente. Um die Liste beispielsweise einzugeben
[5,5,5,6,6,6]
, rufen Sie sie mit Befehlszeilenargumenten auf5 5 5 6 6 6
.Vielen Dank an Martin Büttner für ein paar Tipps.
Golfed es bis 197 durch die Erkenntnis, dass ich das
args
Array wiederverwenden kann , obwohl es ein Array von Saiten ist. Ich muss sie nur an einer Stelle in eine ganze Zahl zerlegen.Golf bis 193 durch die Erkenntnis, dass
.Where(...==x).Any()
kürzer als.Select(...).Contains(x)
.Ungolfed
quelle
Pyth, 21 Bytes
Live-Demo mit Testfällen.
quelle
R, 105 Bytes
Code
ungolfed
quelle
Pyth, 17 Bytes
Zufälligerweise sehr ähnlich zu Kirbyfans Antwort.
quelle
Mathematica, 71 Bytes
quelle
(i=0;#//.l:{__}:>l~Delete~Mod[++i;Plus~MapIndexed~l,Length@l,1];i)&
Plus~MapIndexed~#
ist wirklich klug, aber ich frage mich, ob es keinen kürzeren Weg gibtl+Range@Length@l
.STATA, 146 Bytes
Verwendet die kostenpflichtige Version von STATA. Angenommen, die Eingabe befindet sich in einer durch Zeilenumbrüche getrennten Datei mit dem Namen
a.
. Beschränkt auf Situationen, in denen aufgrund der maximal zulässigen Anzahl von Variablen nicht mehr als 1023 Runden erforderlich sind (kann auf Kosten von 10 Byte festgelegt werden). Es liest die Daten und führt eine Schleife aus, bis keine Beobachtungen mehr vorliegen. Erstellen Sie in jeder Iteration eine Variable mit dem Wert des Indexes, auf den sie zeigt. Wenn für jede Beobachtung eine andere Beobachtung darauf hinweist, setzen Sie ein Kennzeichen, um die Variable fallen zu lassen. Lassen Sie dann alle Beobachtungen mit diesem Indikator fallen und erhöhen Sie den Zähler. Drucken Sie nach der Schleife den Zähler aus.quelle
Ruby,
7874 Bytesquelle
awk, 66 bytes
Einfach benutzt
mod length array
, um es im Array zu behalten. In der Eingabe müssen die Zahlen durch Leerzeichen getrennt werden.Anwendungsbeispiel
Hier finden Sie alle Eingabebeispiele im entsprechenden Format
quelle
Python 2, 122 Bytes
quelle