Nhiệm vụ của bạn - nếu bạn chọn chấp nhận nó - là xây dựng một chương trình phân tích và đánh giá một chuỗi (từ trái sang phải và độ dài tùy ý) của các mã thông báo đưa ra chỉ dẫn - trái hoặc phải. Dưới đây là bốn mã thông báo có thể và ý nghĩa của chúng:
> go right one single step
< go left one single step
-> go right the total amount of single steps that you've gone right, plus one,
before you previously encountered this token and reset this counter to zero
<- go left the total amount of single steps that you've gone left, plus one,
before you previously encountered this token and reset this counter to zero
Mặc dù có một nhược điểm - mã thông báo chỉ đường mà chương trình của bạn có thể phân tích cú pháp sẽ được trình bày theo mẫu này:
<<->-><<->->>->>->
... Nói cách khác, chúng được nối với nhau và nhiệm vụ của chương trình là tìm ra mức độ ưu tiên chính xác của các hướng và số lượng bước cần thực hiện (bằng cách nhìn về phía trước). Thứ tự ưu tiên như sau (từ ưu tiên cao nhất đến thấp nhất):
->
<-
>
<
Nếu bạn gặp phải <-
khi không có bước bên trái nào được thực hiện trước đó kể từ khi bắt đầu hoặc kể từ lần đặt lại cuối cùng, hãy thực hiện một bước duy nhất ở bên trái. Quy tắc tương tự áp dụng cho ->
, nhưng sau đó để đi bên phải.
Chương trình của bạn nên bắt đầu từ 0 và kết quả của nó phải là số nguyên được ký biểu thị vị trí kết thúc cuối cùng.
Bạn có thể mong đợi đầu vào luôn hợp lệ ( <--->>--<
ví dụ , chẳng có gì giống như vậy ).
Ví dụ đầu vào:
><->><-<-><-<>>->
Các bước trong ví dụ này:
step | token | amount | end position
------+-------+--------+--------------
1. | > | +1 | 1
2. | < | -1 | 0
3. | -> | +2 | 2
4. | > | +1 | 3
5. | <- | -2 | 1
6. | < | -1 | 0
7. | -> | +2 | 2
8. | <- | -2 | 0
9. | < | -1 | -1
10. | > | +1 | 0
11. | > | +1 | 1
12. | -> | +3 | 4
Để làm rõ: đầu ra của chương trình chỉ nên là vị trí kết thúc cuối cùng dưới dạng một số nguyên đã ký. Bảng trên chỉ ở đó để minh họa các bước mà ví dụ của tôi đã thực hiện. Không cần phải xuất ra một bảng, hàng bảng hoặc thậm chí chỉ các vị trí cuối của các bước. Chỉ có vị trí kết thúc cuối cùng, như một số nguyên đã ký, là bắt buộc.
Mã ngắn nhất, sau một tuần, chiến thắng.
<-
là nếu nó ngay lập tức được theo sau bởi a<
hoặc a->
. Không có cách nào trong ngôn ngữ này để biểu diễn trình tự<-
sau đó>
- đó sẽ làgo left the total amount of single steps that you've gone left, plus one, then go right one single step
. Điều này có đúng và theo thiết kế không?