J, 21 14 bytes
¡Ahorró 7 bytes gracias a las millas y (indirectamente) a Jonathan!
{.@/:#@":"0,.-
Esta es una cadena de cuatro:
{.@/: (#@":"0 ,. -)
Pasemos por la entrada 10 27 232 1000
. La horquilla interna consta de tres dientes. #@":"0
calcula los tamaños, ,.
concatena cada tamaño con su -
miembro negado ( ). Para la entrada 10 27 232 1000
, nos queda esto:
(#@":"0 ,. -) 10 27 232 1000
2 _10
2 _27
3 _232
4 _1000
Ahora, tenemos {.@/:
como el diente externo. Esto es monádico primero ( {.
) sobre dyadic sort ( /:
). Es decir, tomaremos el primer elemento del resultado de dyadic /:
. Esto ordena su argumento derecho de acuerdo con su argumento izquierdo, que nos da para nuestra entrada:
(/: #@":"0 ,. -) 10 27 232 1000
27 10 232 1000
Luego, usar {.
nos da el primer elemento de esa lista, y hemos terminado:
({.@/: #@":"0 ,. -) 10 27 232 1000
27
Versión antigua
>./@(#~]=<./@])#@":"0
Todavía estoy trabajando en mejoras. Jugué golf desde 30, y creo que esto es lo suficientemente bueno. Primero lo dividiré en partes básicas:
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
Así es como funciona esto.
>./@(#~ ] = <./@]) #@":"0
Este es un tren monádico, pero esta parte es un gancho. El verbo >./@(#~ ] = <./@])
se llama con argumento izquierdo como entrada a la cadena principal y los tamaños, definidos como #@":"0
, como argumento derecho. Esto se calcula como longitud ( #
) sobre ( @
) formato predeterminado (":
), es decir, cadena de caracteres numérica, que se aplica para aplicar a las celdas 0 (es decir, miembros) de la entrada ( "0
).
Veamos la entrada de ejemplo 409 12 13
.
(#@":"0) 409 12 13
3 2 2
Ahora para el verbo interior, >./@(#~ ] = <./@])
. Parece >./@(...)
que significa efectivamente el valor máximo ( >./
) de ( @
) lo que hay dentro (...)
. En cuanto al interior, este es un tren de cuatro, equivalente a este tren de cinco:
[ #~ ] = <./@]
[
se refiere al argumento original y se ]
refiere a la matriz de tamaño; 409 12 13
y 3 2 2
respectivamente en este ejemplo. El diente derecho <./@]
, calcula el tamaño mínimo, 2
en este caso. ] = <./@]
es una matriz booleana de valores igual al mínimo, 0 1 1
en este caso. Finalmente, [ #~ ...
toma valores del argumento izquierdo de acuerdo con la máscara de argumento derecho. Esto significa que los elementos que corresponden 0
se descartan y 1
retienen. Entonces nos quedamos con 12 13
. Finalmente, de acuerdo con lo anterior, se toma el máximo, dándonos el resultado correcto de 13
, y hemos terminado.