J, 21 14 bytes
Saved 7 bytes thanks to miles and (indirectly) Jonathan!
{.@/:#@":"0,.-
This is a four-chain:
{.@/: (#@":"0 ,. -)
Let's walk over the input 10 27 232 1000. The inner fork consists of three tines. #@":"0 calculates the sizes, ,. concats each size with its negated (-) member. For input 10 27 232 1000, we are left with this:
(#@":"0 ,. -) 10 27 232 1000
2 _10
2 _27
3 _232
4 _1000
Now, we have {.@/: as the outer tine. This is monadic first ({.) over dyadic sort (/:). That is, we'll be taking the first element of the result of dyadic /:. This sorts its right argument according to its left argument, which gives us for our input:
(/: #@":"0 ,. -) 10 27 232 1000
27 10 232 1000
Then, using {. gives us the first element of that list, and we are done:
({.@/: #@":"0 ,. -) 10 27 232 1000
27
Old version
>./@(#~]=<./@])#@":"0
Still working on improvements. I golfed it down from 30, and I think this is good enough. I'm going to first break it down into basic parts:
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
Here's how this works.
>./@(#~ ] = <./@]) #@":"0
This is a monadic train, but this part is a hook. The verb >./@(#~ ] = <./@]) is called with left argument as the input to the main chain and the sizes, defined as #@":"0, as the right argument. This is computed as length (#) over (@) default format (":), that is, numeric stringification, which is made to apply to the 0-cells (i.e. members) of the input ("0).
Let's walk over the example input 409 12 13.
(#@":"0) 409 12 13
3 2 2
Now for the inner verb, >./@(#~ ] = <./@]). It looks like >./@(...), which effectively means maximum value (>./) of (@) what's inside (...). As for the inside, this is a four-train, equivalent to this five-train:
[ #~ ] = <./@]
[ refers to the original argument, and ] refers to the size array; 409 12 13 and 3 2 2 respectively in this example. The right tine, <./@], computes the minimum size, 2 in this case. ] = <./@] is a boolean array of values equal to the minimum, 0 1 1 in this case. Finally, [ #~ ... takes values from the left argument according the right-argument mask. This means that elements that correspond to 0 are dropped and 1 retained. So we are left with 12 13. Finally, according to the above, the max is taken, giving us the correct result of 13, and we are done.
Can the input numbers be on separate lines? – seshoumara – 2016-09-16T05:48:10.157
@seshoumara That sounds reasonable, yes. – Calvin's Hobbies – 2016-09-16T05:48:31.793