Este é o inverso de Vamos fazer um "deciph4r4ng"
Nesse desafio, sua tarefa é codificar uma sequência. Felizmente, o algoritmo é bastante simples: lendo da esquerda para a direita, cada caractere de escrita típico (intervalo ASCII 32-126) deve ser substituído por um número N (0-9) para indicar que é o mesmo que o caractere N + 1 posições antes dele. A exceção é quando o caractere não aparece nas 10 posições anteriores na sequência original. Nesse caso, você deve simplesmente imprimir o caractere novamente. Efetivamente, você poderá reverter a operação do desafio original.
Exemplo
A string de entrada "Programming"
seria codificada desta maneira:
Portanto, a saída esperada é "Prog2am0in6"
.
Esclarecimentos e regras
- A sequência de entrada conterá caracteres ASCII exclusivamente no intervalo 32 - 126. Você pode assumir que nunca estará vazio.
- A sequência original é garantida para não conter nenhum dígito.
- Uma vez codificado, um caractere pode ser referenciado por um dígito subsequente. Por exemplo,
"alpaca"
deve ser codificado como"alp2c1"
. - As referências nunca serão agrupadas em torno da string: somente caracteres anteriores podem ser referenciados.
- Você pode gravar um programa completo ou uma função que imprima ou produz o resultado.
- Isso é código de golfe, então a resposta mais curta em bytes vence.
- As brechas padrão são proibidas.
Casos de teste
Input : abcd
Output: abcd
Input : aaaa
Output: a000
Input : banana
Output: ban111
Input : Hello World!
Output: Hel0o W2r5d!
Input : this is a test
Output: this 222a19e52
Input : golfing is good for you
Output: golfin5 3s24o0d4f3r3y3u
Input : Programming Puzzles & Code Golf
Output: Prog2am0in6 Puz0les7&1Cod74G4lf
Input : Replicants are like any other machine. They're either a benefit or a hazard.
Output: Replicants 4re3lik448ny3oth8r5mac6in8.8T64y'r371it9376a1b5n1fit7or2a1h2z17d.
Respostas:
05AB1E ,
20 1918 bytes-2 Obrigado a Emigna
Experimente online!
fonte
)¹vDyåiDykëy}?y¸ìT£
funciona também.õIvDyåiDykëy}?yìT£
para 18 :)Retina ,
2423 bytesExperimente online!
Uma substituição de regex bastante simples. Combinamos cada caractere e tentamos encontrar uma cópia de 0 a 9 caracteres antes dele. Se o encontrarmos, substituímos o caractere pelo número de caracteres que precisávamos corresponder para obter a cópia.
Os resultados não correspondem exatamente aos casos de teste, porque este usa o maior dígito possível em vez do menor possível.
fonte
JavaScript (ES6),
745754 bytesEconomizou 3 bytes graças a ETHproductions com o brilhante em
p=/./g
vez dep={}
(inspirado em Neil)Casos de teste
Mostrar snippet de código
fonte
s
vez dep
?find
versão usandolastIndexOf
, que é um pouco surpreendente, dado que é 11 letras ....)s=>s.replace(p=/./g,(c,i)=>(i=p[c]-(p[c]=i))>-10?~i:c)
para salvar 3 bytes.Haskell ,
7266 bytesAgradecimentos a Laikoni por jogar 6 bytes!
Experimente online!
A função
%
mantém a sequência parcialmente processada em sentido inverso em seu segundo argumento, para que seja possível pesquisar os 10 primeiros elementos dessa sequência em busca de ocorrências do caractere que está sendo examinado. A submissão consiste na função sem nome(%"")
que chama a função anterior com a string vazia como seu segundo argumento.fonte
f(a:s)=f s++(last$[a]:[show n|(n,b)<-zip[0..9]s,b==a])
salva dois bytes.f(a:s)=f s++[last$a:[n|(n,b)<-zip['0'..'9']s,b==a]]
economiza ainda mais.reverse
economiza mais um byte: Experimente on-line!Python 2 , 64 bytes
Experimente online!
fonte
~10
você não pode simplesmente usar-11
?Perl 5 , 36 bytes
35 bytes de código +
-p
sinalizador.Experimente online!
Algumas explicações:
O objetivo é substituir um caractere sem dígito (
\D
mas corresponde à referência anterior\1
em minha regex) que é precedida por menos de 10 caracteres (.{0,9}
) e o mesmo caractere ((\D)
...\1
) pelo comprimento do.{0,9}
grupo (length$2
) Eredo
enquanto os personagens são substituídos.fonte
.*
não é obrigatório, qualquer caractere válido no intervalo antes do dígito substituído está ok.Python 2,
8984 bytesExperimente Online!
Repete a seqüência de caracteres inversa e cria uma nova seqüência com os números corretos inseridos.
fonte
Japonês , 18 bytes
Experimente online!
Explicação
fonte
JavaScript,
10080 bytesExperimente online!
fonte
05AB1E , 20 bytes
Experimente online!
Explicação
fonte
Python 3,
125118 bytesExperimente online!
fonte
C (tcc) , 113 bytes
Como a função cria uma cópia de uma sequência de entrada, o tamanho máximo da entrada é de 98 caracteres (mais que o suficiente para caber na entrada de teste mais longa). Obviamente, isso pode ser alterado para qualquer outro valor.
Experimente online!
Editar
-15 bytes. Obrigado Johan du Toit .
fonte
i,j;f(char*s){char n[99];strcpy(n,s);for(i=1;s[i];i++)for(j=i-1;j>-1&&i-j<11;j--)if(n[i]==n[j])s[i]=47+i-j,j=-1;}
Java 7,
102101 bytesExperimente online!
-1 byte graças a Kevin Cruijssen . Eu sempre gosto de uma desculpa para usar o operador que vai.
fonte
--c>=0
? Você pode substituí-lo porc-->0
para salvar um byte.MATL,
3130 bytesExperimente em MATL Online!
Explicação
fonte
this is a test
cede emthis 222a1te52
vez dethis 222a19e52
. O segundot
não é convertido para9
.PHP, 104 bytes
solução para a frente
Soluções anteriores
Versões Online
PHP, 111 bytes
PHP, 112 bytes
Versão Online
fonte
REXX,
124125 bytesfonte
s<9
vez des<10
ous<=9
. A entradathis is a test
cede emthis 222a1te52
vez dethis 222a19e52
. O segundot
não é convertido para9
. Experimente onlineC (gcc) ,
117103 bytesExperimente online!
103 bytes sem importação string.h, funciona com aviso. Se isso é contra as regras, eu vou puxar
Pretty Code:
Edições:
fonte
(i=strlen(s);s[--i];)
vez de(i=strlen(s)-1;s[i];i--)