Diberikan daftar kosong dari bilangan bulat desimal positif, menghasilkan angka terbesar dari himpunan angka dengan digit paling sedikit.
Daftar input tidak akan berada dalam urutan tertentu dan dapat berisi nilai berulang.
Contoh:
[1] -> 1
[9] -> 9
[1729] -> 1729
[1, 1] -> 1
[34, 3] -> 3
[38, 39] -> 39
[409, 12, 13] -> 13
[11, 11, 11, 1] -> 1
[11, 11, 11, 11] -> 11
[78, 99, 620, 1] -> 1
[78, 99, 620, 10] -> 99
[78, 99, 620, 100] -> 99
[1, 5, 9, 12, 63, 102] -> 9
[3451, 29820, 2983, 1223, 1337] -> 3451
[738, 2383, 281, 938, 212, 1010] -> 938
Kode terpendek dalam byte menang.
code-golf
number
arithmetic
Hobi Calvin
sumber
sumber
Jawaban:
Pyth,
736 byteTest Suite
Penjelasan:
Solusi 7 byte:
Test Suite
Penjelasan:
sumber
Python 2,
4842 byte-6 byte terima kasih kepada @Dennis (gunakan
min
bukansorted
)Semua test case ada di ideone
Ambil minimum daftar dengan (panjang, -nilai)
sumber
min
harus bekerjasorted
.sorted()[0]
untukmin
? Saya menganggap itu modifikasi sepele dari kode asli Anda.len(`x`)+1./x
dengan panjang yang sama. Sayang sekali Anda membutuhkannya1.
.Jelly , 7 byte
Uji di TryItOnline
Atau lihat semua uji juga di TryItOnline
Bagaimana?
sumber
05AB1E , 5 byte
Kode:
Penjelasan:
Menggunakan pengkodean CP-1252 . Cobalah online!
sumber
Ruby, 34 byte
Lihat di eval.in: https://eval.in/643153
sumber
MATL , 14 byte
Cobalah online!
Penjelasan:
sumber
Retina ,
2416 byteCobalah online! atau jalankan semua test case .
Disimpan 8 byte berkat Martin!
Semua pengujian menggunakan versi kode yang sedikit lebih tua, tetapi algoritmanya identik. Saya akan memperbaruinya agar lebih dekat ketika saya mendapatkan lebih banyak waktu.
Baris baru tertinggal sangat penting. Mengurutkan angka dengan membalikkan nilai numerik, lalu mengurutkannya dengan jumlah digit. Ini meninggalkan kita dengan angka terbesar dengan digit paling sedikit di posisi pertama, jadi kita bisa menghapus digit yang tersisa.
sumber
G1`
untuk tahap terakhir.#
. Anda hanya peduli dengan urutan relatif untuk panjang bilangan bulat yang diberikan, dan dalam satu panjang penyortiran leksikografis angka benar.\w+
sebagai default untuk menyortir, dengan cara itu saya tidak perlu berjuang sebanyak mungkin untuk membuat suite tes;)Mathematica,
3331 byteMinimalBy memilih semua elemen dari daftar input asli dengan skor terkecil sesuai
IntegerLength
, yaitu, dengan jumlah digit terkecil; dan kemudian Max menghasilkan yang terbesar.Terima kasih kepada Martin Ender untuk menemukan, dan kemudian menghemat, 2 byte untuk saya :)
sumber
Perl 6 , 18 byte
Penjelasan:
Pemakaian:
sumber
Jelly , 8 byte
Cobalah online! atau Verifikasi semua kasus uji.
Penjelasan
sumber
JavaScript (ES6), 51
Uji
sumber
J,
2114 byteDisimpan 7 byte berkat mil dan (tidak langsung) Jonathan!
Ini adalah empat rantai:
Mari kita berjalan menuju input
10 27 232 1000
. Garpu bagian dalam terdiri dari tiga tine.#@":"0
menghitung ukuran,,.
menggabungkan setiap ukuran dengan anggota yang dinegasikan (-
). Untuk input10 27 232 1000
, kita dibiarkan dengan ini:Sekarang kita punya
{.@/:
garis luar. Ini adalah monadic first ({.
) di atas dyadic sort (/:
). Artinya, kita akan mengambil elemen pertama hasil diad/:
. Ini mengurutkan argumen kanannya sesuai dengan argumen kirinya, yang memberi kita masukan dari kami:Kemudian, menggunakan
{.
memberi kita elemen pertama dari daftar itu, dan kita selesai:Versi lama
Masih bekerja pada perbaikan. Saya bermain golf turun dari 30, dan saya pikir ini cukup baik. Saya akan memecahnya menjadi beberapa bagian dasar:
Begini cara kerjanya.
Ini adalah kereta monadik, tetapi bagian ini adalah kail. Kata kerjanya
>./@(#~ ] = <./@])
disebut dengan argumen kiri sebagai input ke rantai utama dan ukuran, didefinisikan sebagai#@":"0
, sebagai argumen yang tepat. Ini dihitung sebagai panjang (#
) di atas (@
) format default (":
), yaitu, pengencangan numerik, yang dibuat untuk diterapkan pada 0-sel (yaitu anggota) dari input ("0
).Mari kita melihat contoh input
409 12 13
.Sekarang untuk kata kerja bagian dalam
>./@(#~ ] = <./@])
,. Sepertinya>./@(...)
, yang secara efektif berarti nilai maksimum (>./
) dari (@
) apa yang ada di dalamnya(...)
. Sedangkan untuk bagian dalam, ini adalah empat kereta, setara dengan lima kereta ini:[
merujuk ke argumen asli, dan]
merujuk ke array ukuran;409 12 13
dan3 2 2
masing - masing dalam contoh ini. Batas kanan<./@]
,, menghitung ukuran minimum,2
dalam hal ini.] = <./@]
adalah array nilai boolean yang sama dengan minimum,0 1 1
dalam hal ini. Akhirnya,[ #~ ...
mengambil nilai dari argumen kiri sesuai dengan topeng argumen kanan. Ini berarti bahwa elemen yang sesuai dengan0
dijatuhkan dan1
dipertahankan. Jadi kita dibiarkan begitu saja12 13
. Akhirnya, sesuai dengan di atas, maks diambil, memberi kami hasil yang benar13
, dan kami selesai.sumber
>./@#~[:(=<./)#@":"0
. Saya pikir mungkin ada sedikit lebih banyak untuk disimpan{.@/:#@":"0,.-
tetapi inputnya harus berbentuk daftar400 12 13
?JavaScript (ES6), 62 byte
sumber
dc, 54 byte
Penjelasan:
Jalankan contoh: 'input.txt' berisi semua kasus uji dalam pernyataan pertanyaan
Keluaran:
sumber
Java 7,
112104 bytePendekatan yang berbeda untuk menyimpan beberapa byte berkat @ Barteks2x .
Kasus yang tidak disatukan & uji:
Coba di sini.
Keluaran:
sumber
bash, awk, urutkan 53 byte
Baca input dari stdin, satu nilai per baris
bash and sort,
5857 bytesumber
while
dan((
.JavaScript ES6,
807770 byteSaya harap saya pergi ke arah yang benar ...
sumber
a.map(i=>i.length).sort((a,b)=>a-b)[0]
denganMath.min(...a.map(i=>i.length))
?Math.max
:a=>(m=Math.max)(...a.filter(l=>l.length==-m(...a.map(i=>-i.length))))
Tampaknya hanya menghemat 1 byte.filter
dapat diganti denganmap
yang mengembalikan0
nilai yang tidak lulus tes:a=>(m=Math.max)(...a.map(l=>l.length+m(...a.map(i=>-i.length))?0:l))
Brachylog , 16 byte
Cobalah online!
Penjelasan
sumber
Haskell, 39 byte
sumber
34
untuk2
.Javascript (ES6),
575453 byteSebagai catatan, versi saya sebelumnya lebih berorientasi matematika tetapi 1 byte lebih besar:
Uji kasus
sumber
MATL , 11 byte
Input adalah vektor kolom (menggunakan
;
sebagai pemisah), sepertiCobalah online! Atau verifikasi semua kasus uji .
Penjelasan
Mari kita gunakan input
[78; 99; 620; 100]
sebagai contoh.sumber
Perl,
3837 byteTermasuk +1 untuk
-a
Berikan masukan pada STDIN:
maxmin.pl
:Menggunakan memori linier dalam jumlah terbesar, jadi jangan coba ini pada jumlah yang terlalu besar. Solusi tanpa cacat itu adalah 38 byte:
Semua ini sangat aneh dan tidak terasa optimal sama sekali ...
sumber
R,
724136 byteMenulis ulang fungsi dengan pendekatan baru. Golf 5 byte berkat saran dari @bouncyball.
Dijelaskan:
Diindentasikan / dijelaskan:
sumber
function
:i=scan();n=nchar(i);max(i[n==min(n)])
n=nchar(i<-scan())
.Bash + coreutils, 58 byte
Format input adalah satu nilai per baris. Saran bermain golf disambut.
Penjelasan:
sumber
sed q
=head -1
Python 2 - 41 byte
sumber
Python 2, 58 byte
sumber
Python 3, 56 byte
Gunakan lambda di lambda!
Python 2, 53 byte
Sama tetapi dengan backticks
sumber
Pip , 11 byte
Mengambil input sebagai argumen baris perintah. Cobalah online!
Pertama kali menggunakan
S
ort-K
Operator bermata! Seperti Pythonsorted()
, dibutuhkan fungsi yang diterapkan pada setiap item yang dapat diubah dan hasil yang digunakan sebagai kunci pengurutan. Begini cara kerja program ini:sumber
Clojure, 63 byte
seperti dalam:
Meskipun saya yakin ada cara untuk membuatnya lebih kecil.
sumber
PHP, 86 Bytes
sumber