Introdução
Vamos observar a seguinte string:
AABBCCDDEFFGG
Você pode ver que todas as letras foram duplicadas , exceto a letra E
. Isso significa que a carta E
foi duplicada . Portanto, a única coisa que precisamos fazer aqui é reverter esse processo, o que nos fornece a seguinte string não-duplicada :
AABBCCDDEEFFGG
Vamos dar um exemplo mais difícil:
AAAABBBCCCCDD
Você pode ver que há um número desigual de consecutivos B
, o que significa que um dos BB
foi desduplicado da string original. Precisamos apenas de-duplicar esta carta, o que nos dá:
AAAABBBBCCCCDD
O desafio
Dada uma sequência desduplicada não vazia , consistindo apenas em caracteres alfabéticos (somente em maiúsculas ou apenas minúsculas), retorne a sequência não desduplicada . Você pode assumir que sempre haverá pelo menos um caractere deduplicado na string.
Casos de teste
AAABBBCCCCDDDD --> AAAABBBBCCCCDDDD
HEY --> HHEEYY
AAAAAAA --> AAAAAAAA
N --> NN
OOQQO --> OOQQOO
ABBB --> AABBBB
ABBA --> AABBAA
Isso é código-golfe , então o menor envio válido em bytes vence!
AABBBB
.ABBB
mapear paraAABBBB
, nãoAABBBBBB
?A BB B
. Os caracteres que não estão emparelhados (e, portanto, não estão duplicados) precisam ser duplicados, resultando emAA BB BB
, que é a sequência não desduplicada.Respostas:
MATL , 7 bytes
Experimente online! Ou verifique todos os casos de teste .
Vamos dar
'ABBA'
como exemplo de entrada.fonte
Retina , 11 bytes
Experimente online - contém todos os casos de teste
fonte
Perl, 16 bytes
15 bytes de código +
-p
sinalizador.Para executá-lo:
fonte
Haskell, 36 bytes
Exemplo de uso:
u "OOQQO"
->"OOQQOO"
.Se a sequência tiver pelo menos 2 elementos, faça duas cópias da primeira e acrescente uma chamada recursiva com
Se houver menos de dois elementos (um ou zero), faça duas cópias da lista.
fonte
Braquilog , 17 bytes
Experimente online!
Explicação
fonte
Ruby, 21 bytes
20 bytes mais o
-p
sinalizador.fonte
JavaScript (ES6),
3730 bytesSalvo 7 bytes usando os muito mais eficientes '$ 1 $ 1' como [outros] [respostas] fez
Casos de teste
Mostrar snippet de código
fonte
Mathematica, 41 bytes
Função sem nome que insere uma string e gera uma string. Desduplicar completamente e desduplicar completamente. Não é muito curto, mas não poderia fazer melhor por enquanto.
fonte
Entre 98 , 24 bytes
Experimente Online!
$
pode ser facilmente substituído por-
e o segundo@
por;
.Eu acho que isso pode ser jogado ainda mais devido ao
-
início de ambos-,
(ou$,
acima) e-\,
.Quão?
fonte
Java 7, 58 bytes
Ungolfed:
Código do teste:
Experimente aqui.
Saída:
fonte
PHP, 65 bytes, sem regex
recebe entrada do argumento da linha de comando. Corra com
-r
.regex? No PHP, o regex usado pela maioria das respostas duplica todos os caracteres. seria 44 bytes:
fonte
Brain-Flak 69 Bytes
Inclui +3 para
-c
Experimente Online!
Explicação:
fonte
Geléia , 9 bytes
Experimente online!
fonte
V 10 bytes
TryItOnline
Apenas encontre e substitua regex como todo o resto do encadeamento. A única diferença é que eu posso substituir qualquer coisa que exija um
\
na frente dele pelo caractere com o mesmo valor ascii, mas com o conjunto de bits alto. (Assim(
, 00101000 se torna¨
, 10101000)fonte
Perl 6 , 17 bytes
com a opção de linha de comando -p
Exemplo:
fonte
Raquete 261 bytes
Ungolfed:
Teste:
Saída:
fonte
05AB1E , 10 bytes
Experimente online!
Explicação
fonte
Python3,
10294 bytesObrigado ao xnor por salvar 8 bytes! -> bithack.
fonte
x+x%2
comox&-2
.s.count(c)&-2
e ele retornou uma string vazia ...: / Alguma idéia?x+1&-2
deveria fazê-lo. Os pares vão para si mesmos e as probabilidades aumentam para pares.R, 81 bytes
Lê uma string de stdin, splin no vetor de caracteres e executa a codificação no comprimento da execução (rle). Em seguida, repita os valores de cada regra, a soma dos comprimentos e os mods de comprimentos
2
.Se pudermos ler a entrada separada por espaço (implicitamente como um vetor / array de caracteres), podemos pular a parte de divisão e o programa reduzirá para 64 bytes:
fonte
> <> (Peixe) 39 bytes
Certamente isso pode ser muito praticado, usando uma técnica diferente.
Ele recebe uma entrada e compara com o item atual da pilha; se for diferente, imprimirá o primeiro item da pilha duas vezes; se o mesmo imprimir os dois.
A pilha quando vazia é fornecida com um 0 que não imprime nada, portanto pode ser anexada sempre.
fonte
Pitão, 15 bytes
Verifique todos os casos de teste aqui.
Agradecimentos a Luis Mendo pela metodologia.
Explicação
Como costuma ser o caso, sinto que isso poderia ser mais curto. Eu acho que deveria haver uma maneira melhor de extrair elementos da lista do que o que estou usando aqui.
fonte
PowerShell , 28 bytes
Experimente online!(inclui todos os casos de teste)
Resposta do porto da Retina . Os únicos pontos de observação são os que temos em
$args
vez do habitual$args[0]
(uma vez-replace
que iterarão sobre cada item na matriz de entrada, podemos jogar fora do índice) e as'$1$1'
aspas precisam ser de aspas simples para que sejam substituídas pelo regex variáveis em vez de serem tratadas como variáveis do PowerShell (o que aconteceria se fossem aspas duplas).fonte
C, 67 bytes
Ligue para:
fonte
brainfuck, 22 bytes
Experimente online.
Imprime o caractere atual duas vezes, a menos que seja igual a um caractere que acabou de ser impresso duas vezes.
fonte