Dada uma sequência não vazia de letras ASCII em minúsculas a-z
, produza essa sequência com cada “execução” consecutiva da mesma letra, prolongada por mais uma cópia dessa letra.
Por exemplo, dddogg
( 3 d
', 1 o
, 2 g
') se transforma ddddooggg
( 4 d
', 2 o
', 3 g
').
Isso é código-golfe : a resposta mais curta em bytes vence.
Casos de teste
aabbcccc -> aaabbbccccc campainha -> ddooorrbbeelll uuuuuuuuuz -> uuuuuuuuuuuzz q -> qq xyxyxy -> xxyyxxyyxxyy xxxyyy -> xxxxyyyy
Respostas:
05AB1E , 5 bytes
Explicação:
Experimente online ou como uma suíte de testes .
Incluir é um novo e bastante embutido; é a primeira vez que eu o uso. Muito conveniente ;)
05AB1E , 4 bytes (não concorrente)
.¡
foi substituído porγ
na atualização mais recente.fonte
dddd
o primeiro elemento da matriz na pilha na explicação após a execução de "delimitar".Ć
?xx -> xxxx
quando deveria serxx -> xxx
...?Python 3 , 44 bytes
Experimente online!
fonte
Retina , 11 bytes
Experimente online!
Substitui cada execução de caracteres por um dos caracteres da execução, seguido pela própria execução.
fonte
Pitão , 7 bytes
Conjunto de teste .
Como funciona
fonte
MATL , 5 bytes
Experimente online!
Explicação
Considere entrada
'doorbell'
.fonte
Alice , 17 bytes
Experimente online!
Explicação
Essa é uma estrutura para programas que operam inteiramente no modo Ordinal e são essencialmente lineares (loops simples podem ser escritos e um é usado neste programa, mas é mais difícil trabalhar aqui com o fluxo de controle de ramificação). O ponteiro de instrução salta na diagonal para cima e para baixo através do código da esquerda para a direita, depois é deslocado por uma célula pelos dois espelhos no final e volta da direita para a esquerda, executando as células que foram puladas na primeira iteração. A forma linearizada (ignorando os espelhos) fica basicamente assim:
Vamos passar por isso:
fonte
Gelatina , 6 bytes
Experimente online!
Funciona apenas como um programa completo (por exemplo, saída com string).
fonte
Braquilog , 8 bytes
Experimente online!
Explicação
fonte
~
ter precedência sobre os metapredicados (ou alterá-lo para uma operação postfix); se você fez, você poderia fazer isso em sete.C, 49 bytes
Veja como funciona online .
fonte
Python 2 , 47 bytes
Experimente online!
fonte
C, 53 bytes
Experimente online!
fonte
PHP, 40 bytes
Versão Online
PHP <7,1, 44 bytes
Versão sem Regex
Versão Online
fonte
Japonês , 8 bytes
7 bytes de código, +1 para o
-P
sinalizador.Teste online!
Explicação
Isso usa o
ó
(partição no falso) interno que eu acabei de adicionar ontem:fonte
Hexagonia , 33 bytes
Expandido:
Experimente online!
O pseudocódigo é mais ou menos:
fonte
JavaScript (ES6),
3330 bytesTente
fonte
brainfuck , 23 bytes
Experimente online!
Explicação
fonte
Perl 6 , 18 bytes
Tente
Expandido:
fonte
05AB1E , 8 bytes
Experimente online!
Explicação:
fonte
Haskell, 36 bytes
Exemplo de uso:
f "aab"
->"aaabb"
. Experimente online!Quando a sequência tiver pelo menos dois caracteres, vincule
a
- se ao primeiro,b
ao segundo ec
ao restante da sequência. A saída éa
seguida pora
sea
não for igual ab
seguida por uma chamada recursiva comb:c
. Se houver apenas um caractere, o resultado será duas vezes esse caractere.fonte
CJam, 10 bytes
Experimente online!
Explicação:
fonte
Ruby, 30 bytes
fonte
Geléia , 5 bytes
Experimente online!
Como funciona
fonte
Lote, 140 bytes
Recebe entrada em STDIN.
fonte
sed,
1815 bytes (+1 para -r)Solução original
fonte
R, 36 bytes
fonte
PowerShell, 50 bytes
Experimente online!
fonte
Mathematica,
3421 bytesAgradecemos a Martin Ender por encontrar o caminho certo para fazer isso no Mathematica, economizando 13 bytes!
Função pura usando uma matriz de caracteres nos formatos de entrada e saída.
Split
separa uma lista em suas execuções de caracteres iguais.##&[#,##]&
é uma função que retorna uma sequência de argumentos: o primeiro argumento é alimentado, depois todos os argumentos (repetindo o primeiro em particular); isso é aplicado (@@@
) a todas as sub-Split
listas da lista.fonte
##&[#,##]&@@@Split@#&
? (Não testado.)Gather
na verdade não funciona se houver várias execuções do mesmo personagem (mas felizmenteSplit
é um byte mais curto de qualquer maneira)Split
em meu coração) Construção maravilhosa em seu primeiro comentário!Java,
15114660 bytesRegex
Detalhado
fonte
Matcher
ePattern
? Você pode golfe para 60 bytes como este:String f(String s){return s.replaceAll("((.)\\2*)","$1$2");}
brainfuck , 38 bytes
Experimente online!
fonte
Alice , 12 bytes
Dois bytes foram jogados no golfe graças a Martin Ender antes mesmo de esta resposta ser publicada. Ele é mais poderoso do que você jamais poderia imaginar.
Experimente online!
Explicação
fonte