Trong Vim, bạn có thể lặp lại một lệnh bằng cách đặt trước nó với một số, giống như 3dd
tương đương với dd dd dd
. Chà, mẫu lặp lại này không bị hạn chế đối với các lệnh Vim. Chuỗi có thể được nhân rộng theo cách này, quá.
Sự chỉ rõ:
Đưa ra một chuỗi, chỉ bao gồm các chữ số, ký tự chữ cái (cả chữ hoa và chữ thường) và dấu cách, với một dòng mới tùy chọn, làm đầu vào, viết một chương trình thực hiện công việc sau:
Mỗi "từ" bao gồm các chữ số và bảng chữ cái. Nếu một chữ cái đứng trước một số (có thể có nhiều hơn một chữ số trong một số hoặc số đó bằng 0), hãy lặp lại chữ cái đó cho các lần đã cho. Ví dụ:
a2bc -> abbc 3xx1yz -> xxxxyz 10ab0c0d0e -> aaaaaaaaaab # No 'cde' because there's a zero 2A2a2A2a -> AAaaAAaa
Các từ được phân cách bằng dấu cách. Có tối đa một khoảng trắng giữa mỗi hai từ liền kề.
Dễ thôi phải không? Đây là những thứ bổ sung:
Nếu có một số trước khoảng trắng, lặp lại từ tiếp theo cho các lần nhất định. Số sẽ luôn được gắn vào cuối từ trước hoặc ở đầu chuỗi. Thí dụ:
a2bc3 2d -> abbc dd dd dd 3 3a -> aaa aaa aaa 33a -> aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa 0 abcd0 efgh3 2x -> xx xx xx a3 0xc b -> a c c c b
Nếu một từ trống phải được lặp lại, không xuất ra nhiều khoảng trắng trong một hàng. Bóp chúng:
a3 0x2 b -> a b b # NOT 'a b b'
Nói cách khác, chương trình của bạn không bao giờ nên xuất hai khoảng trắng với nhau.
Đầu vào không bao giờ trống, nhưng không cần thiết đầu ra không trống:
0 3x -> (empty)
Đầu vào và đầu ra có thể được thực hiện theo bất kỳ cách ưa thích. Một hàm lấy đầu vào từ các đối số và đưa ra đầu ra thông qua các giá trị trả về cũng được chấp nhận.
Nếu đó là một chương trình, nó không được thoát với lỗi (tức là giá trị trả về bằng 0).
Các số luôn là số thập phân và không bao giờ bắt đầu bằng số 0, trừ khi bản thân số đó bằng 0, trong trường hợp đó chỉ có một số không. Tức là bạn không cần phải xem xét
077a
hoặc000a
đưa ra làm đầu vào.Tất cả các số dưới 2 ^ 31 (2.147.483.648). Độ dài đầu ra tối đa dưới 2 ^ 32 (4.294.967.296) byte.
Chương trình có thể tùy ý xuất ra một dấu cách và / hoặc một dòng mới. Những không gian và dòng mới không ảnh hưởng đến tính hợp lệ của đầu ra. Ngay cả khi đầu ra chính xác phải trống, đầu ra của khoảng trắng theo dòng mới sẽ đủ điều kiện.
Nói tóm lại, một đầu vào hợp lệ khớp với biểu thức chính quy này:
([0-9]+ )?([0-9A-Za-z]*[A-Za-z])([0-9]* [0-9A-Za-z]*[A-Za-z])*( ?\n?)
Và cho một đầu ra hợp lệ:
([A-Za-z]+)( [A-Za-z]+)*( ?\n?)
Các trường hợp thử nghiệm mẫu:
abcdefg -> abcdefg
a3bcd -> abbbcd
a3bbbc -> abbbbbc
3a0b -> aaa
abc 3d -> abc ddd
abc3 d -> abc d d d
5 1x5 1y0 z -> x x x x x y y y y y
a999 0x b -> a b
999 0s -> (empty)
0 999s -> (empty)
0 999s4 t -> t t t t
a3 0xc b -> a c c c b
ABC3 abc -> ABC abc abc abc
Đây là một môn đánh gôn , vì vậy chương trình ngắn nhất tính theo byte trong mỗi ngôn ngữ sẽ thắng!
a3 0xc b
-> a c c c b
nên được thêm vào, vì ban đầu tôi có mã hoạt động cho tất cả các trường hợp thử nghiệm ở trên, nhưng không hoạt động chính xác cho điều đó.