No Vim, você pode repetir um comando precedendo-o com um número, como 3dd
é equivalente a dd dd dd
. Bem, esse padrão de repetição não se restringe aos comandos do Vim. A string também pode ser replicada dessa maneira.
Especificação:
Dada uma sequência, composta apenas por dígitos, caracteres alfabéticos (maiúsculas e minúsculas) e espaços, com uma nova linha à direita opcional, como entrada, escreva um programa que faça o seguinte trabalho:
Cada "palavra" consiste em dígitos e alfabetos. Se uma letra for precedida de um número (pode haver mais de um dígito em um número ou o número é zero), repita essa letra pelos tempos determinados. Por exemplo:
a2bc -> abbc 3xx1yz -> xxxxyz 10ab0c0d0e -> aaaaaaaaaab # No 'cde' because there's a zero 2A2a2A2a -> AAaaAAaa
As palavras são separadas por espaços. Há no máximo um espaço entre cada duas palavras adjacentes.
Fácil né? Aqui estão as coisas adicionais:
Se houver um número antes do espaço, repita a próxima palavra pelos tempos determinados. O número sempre será anexado ao final da palavra anterior ou no início da string. Exemplo:
a2bc3 2d -> abbc dd dd dd 3 3a -> aaa aaa aaa 33a -> aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa 0 abcd0 efgh3 2x -> xx xx xx a3 0xc b -> a c c c b
Se uma palavra vazia precisar ser repetida, não imprima vários espaços seguidos. Esmagá-los:
a3 0x2 b -> a b b # NOT 'a b b'
Em outras palavras, seu programa nunca deve gerar dois espaços juntos.
A entrada nunca está vazia, mas não é necessário que a saída fique vazia:
0 3x -> (empty)
Entrada e saída podem ser obtidas de qualquer maneira preferida. Uma função que recebe entrada de argumentos e fornece saída via valores de retorno também é aceitável.
Se for um programa, ele não deve sair com erro (ou seja, o valor de retorno é zero).
Os números são sempre decimais e nunca começam com zero, a menos que o número em si seja zero; nesse caso, existe apenas um zero.
077a
Ou seja, você não precisa considerar ou000a
fornecer como entrada.Todos os números estão abaixo de 2 ^ 31 (2.147.483.648). O comprimento máximo da saída é inferior a 2 ^ 32 (4.294.967.296) bytes.
O programa pode opcionalmente gerar um espaço à direita e / ou uma nova linha à direita. O espaço e a nova linha não afetam a validade da saída. Mesmo se a saída correta estiver vazia, a saída de um espaço seguido por uma nova linha será qualificada.
Em resumo, uma entrada válida corresponde a esta expressão regular:
([0-9]+ )?([0-9A-Za-z]*[A-Za-z])([0-9]* [0-9A-Za-z]*[A-Za-z])*( ?\n?)
E para uma saída válida:
([A-Za-z]+)( [A-Za-z]+)*( ?\n?)
Casos de teste de amostra:
abcdefg -> abcdefg
a3bcd -> abbbcd
a3bbbc -> abbbbbc
3a0b -> aaa
abc 3d -> abc ddd
abc3 d -> abc d d d
5 1x5 1y0 z -> x x x x x y y y y y
a999 0x b -> a b
999 0s -> (empty)
0 999s -> (empty)
0 999s4 t -> t t t t
a3 0xc b -> a c c c b
ABC3 abc -> ABC abc abc abc
Este é um código de golfe , portanto o programa mais curto em bytes em cada idioma vence!
a3 0xc b
->a c c c b
deve ser adicionado, pois originalmente eu tinha um código que funcionava para todos os casos de teste acima, mas não funcionava corretamente para isso.Respostas:
JavaScript (Node.js) ,
102129110106 bytesExperimente online!
Obrigado por @Arnauld por -4 bytes.
fonte
Perl 6, 88 bytes
Teste-o
Expandido:
A
~(…).words
combinação remove espaços externos, o que é útil se uma "palavra" for removida.fonte
Python 2,
286275260257238 bytes-19 bytes graças a ovs
f
pega uma string como argumento e imprime a string formatada.Aqui está um repl.it com os casos de teste.
Código não destruído:
Ainda trabalhando em melhorias.
fonte
exec
, pois é a única linha na função.Perl 5 , 77 + 1 (
-p
) = 78 bytesExperimente online!
fonte
Limpo ,
443... 306 bytesExperimente online!
fonte
Lua , 113 bytes
Experimente online!
fonte