Khắc phục sự cố Meeesesessessieelessished upp teeexexextext


38

Điều này được lấy cảm hứng từ Thứ hai Mini-Golf # 6: Meeesesessess upp teeexexextext

Lý lịch

ETHproductions gặp khó khăn khi nhập văn bản trên trang web thông thường của mình. Bất cứ khi nào anh ta sử dụng chữ số hoặc chữ cái, văn bản sẽ được đưa ra. Nhiệm vụ của bạn là giúp anh ta gõ để hành vi bình thường đạt được.

Biến đổi

Biến đổi ảnh hưởng đến việc chạy các ký tự chữ và số ( [0-9A-Za-z]) được phân tách bằng bất kỳ ký tự không chữ nào. Trong ví dụ sau, dòng đầu tiên sẽ được chuyển thành dòng thứ hai (các dòng khác hiển thị bảng phân tích của biến đổi)

An12num:
Annn1n12n12nn12nn12nun12nun12numn12num
A
 nn
   n1
     n12
        n12nn12n
                n12nun12nu
                          n12numn12num

Đặc biệt, bất kỳ ký tự chữ và số nào sau lần chạy đầu tiên sẽ được chuyển thành toàn bộ lần chạy cho đến khi ngoại trừ ký tự đầu tiên . Hơn nữa, nếu ký tự là một chữ cái (trái ngược với một chữ số), ký tự sẽ được biến thành hai lần chạy.

Rất may, backspace sẽ xóa ký tự cuối cùng và cũng đặt lại phần đầu của lần chạy.

Bài tập

Lần này nhiệm vụ của bạn không phải là thực hiện chuyển đổi. Thay vào đó, được cung cấp một chuỗi đầu vào, bạn phải trả về một văn bản được mã hóa, nếu được chuyển đổi, sẽ dẫn đến đầu vào. Đầu ra phải càng ngắn càng tốt, trong đó \<char>được tính là một ký tự đơn.

Văn bản được mã hóa như sau:

\                   -> \\
backspace character -> \b
linefeed            -> \n

Bạn có thể viết chương trình hoặc hàm, lấy đầu vào qua STDIN (hoặc thay thế gần nhất), đối số dòng lệnh hoặc đối số hàm và xuất kết quả qua tham số STDOUT (hoặc thay thế gần nhất), tham số trả về hàm hoặc tham số hàm (out).

Các trường hợp thử nghiệm

Mỗi trường hợp thử nghiệm là hai dòng, đầu tiên là đầu vào, đầu ra thứ hai.

Heeeeeelp me. It shouldn't be messed up.
Hee \blp\b me\b. It\b sh\bou\bld\bn't be\b me\bss\bed\b up\b.

alert("Hello, world!");
al\ber\bt("He\bll\bo, wo\brl\bd!");

1223234234523456
123456

6
Nó được xác định rõ, nhưng tại sao không có câu trả lời?
Akangka

1
Bằng cách nào đó tôi đã bỏ lỡ điều này; spin-off tốt đẹp! Có lẽ tôi sẽ cố gắng viết một câu trả lời sau.
Sản xuất ETH

Điều này làm tôi nhớ lại thời gian một người bạn của tôi gửi tin nhắn qua UDP
TRGWII

1
Tôi nghĩ rằng trường hợp thử nghiệm cuối cùng của bạn cần một sửa chữa. Bạn bao gồm ký tự đầu tiên ( 1mọi lúc) trong các lần chạy.
Leif Willerts

Tôi thực sự không hiểu những gì tôi phải làm ... Xin lỗi. Bạn có thể thêm một số đầu vào và đầu ra và thêm một số ví dụ với giải thích? Lấy làm tiếc.
Yassin Hajaj

Câu trả lời:


10

CJam, 207

{_,1>{:E1<_0{:I2$,+E=:C+:R1>C'9>)*+:P,E,<{EP#{L0}{PRI)1}?}{PE#L{R8cP,E,-*+}?0}?}g}&}:U;LqS+'a+{_'[,_el^A,s+&,V={+}{s\V!:V{L{:BU_aL?B,,1>Bf{_2$<U_{_W=8>S8c+*+\@>j+}{?;}?}+{,}$0=}j}|\}?}%s'\8cN++'\"\bn"f+er-2<

Dùng thử trực tuyến

Giải trình:

Hầu như quên viết điều này: p

Vấn đề được giải quyết theo nhiều bước:

  • văn bản được phân tách thành các ký tự chữ và số (hãy gọi chúng là các từ) và chạy các ký tự không chữ và số (không phải từ)
  • các từ không được in như hiện tại và các từ được cố định
  • sửa một từ được thực hiện đệ quy (với ghi nhớ): chia từ thành 2 phần theo mọi cách có thể (bao gồm cả đoạn thứ 2 trống), cố gắng bỏ dấu đoạn đầu tiên (xem bên dưới), sửa đoạn thứ 2 và nối kết quả với khoảng trắng -Không gian nếu cần; lấy giải pháp phụ ngắn nhất
  • bỏ qua một đoạn có nghĩa là tìm một chuỗi ký tự chữ và số tối thiểu có thể được theo sau bởi một số khoảng trống (nhưng không có khoảng trống ở giữa) mà khi bị rối, dẫn đến khối đã cho; nó được thực hiện với một thuật toán tham lam đơn giản, đi từ trái sang phải, xây dựng chuỗi không được chỉnh sửa và phiên bản lộn xộn của nó song song và xác định ký tự cần thiết tiếp theo ở mỗi bước; một số khối không thể được bỏ qua

1
Holy cow ... đó là một trong những chương trình của CJam! Công việc tốt đẹp.
Sản xuất ETH
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.