Một con rắn co giãn trông giống như thế này:
<||=|||:)~
Mỗi chuỗi thanh dọc ( |
) riêng biệt trong một con rắn co giãn, được gọi là phần co giãn , có thể mở rộng riêng lẻ thành hai lần chiều rộng của nó và được vẽ bằng các dấu gạch chéo xen kẽ ( /
, \
) sau khi được kéo dài.
Con rắn đặc biệt ở trên có hai phần co giãn như vậy, tạo cho nó bốn tư thế có thể:
<||=|||:)~
</\/\=|||:)~
<||=/\/\/\:)~
</\/\=/\/\/\:)~
Hình dạng chung của một con rắn co giãn trong tư thế ít duỗi nhất được xác định bởi biểu thức này :
<(\|+=)*\|+:\)~
Mà có thể được nói bằng các từ như:
<
, theo sau là bất kỳ số lượng các chuỗi|
được nối với=
các dấu hiệu, theo sau là:)~
.
Vì vậy, <|:)~
và <||:)~
và <|=|:)~
và <|=|=||=|||||=||:)~
là rắn co giãn, nhưng <=:)~
và <=|:)~
và <||=:)~
và <|==||:)~
không.
Rắn co giãn cũng có thể quay mặt sang trái thay vì phải, ví dụ ~(:|||=||>
. Các hình thức là như nhau, chỉ cần nhân đôi.
Thử thách
Viết chương trình lấy một chuỗi dòng gồm hai con rắn co giãn đối diện nhau, với một số khoảng trống ở giữa. Cả hai con rắn sẽ ở trong tư thế kéo dài ít nhất của chúng (tất cả các thanh dọc, không có dấu gạch chéo). Chuỗi sẽ bắt đầu bằng đuôi của con rắn mặt phải và kết thúc bằng đuôi của con rắn mặt trái (bạn có thể tùy ý giả sử còn có một dòng mới).
Ví dụ: đây là một đầu vào có thể có năm khoảng cách giữa các con rắn:
<|=||:)~.....~(:||||>
Tôi đang sử dụng dấu chấm ( .
) thay vì ký tự không gian thực tế cho rõ ràng.
Không có khoảng cách giữa các con rắn cũng là đầu vào hợp lệ:
<|=||:)~~(:||||>
Chúng tôi nói rằng những con rắn đang hôn nhau khi lưỡi của chúng chạm vào nhau như thế này.
Chương trình của bạn cần mở rộng một số kết hợp các phần co giãn của cả hai con rắn sao cho con rắn có số lượng khoảng trống ít nhất có thể giữa chúng (không chồng chéo), tức là con rắn càng gần nhau càng tốt .
Cả hai đuôi của rắn đều cố định nhưng đầu và cơ thể của chúng có thể di chuyển - phải cho rắn mặt phải, trái cho rắn mặt trái - theo những phần co giãn đã được mở rộng.
Đầu ra của chương trình của bạn là chuỗi dòng đơn (cộng với dòng mới theo dõi tùy chọn) cho thấy những con rắn càng gần nhau càng tốt, với các dấu gạch chéo xen kẽ được vẽ thay cho các thanh dọc cho các phần co giãn đã được mở rộng.
Ví dụ: đầu ra cho <|=||:)~.....~(:||||>
(từ phía trên) sẽ là:
</\=||:)~~(:/\/\/\/\>
Đây là giải pháp duy nhất ở đây bởi vì với bất kỳ sự kết hợp nào khác của các phần co giãn được kéo dài, những con rắn sẽ chồng lên nhau hoặc cách xa nụ hôn.
Nếu có nhiều giải pháp khả thi, đầu ra có thể là một trong số chúng.
Ví dụ: nếu đầu vào là
<|=||:)~.....~(:|||=|>
đầu ra có thể là
<|=/\/\:)~~(:/\/\/\=|>
hoặc là
</\=||:)~~(:/\/\/\=/\>
Hãy nhớ rằng sẽ không bao giờ có thể khiến những con rắn hôn nhau, nhưng bạn vẫn cần phải đưa chúng càng gần càng tốt.
Ví dụ: nếu đầu vào là
<||=||||:)~...~(:||>
đầu ra có thể là
</\/\=||||:)~.~(:||>
hoặc là
<||=||||:)~.~(:/\/\>
Nếu những con rắn đã hôn nhau, đầu ra sẽ giống như đầu vào. ví dụ
<|=||:)~~(:||||>
Nói chung, đầu ra sẽ giống như đầu vào nếu phần mở rộng của bất kỳ phần co giãn nào sẽ làm cho các con rắn chồng lên nhau. ví dụ
<|||=|||:)~..~(:||||=|||||=||||||>
Ghi chú
- Lấy đầu vào từ stdin hoặc dòng lệnh như bình thường hoặc viết một hàm lấy một chuỗi. In hoặc trả lại đầu ra.
- Bạn có thể sử dụng dấu chấm (
.
) trong đầu vào và đầu ra thay cho khoảng trắng () nếu bạn thích.
- Điều quan trọng duy nhất là các dấu gạch chéo xen kẽ trong chuỗi các thanh dọc mà chúng thay thế. Thứ tự của chúng ở con rắn lớn hay việc một nhát chém tiến hay lùi trước không thành vấn đề.
- Các phần co giãn không thể kéo dài giữa chừng - chính xác là gấp đôi hoặc không có phần mở rộng nào cả.
Chấm điểm
Đây là mã golf . Đệ trình ngắn nhất tính bằng byte thắng. Tiebreaker là câu trả lời trước đó.
>
sẽ trở thành <
, tương tự cho (
và )
), nhưng anh ấy cũng nói "Điều quan trọng là việc chém xen kẽ trong chuỗi các thanh dọc mà họ đã thay thế. con rắn lớn hay việc một nhát chém tiến hay lùi trước không thành vấn đề. "