Herausforderung
Ein Array von Ganzzahlen, die von stdin, Funktionsargumenten, Programmargumenten oder einer anderen Methode empfangen wurden:
Geben Sie nur die minimalen und maximalen Zahlen im Array über einen Rückgabewert, stdout oder andere Anpassungsmethoden aus.
Beispielsitzung
> minmax( {0, 15, 2, 3, 7, 18, -2, 9, 6, -5, 3, 8, 9, -14} )
-14 18
Referenzimplementierung
// C++14
void minmax(std::vector<int> v) {
int min = v[0]; int max = v[0];
for(auto it : v) {
if (*it < min)
min = *it;
if (*it > max)
max = *it;
}
std::cout << min << ' ' << max << std::endl;
}
Regeln
- Möglicherweise verwenden Sie keine integrierte Funktion, um die Werte zu berechnen.
- Standardlücken sind nicht erlaubt.
- Kreative Umsetzungen sind erwünscht.
- Dies ist Code-Golf , die kürzeste Antwort gewinnt, wird aber nicht ausgewählt.
Klarstellungen
- Wenn das Array 1 Element enthält, müssen Sie es zweimal ausgeben.
- Wenn der minimale und der maximale Wert gleich sind, müssen Sie beide Werte ausgeben.
code-golf
number
array-manipulation
dkudriavtsev
quelle
quelle
code golf
Antworten:
Gelee , 3 Bytes
Probieren Sie es online!
Sortieren Sie das Array und nehmen Sie dann das 0,5-te Element.
Jelly verwendet die 1-Indizierung, und Gleitkomma-Indizierungsmittel nehmen seinen Boden und seine Decke ein.
Das 0,5-te Element würde also das 0. Element und das 1. Element ergeben.
Das 0. Element ist das letzte Element.
quelle
Python,
614937363431 Bytes-12 Bytes dank RootTwo
Weitere -12 Bytes dank chepner
-2 Bytes dank johnLate
-3 Bytes dank johnLate
quelle
[::(len(s)-1)or 1]
für den ersten Index. Und die zweite Amtszeit kann auf verkürzt werdens[:len(s)<2]
.lambda s:sorted(s)[:1]+sorted(s)[-1:]
.lambda s:sorted(s)[::len(s)-1]
lambda s:sorted(s)[::len(s)-1]
) funktioniert nicht für Arrays mit einem Element (ValueError: slice step cannot be zero
). Ein möglicher Fix wärelambda s:sorted(s*2)[::len(s*2)-1]
(34 Bytes).Brain-Flak
220218 BytesProbieren Sie es online!
Erläuterung
Zuerst verdoppelt es den Spitzenwert (in der Besetzung ist die Liste nur eine lange)
Dann benutzt es meinen Blasensortierungsalgorithmus:
Dann nimmt es den höchsten Wert des Stapels auf (dh die min)
Dann springt es, bis die Höhe des Stapels eins ist:
quelle
JavaScript (ES6), 34 Byte
sort
Es wird direkt an der richtigen Stelle sortiert, sodass ich nur auf den Index [0] für den niedrigsten undpop
den höchsten Wert aus dem Array verweisen kann. Standardmäßig wird jedoch eine Zeichenfolgensortierung durchgeführt, sodass ich einen Komparator übergeben muss.quelle
(x,y)=>x-y
Teil brauchen , es sei denn, die Verwendungsort()
mit dem Standardalgorithmus zählt als eingebaut.sort()
intern alles als Zeichenfolge behandelt wird - sorry!Mathematica, 18 Bytes
Sortiert das Array und extrahiert den ersten und letzten Wert.
quelle
R, 31 Bytes
Nicht das Original, aber hey!
quelle
ARM-Maschinencode, 26 Byte
Hex Dump (Little Endian):
Dies ist eine Funktion ohne Systemaufruf oder Bibliotheksabhängigkeit. Die Codierung ist Thumb-2, eine variable (2 oder 4 Byte) Codierung für 32-Bit-ARM. Wie man sich vorstellen kann, gibt es hier keine einfache Möglichkeit, das erste und das letzte Element zu sortieren und auszuwählen. Insgesamt ist hier nichts Besonderes los, es ist mehr oder weniger das Gleiche wie bei der Referenzimplementierung.
Ungolfed-Assembly (GNU-Syntax):
Getestet auf dem Raspberry Pi 3; Hier ist das Testskript (C99, Eingabe über argv):
quelle
Haskell, 27 Bytes
In Haskell,
min
undmax
gibt Minimum und Maximum von zwei Argumenten, nicht einer Partei . Ich konnte nicht sagen, ob dies nicht zulässig ist (es scheint, dass dies stattdessen nur zulässig istminimum
undmaximum
nicht zulässig wäre). Lassen Sie es mich also bitte wissen, wenn dies der Fall ist, und ich werde diese Antwort umgehend löschen.quelle
Oktave, 20 Bytes
Dies sortiert den Eingabevektor und gibt den ersten und letzten Wert aus.
quelle
Eigentlich 5 Bytes
Probieren Sie es online!
Erläuterung:
quelle
05AB1E ,
64 BytesErläuterung
Probieren Sie es online aus
quelle
MATL , 4 Bytes
Probieren Sie es online!
Erläuterung
quelle
Python, 29 Bytes
Teste es auf Ideone .
quelle
C
838179 Bytesquelle
...f(a,s)int*a{...
per thism,M;f(a,s)int*a;{for(m=M=*a;s--;++a)*a<m?m=*a:*a>M?M=*a:0;printf("%i %i",m,M);}
gcc
Sie können ersetzen*a>M?M=*a:0
mit*a<M?:M=*a
Brachylog , 9 Bytes
Probieren Sie es online!
quelle
V , 12 Bytes
Probieren Sie es online!
Wir danken DJMcMayhem dafür.
quelle
\o/
Ja, ich bin nicht mehr die einzige Person, die diese Sprache jemals benutzt hat!CJam,
109 BytesProbieren Sie es online aus.
Ich bin wirklich nicht gut in CJam.
quelle
0=
(aber das spart leider keine Bytes). Zwei weitere 9-Byte-Lösungen:0W]q~$f=p
oder der unbenannte Block{$2*_,(%}
.q~$(p)p;
. Mit können)
Sie das letzte Element so abrufen, wie Sie es(
für das erste verwenden.Python 2, 34 Bytes
quelle
C #, 60 Bytes
Eine naive Methode bei 93 Bytes:
quelle
PHP, 44 Bytes
quelle
Verarbeitung,
5952 BytesBei der Verarbeitung kann ich nicht aus dem Standard lesen, den ich gefunden habe, und ich weiß nicht, ob der interne Java-Compiler Lambdas unterstützt (und es ist so lange her, dass ich ernsthaftes Java schreiben musste, das ich nicht geschrieben habe weiß nicht mehr wie).
quelle
int[]
Perl 6 13 Bytes
Prüfung:
quelle
POSIX Awk, 44 Bytes
quelle
Oktave , 35 Bytes
Dies ist eine anonyme Funktion. Probiere es bei ideone aus .
Der Code vermeidet das Sortieren. Das heißt, es werden alle paarweisen "kleiner oder gleich" Vergleiche zwischen Elementen der Eingabe durchgeführt. Das Minimum ist das Element, für das alle Vergleiche zutreffen. Das Maximum ist das, für das nur ein Vergleich zutrifft.
quelle
Python,
3534 BytesAlternative Version:
Alte Version, 35 Bytes.
Ziemlich einfach: Nehmen Sie die Eingabeliste, hängen Sie das erste Element an, sortieren Sie es und nehmen Sie dann das erste und (längste) Element der resultierenden Liste. Da die Länge der Eingabe nach dem Anhängen eines Elements + 1 ist, werden das erste und das letzte Element der Liste verwendet, bei denen es sich um das minimale und das maximale Element handelt.
quelle
zsh, 22 Bytes
Definiert eine Lambda-Funktion, die das erste
$1
Argument ( ) und das letzte Argument an den vorherigen Befehl ($_
) ausgibt und$@
nach dem Sortieren übergibt , sodass der vorherige Befehl zum Aufruf dieses Lambdas wirdzsh, 21 Bytes
Das funktioniert nur, wenn es mehr als ein Argument gibt :(
sortiert
$@
, macht es zu einer Zeichenkette und ersetzt alles vom ersten bis zum letzten Leerzeichen durch ein einzelnes Leerzeichen und übergibt es dann als Eingabe an cat mit<<<
Verwendung:
quelle
Scala, 55 Bytes
Ausführen:
$ scala minmax.scala 1 2 3 4 5 6 7 8 9
quelle
Bash + Coreutils, 30 Bytes
Das sed-Skript gibt nach dem Sortieren der Eingabe die erste und die letzte Ganzzahl aus.
quelle
Gleichstrom, 110 Bytes
Helft mir,
dc
ers! Du bist meine einzige Hoffnung!Vielen Dank an @seshoumara für das Auffinden dieses Fehlers!
Ich werde später eine Erklärung hinzufügen. Hier ist es etwas aufgebrochen:
quelle
M
und initialisierenm
. Wenn jedoch in der Eingabeliste keine Nummer kleinerm=0
oder keine Nummer größer als istM=0
, erhalten Sie ein falsches Ergebnis, da Sie den Probennummern künstlich eine 0 hinzugefügt haben. Die Lösung besteht darin, die erste 0 durch?d
die zu ersetzen , die die Zahlen liest und initialisiert,M
undm
durch die letzte Zahl, wodurch sie Teil der Stichprobe wird. Führen Sie dann den Code folgendermaßen aus: echo "8 _2 5" | dc -e "? DdsMsm ....".Java, 115 Bytes
Ungolfed:
Meine allererste Code "Golf" -Lösung.
quelle