J, 21 14 byte
Disimpan 7 byte berkat mil dan (tidak langsung) Jonathan!
{.@/:#@":"0,.-
Ini adalah empat rantai:
{.@/: (#@":"0 ,. -)
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 input 10 27 232 1000
, kita dibiarkan dengan ini:
(#@":"0 ,. -) 10 27 232 1000
2 _10
2 _27
3 _232
4 _1000
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:
(/: #@":"0 ,. -) 10 27 232 1000
27 10 232 1000
Kemudian, menggunakan {.
memberi kita elemen pertama dari daftar itu, dan kita selesai:
({.@/: #@":"0 ,. -) 10 27 232 1000
27
Versi lama
>./@(#~]=<./@])#@":"0
Masih bekerja pada perbaikan. Saya bermain golf turun dari 30, dan saya pikir ini cukup baik. Saya akan memecahnya menjadi beberapa bagian dasar:
size =: #@":"0
max =: >./
min =: <./
over =: @
right =: ]
left =: [
selectMin =: #~ right = min over right
f =: max over selectMin size
f 3 4 5
5
f 3 4 53
4
f 343 42 53
53
Begini cara kerjanya.
>./@(#~ ] = <./@]) #@":"0
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
.
(#@":"0) 409 12 13
3 2 2
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
dan 3 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 dengan 0
dijatuhkan dan 1
dipertahankan. Jadi kita dibiarkan begitu saja 12 13
. Akhirnya, sesuai dengan di atas, maks diambil, memberi kami hasil yang benar 13
, dan kami selesai.