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. #@":"0menghitung 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 13dan 3 2 2masing - masing dalam contoh ini. Batas kanan <./@],, menghitung ukuran minimum, 2dalam hal ini. ] = <./@]adalah array nilai boolean yang sama dengan minimum, 0 1 1dalam hal ini. Akhirnya, [ #~ ...mengambil nilai dari argumen kiri sesuai dengan topeng argumen kanan. Ini berarti bahwa elemen yang sesuai dengan 0dijatuhkan dan 1dipertahankan. Jadi kita dibiarkan begitu saja 12 13. Akhirnya, sesuai dengan di atas, maks diambil, memberi kami hasil yang benar 13, dan kami selesai.