Bạn không thích những sơ đồ xem nổ tung trong đó một máy hoặc vật thể được tách ra thành những mảnh nhỏ nhất của nó?
Hãy làm điều đó với một chuỗi!
Các thách thức
Viết chương trình hoặc chức năng
- nhập một chuỗi chỉ chứa các ký tự ASCII có thể in được ;
- phân chia chuỗi thành các nhóm ký tự không phải không gian bằng nhau ("phần" của chuỗi);
- xuất các nhóm đó ở bất kỳ định dạng thuận tiện nào, với một số dấu phân cách giữa các nhóm .
Ví dụ, đưa ra chuỗi
Ah, abracadabra!
đầu ra sẽ là các nhóm sau:
! , Một aaaaa bb c d h rr
Mỗi nhóm trong đầu ra chứa các ký tự bằng nhau, với khoảng trắng được loại bỏ. Một dòng mới đã được sử dụng như là dấu phân cách giữa các nhóm. Thêm về các định dạng được phép dưới đây.
Quy tắc
Đầu vào phải là một chuỗi hoặc một mảng ký tự. Nó sẽ chỉ chứa các ký tự ASCII có thể in được (phạm vi bao gồm từ không gian đến dấu ngã). Nếu ngôn ngữ của bạn không hỗ trợ điều đó, bạn có thể lấy đầu vào dưới dạng số đại diện cho mã ASCII.
Bạn có thể giả sử rằng đầu vào chứa ít nhất một ký tự không phải không gian .
Đầu ra phải bao gồm các ký tự (ngay cả khi đầu vào là bằng mã ASCII). Phải có một dấu tách rõ ràng giữa các nhóm , khác với bất kỳ ký tự không phải không gian nào có thể xuất hiện trong đầu vào.
Nếu đầu ra là thông qua trả về hàm, nó cũng có thể là một mảng hoặc chuỗi hoặc một mảng các mảng ký tự hoặc cấu trúc tương tự. Trong trường hợp đó, cấu trúc cung cấp sự tách biệt cần thiết.
Một dấu phân cách giữa các ký tự của mỗi nhóm là tùy chọn . Nếu có một, quy tắc tương tự được áp dụng: đó không thể là một ký tự không phải không gian có thể xuất hiện trong đầu vào. Ngoài ra, nó không thể là dấu phân cách giống như được sử dụng giữa các nhóm.
Ngoài ra, định dạng là linh hoạt. Dưới đây là một số ví dụ:
Các nhóm có thể được phân tách bằng các dòng mới, như được hiển thị ở trên.
Các nhóm có thể được phân tách bằng bất kỳ ký tự không phải ASCII nào, chẳng hạn như
¬
. Đầu ra cho đầu vào trên sẽ là chuỗi:!¬,¬A¬aaaaa¬bb¬c¬d¬h¬rr
Các nhóm có thể được phân tách bằng n > 1 khoảng trắng (ngay cả khi n là biến), với các ký tự giữa mỗi nhóm được phân tách bằng một khoảng trắng :
! , A a a a a a b b c d h r r
Đầu ra cũng có thể là một mảng hoặc danh sách các chuỗi được trả về bởi một hàm:
['!', 'A', 'aaaaa', 'bb', 'c', 'd', 'h', 'rr']
Hoặc một mảng các mảng char:
[['!'], ['A'], ['a', 'a', 'a', 'a', 'a'], ['b', 'b'], ['c'], ['d'], ['h'], ['r', 'r']]
Ví dụ về các định dạng không được phép, theo các quy tắc:
- Dấu phẩy không thể được sử dụng làm dấu phân cách (
!,,,A,a,a,a,a,a,b,b,c,d,h,r,r
), vì đầu vào có thể chứa dấu phẩy. - Không được chấp nhận thả dải phân cách giữa các nhóm (
!,Aaaaaabbcdhrr
) hoặc sử dụng cùng một dấu phân cách giữa các nhóm và trong các nhóm (! , A a a a a a b b c d h r r
).
Các nhóm có thể xuất hiện theo thứ tự bất kỳ trong đầu ra. Ví dụ: thứ tự chữ cái (như trong các ví dụ ở trên), thứ tự xuất hiện đầu tiên trong chuỗi, ... Thứ tự không cần phải nhất quán hoặc thậm chí là xác định.
Lưu ý rằng đầu vào không thể chứa các ký tự dòng mới A
và a
là các ký tự khác nhau (nhóm được phân biệt chữ hoa chữ thường ).
Mã ngắn nhất trong byte thắng.
Các trường hợp thử nghiệm
Trong mỗi trường hợp thử nghiệm, dòng đầu tiên là đầu vào và các dòng còn lại là đầu ra, với mỗi nhóm trong một dòng khác nhau.
Trường hợp thử nghiệm 1:
A, abracadabra! ! , Một aaaaa bb c d h rr
Trường hợp thử nghiệm 2:
\ o / \ o / \ o / /// \ ooo
Trường hợp thử nghiệm 3:
Một người đàn ông, một kế hoạch, một con kênh: Panama! ! ,, : Một P aaaaaaaaa c sẽ mm không p
Trường hợp thử nghiệm 4:
"Chỉ cho tôi cách bạn thực hiện mánh khóe đó, người khiến tôi hét lên", cô nói "" , S aaaaa cc đ eeeeeee hhhhhh ii kk Ừm n ooooo rr sss tttttt bạn tuần y