J, 21 14 byte
Saved 7 byte nhờ dặm và (gián tiếp) Jonathan!
{.@/:#@":"0,.-
Đây là một chuỗi bốn:
{.@/: (#@":"0 ,. -)
Chúng ta hãy đi qua đầu vào 10 27 232 1000
. Các ngã ba bên trong bao gồm ba hộp. #@":"0
tính toán kích thước, ,.
concats từng kích thước với -
thành viên phủ định ( ) của nó . Đối với đầu vào 10 27 232 1000
, chúng tôi còn lại với điều này:
(#@":"0 ,. -) 10 27 232 1000
2 _10
2 _27
3 _232
4 _1000
Bây giờ, chúng ta có {.@/:
như một tine bên ngoài. Đây là đơn âm đầu tiên ( {.
) trên sắp xếp dyadic ( /:
). Đó là, chúng ta sẽ lấy yếu tố đầu tiên của kết quả của dyadic /:
. Điều này sắp xếp đối số bên phải của nó theo đối số bên trái của nó, cung cấp cho chúng ta đầu vào:
(/: #@":"0 ,. -) 10 27 232 1000
27 10 232 1000
Sau đó, việc sử dụng {.
cung cấp cho chúng tôi thành phần đầu tiên của danh sách đó và chúng tôi đã hoàn thành:
({.@/: #@":"0 ,. -) 10 27 232 1000
27
Phiên bản cũ
>./@(#~]=<./@])#@":"0
Vẫn đang làm việc trên các cải tiến. Tôi đã đánh nó xuống từ 30, và tôi nghĩ điều này là đủ tốt. Trước tiên tôi sẽ chia nó thành các phần cơ bản:
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
Đây là cách nó hoạt động.
>./@(#~ ] = <./@]) #@":"0
Đây là một chuyến tàu đơn, nhưng phần này là một cái móc. Động từ >./@(#~ ] = <./@])
được gọi với đối số bên trái là đầu vào của chuỗi chính và kích thước, được định nghĩa là #@":"0
, như là đối số bên phải. Điều này được tính là độ dài ( #
) trên ( @
) định dạng mặc định ( ":
), nghĩa là chuỗi số hóa, được tạo để áp dụng cho các ô 0 (tức là thành viên) của đầu vào ( "0
).
Chúng ta hãy đi qua đầu vào ví dụ 409 12 13
.
(#@":"0) 409 12 13
3 2 2
Bây giờ cho động từ bên trong >./@(#~ ] = <./@])
,. Có vẻ như >./@(...)
, có nghĩa là giá trị tối đa ( >./
) của ( @
) những gì bên trong (...)
. Về phần bên trong, đây là một đoàn tàu bốn, tương đương với năm chuyến tàu này:
[ #~ ] = <./@]
[
đề cập đến đối số ban đầu và ]
tham chiếu đến mảng kích thước; 409 12 13
và 3 2 2
tương ứng trong ví dụ này. Tine bên phải <./@]
, tính kích thước tối thiểu, 2
trong trường hợp này. ] = <./@]
là một mảng boolean của các giá trị bằng mức tối thiểu, 0 1 1
trong trường hợp này. Cuối cùng, [ #~ ...
lấy các giá trị từ đối số bên trái theo mặt nạ đối số bên phải. Điều này có nghĩa là các yếu tố tương ứng 0
được loại bỏ và 1
giữ lại. Vì vậy, chúng tôi còn lại với 12 13
. Cuối cùng, theo như trên, max được lấy, cho chúng ta kết quả chính xác 13
và chúng ta đã hoàn thành.