Wenn Sie eine Liste nicht negativer Ganzzahlen in einem vernünftigen Format haben, iterieren Sie darüber und überspringen so viele Elemente wie jede Ganzzahl, auf die Sie treten.
Hier ist ein Beispiel:
[0, 1, 0, 2, 5, 1, 3, 1, 6, 2] | []
^ First element, always include it
[0, 1, 0, 2, 5, 1, 3, 1, 6, 2] | [0]
^ Skip 0 elements
[0, 1, 0, 2, 5, 1, 3, 1, 6, 2] | [0, 1]
^ Skip 1 element
[0, 1, 0, 2, 5, 1, 3, 1, 6, 2] | [0, 1, 2]
^ Skip 2 elements
[0, 1, 0, 2, 5, 1, 3, 1, 6, 2] | [0, 1, 2, 3]
Skip 3 elements; you're done
Ein anderes bearbeitetes Beispiel, nicht so alle gleichen Deltas:
[4, 5, 1, 3, 8, 3, 0, 1, 1, 3, 1, 2, 7, 4, 0, 0, 1, 2] | []
^ First element, always include it
[4, 5, 1, 3, 8, 3, 0, 1, 1, 3, 1, 2, 7, 4, 0, 0, 1, 2] | [4]
^ Skip 4 elements
[4, 5, 1, 3, 8, 3, 0, 1, 1, 3, 1, 2, 7, 4, 0, 0, 1, 2] | [4, 3]
^ Skip 3 elements
[4, 5, 1, 3, 8, 3, 0, 1, 1, 3, 1, 2, 7, 4, 0, 0, 1, 2] | [4, 3, 3]
^ Skip 3 elements
[4, 5, 1, 3, 8, 3, 0, 1, 1, 3, 1, 2, 7, 4, 0, 0, 1, 2] | [4, 3, 3, 4]
Skip 4 elements; you're done
Ein Out-of-Bound-Beispiel:
[0, 2, 0, 2, 4, 1, 2] | []
^ First element, always include it
[0, 2, 0, 2, 4, 1, 2] | [0]
^ Skip 0 elements
[0, 2, 0, 2, 4, 1, 2] | [0, 2]
^ Skip 2 elements
[0, 2, 0, 2, 4, 1, 2] | [0, 2, 4]
Skip 4 elements; you're done (out of bounds)
Regeln
- Sie dürfen keinen langweiligen Cheat unter diesen verwenden , sie machen die Herausforderung langweilig und uninteressant.
- Sie sollten nur das Endergebnis zurücksenden / ausdrucken. STDERR-Ausgabe wird ignoriert.
- Möglicherweise erhalten Sie die Eingabe in keiner Basis als Ziffernfolge (z. B. "0102513162" für den ersten Fall).
- Sie müssen die Reihenfolge von links nach rechts für die Eingabe verwenden.
- Wie in den Arbeitsbeispielen wird die Ausführung abgebrochen, wenn Sie die Grenzen überschreiten.
- Sie sollten
0
zum Überspringen von 0 Elementen verwenden. - Angesichts der leeren Liste (
[]
) als Eingabe sollten Sie zurückkehren[]
.
Testfälle
[] => []
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10] => [0, 1, 3, 7]
[5, 1, 2, 3, 4, 5, 2, 1, 2, 1, 0, 0] => [5, 2, 1, 0]
[0, 1, 0, 2, 5, 1, 3, 1, 6, 2] => [0, 1, 2, 3]
[4, 5, 1, 3, 8, 3, 0, 1, 1, 3, 1, 2, 7, 4, 0, 0, 1, 2] => [4, 3, 3, 4]
[0, 2, 0, 2, 4, 1, 2] => [0, 2, 4]
Das ist Code-Golf , also gewinnt die kürzeste Antwort!
code-golf
array-manipulation
Erik der Outgolfer
quelle
quelle
""
s entfernen ?0
in denen die Ausgabe abschließende s enthalten sollte .Antworten:
Python 2 , 36 Bytes
Probieren Sie es online!
quelle
x[0]
stattx[:1]
?[x[0]]
x[:1]
sowieso keine Bytes ...f=lambda x:x and[x[0]]+f(x[x[0]+1:])
Python 2 ,
49 44 *41 BytesDurchgestrichen 44 ist immer noch regulär 44 :(
* -3 dank nur @ ASCII .
Probieren Sie es online!
Druckt die Ergebnisse durch einen Zeilenumbruch getrennt aus, da das OP im Chat erlaubt ist. Ich denke nicht, dass es als nicht-rekursives Vollprogramm kürzer werden kann .
Wie funktioniert das?
l=input()
- Liest die Liste aus der Standardeingabe.while l:
- Missbraucht die Tatsache, dass leere Listen in Python falsch sind. Schleifen, bis die Liste leer ist.print l[0];
- Druckt das erste Element der Liste.l=l[l[0]+1:]
- "Springt wie ein Hase" - Schneidet den erstenl[0]+1
aus der Liste.Nehmen wir ein Beispiel
Angesichts der Liste
[5, 1, 2, 3, 4, 5, 2, 1, 2, 1, 0, 0]
als Eingabe, die Code führt die folgenden (entsprechend der obigen Erläuterung) - Druckt das erste Element des Arrays:5
, schneiden die ersten 6:[2, 1, 2, 1, 0, 0]
. Wir haben dann drucken2
und schneiden Sie die ersten 3:[1,0,0]
. Ebenso geben wir aus1
, beschneiden die ersten 2 und wir erhalten[0]
. Natürlich0
wird gedruckt und das Programm beendet.quelle
Haskell,
29 2726 Bytes1 Byte dank Zgarb gespeichert.
Probieren Sie es online aus.
quelle
f x=x
In der zweiten Zeile wird ein Byte gespeichert.JavaScript (ES6),
423935 BytesAlte Lösung 39 Bytes
-3 Bytes dank @ThePirateBay
quelle
a=>a.map(n=>i--||r.push(i=n),r=i=[])&&r
05AB1E ,
109 BytesVerwendet die 05AB1E- Codierung. Probieren Sie es online!
quelle
Mathematica,
4644 BytesAlternativen:
quelle
C #, 68 Bytes
Probieren Sie es online!
Voll / Formatierte Version:
Das Zurückgeben einer Liste ist mit 107 Bytes länger.
quelle
Schale ,
86 BytesProbieren Sie es online!
-2 Bytes (und eine völlig neue Lösungsidee) dank Leo!
Erläuterung
Ich verwende die Listenmuster-Übereinstimmungsfunktion
Γ
. Es nimmt eine Funktionf
und eine Liste mit Kopfx
und Schwanzxs
an und giltf
fürx
undxs
. Wenn die Liste leer ist, wirdΓ
ein dem Typ entsprechender Standardwert zurückgegeben, in diesem Fall eine leere Liste. Wir nehmenf
an↓
, dassx
Elemente aus fallenxs
. Diese Funktion wird dann iteriert und die resultierenden Elemente werden in einer Liste gesammelt.quelle
Python 2 ,
5955 BytesProbieren Sie es online!
quelle
l[i:i+l[i-1]]=[]
stattdessen verwendendel l[i:i+l[i-1]]
, um ein Byte zu speichernPyth, 22 Bytes
Ein nutzloses Byte wurde entfernt
quelle
Python 2 ,
604241 Bytes-18 Bytes dank Luis Mendo
-1 Bytes dank Jonathan Frech
Probieren Sie es online!
quelle
i-=~x[i]
ist ein Byte kürzer alsi+=1+x[i]
.Netzhaut , 36 Bytes
Die Anzahl der Bytes setzt die Kodierung nach ISO 8859-1 voraus.
Eingang und Ausgang sind durch einen nachgestellten Zeilenvorschub voneinander getrennt.
Probieren Sie es online! (Verwendet Kommas anstelle von Zeilenvorschüben, um praktische Testsuiten zu ermöglichen.)
quelle
Brain-Flak , 64 Bytes
Probieren Sie es online!
quelle
({}[()]<{}>)
vs({}<{}>[()])
waren gleich! Was für ein Zufall!Mathematica,
64-50Bytesquelle
C # (.NET Core) , 68 Byte
Probieren Sie es online!
Nimmt Eingaben als Array von Ganzzahlen und gibt eine Zeichenfolge zurück, die die nicht übersprungenen Werte enthält.
quelle
using System.Linq;
und einer normalen Schleife.R, 58 Bytes
Rekursive Funktion. Nimmt einen Vektor
x
als Argument und leitet einen Zeiger einp
. Dies gibt den entsprechenden Eintrag von ausx
, prüft, obp+x[p]
die Grenzen überschritten werden, und ruft andernfalls die Funktion für den neuen Zeiger auf.Dies ist eine vergleichbare Lösung, die einen korrekten Vektor zurückgibt, anstatt die Ziffern zu drucken.
quelle
numeric(0)
? aka leeres Array.Java (OpenJDK 8) , 53 Byte
Vielen Dank an @ PunPun1000 und @TheLethalCoder
Probieren Sie es online!
quelle
n
in die Schleife bewegen ?(a[n+=1+a[n]]
. Die Funktion löst auch nach der Ausgabe des korrekten Werts einen Fehler aus. Ich weiß nicht, ob dies zulässig ist oder nicht (die Frage sagt nichts aus, der Standardfehler wird ignoriert). Wenn dies beabsichtigt war, können Sien<a.length
die for-Schleife entfernen . Schließlich läuft der TIO-Code auch mit dem Paren nicht so, wie er ist. Die Funktion sollte aConsumer<int[]>
und use seinfunc.accept(test)
Alice , 15 Bytes
Probieren Sie es online!
Eingabe und Ausgabe einer durch Zeilenvorschub getrennten Liste von Dezimalzahlen.
Erläuterung
Durch Speichern einer Ganzzahl n in der Iteratorwarteschlange wird der nächste Befehl n- mal ausgeführt. Mirrors wie
/
sind keine Befehle, also wird der nächste Befehl seinI
. Wenn wir also nur einen Wert x lesen und ausgeben , lesen wir bei der nächsten Iteration x + 1- Werte, wobei der letzte auf dem Stapel endet. Dadurch werden die erforderlichen Nummernlistenelemente übersprungen.quelle
Mathematica , 37 (30?)
Weiteres Golfen der feinen Methode von user202729.
Die Regeln scheinen das Ausgabeformat nicht explizit anzugeben, also vielleicht:
Die Ausgabe für die zweite Funktion sieht folgendermaßen aus:
0.2.4.{}
- Insbesondere{}
wird für eine leere Menge immer noch eine Ausgabe zurückgegeben, die der endgültigen Regel entspricht.quelle
±Drop[{x},a]
kann sein,±{x}~Drop~a
weil±
hat eine niedrigere Priorität alsInfix
.Common Lisp, 51 Bytes
Probieren Sie es online!
quelle
Brain-Flak ,
6460 Bytes4 Bytes speichern basierend auf einer Idee von 0 '
Probieren Sie es online!
Kommentiert
quelle
Ruby,
36 3331Probieren Sie es online aus.
quelle
f=
als Header-Element subtrahieren .Python 2.4, 85 Bytes
Keine Chance, in Python damit zu gewinnen, aber ich liebe Oneliner und dieser könnte für andere interessant sein.
Es stellt sich heraus, dass es einen ausgefallenen Zaubertrick gibt, um auf die Gebäudeliste im Verständnis zuzugreifen, aber er funktioniert nur in 2.4 und mit einigen Änderungen in <= 2.3 ist
locals()['_[1]']
er es. Python erstellt einen geheimen Namen_[1]
für die Liste, während es erstellt und gespeichert wirdlocals
. Auch Namen_[2]
,_[3]
... werden für verschachtelte Listen verwendet.Es zählt also die Anzahl der bereits hinzugefügten Elemente plus deren Summe. Ergebnis ist der Index des nächsten gewünschten Elements.
Ich denke, dass es eine Möglichkeit geben sollte, die Aufzählung zu vermeiden. Wie Zugriff Eingangsarray direkt Index:
[ n[len(locals()['_[1]'])+sum(locals()['_[1]'])] for ... ]
. Aber ich kann keinen kompakten Weg finden, um es vor Index-out-of-Range zu schützen (während es oneliner bleibt)quelle
Schnell, 63 Bytes
Dies ist mein allererster Eintrag, daher bin ich mir der Regeln nicht 100% sicher, aber hoffentlich reicht diese Antwort aus. Ich bin mir ein wenig unsicher, wie die Eingabe in ein System erfolgen soll. Ich habe eine kürzere Antwort, wenn ich irgendwo eine Funktion übernehmen durfte, die die Eingabe zurückgeben kann.
quelle
Perl 6 , 31 Bytes
Probier es aus
Erweitert:
Um zu verstehen, wie der Code funktioniert, würde ohne
[*;0]
diesen eine Sequenz wie die folgende generiert:quelle
Gelee , 8 Bytes
Ein vollständiges Programm druckt die Ergebnisse, gefolgt von einer neuen Zeile (leere Liste erzeugt keine Ausgabe).
Probieren Sie es online!
Wie?
quelle
Python 3 , 35 Bytes
Probieren Sie es online!
Führen Sie es mit
f(*l)
wol
ist Ihre Eingabe. Wohl die Regeln für die Eingabe strecken, aber ich liebe es einfach, weiter auszupacken.quelle
APL (Dyalog Unicode) , 20 Byte SBCS
Probieren Sie es online!
quelle
Perl 5 ,
3630 + 1 (-a) = 31 BytesProbieren Sie es online!
Nimmt seine Eingabe als eine durch Leerzeichen getrennte Liste von Zahlen.
quelle
PowerShell , 25 Byte
Probieren Sie es online!
quelle