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. #@":"0
calcola 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 13
e 3 2 2
rispettivamente in questo esempio. Il dente giusto <./@]
, calcola la dimensione minima, 2
in questo caso. ] = <./@]
è una matrice booleana di valori pari al minimo, 0 1 1
in questo caso. Infine, [ #~ ...
prende i valori dall'argomento sinistro in base alla maschera dell'argomento destro. Ciò significa che gli elementi corrispondenti 0
vengono eliminati e 1
mantenuti. Quindi siamo rimasti con 12 13
. Infine, secondo quanto sopra, viene preso il massimo, dandoci il risultato corretto di 13
e abbiamo finito.