Intro
Seorang teman mengajukan pertanyaan hari ini dengan cara yang sedikit berbeda - "Bisakah satu perintah [Python] menentukan yang terbesar dari beberapa bilangan bulat DAN bahwa mereka tidak sama?".
Meskipun kami tidak menemukan cara untuk melakukan ini dalam definisi yang masuk akal dari "satu perintah", saya pikir itu mungkin masalah yang menyenangkan untuk golf.
Tantangan
" Kembalikan yang terbesar dari daftar bilangan bulat jika-dan-hanya-jika semuanya tidak sama. "
Lebih spesifik:
Diberikan string yang hanya berisi daftar bilangan bulat yang dipisahkan koma:
- Jika semuanya sama, tidak ada pengembalian / keluaran
- Lain, return / output yang terbesar
Aturan
- The masukan harus string yang berisi hanya daftar dipisahkan koma bilangan bulat
- The Output harus baik apa-apa (tidak ada output apapun), atau elemen terbesar dari input, diwakili seperti di input
Entri dapat berupa program lengkap atau hanya fungsi, asalkan Anda memberikan beberapa cara untuk mengujinya!
Asumsi
- Asumsikan elemen daftar input mungkin lebih dari satu digit tetapi tidak lebih besar dari (2 32 - 1)
- Asumsikan daftar input tidak lebih dari satu juta elemen
- Asumsikan input tidak akan menyertakan nilai negatif
- Asumsikan input tidak akan pernah kosong
Untuk menghindari keraguan, penjelasan tentang tantangan yang diberikan tepat setelah "Secara lebih spesifik" akan menggantikan pernyataan tantangan di atasnya ("Kembalikan yang terbesar ...").
Contohnya
(1) Semua sama:
Input: 1,1
Output:
(2) Berbeda:
Input: 1,2
Output: 2
(3) Nol !:
Input: 0,0,0,0,0,0,0,1,0,0
Output: 1
(4) Acak:
Input: 7,3,8,4,8,3,9,4,6,1,3,7,5
Output: 9
(5) Angka lebih besar, daftar lebih besar:
Input: 627,3894,863,5195,7789,5269,8887,3262,1448,3192
Output: 8887
Contoh tambahan:
(6) Semua sama, daftar lebih besar:
Input: 7,7,7,7,7,7,7,7,7
Output:
(7) Semua sama, daftar lebih besar, angka lebih besar:
Input: 61976,61976,61976,61976,61976,61976,61976,61976,61976,61976,61976,61976,61976,61976,61976,61976,61976,61976,61976,61976,61976,61976,61976
Output:
(8) Tidak sama, daftar lebih besar, angka lebih besar:
Input: 96185,482754,96185,96185,96185,96185,96185,96185,7,96185,96185,96185,96185,96185,96185,96185,96185,96185,96185,96185,96185,96185,96185,96185,96185,961185,96185,96185,96185
Output: 961185
Mencetak gol
Ini code-golf
, jadi kode dengan jumlah byte terpendek menang!
None
dalam python) daripada menghasilkan apa-apa? Juga, mengapa input harus berupa string daripada daftar? Dan apa yang Anda maksud dengan elemen terbesar dari input, diwakili sebagaimana di input7,3,7,2
.,
pada input?Jawaban:
R ,
5037 byte-33 bytes berkat digEmAll! -13 byte terima kasih kepada rturnbull!
Cobalah online!
sumber
MathGolf , 5 byte
Cobalah online!
Penjelasan
Ini berfungsi karena operator maks dan buangan dari operator kiri tidak melakukan apa pun untuk daftar kosong. Nah, operator maks menghapus daftar dan tidak mendorong apa pun untuk daftar kosong.
Itu bisa 4 byte jika input bisa diambil sebagai daftar.
sumber
Perl 6 ,
26 2322 byte-1 byte terima kasih kepada nwellnhof
Cobalah online!
Mengembalikan slip kosong jika semuanya sama.
Penjelasan
sumber
EVAL
trick rapi dan Anda bahkan dapat menyimpan byte dengano&EVAL
.if +.Set
bekerjaJelly , 4 byte
Program lengkap yang menerima input sebagai argumen baris perintah (tanpa tanda kutip) yang mencetak output yang diperlukan
(Perhatikan bahwa ini berkaitan dengan: input kosong seperti
, input satu item seperti
7
dan beberapa input item7,8,7
seperti yang sepertinya dibutuhkan oleh spec).Cobalah online!
Bagaimana?
sumber
APL (Dyalog Classic) , 6 byte
Cobalah online!
sebuah kereta komputasi maksimum (
⌈/
) tanpa (~
) yang minium (⌊/
) berubah menjadi matriks (⍪
)jika input hanya berisi satu elemen yang berbeda,
⌈/~⌊/
akan kosong dan⍪
akan mengembalikan matriks 0 × 1 yang menjadikan apa-apajika tidak,
⌈/~⌊/
akan menjadi vektor 1-elemen dan itu⍪
akan menjadi matriks 1x1 (secara visual tidak dapat dibedakan dari skalar) yang berisi maksimumsumber
CJam ,
1613 byteCobalah online!
sumber
Python 2 , 37 byte
output ke stderr (debug pada tio).
Cobalah online!
sumber
Python 2 ,
4241 byteCobalah online!
sumber
element, element, ...
. yaitu, tidak harus tertutup dalam tanda kurung.input
secara defaulteval
s string apa pun dilewatkan dari stdin.,
, karena solusi Anda kesalahan jika inputnya hanya satu nomor!=
ke a>
karena input tidak akan pernah kosong?Haskell ,
777561 byteCobalah online!
('[':).(++"]")
mengambil string (mis."1,2,1,3"
) dan membungkusnya dalam karakter braket ("[1,2,1,3]"
). Kemudianread
ubah string menjadi daftar bilangan bulat ([1,2,1,3]
).Fungsi ini
f
menggunakan tip ini untuk persyaratan yang lebih pendek jika salah satu hasilnya adalah daftar kosong.any(/=a!!0+0)a
memeriksa apakah daftara
berisi elemen apa pun yang tidak sama dengan elemen pertamanyaa!!0
. (+0
Diperlukan sedemikian sehinggaread
tahu harus mencari daftar angka.) Jika semua elemen sama, hasil tes iniFalse
dan string kosong dikembalikan. Jika tidakshow(maximum a)
, itu adalah daftar maksimum yang dikonversi ke string, dikembalikan.sumber
Merah, 81 byte
Seperti solusi R, sebagian besar kode menangani string input "1,1,2,44,1". Jika kita dapat memiliki itu sebagai blok, misalnya:,
x: [1 1 2 44 1]
maka kita dapat melakukannya dalam 41 byte:sumber
sort x: unique load replace/all input","" "if 1 <>length? x[last x]
untuk 67 byte. Sayangnyainput
tidak bekerja di TIO. Jika Anda menjadikannya func, berfungsi dengan baik di TIO: 73 byteAPL (Dyalog Unicode) , 12 byte
Program lengkap. Meminta string dari stdin.
Cobalah online!
⎕
meminta dan mengevaluasi ekspresi (koma menyatukan angka-angka ke dalam daftar){
...}
terapkan lambda anonim berikut (⍵
adalah argumen; daftar angka):1≠
[jika] 1 berbeda dari ...≢
penghitungan ...∪
nomor unik di ...⍵
Daftar:
kemudian⌈/
mengembalikan maks melintasi (pengurangan maksimum lit) ...⍵
Daftar[lain: tidak melakukan apa-apa]
sumber
⌈/~⌊/
JavaScript (Node.js) , 49/53 byte
Versi asli saya menggunakan
.every()
, 53 byteApakah fungsi yang mengembalikan '' dihitung sebagai tidak ada keluaran? Tentu ini dapat diperbaiki ...
Cobalah online!
Versi yang ditingkatkan menggunakan
Set()
oleh Shaggy , 49 byteCobalah online!
sumber
Neim , 4 byte
Penjelasan:
Cobalah online!
sumber
Oktaf , 28 byte
Mengembalikan maksimum (angka, yang merupakan matriks 1x1) atau matriks kosong (1x0).
Cobalah online!
sumber
Japt, 16 byte
Ini akan menjadi 9 jika bukan karena format input ketat yang tidak perlu, 7 jika melempar kesalahan dianggap tidak menghasilkan apa-apa.
Mengasumsikan string berisi setidaknya 2 bilangan bulat.
Cobalah
sumber
Common Lisp, 102 byte
Cobalah online!
Ukurannya terutama karena memasukkan data; dengan input sebagai daftar biasa, panjangnya berkurang menjadi 46 byte:
sumber
XPath 3.1, 54 byte
dengan string input sebagai item konteks:
Dapat dikurangi dengan satu karakter jika Anda mengizinkan konteks untuk mengikat awalan yang lebih pendek daripada "xs" ke namespace XML Schema.
Penjelasan: mengambil string input, tokenizes pada pemisah ",", berlaku
xs:int()
untuk setiap token untuk mengkonversi ke integer, menghitung maks urutan, output maks yang diberikan asalkan predikat$t!=$t
benar. Jika A dan B adalah urutan, makaA!=B
benar jika ada sepasang item (a dari A, b dari B) sedemikian rupaa!=b
.Jika input dapat diberikan sebagai urutan bilangan bulat $ s daripada string yang dipisahkan koma maka solusinya berkurang menjadi
(15 byte - yang mungkin merupakan solusi terpendek dalam bahasa yang tidak dirancang khusus untuk singkatnya)
CATATAN : ini tidak memenuhi persyaratan "seperti yang ada dalam input" - jika ada bilangan bulat dengan angka nol di depan atau tanda tambah di input, ini akan hilang. Saya menduga itu benar dari banyak solusi lain juga.
sumber
K4 ,
3835 byteKasus uji:
Saya tidak terlalu fasih dalam varian k yang tersedia di TiO, jadi tidak ada contoh online yang tersedia, saya akan mencoba memunculkan satu
Penjelasan
Jika Anda bertanya-tanya mengapa operasi tertentu dilakukan sebelum yang lain, K4 tidak memiliki prioritas operator, alih-alih menafsirkan dari kanan ke kiri (meskipun Anda dapat menggunakan tanda kurung untuk diutamakan). Ekspresi yang dipisahkan oleh titik koma.
Mungkin bisa bermain golf lebih banyak, bukan penggemar harus menggunakan fungsi maks darurat di akhir.
EDIT: Jika koma dalam output adalah masalah, itu dapat diperbaiki dengan dua byte lagi:
Mengambil total ke
4037, tetapi koma sebelum nomor berarti bahwa itu adalah daftar elemen tunggal yang bertentangan dengan atom.sumber
PHP (<= 5.6)
6474 byteJalankan sebagai pipa dengan
-nR
atau uji secara onlinesplit
dihapus di PHP7, tetapi karena saya harus menambahkan 10 untuk memperbaiki beberapa masalah, itu layak digunakan daripadaexplode
yang kira-kira setara dalam kasus ini.sumber
Also this doesn't work when there are more than one element with the max value
Saya missread yangIf they are all equal, return/output nothing
akanIf they are equal, return/output nothing
berarti jika ada lebih dari satu untuk output kosong. Menambahkan==count($a)
perbaikan itu. Karenaarray_count_values
menghitung berapa kali muncul dalam array, jika itu sama dengan jumlah total elemen dalam array maka output '' jika tidak output max$argn
mengambilnya dari stdin (ini telah digunakan dalam beberapa jawaban golf) Saya bisa memberikan contoh tidak hanya milik saya tetapi pengguna lain.Japt
-hF
, 8 byteCobalah
-3
byte jika input dapat diambil sebagai array.sumber
05AB1E ,
98 byte-1 byte berkat @Cowabunghole .
Cobalah secara online atau verifikasi semua kasus uji .
Penjelasan:
sumber
',¡ZsËiõ
, menghemat 1 bytePython 2 , 44 byte
Cobalah online!
sumber
eval
dengan Python mengkonversi string yang dibatasi koma ke daftar?k=input()
dan mendapatkan hasil yang sama.Ohm v2 , 9 byte
Cobalah online! Penjelasan:
sumber
Arang , 15 byte
Cobalah online! Tautan adalah untuk mengucapkan versi kode. Penjelasan:
Pisahkan input pada koma dan masukkan setiap nilai ke integer.
Uji apakah nilai maksimum lebih besar dari nilai minimum.
Jika demikian maka masukkan nilai maksimum ke string dan cetak.
sumber
Mathematica, 43 byte
Fungsi murni. Mengambil string yang dipisahkan koma sebagai input dan mengembalikan nomor atau
Null
. Saya percaya ini valid, karenaNull
tidak ditampilkan secara grafis:sumber
C (gcc) , 91 byte
Cobalah online!
Degolf
sumber
M(char*s)
alih-alihM(s)char*s;
danindex()
bukannyastrchr()
Pyth, 7 byte
Cobalah online!
Semua test case (kode yang sedikit berbeda untuk format output yang lebih baik)
Karena Pyth didasarkan pada Python, input pengguna selalu diartikan sebagai string, yang kemudian dapat dilewati
Penjelasan:eval()
. Semua program Pyth secara otomatis dijalankanQ=eval(input())
sebagai instruksi pertama mereka.sumber
Java (JDK) , 101 byte
Cobalah online!
Dijelaskan
Solusi bonus!
Terlepas dari upaya terbaik saya, saya tidak bisa mendapatkan solusi ini menggunakan regex dan Streams hingga kurang dari 105 byte, tetapi saya benar-benar menyukai keanggunannya sehingga harus menyebutkannya secara terhormat;
sumber
?
) dan loop reguler dan kembali (bukan aliran).MATL ,
159 byteCobalah online!
Banyak testcases
Hanya berusaha menjaga agar matl MATL saya tidak terlalu berkarat!
Sunting : berkarat setelah semua; disimpan 6 byte, terima kasih kepada @LuisMendo.
Penjelasan
sumber
Pip , 13 byte
Cobalah online!
Menggunakan pendekatan dari solusi APL ngn :
5 byte pertama
a^:',
membagi string input pada koma.Alternatif solusi 13-byte:
sumber