Tantangan
Diberikan array bilangan bulat, diterima dari stdin, argumen fungsi, argumen program, atau metode lain:
Keluarkan hanya angka minimum dan maksimum dalam array, melalui nilai balik, stdout, atau metode pemasangan lainnya.
Sesi contoh
> minmax( {0, 15, 2, 3, 7, 18, -2, 9, 6, -5, 3, 8, 9, -14} )
-14 18
Implementasi referensi
// 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;
}
Aturan
- Anda tidak boleh menggunakan fungsi bawaan untuk menghitung nilai.
- Celah standar tidak diijinkan.
- Implementasi kreatif didorong.
- Ini kode-golf , jawaban terpendek menang tetapi tidak akan dipilih.
Klarifikasi
- Jika array berisi 1 elemen, Anda perlu menampilkannya dua kali.
- Jika nilai minimum dan maksimum adalah sama, Anda harus mengeluarkan keduanya.
code-golf
number
array-manipulation
dkudriavtsev
sumber
sumber
code golf
Jawaban:
Jelly , 3 byte
Cobalah online!
Sortir array, lalu ambil elemen ke-0,5.
Jelly menggunakan pengindeksan 1, dan pengindeksan floating point berarti mengambil lantainya dan langit-langitnya.
Jadi elemen ke-0,5 akan memberi Anda elemen ke-0 dan elemen ke-1.
Elemen 0 adalah elemen terakhir.
sumber
Python,
614937363431 byte-12 byte terima kasih kepada RootTwo
Lain -12 byte berkat chepner
-2 byte terima kasih kepada johnLate
-3 byte terima kasih kepada johnLate
sumber
[::(len(s)-1)or 1]
untuk subskrip pertama. Dan istilah kedua bisa disingkat menjadis[: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]
) tidak berfungsi untuk array dengan satu elemen (ValueError: slice step cannot be zero
). Perbaikan yang mungkin dilakukan adalahlambda s:sorted(s*2)[::len(s*2)-1]
(34 byte).Brain-Flak
220218 byteCobalah secara Online!
Penjelasan
Pertama itu menggandakan nilai teratas (dalam daftar pemain hanya satu panjang)
Kemudian ia menggunakan algoritma semacam gelembung saya:
Kemudian ia mengambil nilai teratas dari tumpukan (yaitu min)
Kemudian muncul sampai ketinggian tumpukan adalah satu:
sumber
JavaScript (ES6), 34 byte
sort
mengurutkan di tempat, jadi saya bisa merujuk ke indeks [0] untuk nilai terendah danpop
nilai tertinggi dari array, namun ia melakukan pengurutan string secara default sehingga saya harus melewati komparator.sumber
(x,y)=>x-y
bagian, kecuali jika menggunakansort()
dengan algoritma default dianggap sebagai builtin.sort()
internal memperlakukan semuanya sebagai string - maaf!Mathematica, 18 byte
Mengurutkan array dan mengekstraksi nilai pertama dan terakhir.
sumber
R, 31 byte
Bukan yang asli, tapi hei!
sumber
Kode Mesin ARM, 26 byte
Hex dump (endian kecil):
Ini adalah fungsi, tanpa ketergantungan sistem atau pustaka. Pengkodean adalah Thumb-2, variabel (2 atau 4 byte) pengkodean untuk ARM 32-bit. Seperti yang mungkin dibayangkan, tidak ada cara mudah untuk hanya mengurutkan dan memilih elemen pertama dan terakhir di sini. Secara keseluruhan tidak ada yang benar-benar suka terjadi di sini, kurang lebih sama dengan implementasi referensi.
Perakitan tidak disatukan (sintaksis GNU):
Diuji pada Raspberry Pi 3; inilah skrip pengujian (C99, input melalui argv):
sumber
Haskell, 27 byte
Di Haskell,
min
danmax
berikan minimal dan maksimal dua argumen, bukan daftar. Saya tidak tahu apakah ini tidak diizinkan (tampaknya hanya sajaminimum
danmaximum
tidak akan diizinkan) jadi tolong beri tahu saya jika benar dan saya akan segera menghapus jawaban ini.sumber
Oktaf, 20 byte
Ini mengurutkan vektor input dan menampilkan nilai pertama dan terakhir.
sumber
Sebenarnya, 5 byte
Cobalah online!
Penjelasan:
sumber
05AB1E ,
64 bytePenjelasan
Cobalah online
sumber
MATL , 4 byte
Cobalah online!
Penjelasan
sumber
Python, 29 byte
Uji di Ideone .
sumber
C,
838179 bytesumber
...f(a,s)int*a{...
per inim,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
Anda dapat mengganti*a>M?M=*a:0
dengan*a<M?:M=*a
Brachylog , 9 byte
Cobalah online!
sumber
V , 12 byte
Cobalah online!
Penghargaan untuk DJMcMayhem untuk ini.
sumber
\o/
Yay, aku bukan lagi satu-satunya orang yang pernah menggunakan bahasa ini!CJam,
109 byteCobalah online.
Saya benar-benar tidak pandai CJam.
sumber
0=
(tapi sayangnya itu tidak menyimpan byte). Dua solusi 9-byte lainnya:0W]q~$f=p
atau blok tanpa nama{$2*_,(%}
.q~$(p)p;
. Anda dapat menggunakan)
untuk mendapatkan elemen terakhir seperti yang Anda gunakan(
untuk mendapatkan elemen pertama.Python 2, 34 byte
sumber
PHP, 44 byte
sumber
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).
sumber
int[]
Perl 6 13 bytes
Test:
sumber
C#, 60 bytes
A naïve method at 93 bytes:
sumber
POSIX Awk, 44 bytes
sumber
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.
sumber
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.
sumber
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:
sumber
Scala, 55 bytes
To execute:
$ scala minmax.scala 1 2 3 4 5 6 7 8 9
sumber
Bash + coreutils, 30 bytes
The sed script prints, after the input is sorted, the first and last integers.
sumber
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:
sumber
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.
sumber