Gegeben ein Integer-Array:
- Beginnen Sie mit der ersten Nummer
- N Positionen vorwärts springen, wobei n der Wert der aktuellen Position ist
- Löschen Sie die aktuelle Position und machen Sie die nächste Position zur aktuellen Position.
- Fahren Sie mit Schritt 2 fort, bis eine Nummer übrig ist
- Diese Nummer ausdrucken
Regeln
Das Array wird umbrochen (die nächste Zahl nach der letzten Zahl im Array ist die erste Zahl).
Eine Null entfernt sich (offensichtlich).
Negative Zahlen sind als Eingabe nicht zulässig.
Testfälle
[1] => 1
[1,2] => 1
[1,2,3] => 3
[1,2,2] => 1
[1,2,3,4] => 1
[6,2,3,4] => 4
[1,2,3,4,5] => 5
[0,1] => 1
[0,0,2,0,0] => 0
Beispiel Schritt für Schritt
[1,4,2,3,5]
^ start from the first position
^ jump 1 position (value of the position)
[1, 2,3,5] remove number in that position
^ take next position of the removed number (the 'new' 'current' position)
^ jump 2 positions
[1, 2,3 ] remove number in that position
^ take next position (looping on the end of the array)
^ jump 1 position
[1, 3 ] remove number in that position
^ take next position (looping)
^ jump 3 positions (looping on the end of the array)
[ 3 ] remove number in that position
print 3
Beispiel # 2
[4,3,2,1,6,3]
^ start from the first position
^ jump 4 positions
[4,3,2,1, 3] remove number in that position
^ take next position
^ jump 3 positions
[4,3, 1, 3] remove number in that position
^ take next position
^ jump 1 positions
[4,3, 1 ] remove number in that position
^ take next position
^ jump 4 positions
[4, 1 ] remove number in that position
^ take next position
^ jump 1 position
[ 1 ] remove number in that position
print 1
Das ist Code-Golf , die kürzeste Antwort in Bytes gewinnt!
code-golf
array-manipulation
workoverflow
quelle
quelle
Antworten:
Schale , 7 Bytes
Dies gibt das Ergebnis als Singleton-Liste zurück
Probieren Sie es online!
Erläuterung
quelle
Haskell ,
545048 BytesProbieren Sie es online!
Erläuterung:
f[x]=x
: Wenn die angegebene Liste eine Singleton-Liste ist, geben Sie ihr Element zurück.f(x:r)=f$ ...
: Ansonsten rekursivf
auf folgende Liste anwenden :cycle$x:r
),x+1
Elementen entfernt (drop(x+1)$
),r
. (snd<$>zip r
ist eine kürzere Alternative zutake(length r)
).Vorherige 54-Byte-Version:
Probieren Sie es online!
quelle
Ruby , 37 Bytes
Ändert das Array direkt, was als Ausgabe akzeptabel erscheint. Probieren Sie es online!
quelle
MATL , 21 Bytes
Probieren Sie es online! Oder überprüfen Sie alle Testfälle .
Erläuterung
quelle
Python 3 ,
5451 BytesDie Ausgabe ist eine Singleton-Liste.
Probieren Sie es online!
quelle
CJam , 15 Bytes
Probieren Sie es online!
Erläuterung
Anstatt einen Zeiger zu verfolgen, verschiebe ich das Array nur zyklisch, sodass das aktuelle Element immer vorne ist.
Eine spaßige Alternative, die leider keine Bytes spart:
quelle
Gehirn-Flak , 88 Bytes
Probieren Sie es online!
Erläuterung
quelle
Python 2 , 55 Bytes
Probieren Sie es online!
Ausgabe als Singleton-Liste, wie standardmäßig zulässig . Ein paar Bytes gespart dank Dennis , indem er mich daran erinnerte, dass das Ändern des Funktionsarguments erlaubt ist.
Wie es funktioniert
def f(a)
- Definiert eine Funktion mit einem Parametera
.while a[1:]:
-a
Wenn das erste entfernte Element wahr ist, führen Sie den folgenden Codeblock aus. Eine Liste mit einem oder mehreren Elementen ist wahr, und leere Listen sind in Python falsch. Daher wird diese Liste angehalten, sobalda
eine Länge von 1 erreicht ist.l=a[0]%len(a)
- Nehmen Sie das erste Element und erhalten Sie den Rest seiner Division durch die Länge vona
. Ordnen Sie das Ergebnis zul
.a[:]=a[-~l:]+a[:l]
- Drehen Siea
diel
Elemente nach links und entfernen Sie die erste, während Sie diese an der richtigena
Stelle zuweisen .Python 2 , 63 Bytes
Probieren Sie es online!
Obwohl länger, scheint dies viel eleganter. Danke auch an ovs für die Hilfe im Chat.
quelle
a,*b=input()
Könntest du nicht so etwas wie (python3) machen und ein paar Bytes sparen? Allerdings bin ich nicht sicher, wie sich das auswirken würdel
und die ScheibeGelee , 7 Bytes
Probieren Sie es online!
Volles Programm.
quelle
ḷ/
ist verdammt schlau.Gelee , 9 Bytes
Probieren Sie es online!
-2 Bytes dank user202729
Erläuterung
quelle
Python 3 , 60 Bytes
Probieren Sie es online!
-3 Bytes dank ovs
quelle
APL (Dyalog) ,
20 bis18 BytesProbieren Sie es online!
quelle
Mathematica, 36 Bytes
benutzt Martins Algorithmus
-5 Bytes von Mischa Lawrow & Martin Ender
Probieren Sie es online!
quelle
#//.{x_,y__}:>Rest@RotateLeft[{x,y},x]&
. (Dies hört auf, wenn es nur ein Element gibt, da es{a}
nicht mehr mit dem Muster übereinstimmt{x_,y__}
.)y
, die gesamte Liste aufrufenl
und dannl
anstelle von verwenden{x,y}
.#//.l:{x_,__}:>Rest@RotateLeft[l,x]&
?J ,
2117 Bytes-4 Bytes dank FrownyFrog
Probieren Sie es online!
Original:
([:}.{.|.])^:(1<#)^:_
Wie es funktioniert:
^:_
Wiederholen, bis sich das Ergebnis nicht mehr ändert^:(1<#)
wenn die Länge der Liste größer als 1 ist{.|.]
Drehe die Liste um das erste Mal nach links[:}.
Lassen Sie das erste Element fallen und verschließen Sie die GabelProbieren Sie es online!
quelle
JavaScript (ES6),
54 bis60 Byte1 Byte gespart dank @Shaggy
Fixed Version (+6 Byte)
Ändert das Eingabearray , das auf einen Singleton reduziert ist.
Testfälle
Code-Snippet anzeigen
Wie?
Wir wenden den in der Challenge beschriebenen Algorithmus rekursiv an. Nur die Stoppbedingung
1/a
mag etwas seltsam erscheinen. Wenn Sie einen arithmetischen Operator anwenden:NaN
und1/NaN
sind auchNaN
(falsch).1/0 = +Infinity
oder1/N = positive float
für N> 0 (beide wahr) führt.quelle
splice
das ursprüngliche Array ändern, können Sie esf=(a,p=0)=>1/a||f(a,p=p+a[p]%a.length,a.splice(p,1))
für 52 Bytesf=(a,p=0)=>1/a?a:f(a,p=(p%a.length+a[p%a.length])%a.length,a.splice(p,1))
ist in Ordnung, kann aber optimiert werdenp+a[p]
entfernt werden könnten. Was natürlich nicht der Fall ist. Vielen Dank für den Hinweis!Julia 0,6 ,
4642 BytesProbieren Sie es online!
Unkomplizierte rekursive Julia-Version.
x[]
greift auf das erste Element von x zu.quelle
Java 8, 79 Bytes
Dieses Lambda akzeptiert ein
Stack<Integer>
und gibt einint
oder zurückInteger
.Probieren Sie es online
Ungolfed
Danksagung
quelle
i%=s
kann entfernt werden, wennl.get(i)
geändert vonl.get(i%s)
Pyth , 9 Bytes
Probieren Sie es hier aus!
Dies gibt das Ergebnis als Singleton-Liste aus, wie dies standardmäßig zulässig ist .
Wie es funktioniert
Hinweis: Wenn Sie diese Klammern nicht sehen möchten, fügen Sie einfach
h
odere
vor dem gesamten Code ein.quelle
Schnell , 87 Bytes
Gibt als Singleton-Liste zurück, indem die Eingabe geändert wird . Probieren Sie es online!
Erläuterung
quelle
Perl 6 ,
4645 Bytes(-1 Byte dank Brad Gilbert)
Probieren Sie es online!
($_, { ... } ... 1)
generiert eine Folge von Listen, beginnend mit der eingegebenen Liste$_
, wobei jedes nachfolgende Element vom geschweiften Ausdruck generiert wird und endet, wenn die Liste smart-matches1
--ie eine Länge von 1 hat. Das nachfolgende Element[* - 1]
erhält das letzte und das letzte Element[0]
Nimmt das einzige Element aus dieser Singleton-Liste.(|$_ xx *)
generiert eine flache, unendlich replizierte Kopie des aktuellen Elements. Diese Liste wird mit dem Bereich indiziert.[0] + (1 ..^ $_)
, um die nächste endliche Liste in der Reihe zu extrahieren.quelle
[*-1][0]
kann zum[*-1;0]
Speichern eines Bytes kombiniert werden . Auch1..$_-1
wird besser geschrieben als1..^$_
nochmal ein Byte zu speichern.[*-1;0]
, aber es scheint irgendwie nicht äquivalent zu sein. Die Funktion gibt dann eher eine Liste als eine Zahl zurück.1..^$_
Optimierung nichtPerl 5 ,
474341 + 2 (-ap
) = 43 BytesProbieren Sie es online!
Nimmt die Eingabe als durch Leerzeichen getrennte Zahlen.
quelle
$x%=@F,splice@F,$x=($x+$F[$x])%@F,1while$#F;$_="@F"
Haskell , 56 Bytes
Probieren Sie es online!
quelle
Python 3 ,
5756 BytesProbieren Sie es online!
quelle
Java 8 , 325 Bytes
Golf gespielt:
Ungolfed:
quelle
static
Keywords nicht gezählt werden. In der Regel werden Lösungen mit mehreren Methoden als nicht statische Member einer Klasse implementiert undmain
erstellen eine Instanz zum Testen. Wenn Sie dies auf diese Weise tun, unterstützen Sie Java 7 und können es einfach als "Java" -Lösung einreichen. Für zukünftige Referenzzwecke ist das Eingabeformat in der Regel recht flexibel. Sie können also beispielsweise die Eingabe als wählenList
(was für dieses Problem sehr hilfreich ist).APL + WIN, 36 Bytes
Erläuterung:
Fordert zur Eingabe des Bildschirms auf.
quelle
Python 2, 61 Bytes
quelle
JavaScript,
585659 BytesGibt das Ergebnis als einziges verbleibendes Element im Eingabearray zurück, das an Ort und Stelle aktualisiert wird.
Zwei Bytes, die mit einer durch Kommas getrennten Anweisung anstelle einer Blockanweisung im for-Schleifenkörper gespeichert wurden! Beim Überspringen eines am Ende des Arrays gelöschten Elements sind drei Bytes verloren gegangen (:
Weniger golfen:
quelle
[3, 5, 7, 9]
.[3,5,7,9]
. Erwarteter Wert 5Brain-Flak , 104 Bytes
H.PWiz hat eine kürzere Antwort hier , dass ich dazu beigetragen, Sie sollten check it out.
Probieren Sie es online!
Erläuterung
quelle
Sauber , 78 Bytes
Verwendet die gleiche Methode wie die Haskell-Antwort von Laikoni .
Probieren Sie es online!
quelle
R 111
117126BytesDank @Giuseppe für das Golfspielen von 11 Bytes durch Ändern in eine while-Schleife, weitere 4 durch Entfernen der Funktion und direktes Lesen von Benutzereingaben.
Ich finde es nicht gut, was nötig war, um dorthin zu gelangen - ich bin mir sicher, dass es eine elegantere Lösung gibt.
Probieren Sie es online!
Ungolfed Code
quelle
f=
muss , da dies eine rekursive Funktion istwhile
Schleife, denke ich.while
Schleifef=
Teil der rekursiven Funktion vergessen haben . :(