Wyzwanie
Biorąc pod uwagę tablicę liczb całkowitych otrzymanych ze stdin, argumentów funkcji, argumentów programu lub innej metody:
Tylko wyjście minimalne i maksymalne liczby w tablicy za pomocą wartości zwracanej, standardowej lub innych metod dopasowania.
Przykładowa sesja
> minmax( {0, 15, 2, 3, 7, 18, -2, 9, 6, -5, 3, 8, 9, -14} )
-14 18
Realizacja referencyjna
// 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;
}
Zasady
- Nie można używać wbudowanej funkcji do obliczania wartości.
- Standardowe luki zabronione.
- Zachęcono do kreatywnych wdrożeń.
- To jest golf golfowy , najkrótsza odpowiedź wygrywa, ale nie zostanie wybrana.
Wyjaśnienia
- Jeśli tablica zawiera 1 element, musisz go wypisać dwukrotnie.
- Jeśli wartości minimalne i maksymalne są takie same, musisz wyprowadzić je oba.
code-golf
number
array-manipulation
dkudriavtsev
źródło
źródło
code golf
Odpowiedzi:
Galaretka , 3 bajty
Wypróbuj online!
Posortuj tablicę, a następnie weź 0,5-ty element.
Galaretka stosuje indeksowanie 1, a indeksowanie zmiennoprzecinkowe oznacza, że zabierze głos i sufit.
Tak więc 0,5-ty element da ci element 0 i element 1.
0 element jest ostatnim elementem.
źródło
Python,
614937363431 bajtów-12 bajtów dzięki RootTwo
Kolejne -12 bajtów dzięki chepnerowi
-2 bajty dzięki johnLate
-3 bajty dzięki johnLate
źródło
[::(len(s)-1)or 1]
dla pierwszego indeksu dolnego. A drugi termin można skrócićs[: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]
) nie działa dla tablic z jednym elementem (ValueError: slice step cannot be zero
). Możliwą poprawką byłobylambda s:sorted(s*2)[::len(s*2)-1]
(34 bajty).Brain-Flak
220218 bajtówWypróbuj online!
Wyjaśnienie
Najpierw podwaja najwyższą wartość (w obsadzie lista jest tylko jedna długa)
Następnie używa mojego algorytmu sortowania bąbelkowego:
Następnie wybiera najwyższą wartość stosu (tj. Min)
Następnie wyskakuje, aż wysokość stosu będzie wynosić jeden:
źródło
JavaScript (ES6), 34 bajty
sort
sortuje w miejscu, więc mogę po prostu odwołać się do indeksu [0] dla najniższej wartości ipop
najwyższej wartości z tablicy, jednak domyślnie sortuje ciąg znaków, więc muszę przekazać komparator.źródło
(x,y)=>x-y
części, chyba że użyciesort()
domyślnego algorytmu liczy się jako wbudowane.sort()
wewnętrznie traktuje wszystko jak łańcuchy - przepraszam!Mathematica, 18 bajtów
Sortuje tablicę i wyodrębnia pierwszą i ostatnią wartość.
źródło
R, 31 bajtów
Nie tak oryginalny, ale hej!
źródło
Kod maszynowy ARM, 26 bajtów
Zrzut szesnastkowy (mały endian):
Jest to funkcja bez zależności wywołania systemowego lub biblioteki. Kodowanie to Thumb-2, zmienne (2 lub 4 bajty) kodowanie dla 32-bitowego ARM. Jak można sobie wyobrazić, nie ma łatwego sposobu na posortowanie i wybranie tutaj pierwszego i ostatniego elementu. Ogólnie rzecz biorąc, nie ma tu nic takiego fantazji, to mniej więcej to samo, co implementacja referencyjna.
Zestaw do gry w golfa (składnia GNU):
Testowane na Raspberry Pi 3; oto skrypt testowy (C99, wprowadzanie przez argv):
źródło
Haskell, 27 bajtów
W Haskell
min
imax
podaj minimum i maksimum dwa argumenty, a nie listę. Nie mogłem powiedzieć, czy jest to niedozwolone (wydaje się, że zamiast tegominimum
imaximum
byłoby niedozwolone), więc daj mi znać, jeśli tak, i niezwłocznie usunę tę odpowiedź.źródło
Oktawa, 20 bajtów
To sortuje wektor wejściowy i wyświetla pierwszą i ostatnią wartość.
źródło
Właściwie 5 bajtów
Wypróbuj online!
Wyjaśnienie:
źródło
05AB1E ,
64 bajtówWyjaśnienie
Wypróbuj online
źródło
MATL , 4 bajty
Wypróbuj online!
Wyjaśnienie
źródło
Python, 29 bajtów
Przetestuj na Ideone .
źródło
C,
838179 bajtówźródło
...f(a,s)int*a{...
w ten sposóbm,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
można zastąpić*a>M?M=*a:0
z*a<M?:M=*a
Brachylog , 9 bajtów
Wypróbuj online!
źródło
V , 12 bajtów
Wypróbuj online!
Podziękowania dla DJMcMayhem.
źródło
\o/
Tak, nie jestem już jedyną osobą, która kiedykolwiek używała tego języka!CJam,
109 bajtówWypróbuj online.
Naprawdę nie jestem dobry w CJam.
źródło
0=
(ale to niestety nie oszczędza żadnych bajtów). Dwa inne 9-bajtowe rozwiązania:0W]q~$f=p
lub nienazwany blok{$2*_,(%}
.q~$(p)p;
. Możesz użyć,)
aby uzyskać ostatni element, tak jak używasz,(
aby uzyskać pierwszy.Python 2, 34 bajty
źródło
PHP, 44 bajty
źródło
Processing,
5952 bytesProcessing doesn't actually let me read from stdin that I've been able to find, and I don't know if its internal Java compiler supports lambdas (and its been so long since I've had to write serious Java that I don't remember how).
źródło
int[]
Perl 6 13 bytes
Test:
źródło
C#, 60 bytes
A naïve method at 93 bytes:
źródło
POSIX Awk, 44 bytes
źródło
Octave, 35 bytes
This is an anoynymous function. Try it at ideone.
The code avoids using sorting. Namely, it does all pairwise "less than or equal" comparisons between elements of the input. The minimum is the element for which all comparisons are true. The maximum is that for which only one comparison is true.
źródło
Python,
3534 bytesAlternative version:
Old version, 35 bytes.
Fairly simple: take the input list, append the first element, sort it, then take the first and (length)th element of the resulting list. As the length of the input after appending an element is length + 1, this ends up taking the first and last element of said list, which are the minimum and maximum elements.
źródło
zsh, 22 bytes
defines a lambda function that prints its first arg (
$1
) and the last argument to the previous command ($_
), and passes it$@
after sorting it so the previous command becomes the invocation of that lambdazsh, 21 bytes
this only works fine if there's more than 1 argument :(
sorts
$@
, makes it a string and replaces everything from the first space to the last one with a single space, then passes it as input to cat with<<<
usage:
źródło
Scala, 55 bytes
To execute:
$ scala minmax.scala 1 2 3 4 5 6 7 8 9
źródło
Bash + coreutils, 30 bytes
The sed script prints, after the input is sorted, the first and last integers.
źródło
dc, 110 bytes
Help me,
dc
ers! You are my only hope!Thanks to @seshoumara for finding that bug!
I'll add an explanation later. Here it is broken up a bit:
źródło
M
andm
. But if in the input list no number is smaller thanm=0
, or no number is greater thanM=0
, then you get an incorrect result, because you artificially added 0 to the sample numbers. The solution is to replace that first 0 with?d
, which reads the numbers and initializesM
andm
with the last number, thus making it a part of the sample. Then run the code like this: echo "8 _2 5"|dc -e "?ddsMsm....".Java, 115 bytes
Ungolfed:
My first ever code "golf" solution.
źródło