Введение
Давайте посмотрим на следующую строку:
AABBCCDDEFFGG
Вы можете видеть, что каждое письмо было продублировано , за исключением письма E
. Это означает, что письмо E
было дублировано . Таким образом, единственное, что нам нужно сделать здесь, это обратить этот процесс вспять, что дает нам следующую недедуплицированную строку:
AABBCCDDEEFFGG
Давайте рассмотрим более сложный пример:
AAAABBBCCCCDD
Вы можете видеть, что число последовательных символов B
различается, что означает, что один из них BB
был дублирован из исходной строки. Нам нужно только де-дублировать это письмо, которое дает нам:
AAAABBBBCCCCDD
Соревнование
Если задана непустая дедуплицированная строка, состоящая только из буквенных символов (либо только в верхнем, либо только в нижнем регистре), вернуть нед дедуплицированную строку. Вы можете предположить, что в строке всегда будет хотя бы один дедуплицированный символ.
Контрольные примеры
AAABBBCCCCDDDD --> AAAABBBBCCCCDDDD
HEY --> HHEEYY
AAAAAAA --> AAAAAAAA
N --> NN
OOQQO --> OOQQOO
ABBB --> AABBBB
ABBA --> AABBAA
Это код-гольф , поэтому выигрывает самая короткая действительная подача в байтах!
AABBBB
.ABBB
картаAABBBB
, а неAABBBBBB
?A BB B
. Символы, которые не сопряжены (и, следовательно, не дублированы), должны быть продублированы, в результатеAA BB BB
чего получается недедуплицированная строка.Ответы:
MATL , 7 байт
Попробуйте онлайн! Или проверьте все тестовые случаи .
Давайте возьмем в
'ABBA'
качестве примера ввод.источник
Сетчатка , 11 байт
Попробуйте онлайн - содержит все контрольные примеры
источник
Perl, 16 байт
15 байтов кода +
-p
флаг.Чтобы запустить это:
источник
Haskell, 36 байт
Пример использования:
u "OOQQO"
->"OOQQOO"
.Если строка содержит хотя бы 2 элемента, возьмите две копии первого и добавьте рекурсивный вызов с помощью
Если имеется менее двух элементов (один или ноль), возьмите две копии списка.
источник
Брахилог , 17 байт
Попробуйте онлайн!
объяснение
источник
Рубин, 21 байт
20 байтов плюс
-p
флаг.источник
JavaScript (ES6),
3730 байтСэкономили 7 байт, используя гораздо более эффективный «$ 1 $ 1», как это сделали [другие] [ответы]
Контрольные примеры
Показать фрагмент кода
источник
Mathematica, 41 байт
Безымянная функция, которая вводит строку и выводит строку. Полностью дедуплицирует, затем полностью недедуплицирует. Не очень коротко, но я не мог сделать лучше сейчас.
источник
Befunge 98 , 24 байта
Попробуйте онлайн!
$
может быть легко заменено на-
, а 2-е -@
на;
.Я думаю, что это может быть дальше в гольфе из-
-
за в начале обоих-,
(или$,
выше) и-\,
.Как?
источник
Java 7, 58 байт
Ungolfed:
Тестовый код:
Попробуй это здесь.
Выход:
источник
PHP, 65 байт, без регулярных выражений
принимает входные данные из аргумента командной строки. Беги с
-r
.регулярное выражение? В PHP регулярное выражение, используемое большинством ответов, дублирует каждый символ. будет 44 байта:
источник
Brain-Flak 69 Bytes
Включает +3 для
-c
Попробуйте онлайн!
Объяснение:
источник
Желе , 9 байт
Попробуйте онлайн!
источник
V 10 байтов
TryItOnline
Просто найдите и замените регулярное выражение, как и все остальные в теме. Единственное отличие состоит в том, что я могу заменить все, что потребует
\
перед ним символ с тем же значением ascii, но с установленным старшим битом. (Итак(
, 00101000 становится¨
, 10101000)источник
Perl 6 , 17 байт
с ключом командной строки -p
Пример:
источник
Ракетка 261 байт
Ungolfed:
Тестирование:
Выход:
источник
05AB1E , 10 байтов
Попробуйте онлайн!
объяснение
источник
Python3,
10294 байтаСпасибо xnor за сохранение 8 байт! -> Битхак.
источник
x+x%2
какx&-2
.s.count(c)&-2
и он вернул пустую строку ...: / Есть мысли?x+1&-2
должен сделать это. Четвёртые идут на себя, а шансы округляются до четных.R, 81 байт
Читает строку из stdin, разделяется на вектор символов и выполняет кодирование длины строки (rle). Затем повторите каждое значение из rle, сумму длин и мод длины
2
.Если мы можем прочитать ввод, разделенный пробелом (неявно как вектор / массив символов), тогда мы можем пропустить разделительную часть, и программа уменьшит до 64 байтов:
источник
> <> (Рыба) 39 байт
Я уверен, что это можно сыграть в гольф, используя другую технику.
Он принимает входные данные и сравнивает их с текущим элементом стека; если он отличается, он напечатает первый элемент стека дважды, если он одинаковый, то они оба будут напечатаны.
Стек, когда пустой, получает 0, который ничего не печатает, поэтому может быть добавлен в любое время.
источник
Pyth, 15 байт
Проверьте все контрольные примеры здесь.
Спасибо Луису Мендо за методологию.
объяснение
Как это часто бывает, я чувствую, что это может быть короче. Я думаю, что должен быть лучший способ извлечь элементы из списка, чем то, что я использую здесь.
источник
PowerShell , 28 байт
Попробуйте онлайн! (включает все тестовые случаи)
Порт сетчатки ответ . Единственное замечание, которое мы получили
$args
вместо обычного$args[0]
(поскольку мы-replace
будем выполнять итерацию по каждому элементу во входном массиве, мы можем выйти из индекса), и'$1$1'
необходимо использовать одинарные кавычки, чтобы они были заменены регулярным выражением. переменные, а не рассматриваются как переменные PowerShell (что произошло бы, если бы они были в двойных кавычках).источник
C 67 байт
Звоните с:
источник
мозговой отряд, 22 байта
Попробуйте онлайн.
Печатает текущий символ дважды, если он не равен символу, который был напечатан дважды.
источник