Diese Herausforderung beschreibt bereits Dropsort. Allerdings bin ich ein bisschen faul und ich brauche wirklich nur ein bisschen mehr Sortierung für mein Array als zuvor, es muss nicht vollständig sortiert werden .
In Drop Sort löschen wir jedes Element weniger als jedes Element davor. In Lazy Drop Sort löschen wir jedes Element, das kleiner ist als dasjenige, das genau davor steht.
Hier ist ein Beispiel. Betrachten Sie das folgende Array:
8 6 9 9 7 2 3 8 1 3
Markieren wir jedes Element kleiner als das vorhergehende.
8 6 9 9 7 2 3 8 1 3
^ ^ ^ ^
Beachten Sie, wie weder 3
markiert wurde, noch die letzte 8
. Sie sind alle größer als das einzelne Element links von ihnen.
Wenn Sie den Algorithmus vervollständigen und die markierten Elemente entfernen, erhalten Sie:
8 9 9 3 8 3
Das sieht im Grunde mehr sortiert aus. Irgendwie. Ich bin faul.
Wie Sie vielleicht bereits herausgefunden haben, besteht Ihre Aufgabe darin, diesen Algorithmus zu implementieren.
Die Eingabe ist ein Array mit mindestens 1 positiven Ganzzahl zwischen 1 und 9, sodass Sie auch eine Ziffernfolge verwenden können.
Das ist Code-Golf , die wenigsten Bytes gewinnen!
Zusätzliche Testfälle:
1
1
1 2 3
1 2 3
5 3 1
5
1 2 3 2 1
1 2 3
1 1 1 9 9 9 1 1 1 9 9 9 1 1 1
1 1 1 9 9 9 1 1 9 9 9 1 1
9 9
9 9
5 2 4 2 3
5 4 3
Antworten:
Schale , 4 Bytes
Probieren Sie es online!
Erläuterung
quelle
JavaScript (ES6),
28 bis25 Byte3 Bytes gespart dank @Shaggy
Probieren Sie es online!
quelle
n=>p<=n
hätte toll ausgesehen(n=p)=>p<=(p=n)
funktioniert gut;)p
zum ersten Mal versuche, auf sie zuzugreifen , obwohl sie noch nicht definiert ist?a
wird anfänglich auf das Eingabearray gesetzt unda-1
führt zuNaN
(es sei denn, es enthält eine einzelne Ganzzahl; in diesem Fall wird es zu dieser Ganzzahl gezwungen).R , 27 Bytes
Probieren Sie es online!
quelle
MATL ,
98 BytesDank Giuseppe ein Byte gespart.
Probieren Sie es online!
Erläuterung:
quelle
Perl 5.10.0 +
-nl
, 16 BytesProbieren Sie es online!
quelle
perl6 -ne '$/>$_||.say;$/=$_'
Haskell, 29 Bytes
nur ein einfaches Listenverständnis.
quelle
Japt ,
87 Bytes1 Byte dank @Oliver gespeichert
Online testen!
Alternativen:
quelle
Stax , 5 Bytes
Führen Sie dies online aus und debuggen Sie es
Wir packen den Code aus, entgolfen ihn und kommentieren ihn.
Führen Sie dieses aus
Die Reihenfolge der Anweisungen ist umständlich, aber es gibt einen Grund dafür. Das Packen von Stax-Quellcode liefert nicht immer die gleiche Ausgabegröße für die gleiche Eingabegröße. Grundsätzlich haben Sie die Möglichkeit, ein Byte zu speichern, wenn das letzte Zeichen der Quelle einen niedrigeren Zeichencode hat. Hat
!
einen der niedrigsten Codes, die Sie für ein druckbares Zeichen bekommen können. (Speziell 33) Viele 6-Byte-ASCII-Stax-Programme können nicht kleiner packen. Aber wenn sie mit einem enden!
, dann können sie es. Der Grund für diese spezielle Reihenfolge von Anweisungen ist es, sicherzustellen, dass die Logik nicht am Ende des Programms endet.quelle
J, 12 Bytes
Erläuterung:
Beispiele:
Probieren Sie es online!
quelle
Gelee , 6 Bytes
I / O ist auf Saiten.
Probieren Sie es online!
quelle
×
sollte nicht für die Wiederholung von Zeichen funktionieren, aber es funktioniert.Java 8,
665548 Bytes-11 Bytes nach einem Tipp von @ OlivierGrégoire .
-7 weitere Bytes dank @ OlivierGrégoire .
Erläuterung:
Probieren Sie es online aus.
quelle
~0
wenn es im Grunde genommen ist-1
. Persönlich würde ich die intuitivere Lösung wählen, wenn die Byteanzahl die gleiche Länge hat (außerwhile(...)
vsfor(;...;)
, in diesem Fall bevorzuge ich diefor
. Danke für weitere -7 Bytes. :)Integer.MIN_VALUE
(was dann ist1<<31
, denke ich ...) ;-)Oktave , 21 Bytes
Probieren Sie es online!
Erläuterung:
Nehmen Sie einen Vektor
x
als Eingabe und erstellen Sie einen Vektor[0, diff(x)<0]
. Dabeidiff(x)
handelt es sich um einen Vektor mit dem Unterschied zwischen allen benachbarten Elementen. Behalten Sie nur diejenigen bei, die negativ sind, indem Sie sie mit Null vergleichen, und geben Sie uns eine Liste aller Elemente, die wir löschen möchten.Wir wählen dann die Elemente aus dem Eingabevektor aus, die wir behalten möchten.
quelle
V , 25 Bytes
Probieren Sie es online!
Hexdump:
Schlechteste Sprache für den Job. Aber ich habe es für eine Herausforderung getan .
quelle
k$yl+@"òç-/d
Spanisch?k$yl+@"òç-/d
könnte liberal übersetzt werden als Autsch, wer zum Teufel hat diese Schranktür offen gelassen?Dreieckigkeit , 71 Bytes
Probieren Sie es online!
Wie es funktioniert?
quelle
)IEL)rFD)2+)IE)w+h)2_stDO={M)IEm}
auf Ihre aktuelle Antwort ausweiten.)IEL)rFD)2+)IE)w+h)2_stDO={M)IEm}
Wäre dies Ihr Code, würde er sich zu Ihrer aktuellen Vorlage erweitern und dann die 2D-Befehle für diese erweiterte Vorlage ausführen. EDIT:.....).....\n....IEL....\n...)rFD)...\n..2+)IE)w..\n.+h)2_stDO.\n={M)IEm}...
und.....).........IEL.......)rFD).....2+)IE)w...+h)2_stDO.={M)IEm}...
und)IEL)rFD)2+)IE)w+h)2_stDO={M)IEm}
wären alle drei genau das gleiche Programm.Python , 40 Bytes
Probieren Sie es online!
Eingabe als Tupel von Zeichen.
Python 3 , 41 Bytes
Probieren Sie es online!
Zeichenfolge eingeben.
Python 2 , 41 Bytes
Probieren Sie es online!
Zeichenketteneingabe, nur weil Zeichenketten größer als,
id
aber Zahlen kleiner sind.quelle
Wolfram Language (Mathematica) , 33 Byte
Probieren Sie es online!
Wie es funktioniert
Der Code
# - {0}~Join~Most@#
verwandelt ein Array{a,b,c,d,e,f}
in{a,b-a,c-b,d-c,e-d,f-e}
. Wenn SieArg
dies anwenden, werden negativePi
und nicht negative Zahlen auf gesetzt0
.Pick[#, ..., 0]&
wählt die Einträge aus, in#
denen...
ein0
: steht, in unserem Fall genau die Elemente, die eine nichtnegative Zahl ergeben, wenn Sie das vorherige Element subtrahieren. Mit anderen Worten, dies sind genau die Einträge, die wir beim Lazydropsorting beibehalten möchten.quelle
Wunder , 27 Bytes
Anwendungsbeispiel:
Erläuterung
Ungolfed-Version:
Voranstellen
0
, Liste aufeinanderfolgender Paare abrufen , Listenelemente mit der ersten Nummer <= zweite Nummer beibehalten , zweite Nummer jedes Paares abrufen .quelle
Wolfram Language (Mathematica) , 20 Byte
Probieren Sie es online!
Erläuterung
Input = {8, 6, 9, 9, 7, 2, 3, 8, 1, 3}
Gruppieren Sie aufeinanderfolgende Elemente, die streng dekrementieren:
{{8, 6}, {9}, {9, 7, 2}, {3}, {8, 1}, {3}}
Nehmen Sie das erste Element von jedem:
{8, 9, 9, 3, 8, 3}
quelle
##>0
ist schick und alles, aber es spart hier nicht wirklich etwas#>#2
;) (was dazu führen würde, dass Ihr Programm mit beliebigen ganzen Zahlen arbeitet, obwohl dies nicht erforderlich ist).Python 2 ,
52464542 BytesProbieren Sie es online!
Gerettet:
quelle
SWI-Prolog, 44 Bytes
Verwendung: Rufen Sie " List -X" auf, wobei List eine in eckige Klammern gesetzte, durch Kommas getrennte Liste ist, z. B. [1,4,5,1,11,6,7].
quelle
APL + WIN, 14 Bytes
Fordert zur Eingabe eines Ganzzahlvektors auf.
quelle
05AB1E , 6 Bytes
Probieren Sie es online!
Erläuterung
quelle
Kotlin , 39 Bytes
Probieren Sie es online!
Filtern Sie Elemente, die entweder das erste Element sind (index == 0 oder sogar kürzer index <1), ODER der aktuelle Wert ist größer oder gleich dem vorherigen Element (a [i-1]).
quelle
APL (Dyalog Unicode) , 11 Bytes
Probieren Sie es online!
Dies ist eigentlich ziemlich ähnlich zu Grahams Antwort, aber in Dyalog und unabhängig entwickelt. Auch symmetrischer.
quelle
K4 , 10 Bytes
Lösung:
Beispiel:
Erläuterung:
Suchen Sie nach Indizes, bei denen das Element kleiner als das vorherige ist, und entfernen Sie diese Indizes aus der Eingabe
quelle
Attache , 24 Bytes
Probieren Sie es online!
Erläuterung
Mask
Wählt alle Elemente aus dem zweiten Argument aus, die den wahrheitsgemäßen Elementen im ersten Argument entsprechen.1'(Delta!_>=0)
berechnet die Indizes, die Elementen entsprechen, die im endgültigen Array enthalten sein sollen.Andere Versuche
28 Bytes (punktfrei):
~Mask#(1&`'##Delta#`>=#C[0])
32 Bytes:
{Mask[1'(&`<= =>Slices[_,2]),_]}
quelle
C # (.NET Core) , 33 + 18 = 51 Byte
Probieren Sie es online!
Im Grunde ist die Anweisung, wo x das erste int im Array ist oder größer oder gleich der vorherigen Zahl ist, behalte es bei. Sonst lass es fallen.
quelle
IEnumerable
. NichtToArray()
erforderlichSystem.Collections
, und das würde alle Bytes negieren, die zum Entfernen der gespeichert wurdenToArray()
.IEnumerable
in der Antwort nicht referenzieren , sondern nur als Rückgabetyp verwenden.Swift 4 ,
56,55 BytesProbieren Sie es online!
Erläuterung
quelle
Gelee , 9 Bytes
Probieren Sie es online!
Das fühlt sich ziemlich sperrig an, wäre nicht so überrascht, wenn es einen besseren Weg gibt.
quelle
Brain-Flak ,
136, 120 BytesHier ist es formatiert und "lesbar" .
Probieren Sie es online!
quelle