Чи не любите ви ті діаграми, що розриваються, в яких машина або предмет розбиваються на найдрібніші шматочки?
Давайте зробимо це до рядка!
Змагання
Напишіть програму або функцію, яка
- вводить рядок, що містить лише символи для друку ASCII ;
- розчленовує рядок на групи непробільних рівних символів ("шматки" рядка);
- виводить ці групи в будь-якому зручному форматі, з деяким роздільником між групами .
Наприклад, подано рядок
Ah, abracadabra!
Вихідні дані будуть наступними групами:
! , А ааааа bb c г год rr
Кожна група у висновку містить рівні символи з пробілами. Нова лінія використовується як роздільник між групами. Більше про дозволені формати нижче.
Правила
Вхід повинен бути рядком або масивом символів. Він буде містити лише символи для друку ASCII (включений діапазон від простору до тильди). Якщо ваша мова не підтримує це, ви можете взяти дані у вигляді цифр, що представляють коди ASCII.
Можна припустити, що вхід містить щонайменше один непробільний символ .
Вихід повинен складатися з символів (навіть якщо вхід за допомогою ASCII - кодів). Повинно бути однозначний роздільник між групами , відмінний від будь-якого непробільного символу, який може відображатися на вході.
Якщо висновок здійснюється через функцію return, це також може бути масив або рядки, або масив масивів символів, або схожа структура. У цьому випадку структура забезпечує необхідне розділення.
Роздільник між символами кожної групи необов’язковий . Якщо він існує, застосовується те саме правило: воно не може бути символом, який не є пробілом, і може з’являтися на вході. Крім того, це не може бути той самий роздільник, який використовується між групами.
Крім цього, формат є гнучким. Ось кілька прикладів:
Групи можуть бути рядками, розділеними новими рядками, як показано вище.
Групи можуть бути розділені будь-яким символом, що не належить до ASCII, наприклад
¬
. Виведенням для вищевказаного входу буде рядок:!¬,¬A¬aaaaa¬bb¬c¬d¬h¬rr
Групи можуть бути розділені n > 1 пробілами (навіть якщо n є змінним) з символами між кожною групою, розділеними одним пробілом:
! , A a a a a a b b c d h r r
Вихідним може бути також масив або список рядків, повернутих функцією:
['!', 'A', 'aaaaa', 'bb', 'c', 'd', 'h', 'rr']
Або масив масивів char:
[['!'], ['A'], ['a', 'a', 'a', 'a', 'a'], ['b', 'b'], ['c'], ['d'], ['h'], ['r', 'r']]
Приклади форматів, які не дозволені, відповідно до правил:
- Кома не може бути використана як роздільник (
!,,,A,a,a,a,a,a,b,b,c,d,h,r,r
), оскільки вхід може містити коми. - Не прийнято пропускати роздільник між групами (
!,Aaaaaabbcdhrr
) або використовувати один і той же роздільник між групами та всередині груп (! , A a a a a a b b c d h r r
).
Групи можуть з’являтися у будь-якому порядку у висновку. Наприклад: алфавітний порядок (як у прикладах вище), порядок першої появи в рядку, ... Порядок не повинен бути послідовним або навіть детермінованим.
Зауважте, що вхідні дані не можуть містити символи нового рядка A
та a
є різними символами (групування залежить від регістру ).
Виграє найкоротший код у байтах.
Тестові справи
У кожному тестовому випадку перший рядок вводиться, а решта - це вихід, причому кожна група в іншому рядку.
Тест 1:
Ах, абракадабра! ! , А ааааа bb c г год rr
Тест 2:
\ o / \ o / \ o / /// \\\ ооо
Тест 3:
Чоловік, план, канал: Панама! ! ,, : А П аааааааа c буду мм nnnn p
Тестовий випадок 4:
"Покажіть мені, як ви робите цей трюк, той, який змушує мене кричати", - сказала вона "" , S ааааа куб дд еееееее hhhhhh ii кк мммм н ooooo rr ssss tttttt у ww у