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. #@":"0
oblicza rozmiary, ,.
konkatuje każdy rozmiar z jego negowanym ( -
) elementem . W przypadku danych wejściowych 10 27 232 1000
pozostaje 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 #@":"0
jako 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 13
i 3 2 2
odpowiednio w tym przykładzie. Właściwy <./@]
ząb, 2
w tym przypadku , oblicza minimalny rozmiar . ] = <./@]
jest boolowską tablicą wartości równą minimum, 0 1 1
w tym przypadku. Na koniec [ #~ ...
pobiera wartości z lewego argumentu zgodnie z maską z prawym argumentem. Oznacza to, że odpowiednie elementy 0
są upuszczane i 1
zachowywane. Więc zostajemy z 12 13
. Wreszcie, zgodnie z powyższym, maksimum jest brane, dając nam prawidłowy wynik 13
i gotowe.