J, 21 14 bytes
Economizou 7 bytes graças a milhas e (indiretamente) Jonathan!
{.@/:#@":"0,.-
Esta é uma cadeia de quatro:
{.@/: (#@":"0 ,. -)
Vamos passar por cima da entrada 10 27 232 1000
. O garfo interno consiste em três dentes. #@":"0
calcula os tamanhos, ,.
concata cada tamanho com seu -
membro negado ( ). Para entrada 10 27 232 1000
, ficamos com isso:
(#@":"0 ,. -) 10 27 232 1000
2 _10
2 _27
3 _232
4 _1000
Agora, temos {.@/:
como dente externo. Isso é monádico primeiro ( {.
) sobre tipo diádico ( /:
). Ou seja, pegaremos o primeiro elemento do resultado da diádica /:
. Isso classifica o argumento correto de acordo com o argumento esquerdo, o que nos fornece como entrada:
(/: #@":"0 ,. -) 10 27 232 1000
27 10 232 1000
Então, usar {.
nos fornece o primeiro elemento dessa lista e estamos prontos:
({.@/: #@":"0 ,. -) 10 27 232 1000
27
Versão antiga
>./@(#~]=<./@])#@":"0
Ainda trabalhando em melhorias. Joguei a partir dos 30, e acho que isso é bom o suficiente. Vou primeiro dividi-lo em 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
Veja como isso funciona.
>./@(#~ ] = <./@]) #@":"0
Este é um trem monádico, mas esta parte é um gancho. O verbo >./@(#~ ] = <./@])
é chamado com argumento esquerdo como a entrada para a cadeia principal e os tamanhos, definidos como #@":"0
, como argumento correto. Isso é calculado como comprimento ( #
) sobre ( @
) formato padrão ( ":
), ou seja, stringificação numérica, que é aplicada às células 0 (ou seja, membros) da entrada ( "0
).
Vamos examinar o exemplo de entrada 409 12 13
.
(#@":"0) 409 12 13
3 2 2
Agora, o verbo interior >./@(#~ ] = <./@])
. Parece >./@(...)
, o que efetivamente significa o valor máximo ( >./
) de ( @
) o que está dentro (...)
. Quanto ao interior, este é um trem de quatro, equivalente a este de cinco trens:
[ #~ ] = <./@]
[
refere-se ao argumento original e ]
refere-se à matriz de tamanho; 409 12 13
e 3 2 2
respectivamente neste exemplo. O dente certo,, <./@]
calcula o tamanho mínimo, 2
neste caso. ] = <./@]
é uma matriz booleana de valores igual ao mínimo, 0 1 1
neste caso. Por fim, [ #~ ...
recebe valores do argumento esquerdo de acordo com a máscara do argumento direito. Isso significa que os elementos correspondentes 0
são eliminados e 1
retidos. Então ficamos com 12 13
. Finalmente, de acordo com o exposto acima, o máximo é obtido, fornecendo o resultado correto de 13
e pronto.