Lý lịch
Bạn tỉnh táo để thấy mình lạc vào một mê cung một chiều! Một vị thần bí (hoặc một cái gì đó) xuất hiện và giải thích rằng lối ra nằm trước mặt bạn, nhưng giữa bạn và lối ra là một loạt các thử thách. Khi bạn đi lang thang về phía trước, bạn nhận ra rằng tất cả những thách thức được gọi là chỉ là những cánh cửa bị khóa. Trước tiên, bạn nhìn thấy một cánh cửa có lỗ khóa hình chữ T và không có phím nào như vậy, tự tìm lại các bước của mình, tìm kiếm một chìa khóa có T
hình dạng.
Thất vọng, bạn tìm thấy một bát súp bảng chữ cái trên mặt đất, không cái nào khớp với cánh cửa bạn đi qua. Bằng một số đột quỵ của thiên tài (hoặc thành ngữ), bạn quyết định rằng t
khóa hình chữ thường có thể có thể nằm gọn trong khe nếu bạn kẹt nó ở đó đủ mạnh. Khi bạn đến gần cánh cửa với t
chìa khóa chữ thường trong tay, T
cái lỗ phát sáng màu xanh lá cây và cánh cửa tan biến trước mặt bạn.
Một xuống, nhiều hơn nữa để đi ...
Thử thách
Mục tiêu của thử thách này là đánh dấu bạn cần bao nhiêu bước để thoát khỏi mê cung.
Đầu vào của thử thách này là mê cung: một chuỗi chỉ chứa các ký tự [A-Za-z^$ ]
. Bảng chú giải:
^
- Không gian bắt đầu. Đầu vào sẽ chứa chính xác một^
.$
- Lối ra (tự do!). Đầu vào sẽ chứa chính xác một$
.[A-Z]
- Chữ in hoa biểu thị cửa. Bạn chỉ có thể đi qua cánh cửa này nếu bạn đã thu thập được chìa khóa cần thiết.[a-z]
- Chữ thường viết tắt các phím. Bạn thu thập các phím này bằng cách đi vào khoảng trống chứa khóa.
Sẽ có nhiều nhất một chữ cái viết hoa trong đầu vào. Điều này có nghĩa là tổng số cửa sẽ nằm trong khoảng 0-26.
Mỗi cánh cửa bị khóa [A-Z]
sẽ có chính xác một phím chữ thường tương ứng [a-z]
. Có thể có bất kỳ số lượng khoảng trắng ( ) trong đầu vào.
Tất cả các cửa sẽ ở bên phải của điểm bắt đầu và bên trái lối ra. Do đó, sẽ không có cửa thừa. Tất cả các đầu vào sẽ được giải quyết.
Đầu ra cho thử thách này sẽ là một con số, số bước cần thực hiện để thoát khỏi mê cung.
Thuật toán
Phương pháp tiếp cận có phương pháp của bạn để thoát khỏi nơi tồi tệ này như sau:
- Bắt đầu từ đầu (
^
) và di chuyển về phía trước (phải) để thu thập bất kỳ khóa nào bạn gặp. - Khi bạn đi qua một cánh cửa, nếu bạn có chìa khóa chính xác, bạn tiến lên phía trước cánh cửa. Nếu bạn không có chìa khóa chính xác, bạn đi ngược (trái) thu thập các phím bạn gặp cho đến khi bạn tìm thấy chìa khóa cho cánh cửa gần đây nhất mà bạn không thể mở.
- Khi bạn thu thập chìa khóa cho cánh cửa rắc rối hiện tại, bạn quay lại bên phải và tiếp tục.
- Lặp lại quá trình này cho đến khi bạn bước vào exit (
$
).
Những người chơi golf có kinh nghiệm sẽ hiểu rằng mã của bạn không phải thực hiện thuật toán cụ thể này miễn là nó mang lại kết quả giống như khi bạn chạy thuật toán này.
Đếm
Mỗi lần bạn bước từ hình vuông này sang hình vuông khác, nó được tính là một bước. Quay 180º không phát sinh thêm bước. Bạn không thể bước lên cửa mà không có chìa khóa cần thiết. Bạn phải bước lên một chìa khóa để nhặt nó lên, và phải bước lên lối ra để giành chiến thắng. Sau lần di chuyển đầu tiên của bạn, không gian bắt đầu ( ^
) hoạt động giống như mọi không gian thông thường khác.
Ví dụ
Trong những ví dụ này, tôi đã để lại khoảng trống dưới dạng dấu gạch dưới cho khả năng đọc của con người.
Đầu vào là _a_^_A__$__
. Đầu ra là 11
. Bạn 1
bước về phía trước, nhận thấy rằng bạn không có chìa khóa cho A
cánh cửa, và sau đó về mặt. Bạn đi lùi về phía sau cho đến khi bạn chiếm không gian chứa a
( 3
bước lùi, bây giờ là 4
tổng số). Sau đó, bạn đi về phía trước cho đến khi bạn chiếm không gian chứa lối ra ( 7
bước về phía trước, 11
tổng số).
Đầu vào là b__j^__a_AJB_$
. Đầu ra là 41
Bạn thực hiện hai chuyến đi riêng biệt đến phía sau mê cung, một chuyến để lấy j
chìa khóa và chuyến tiếp theo để lấy b
chìa khóa.
Đầu vào là __m__t_^__x_T_MX_$____
. Đầu ra là 44
. Bạn sẽ không thực hiện thêm bất kỳ chuyến đi nào để lấy x
chìa khóa, khi bạn nhặt nó trên đường từ đầu đến cửa T
.
Đầu vào là g_t_^G_T$
. Đầu ra là 12
. Bạn không thể di chuyển lên G
không gian mà không có chìa khóa, và ngay lập tức đối mặt. Bạn đủ may mắn để nhặt t
chìa khóa trên đường đến g
chìa khóa, và do đó mở cả hai cánh cửa trên đường đến tự do.
Đầu vào là _^_____$
. Đầu ra là 6
. Điều đó thật dễ dàng.
Nguyên tắc I / O và tiêu chí chiến thắng
Quy tắc I / O tiêu chuẩn được áp dụng. Đây là một thách thức mã golf .
A
trong bA^aB$
sẽ không được thừa một trong hai. ;)