Lý lịch
Ada là một ngôn ngữ lập trình không được biết đến chính xác vì sự căng thẳng của nó.
Tuy nhiên, về mặt lý thuyết, cú pháp mảng của nó có thể cho phép các đặc tả mảng khá ngắn gọn. Dưới đây là một mô tả EBNF đơn giản về cú pháp theo nghĩa đen của mảng (có thể chuyển sang dạng chailecaps.de :
array ::= positional_array | named_array
positional_array ::= expression ',' expression (',' expression)*
| expression (',' expression)* ',' 'others' '=>' expression
named_array ::= component_association (',' component_association)*
component_association ::= discrete_choice_list '=>' expression
discrete_choice_list ::= discrete_choice ('|' discrete_choice)*
discrete_choice ::= expression ('..' expression)? | 'others'
Chúng tôi sẽ giới hạn bản thân trong các mảng số nguyên 1 chiều cho đơn giản. Điều này có nghĩa là chúng ta sẽ chỉ sử dụng các số nguyên cho các giá trị biểu thức. Có lẽ trong một thử thách trong tương lai, chúng ta có thể thử một cái gì đó cao cấp hơn (như khai báo các biến và mảng đa chiều). Bạn không cần phải chơi golf các số nguyên .
Dưới đây là một số ví dụ về mảng chữ Ada và đại diện tương đương python-esque cho rõ ràng:
(1, 2, 3) = [1, 2, 3]
(1, others => 2) = [1, 2, 2, ..., 2]
(others => 1) = [1, 1, ..., 1]
(1 => 1, 2 => 3) = [1, 3]
(1|2 => 1, 3 => 2) = [1, 1, 2]
(1 => 1, 3 => 2, others => 3) = [1, 3, 2, 3, 3, ..., 3]
Thử thách
Mục tiêu của thử thách này là xuất ra mảng Ada đếm byte ngắn nhất cho một mảng đầu vào nhất định. Lưu ý rằng mảng Ada có thể bắt đầu từ bất kỳ chỉ mục nào mong muốn, vì vậy bạn có thể chọn những gì bạn muốn chỉ mục bắt đầu miễn là mỗi giá trị là tuần tự. Trong ví dụ này, tôi chọn bắt đầu từ 1, đó là thành ngữ cho Ada, tuy nhiên bạn có thể chọn bắt đầu ở bất kỳ số nguyên nào khác.
Đầu vào
Đầu vào của bạn sẽ bao gồm một danh sách các số nguyên, dưới mọi hình thức đều thuận tiện.
Đầu ra
Đầu ra của bạn sẽ là một chuỗi văn bản đại diện cho mảng chữ Ada hợp lệ ngắn nhất đại diện cho danh sách các số nguyên đầu vào. Bạn có thể sử dụng bất kỳ chỉ mục bắt đầu nào bạn muốn trên mảng này, nhưng lựa chọn của bạn (bất kể đó là gì) phải được chỉ định trong câu trả lời của bạn (chỉ mục bắt đầu cũng có thể là động).
Các số nguyên được biểu diễn dưới dạng số thập phân đã ký, như trong các ví dụ. Thách thức này không bao gồm việc chơi golf các giá trị nguyên.
Ví dụ
Dưới đây là một số ví dụ:
Simple: [1, 2, 3] -> (1,2,3)
Range: [1, 1, 1, 1, 1, 1, 1,] -> (1..7=>1)
Others: [1, 1, 1, 1, 1, 2, 1, 1, 1, 1, 1] -> (6=>2,others=>1)
Multiple Ranges: [1,1,1,1,1,2,2,2,2,2,1,1,1,1,1,2,2,2,2,2,1,1,1,1,1] -> (6..10|16..20=>2,others=>1)
Tiny Ranges: [1,1,2,2,1,1,1,1,1] -> (3|4=>2,others=>1)
Far Range: [[1]*5, [2]*100, [3]*5] -> (1..5=>1,6..105=>2,others=>3)
Alternation: [1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2] -> (1|3|5|7|9|11|13|15|17=>1,others=>2)
Big Number: [1234567890,1,1234567890] -> (2=>1,1|3=>1234567890)
Big-ish Number: [1234567,1,1234567] -> (1234567,1,1234567)
Solo: [-1] -> (1=>-1)
Huge Input: [[0],[1]*1000000000] -> (0,others=>1)
Positional Others: [1, 2, 3, 3, 3, 3, 3, 3] -> (1,2,others=>3)
Range and Choice, no Others: [1,1,1,12,12,3,3,3,3,3,3,3,3,3,3,4] -> (1..3=>1,4|5=>12,6..15=>3,16=>4)
Yêu cầu tối thiểu
Hỗ trợ ít nhất 100 số và đầu vào có độ dài ít nhất 256 số.
Tạo kết quả chính xác cho tất cả các đầu vào như vậy
- Bao gồm đặt 'người khác' ở cuối
- Bao gồm đặt một chỉ mục cho mảng vật phẩm đơn
Chấm dứt (tốt nhất là trên TIO) cho mỗi đầu vào trên trong một phút.
Giải pháp ngắn nhất trong byte thắng!
Thực hiện tham khảo
Việc thực hiện này sử dụng đầu vào là mảng của nó, với mỗi ký tự là một số. Chữ in hoa là hằng số đặc biệt cho các giá trị lớn. Đối số chương trình là 'chỉ mục bắt đầu' để sử dụng.
Phần "mã" trong liên kết TIO là một giải pháp chính xác cho vấn đề, trong khi "tiêu đề" và "chân trang" thực hiện cấu trúc thử nghiệm.
106..110=>3,others=>2
sẽ dài hơn) Trường hợp cuối cùng cần phải có một chỉ mục, vì ngữ pháp không cho phép các mảng vị trí phần tử đơn ( positional_array ::= expression ',' expression (',' expression)*
)
(1=>1,others=>1)
(1..100000000=>1)
(1|3=>1234567,2=>1)
là một đầu ra hợp lệ cho [1234567,1,1234567]
?
(-1)
?