A entrada é uma palavra de letras minúsculas não separadas por espaço em branco. Uma nova linha no final é opcional.
A mesma palavra deve ser impressa em uma versão modificada: para cada caractere, duplique na segunda vez que aparece na palavra original, triplique na terceira vez, etc.
Exemplo de entrada:
bonobo
Exemplo de saída:
bonoobbooo
Aplicam-se as regras de E / S padrão. O código mais curto em bytes vence.
Testes fornecidos por @Neil:
tutu -> tuttuu
queue -> queuuee
bookkeeper -> boookkkeeepeeer
repetitive -> repeetittiiveee
uncopyrightables -> uncopyrightables
abracadabra -> abraacaaadaaaabbrraaaaa
mississippi -> misssiisssssssiiipppiiii
Pitão, 6 bytes
Agradecemos a @Doorknob por tirar 1 byte.
Obrigado a @Maltysen por descolar 5 bytes.
Experimente online!
Como funciona
Por exemplo, pegue a string
"bonobo"
.._
faz uma lista:['b', 'bo', 'bon', 'bono', 'bonob', 'bonobo']
VQ._
significa "a função anterior vetorizada (aplicada em paralelo) sobreQ
e._
", o que significaQ
(a entrada avaliada) será tratada como uma lista:['b', 'o', 'n', 'o', 'b', 'o']
e, em seguida, elas serão emparelhadas da@
seguinte maneira:Portanto,
@VQ._
irá produzir['b', 'o', 'n', 'oo', 'bb', 'ooo']
.O
s
então une todos eles, criando uma string'bonoobbooo'
, que é impressa implicitamente para se tornarbonoobbooo
.fonte
VQ
significa apenasfor N in Q
quando não está dentro de uma função. Nesse caso, o que realmente está acontecendo é que@V
a@
função vetorizada (aplicada em paralelo) nos próximos dois argumentosQ
e._
. Está faltando nos documentos, então eu o corrigirei.Retina ,
3419 bytesEconomizou 15 bytes inspirando-se na solução de isaacg.
A contagem de bytes assume a codificação ISO 8859-1.
As linhas vazias à esquerda e à direita são significativas.
Experimente online!
Explicação
Este é um estágio de substituição que corresponde ao regex vazio (ou seja, todas as posições de largura zero na string) e o substitui
$`¶
, onde$`
é o prefixo da correspondência e¶
insere um avanço de linha. Isso basicamente calcula todos os prefixos e os coloca em uma linha separada junto com o último caractere desse prefixo:Haverá alguns feeds de linha iniciais e finais, mas podemos ignorá-los.
De cada um desses prefixos, queremos manter os caracteres iguais ao último caractere. Para isso, usamos outro estágio de substituição:
Isso corresponde a tudo o que não queremos manter e o substitui por um nada. Combinamos qualquer caractere (usando
\D
desde que sabemos que não haverá dígitos na entrada) e, em seguida, verifique se não há outra cópia desse caractere no final da linha.fonte
Python, 56 bytes
Eu pareço estar preso com duas respostas do mesmo comprimento:
Edit: Veja a resposta de @ pacholik para uma abordagem Python mais curta e alternativa.
fonte
+1
com prioridade alta o suficiente para que parens não são necessáriasHaskell, 39 bytes
Exemplo de uso:
f "bonobo"
->"bonoobbooo"
.Diferente o suficiente da resposta de @ Damien . Cria a sequência da direita, extraindo todas as ocorrências do último caractere da sequência e precede uma chamada recursiva com todos, exceto o último caractere.
fonte
> <> , 27 bytes
Requer o intérprete oficial que sai com erro ao tentar imprimir o ponto de código -1. Experimente online!
O código lê a entrada de um caractere de cada vez e usa a primeira linha do codebox como uma matriz grande que armazena o número de vezes que cada caractere foi visto até o momento (>> <> inicializa as células que não são do programa para 0). A segunda linha é um loop para gerar um char várias vezes.
Como alternativa, aqui está uma versão que sai corretamente (37 bytes, não é adequada para o golfe):
fonte
chr(-1)
. Grande do intérprete animado para visualizações, mas infelizmente alguns dos discrepâncias com o intérprete oficial são um pouco irritante: /JavaScript (ES6),
4845 bytesEditar: salvou 3 bytes graças a @ user81655.
fonte
Haskell,
504241 bytesEconomizou 8 bytes graças a Lynn
fonte
f t=[c|(i,c)<-zip[0..]t,j<-[0..i],c==t!!j]
MATL , 8 bytes
Experimente online! Ou verifique todos os casos de teste de uma só vez .
Explicação
fonte
Labirinto ,
5425 bytesOutra colaboração com @ MartinBüttner, que realmente fez
maisquase todo o golfe para este. Renovando o algoritmo, conseguimos reduzir bastante o tamanho do programa!Experimente online!
Explicação
Uma rápida cartilha Labrinth:
Labirinto é uma linguagem 2D baseada em pilha. Existem duas pilhas, uma pilha principal e auxiliar, e o surgimento de uma pilha vazia produz zero.
Em cada junção, onde há vários caminhos para o ponteiro da instrução se mover para baixo, a parte superior da pilha principal é verificada para ver para onde ir. Negativo é virar à esquerda, zero é reto e positivo é virar à direita.
As duas pilhas de números inteiros de precisão arbitrária não são muita flexibilidade em termos de opções de memória. Para realizar a contagem, esse programa realmente usa as duas pilhas como uma fita, com a mudança de um valor de uma pilha para outra sendo semelhante a mover um ponteiro de memória para a esquerda / direita por uma célula. Não é exatamente o mesmo que isso, pois precisamos arrastar um contador de loop conosco no caminho para cima.
Primeiro, as extremidades
<
e,>
em cada extremidade, exibem um deslocamento e giram a linha de código que é deslocada para um lado esquerdo ou direito. Esse mecanismo é usado para fazer o código rodar em um loop - o valor<
é zero e gira a linha atual para a esquerda, colocando o IP à direita do código, e o valor>
zero e corrige a linha de volta.Aqui está o que acontece a cada iteração, em relação ao diagrama acima:
fonte
Perl, 17
(Código de 16 bytes, +1 para -p)
Uso:
fonte
Pitão, 7 bytes
Suíte de teste
Conjunto de testes graças ao DenkerAffe
Explicação:
fonte
Python 3, 52
fonte
f=lambda s:s and f(s[:-1])+s[-1]*s.count(s[-1])
PowerShell v2 +,
5247 bytesConstrói uma hashtable vazia e a armazena
$b
. Este é o nosso "contador" das letras que vimos. Em seguida, pegamos a entrada$args[0]
, a convertemos como uma matriz de caracteres e a enviamos por um loop. A cada iteração, pegamos o caractere atual"$_"
e o multiplicamos pelo contador pré-incrementado no valor especificado, o que fará com que a primeira ocorrência seja multiplicada1
e a segunda por2
e assim por diante. Encapsulamos isso com um,-join
então é tudo uma palavra sendo produzida.Economizou 5 bytes graças ao TessellatingHeckler usando uma tabela de hash em vez de uma matriz, portanto, não precisamos decrementar o caractere ASCII
97
para alcançar o índice apropriado. Isso funciona porque o pré-incremento do índice de hash chama implicitamente.Add()
em segundo plano se esse índice não existir, pois as hashtables são mutáveis.fonte
Dyalog APL , 6 bytes
TryAPL!
4 funções é o topo (2 trens) de um garfo (3 trens):
Primeiro
⊢
(à direita - no-op) na sequência especificada, fornecendo'bonobo'
Em seguida
,\
(varredura de concatenação) na cadeia, fornecendo'b' 'bo' 'bon' 'bono' 'bonob' 'bonobo'
Os dois são bifurcados junto com (dados como argumentos da direita e da esquerda para)
∩¨
(interseção cada), ou seja('b'∩'b') ('bo'∩'o') ('bon'∩'n') ('bono'∩'o') ('bonob'∩'b') ('bonobo'∩'o')
, que é'b' 'o' 'n' 'oo' 'bb' 'ooo'
Finalmente,
∊
(alistar) é aplicado ao resultado para achatá-lo, dando'bonoobbooo'
Ei, pelo menos ele combina com Pyth ! Obviamente, o Jelly é mais curto, pois é uma versão de golfe do J, que por sua vez é um dialeto avançado de 2 caracteres por função do APL.
fonte
Pitão, 11 bytes
Experimente aqui!
Explicação
fonte
J, 11 bytes
Este é um verbo monádico. Experimente aqui. Uso:
Explicação
fonte
05AB1E , 10 bytes
Código:
Explicação:
Usa a codificação CP-1252 . Experimente online!
fonte
CJam, 14
Experimente online
Explicação:
fonte
Perl 6, 37 bytes
fonte
> <> , 52 bytes
Ele empilha todas as letras lidas, as imprime uma e outra vez para cada letra semelhante na pilha.
Ele usa o
&
registro, porque ter que lidar com três variáveis na pilha (letra de leitura atual, posição na pilha, letra nesta posição) é uma dor.Você pode tentar aqui !
fonte
Ferrugem, 176 bytes
Isso usa um mapa para armazenar uma sequência para cada caractere na entrada. Para cada caractere, a sequência será removida do mapa, concatenada com o caractere, inserida novamente no mapa e anexada à saída.
Eu gostaria de usar em
get(...)
vez deremove(...)
, mas o verificador de empréstimos me fez mudar de idéia.fonte
Mathcad, 66 bytes
Infelizmente, o Mathcad não possui um manuseio de seqüência de caracteres particularmente bom, então converti a sequência de entrada em um vetor e, em seguida, usei um vetor (indexado pelo código de caractere) para rastrear o número de vezes que um caractere é encontrado, adicionando o caractere que número de vezes para um vetor de resultado. Finalmente, o vetor resultante é convertido novamente em uma sequência. Muito longo, infelizmente.
Observe que o Mathcad usa uma interface 2D de "quadro branco", com uma mistura de texto e operadores normais; os operadores normalmente são inseridos por meio de uma barra de ferramentas ou atalho de teclado; por exemplo, ctl- # insere o operador for loop, que compreende a palavra-chave for, o elemento-of symbol e 3 "placeholders" vazios para a variável de iteração, intervalo e expressões do corpo, respectivamente. Digitando [depois que um nome de variável entra no modo de índice de matriz, Digitando 'entra em um par parênteses correspondente ( principalmente ... há exceções dependendo do que mais há na expressão circundante )
fonte
Javascript ES6 44 bytes
resposta antiga
Javascript ES6 46 bytes
fonte
x
para a matriz de entrada ->q=>(x=[...q]).map(a=>x[a]=(x[a]||'')+a).join``
Julia,
3835 bytesA E / S está na matriz de caracteres. Experimente online!
Como funciona
Nós (re) definimos o operador monádico ! para nossos propósitos.
Quando ! é chamado, verifica se o argumento s está vazio. Se for, ele retorna seu argumento.
Se s é não vazio, cruzamos s com seu último caractere (
s[end]
), que produz todas as ocorrências desse caractere em s . Este resultado é concatenado com o valor de retorno de uma chamada recursiva para ! com s menos seu último caractere (s[1:end-1]
) como argumento.fonte
PHP,
54515047 bytesExecute assim:
Tweaks
null
paraint
para o deslocamento da string, pois o deslocamento da string é convertido para int de qualquer maneira$argn
vez de$argv
(thx Titus)fonte
$argn
com-R
para salvar mais três bytes.-n
deve fazer o mesmo que o seu-d error_reporting
:n
significano config file
e os avisos estão desativados na configuração padrão; então-nr
(respectivamente-nR
) deve ser suficiente.Mathematica, 57 bytes
Utilizamos
c[x]
como tabela de pesquisa a frequência com que o personagemx
já ocorreu. Isso é incrementado cada vez que é recuperadox~StringRepeat~++c[x]
. Infelizmente, para tornar a função reutilizável, precisamos redefinir a tabela de pesquisa toda vezClear@c;c@_=0;
, o que é bastante caro.fonte
awk, 72 bytes
A idéia é armazenar a contagem do caractere que aparece em uma matriz associativa e imprimir o caractere essa contagem vezes.
fonte
Largura, 32
3342bytesIsso deveria ter sido menor, mas perdi alguns bytes ao inicializar os slots de memória para 0. A troca de algumas direções de fluxo conseguiu eliminar muito espaço vazio.
Experimente neste trecho
Explicação geral.
fonte
Python,
6662 bytesExperimente aqui
Golfe
Ungolfed
fonte