J, 21 14 byte
Risparmiato 7 byte grazie a miglia e (indirettamente) Jonathan!
{.@/:#@":"0,.-
Questa è una catena a quattro:
{.@/: (#@":"0 ,. -)
Camminiamo sopra l'input 10 27 232 1000. La forcella interna è composta da tre denti. #@":"0calcola le dimensioni, ,.concede ogni dimensione con il suo -elemento negato ( ). Per input 10 27 232 1000, ci resta questo:
(#@":"0 ,. -) 10 27 232 1000
2 _10
2 _27
3 _232
4 _1000
Ora, abbiamo {.@/:come dente esterno. Questo è monadico first ( {.) su dyadic sort ( /:). Cioè, prenderemo il primo elemento del risultato di diadico /:. Questo ordina il suo argomento giusto in base al suo argomento sinistro, che ci dà per il nostro contributo:
(/: #@":"0 ,. -) 10 27 232 1000
27 10 232 1000
Quindi, utilizzando {.ci fornisce il primo elemento di tale elenco e abbiamo finito:
({.@/: #@":"0 ,. -) 10 27 232 1000
27
Vecchia versione
>./@(#~]=<./@])#@":"0
Continuo a lavorare sui miglioramenti. Ho giocato a golf da 30, e penso che sia abbastanza buono. Ho intenzione di scomporlo per primo in parti di base:
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
Ecco come funziona.
>./@(#~ ] = <./@]) #@":"0
Questo è un treno monadico, ma questa parte è un gancio. Il verbo >./@(#~ ] = <./@])viene chiamato con argomento left come input per la catena principale e le dimensioni, definite come #@":"0, come argomento right. Viene calcolato come formato predefinito length ( #) over ( @) (": ), ovvero stringificazione numerica, che viene fatta applicare alle celle 0 (cioè membri) dell'input ( "0).
Camminiamo sull'input di esempio 409 12 13.
(#@":"0) 409 12 13
3 2 2
Ora, per il verbo interiore, >./@(#~ ] = <./@]). Sembra >./@(...)che significhi effettivamente il massimo valore ( >./) di ( @) cosa c'è dentro (...). Per quanto riguarda l'interno, questo è un quattro treni, equivalente a questo cinque treni:
[ #~ ] = <./@]
[fa riferimento all'argomento originale e ]fa riferimento all'array size; 409 12 13e 3 2 2rispettivamente in questo esempio. Il dente giusto <./@], calcola la dimensione minima, 2in questo caso. ] = <./@]è una matrice booleana di valori pari al minimo, 0 1 1in questo caso. Infine, [ #~ ...prende i valori dall'argomento sinistro in base alla maschera dell'argomento destro. Ciò significa che gli elementi corrispondenti 0vengono eliminati e 1mantenuti. Quindi siamo rimasti con 12 13. Infine, secondo quanto sopra, viene preso il massimo, dandoci il risultato corretto di 13e abbiamo finito.