StickStack là một ngôn ngữ lập trình dựa trên ngăn xếp rất đơn giản chỉ với hai hướng dẫn:
|
đẩy chiều dài của ngăn xếp lên ngăn xếp-
bật hai phần tử hàng đầu từ ngăn xếp và đẩy lùi sự khác biệt của chúng (second topmost - topmost
)
Chi tiết ngôn ngữ
- Ngăn xếp trống khi bắt đầu chương trình.
- Tất cả các hướng dẫn được thực hiện tuần tự từ trái sang phải.
- Nếu có ít hơn 2 số trên ngăn xếp thì
-
lệnh là bất hợp pháp. - Khi kết thúc thực hiện, ngăn xếp sẽ chứa chính xác một số .
Bất kỳ số nguyên nào cũng có thể được tạo bởi chương trình StickStack. Ví dụ:
|||--||-- generates the number 2 through the following stack states:
[]
[0]
[0, 1]
[0, 1, 2]
[0, -1]
[1]
[1, 1]
[1, 1, 2]
[1, -1]
[2]
Để đánh giá mã StickStack của bạn, bạn có thể sử dụng trình đánh giá trực tuyến (CJam) này . (Cảm ơn @Martin về mã.)
Nhiệm vụ
Bạn nên viết một chương trình hoặc hàm cho số nguyên làm đầu ra đầu vào hoặc trả về một chuỗi đại diện cho chương trình StickStack xuất ra số đã cho.
Chấm điểm
- Điểm chính của bạn là tổng chiều dài của các chương trình StickStack cho các trường hợp kiểm tra được đưa ra dưới đây. Điểm thấp hơn là tốt hơn.
- Việc gửi của bạn chỉ có hiệu lực nếu bạn chạy chương trình của mình trên tất cả các trường hợp kiểm tra và tính điểm của bạn.
- Điểm thứ cấp (tiebreaker) của bạn là độ dài của chương trình hoặc chức năng tạo của bạn.
Trường hợp kiểm tra đầu vào
(Mỗi số là một trường hợp thử nghiệm khác nhau.)
-8607 -6615 -6439 -4596 -4195 -1285 -72 12 254 1331 3366 3956 5075 5518 5971 7184 7639 8630 9201 9730
Chương trình của bạn nên hoạt động cho mọi số nguyên (loại dữ liệu của bạn có thể xử lý) không chỉ cho các trường hợp kiểm tra nhất định. Các giải pháp cho các số kiểm tra không nên được mã hóa cứng vào chương trình của bạn. Nếu có nghi ngờ về mã hóa cứng, các số kiểm tra sẽ được thay đổi.