J 21 21 байт
Сохранено 7 байтов благодаря милям и (косвенно) Джонатану!
{.@/:#@":"0,.-
Это четыре цепочки:
{.@/: (#@":"0 ,. -)
Давайте пройдемся по входу 10 27 232 1000
. Внутренняя вилка состоит из трех пальцев. #@":"0
вычисляет размеры, ,.
объединяет каждый размер с его элементом negated ( -
). Для ввода 10 27 232 1000
нам осталось это:
(#@":"0 ,. -) 10 27 232 1000
2 _10
2 _27
3 _232
4 _1000
Теперь у нас есть {.@/:
внешний зуб. Это монадическое значение first ( {.
), а не двоичное sort ( /:
). То есть мы возьмем первый элемент результата диадики /:
. Это сортирует свой правый аргумент в соответствии с его левым аргументом, который дает нам для нашего ввода:
(/: #@":"0 ,. -) 10 27 232 1000
27 10 232 1000
Затем использование {.
дает нам первый элемент этого списка, и мы закончили:
({.@/: #@":"0 ,. -) 10 27 232 1000
27
Старая версия
>./@(#~]=<./@])#@":"0
Все еще работаю над улучшениями. Я играл в гольф с 30, и я думаю, что это достаточно хорошо. Я собираюсь сначала разбить его на основные части:
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
Вот как это работает.
>./@(#~ ] = <./@]) #@":"0
Это монадический поезд, но эта часть - крюк. Глагол >./@(#~ ] = <./@])
вызывается с левым аргументом в качестве входа в основную цепочку, а размеры определяются #@":"0
как правый аргумент. Это вычисляется как длина ( #
) над (@
) format ) по умолчанию ":
, то есть числовое форматирование строк, которое применяется для применения к 0-ячейкам (то есть элементам) input ( "0
).
Давайте пройдемся по примеру ввода 409 12 13
.
(#@":"0) 409 12 13
3 2 2
Теперь для внутреннего глагола >./@(#~ ] = <./@])
. Похоже >./@(...)
, что фактически означает максимальное значение ( >./
) of ( @
), что внутри (...)
. Что касается внутренней части, это четыре поезда, эквивалентные этим пяти поездам:
[ #~ ] = <./@]
[
ссылается на исходный аргумент и ]
ссылается на массив размеров; 409 12 13
и 3 2 2
соответственно в этом примере. Правильный зубец <./@]
вычисляет минимальный размер, 2
в этом случае. в данном случае ] = <./@]
это логический массив значений, равный минимуму 0 1 1
. Наконец, [ #~ ...
принимает значения из левого аргумента в соответствии с маской правого аргумента. Это означает, что элементы, которые соответствуют 0
, удаляются и 1
сохраняются. Итак, мы остались с 12 13
. Наконец, в соответствии с вышеизложенным, максимум берется, давая нам правильный результат 13
, и мы сделали.