In den Standardlücken ist Folgendes verboten :
Behauptend, dass Ihre Antwort in "MyOwnLanguage" geschrieben ist, wobei der Befehl
x
"eine Folge von Zahlen lesen, diese in Dreiergruppen aufteilen und die letzten Zahlen derjenigen Gruppen ausdrucken, bei denen die zweite Zahl kleiner als die erste ist".
Hier werden wir genau dasselbe tun.
Aufgabe
Teilen Sie eine Folge positiver Ganzzahlen, deren Länge durch 3 teilbar ist, in Dreiergruppen auf und geben Sie die letzten Zahlen der Gruppen aus, bei denen die zweite Zahl kleiner als die erste ist.
Testfälle
Input Output
[] []
[1,2,3,4,5,6,7,8,9] []
[2,1,3,5,4,6,8,7,9] [3,6,9]
[3,1,4,1,5,9,2,6,5] [4]
[100,99,123] [123]
[123,123,456] []
[456,123,789] [789]
Wertung
Das ist Code-Golf . Kürzeste Antwort in Bytes gewinnt.
Es gelten Standardlücken. Denken Sie also daran, keinen eingebauten Befehl zu haben x
, der diese Aufgabe ausführt.
code-golf
arithmetic
array-manipulation
Undichte Nonne
quelle
quelle
MyOwnLanguage
denx
Befehl zu erstellen und hinzuzufügen ...: Px
speziell diese Funktion ausführt.p
, wenn ich ihn anrufe ?Antworten:
Oktave, 32 Bytes
Probieren Sie es online!
oder
Testfälle überprüfen!
quelle
Gelee ,
98 BytesProbieren Sie es online!
Wie es funktioniert
quelle
Haskell,
3029 BytesMein erster Versuch, Haskell Golf zu spielen, also habe ich vielleicht ein oder zwei Optimierungen verpasst
-1 Byte danke an @JulianWolf
quelle
x d=d
um ein Byte zu sparenMathematica, 37 Bytes
Vorausgesetzt, dies entspricht der Spezifikation, erhält ngenisis die Anerkennung für diesen Ansatz, der zu einer Einsparung von 1 Byte führt!
Funktion pur.
BlockMap[...,#,3]&
Teilt die Eingabeliste in Unterlisten der Länge 3 auf und bearbeitet dann jede Unterliste mit der FunktionIf[#>#2,Print@#3]&@@#&
. Das Ergebnis ist, dass jede qualifizierende letzte Nummer gedruckt wird. Die Funktion gibt auch einen Wert zurück (nämlich eine Liste von einemNull
Drittel, solange die Eingabeliste gültig ist), was anscheinend erlaubt ist.Mathematica,
4238 BytesVielen Dank an Martin Ender für das Speichern von 4 Bytes!
Funktion pur.
#~Partition~3
tut was du denkst.Cases[X,P:>Q]
Wählt alle Elemente aus, dieX
mit dem Muster übereinstimmenP
, und gibt das Ergebnis der:>Q
auf jede Instanz angewendeten Transformationsregel zurück . Hier ist das Muster, das abgeglichen wird{a__,b_}/;a>0
:b_
wird mit dem letzten Element der Liste unda__
allen anderen Elementen (in diesem Fall den ersten beiden) übereinstimmen ; ruf sie any
und erstz
mal. Das Sneakya>0
erweitert sich dann zuy>z>0
, was der Test ist, den wir anwenden möchten (gültig, weil die Spezifikation sagt, dass alles eine positive ganze Zahl sein wird). Und die Transformationsregel ist:>b
, die einfach jedes passende geordnete Tripel durch sein letztes Element ersetzt.Ursprüngliche Einreichung:
Reine Funktion; Eine ziemlich einfache Implementierung, mit
#.{1,-1,0}
der nicht die Differenz zwischen dem ersten und dem zweiten Element jeder 3-Element-Unterliste berechnet wird.quelle
#>#2&@@#&
kürzer. Aber insgesamt ist es noch kürzer zu verwendenCases
stattSelect
:Cases[#~Partition~3,{a__,b_}/;a>0:>b]&
a>0:>
hat zwei Arten von Magie!BlockMap
ist verlockend hier.BlockMap[If[#>#2,#3,Nothing]&@@#&,#,3]&
funktioniert und ist nur 39 Bytes ... können wir ein paar Bytes sparen?BlockMap[If[#>#2,Print@#3]&@@#&,#,3]&
wohl erfüllt die specPyth, 10 Bytes
Testsuite
quelle
R, 35 Bytes
quelle
Brachylog (2), 14 Bytes
Probieren Sie es online!
Brachylog kämpft eher mit solchen Problemen. Beachten Sie, dass dieses Programm eine schreckliche Komplexität bei der Berechnung aufweist, da es die Eingabe brachial in Dreiergruppen aufteilt (ohne eingebaute Funktion "In Gruppen aufteilen"). Es läuft schnell mit vier Gruppen, aber sehr langsam mit fünf.
Erläuterung
quelle
l÷₃;?ḍ₍
eine schnellere Alternative ist./
nicht÷
; sie sind hier gleichwertig), aber es ist ein Byte länger, also habe ich es beim Golfspielen verworfen.J , 14 Bytes
Dies ergibt ein monadisches Verb. Probieren Sie es online!
Erläuterung
quelle
Alice ,
1211 BytesDanke an Leo für das Speichern von 1 Byte.
Probieren Sie es online!
Verwendet die Codepunkte einer Zeichenfolge als Eingabeliste und gibt das Zeichen aus, das den Ausgaben entspricht, die beibehalten werden sollen.
Erläuterung
quelle
r
anstelle von Golf spielenex
. TIO05AB1E , 8 Bytes
Code:
Verwendet die 05AB1E- Codierung. Probieren Sie es online!
quelle
Gleichstrom , 30 Bytes
I / O: eine Nummer pro Zeile.
quelle
Perl 5 , 31 Bytes
30 Byte Code +
-p
Flag.Probieren Sie es online!
Ersetzt jede Gruppe von 3 Zahlen (
\d+ (\d+) (\d+)
) durch die dritte ($2
), wenn die zweite ($1
) kleiner ist als die erste ($&
), und sonst nichts.quelle
CJam , 15 Bytes
Anonymer Block, der ein Argument auf dem Stapel erwartet und das Ergebnis auf dem Stapel belässt.
Probieren Sie es online! (Führt alle Testfälle aus)
Erläuterung
quelle
Brain-Flak , 82 Bytes
Probieren Sie es online!
quelle
Gelee , 10 Bytes
Probieren Sie es online!
oder
Überprüfen Sie die Testfälle
-3 Bytes dank @LeakyNun
Erläuterung
quelle
s3µṪ×>/µ€ḟ0
s3µṪWx>/µ€
R, 37 Bytes
Version mit
scan()
der ich nicht mag, aber es macht es kürzer.Version, mit
function()
der es einfacher ist zu testen (41 Byte)Vielen Dank an die @ Giuseppe! Gute Idee, Index zu recyceln.
Prüfung:
Ausgabe:
quelle
x
von stdin ein, indem Siex=scan()
am Anfang eine Funktion verwenden, anstatt sie zu definieren. Sie können auch einfach festlegen,i=c(1,2,0)
da logische Indizes recycelt werden, z. B.x=scan();i=c(1,2,0);x[!i][x[i>1]<x[i==1]]
x=scan()
Ansatz nicht, da er die Eingabe sehr umständlich macht. Und ich kann es dann nicht wiederholbar machen.matrix()
aber irgendwie habe ich nicht geglaubt, dass es möglich sein wird, so kurz zu machen.JavaScript (ES6),
4644424139 ByteVersuch es
Geben Sie eine durch Kommas getrennte Liste von Zahlen ohne Leerzeichen ein.
Erläuterung
quelle
y%3>1&a[y-1]<a[y-2]
zu arbeiten?Schale , 8 Bytes
Probieren Sie es online!
Erläuterung
Dieses Programm ist ein bisschen umständlich, also nimm es mit mir.
Die Funktion
ΓȯΓ↑<
nimmt eine Liste der Länge 3x = [a,b,c]
,. Das ersteΓ
teilt sichx
ina
und[b,c]
und fügt sie als Argumente der Funktion hinzuȯΓ↑<
. Dies sollte äquivalent sein zu((Γ↑)<)
, aber aufgrund eines Fehlers / einer Funktion des Interpreters ist es tatsächlich äquivalent zu(Γ(↑<))
, interpretiert als Komposition vonΓ
und↑<
. Nun wirda
auf die letzte Funktion unter Verwendung von teilweise Anwendung zugeführt wird, die resultierende Funktion↑<a
ist gegebenΓ
, die dekonstruiert[b,c]
inb
und[c]
. Dannb
wird zugeführt↑<a
, was zu einer Funktion führt, die die erstenb<a
Elemente aus einer Liste entnimmt . Diese Funktion wird schließlich angewendet auf[c]
; das Ergebnis ist[c]
wenna>b
, und[]
Andernfalls. Diese Listen werden durch verkettetṁ
, um das Endergebnis zu bilden, das implizit gedruckt wird.Ohne das "Feature" hätte ich 9 Bytes:
quelle
Python 3 ,
4342 Bytes1 Byte dank xnor.
Probieren Sie es online!
quelle
MATL , 10 Bytes
Das Ergebnis wird als durch Leerzeichen getrennte Zahlen angezeigt.
Probieren Sie es online!
Oder überprüfen Sie alle Testfälle . Dadurch wird eine Zeichenfolgendarstellung der Ausgabe angezeigt, sodass ein leeres Array tatsächlich als angezeigt wird
[]
. Beachten Sie, dass in MATL eine Zahl mit einem Singleton-Array identisch ist und daher[4]
als angezeigt wird4
.Erläuterung
quelle
Röda , 15 Bytes
Röda ist fast so kurz wie die Golfsprachen ...
Dies entnimmt dem Stream drei Werte und schiebt den dritten (
_3
) zurück, wenn der zweite (_2
) kleiner ist als der erste (_1
).Die Unterstriche sind Syntaxzucker für
for
Schleifen, sodass das Programm als{{[a]if[b<c]}for a,b,c}
oder sogar geschrieben werden kann{[a]for a,b,c if[b<c]}
.Kein TIO-Link, da es aus irgendeinem Grund nicht mit TIO funktioniert (obwohl es mit der neuesten Version von Röda funktioniert, die vor der Herausforderung erstellt wurde).
quelle
Java 7,
86-85Bytes-1 Byte dank @ PunPun1000
Erläuterung:
Probieren Sie es hier aus.
quelle
3,9
für den Testfall1,2,3,4,5,6,7,8,9
statt3,6,9
).126 Bytes
Wenn Sie ein ganzes Programm mit der Methode wollen, wären es 175 Bytes :
7 Bytes mit Hilfe von TheLethalCoder gespeichert
quelle
(int[]i)
kann einfachi
keine Notwendigkeit für den Typ sein.(i)
.Python 2 , 57 Bytes
Probieren Sie es online!
quelle
CJam , 16 Bytes
Die Ausgabe wird als durch Leerzeichen getrennte Zahlen angezeigt.
Probieren Sie es online!
Erläuterung
quelle
PHP, 89 Bytes
Probieren Sie es online!
quelle
JavaScript,
108107108 BytesDies ist eine gültige anonyme JS-Funktion (Lambda). Fügen Sie
x=
am Anfang und rufen Sie wiex([5,4,9,10,5,13])
. Ausgänge als Funktionreturn
.Das Snippet nimmt die Eingabe als Liste von durch Kommas getrennten Ganzzahlen auf.
quelle
martin
unddennis
als ID zu verwenden?[5,4,9,10,5,13]
.,
führte also dazu, dass es sich eher um ein Array von Zeichenketten als um Zahlen handelte! Die Lösung ist vollkommen in Ordnung. Nur das Testfall-Snippet war falsch. Ich habe das jetzt behoben. Vielen Dank für den Hinweis! :)Perl5.8.9,
7360 Bytes(58 + 2 für das 'n'-Flag zum Lesen der gesamten Datei und a für Autosplit). Angenommen, die Eingabe besteht aus durch Leerzeichen getrennten Zahlen
Reduktion dank Dada. Einschließlich des Ausdrucks am Ende für die Sichtbarkeit würde dies 8 Bytes einsparen, wenn nicht.
quelle
print"\n"
am Ende stehen. Sie können auch$b[1]<$b[0]&&print"$b[2] "while@b=splice@a,0,3
7 Bytes sparen. Schließlich können Sie-a
flag verwenden, anstatt dies zu tun@a=split
(dies geschieht automatisch und speichert das Ergebnis in@F
statt@a
). Mit Perl 5.8.9 müssen Sie,-na
während mit neueren Perls,-a
ist genug. Das sollte Sie auf 47-48 Bytes bringen.Clojure, 43 Bytes
Langweilig :/
quelle
Bash , 61 Bytes
Probieren Sie es online!
quelle