Encurte (ou não) o texto usando a codificação de duração da execução
Entrada:
heeeello woooorld
Resultado:
1h4e2l1o 1w4o1r1l1d
- Leia as linhas de stdin.
- Imprimir para stdout.
- Stderr é naturalmente descartado.
- Suponha que haja casos de teste ocultos (sem incorporação da saída)
- Entrada / Saída como ASCII
- Qualquer idioma é aceito
w4orld
vez de1w4o1r1l1d
(você precisaria escapar de números, por exemplo, `f111 -> f3 \ 1 '). Mas então seria um quase duplicado deste: codegolf.stackexchange.com/questions/677422
é um ponto de correção trivial.11
é impossível.22
deve terminar aí ou ser seguido por outro ponto fixo que não comece com2
.333nnn
é um padrão impossível, pois você nunca encontrará o mesmo caractere em índices ímpares consecutivos.4444
e até falham pelo mesmo motivo.Respostas:
Perl:
46.→ 36 ou 27 caracteresperl -pe's|((.)\2*)|@x=split//,$1;@x.$x[0]|eg'
Todos saudam o @ardnew por ter a ideia de usar o
tr///c
operador para contar o número de caracteres na sequência correspondente em vez de dividir:Degolfado:
Uso:
ou via STDIN
impressões
fonte
p
opção.s|((.)\2*)|$1=~y///c.$2|eg
, que resume a 27 caracteres totais (usando as mesmas regras de contagem de caracteres como @Gareth)-p
), eliminando os parâmetros externos: Experimente online!Stax , 7 bytes
Execute e depure st staxlang.xyz!
Descompactado (8 bytes) e explicação:
5 bytes, funciona apenas em uma única linha:
Execute e depure-o em staxlang.xyz!
Talvez não seja legal. Este programa imprime cada par em uma linha própria. Um pouco superficial.
Se esse formato de saída for ilegal, eu lhe dou 6 bytes :
Execute e depure-o em staxlang.xyz!
Criador da linguagem recursiva assinala que uncons-direita (
N
) pode encurtar isso para seis bytes descompactados, como ele lida com aE
e]
por conta própria. Programas tão curtos, no entanto, geralmente não ficam mais curtos quando embalados, e este é um exemplo. Ainda seis bytes:|RFNpp
Editar: tive que atualizar minha resposta principal; esse formulário é o que eu usei.fonte
|RFNpp
pode dar a saída especificada em 6 bytes descompactada, mas infelizmente não compacta.J,
3531 caracteresUso:
fonte
[:,(#,&":{.)/.~
para 15: Experimente on-line!Braquilog , 11 bytes
Experimente online!
(Se a saída realmente precisar estar em stdout, adicione um byte
w
no final.)fonte
K (oK) , 28 bytes
Experimente online!
No celular, explicações a seguir ...
fonte
Python 3 iterativo,
1159997 bytesExperimente online!
Python 3 recursivo,
136130129 bytesExperimente online!
A abordagem iterativa parece bastante bem-sucedida, enquanto a versão recursiva tem muito espaço para melhorias.
fonte
while
loop no seu código está lá apenas para demonstrar a entrada. Sem ele, seu código ainda é válido. Nesse caso, o loop não precisa fazer parte do código e você pode reduzir o primeiro exemplo para 85 bytes da seguinte forma: Experimente online!05AB1E , 9 bytes
Experimente online.
Ou alternativamente:
Experimente online.
Explicação:
fonte
Wolfram Language (Mathematica) , 98 bytes
Experimente online!
Um formato de E / S mais flexível reduz essa solução para 54 bytes :
Experimente online!
fonte
Bash: 104 caracteres
Exemplo de execução:
fonte
Zsh, 117
Execute-o assim:
De-golfe
fonte
[[
construção é um comando por si só (como[
) e deve ser separada de outros comandos. Quanto ao uso[
excessivo[[
, é necessário que os argumentos sejam citados para que quatro"
sejam adicionados.APL (24)
fonte
Burlesco (17B)
Mais antigas / alternativas e versões mais longas:
fonte
rs , 19 caracteres
Isto realmente não contam porque eu criei rs forma após este foi publicado ... mas foi divertido de qualquer maneira!
Experimente aqui!
fonte
Retina , 12 bytes
Experimente online.
Explicação:
Faça parte de 1 ou mais do mesmo personagem, capturando o personagem no grupo de captura 1.
Substitua-o pelo comprimento da correspondência total, concaturado com o personagem do grupo de captura 1:
fonte
Ruby , 42 bytes
Experimente online!
fonte
Python 3 , 84 bytes
Experimente online!
Explicação
Verifica se o primeiro e o segundo caracteres da sequência são iguais. Se estiverem, aumente o contador em 1. Se não estiverem, imprima o contador e o primeiro item e redefina o contador para 1. Nos dois casos, a função é chamada recursivamente com o primeiro caractere removido.
Gera um erro quando o final da string é atingido.
Sem restrições de E / S, mas com contagem mínima de bytes:
Python 3.8 (pré-lançamento) , 70 bytes
Experimente online!
Equivalente ao Python 3 (77 bytes)
Explicação
Retira todos os caracteres repetidos do início da sequência. Em seguida, ele retorna uma string contendo (1.) a diferença de comprimentos entre a string original e a stripped; (2) o primeiro caractere da string original; (3.) o resultado da função recursiva aplicada à string removida. A recursão termina quando uma string vazia é encontrada.
fonte
[Scala (shell)], 150 bytes
Experimente online!
Aqui o Lambda puro retirou o golfe (103 bytes):
fonte
Julia 1.1 ,
948481 bytesExperimente online!
fonte
'\n'
parareadline()
em vez de imprimir a última tupla manualmenteCJam , 2 bytes
e`
é um built-in para codificação de execução. A saída implícita do CJam ignora os colchetes da matriz e se transforma[[1 'h] [2 'e]]
em"1h2e"
Experimente online!
fonte
Zsh, 70 bytes
experimente online!
Esta é uma versão muito mais eficiente da resposta zsh anterior ( link tio ). Provavelmente poderia ser jogado mais usando string => conversão de matriz em vez de iteração.
fonte