J, 21 14 bytes
Saved 7 bytes thanks to miles and (indirectly) Jonathan!
{.@/:#@":"0,.-
This is a four-chain:
{.@/: (#@":"0 ,. -)
Давайте пройдемося над входом 10 27 232 1000
. Внутрішня вилка складається з трьох зубців. #@":"0
обчислює розміри, ,.
стискає кожен розмір з його запереченим ( -
) членом. Для введення 10 27 232 1000
нам залишається це:
(#@":"0 ,. -) 10 27 232 1000
2 _10
2 _27
3 _232
4 _1000
Тепер ми маємо {.@/:
як зовнішній зубчик. Це монадичний перший ( {.
) над діадичним сортом ( /:
). Тобто ми візьмемо перший елемент результату діадику /:
. Це сортує його правий аргумент відповідно до лівого аргументу, який дає нам наш внесок:
(/: #@":"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
правий аргумент. Це обчислюється як формат за замовчуванням ( #
) над ( @
) за замовчуванням ( ":
), тобто числова строфікація, яка робиться для застосування до 0-комірок (тобто членів) вводу ( "0
).
Давайте пройдемося по прикладу введення 409 12 13
.
(#@":"0) 409 12 13
3 2 2
Тепер для внутрішнього дієслова >./@(#~ ] = <./@])
. Це схоже >./@(...)
, що фактично означає максимальне значення ( >./
) того, @
що знаходиться всередині (...)
. Щодо внутрішньої сторони, це чотирипоїзд, еквівалентний цьому п’ятипотягу:
[ #~ ] = <./@]
[
посилається на вихідний аргумент і ]
відноситься до масиву розмірів; 409 12 13
і 3 2 2
відповідно в цьому прикладі. Правий зубчик, <./@]
обчислює мінімальний розмір, 2
в цьому випадку. ] = <./@]
- булевий масив значень, рівний мінімуму, 0 1 1
в цьому випадку. Нарешті, [ #~ ...
приймає значення з лівого аргументу відповідно до маски правого аргументу. Це означає, що елементи, які відповідають 0
, скидаються та 1
зберігаються. Отже, ми залишилися 12 13
. Нарешті, відповідно до вищесказаного, макс приймається, даючи нам правильний результат 13
, і ми закінчили.