Разве вам не нравятся те диаграммы с разбивкой по видам, на которых машина или объект разбиты на мелкие части?
Давайте сделаем это со строкой!
Соревнование
Напишите программу или функцию, которая
- вводит строку, содержащую только печатаемые символы ASCII ;
- разбивает строку на группы непробельных одинаковых символов («кусочки» строки);
- выводит эти группы в любом удобном формате с некоторым разделителем между группами .
Например, учитывая строку
Ah, abracadabra!
на выходе будут следующие группы:
! , ааааа бб с d час р-р
Каждая группа в выходных данных содержит одинаковые символы с удаленными пробелами. Новая строка была использована в качестве разделителя между группами. Подробнее о разрешенных форматах ниже.
правила
Вход должен быть строкой или массивом символов. Он будет содержать только печатные символы 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']
Или массив массивов символов:
[['!'], ['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
различные символы (группировка случай-sentitive ).
Самый короткий код в байтах побеждает.
Контрольные примеры
В каждом тестовом примере первая строка является входной, а остальные строки - выходными, причем каждая группа находится в отдельной строке.
Тестовый пример 1:
Ах, абракадабра! ! , ааааа бб с d час р-р
Контрольный пример 2:
\ О / \ о / \ о / /// \\\ ооо
Тестовый пример 3:
Человек, план, канал: Панама! ! ,, : п ааааааааа с Л.Л. мм нннн п
Контрольный пример 4:
«Покажите мне, как вы делаете этот трюк, тот, который заставляет меня кричать», сказала она «» , S ааааа куб.см дд eeeeeee HHHHHH б кк мммм N ооооо р-р ГССО TTTTTT U WW Y