J, 21 14 bajtów
Zaoszczędzono 7 bajtów dzięki kilometrom i (pośrednio) Jonathanowi!
{.@/:#@":"0,.-
Jest to cztero łańcuchowy:
{.@/: (#@":"0 ,. -)
Przejdźmy przez dane wejściowe 10 27 232 1000. Widelec wewnętrzny składa się z trzech zębów. #@":"0oblicza rozmiary, ,.konkatuje każdy rozmiar z jego negowanym ( -) elementem . W przypadku danych wejściowych 10 27 232 1000pozostaje nam to:
(#@":"0 ,. -) 10 27 232 1000
2 _10
2 _27
3 _232
4 _1000
Teraz mamy {.@/:zewnętrzny ząb. Jest to monadyczne pierwsze ( {.) przed sortowaniem dyadycznym ( /:). Oznacza to, że weźmiemy pierwszy element wyniku dyadic /:. To sortuje swój prawy argument zgodnie z lewym argumentem, co daje nam nasze dane wejściowe:
(/: #@":"0 ,. -) 10 27 232 1000
27 10 232 1000
Następnie użycie {.daje nam pierwszy element tej listy i gotowe:
({.@/: #@":"0 ,. -) 10 27 232 1000
27
Stara wersja
>./@(#~]=<./@])#@":"0
Nadal pracuję nad ulepszeniami. Grałem w golfa z 30 i myślę, że to wystarczy. Najpierw podzielę to na podstawowe części:
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
Oto jak to działa.
>./@(#~ ] = <./@]) #@":"0
To monadyczny pociąg, ale ta część to hak. Czasownik >./@(#~ ] = <./@])jest wywoływany z lewym argumentem jako wejściem do głównego łańcucha, a rozmiary zdefiniowane jako #@":"0jako prawy argument. Jest to obliczane jako domyślny format length ( #) ponad ( @) ":, to znaczy łańcuchowe numerowanie, które stosuje się do komórek 0 (tj. Elementów) wejścia ( "0).
Przejrzyjmy przykładowe dane wejściowe 409 12 13.
(#@":"0) 409 12 13
3 2 2
Teraz na wewnętrznej czasownika >./@(#~ ] = <./@]). Wygląda na to >./@(...), co faktycznie oznacza maksymalną wartość ( >./) z ( @) tego, co jest w środku (...). Jeśli chodzi o wnętrze, jest to cztero-pociąg, odpowiednik tego pięcio-pociągu:
[ #~ ] = <./@]
[odnosi się do oryginalnego argumentu i ]odnosi się do tablicy rozmiarów; 409 12 13i 3 2 2odpowiednio w tym przykładzie. Właściwy <./@]ząb, 2w tym przypadku , oblicza minimalny rozmiar . ] = <./@]jest boolowską tablicą wartości równą minimum, 0 1 1w tym przypadku. Na koniec [ #~ ...pobiera wartości z lewego argumentu zgodnie z maską z prawym argumentem. Oznacza to, że odpowiednie elementy 0są upuszczane i 1zachowywane. Więc zostajemy z 12 13. Wreszcie, zgodnie z powyższym, maksimum jest brane, dając nam prawidłowy wynik 13i gotowe.