Desafio:
Entrada:
Você recebe duas entradas:
- Uma sequência contendo apenas ASCII imprimível (excluindo espaços, tabulações ou novas linhas)
- Um caractere ASCII imprimível
Saída:
A primeira linha conterá a entrada de string. Toda i
primeira ocorrência desse módulo se moverá na direção sudeste; toda i
ocorrência de módulo-3 segundos se moverá na direção sul; e cada i
terceira ocorrência de módulo 3 se moverá na direção sudoeste. Você continuará até que os caracteres estejam na posição inicial inicial novamente (o que significa que ele se agrupará de um lado para o outro, se necessário) e, em seguida, imprimirá a última linha com a entrada de sequência novamente para Termine isso. (Observe que todos os casos de teste terminam na entrada inicial após o máximo de length(input)
linhas, incluindo a linha que contém a entrada à direita. No entanto, pode ser mais cedo, como visto no primeiro caso de teste abaixo, com um comprimento de 14, mas terminando após 9.)
Tudo isso pode ser bastante vago, então aqui está um exemplo:
Caso de teste 1:
Entrada de string: Entrada de "This_is_a_test"
caractere:'s'
Saída:
This_is_a_test
s s s
ss s
s s
sss
sss
s s
ss s
s s s
This_is_a_test
Aqui está o mesmo caso de teste com os caminhos coloridos dos três s
:
onde o primeiro 's'
segue o caminho verde na direção sudeste; o segundo 's'
segue o caminho amarelo na direção sul; e o terceiro 's'
segue o caminho azul claro na direção sudoeste. (Se houvesse um quarto 's'
, seguiria na direção sudeste novamente, o que pode ser visto em alguns dos outros casos de teste abaixo.)
Regras do desafio:
- As entradas conterão apenas ASCII imprimível (excluindo espaços, tabulações e novas linhas)
- Os formatos de E / S são flexíveis. Pode ser uma cadeia de caracteres delimitada por nova linha, matriz de caracteres, etc. Sua chamada.
- É possível que o caractere fornecido não esteja presente na string; nesse caso, você pode emitir a string de entrada uma ou duas vezes (ou seja,
"test", 'a'
pode ter um destes como saída possível:"test\ntest"
/"test"
). - Espaços principais são obrigatórios; espaços à direita são opcionais. Uma ou várias novas linhas iniciais / finais são permitidas.
Regras gerais:
- Isso é código-golfe , então a resposta mais curta em bytes vence.
Não permita que idiomas com código de golfe o desencorajem a postar respostas com idiomas que não sejam codegolf. Tente encontrar uma resposta o mais curta possível para 'qualquer' linguagem de programação. - As regras padrão se aplicam à sua resposta, para que você possa usar STDIN / STDOUT, funções / método com os parâmetros adequados e programas completos do tipo retorno. Sua chamada.
- As brechas padrão são proibidas.
- Se possível, adicione um link com um teste para o seu código.
- Além disso, adicione uma explicação, se necessário.
Casos de teste / mais exemplos:
Caso de teste 2:
Entrada de string: Entrada de "abcabcabcabcabc"
caractere:'b'
Saída:
abcabcabcabcabc
b b b b b
bbb bb
b b
bbb bb
b b b b b
b b b b
b b b b b
bb b bb
b b b
bb bbb
b b bbb
b b b b
b bb bb
b b bb b
abcabcabcabcabc
Aqui está o mesmo caso de teste com os caminhos coloridos dos cinco a
:
Caso de teste 3:
Entrada de string: Entrada de "only_two_paths?"
caractere:'o'
Saída:
only_two_paths?
o o
o o
o o
o o
o o
oo
o
oo
o o
o o
o o
o o
o o
o o
only_two_paths?
Aqui está o mesmo caso de teste com os caminhos coloridos dos dois o
:
Caso de teste 4:
Entrada de string: "lollollollollol"
entrada de caracteres:'l'
Saída:
lollollollollol
lll ll ll
ll ll ll
l ll ll ll ll
lll l ll l ll
llllll ll ll
l l ll ll
ll lll ll
l l l lll ll l
ll l ll l l
l l l l llll l
ll lll lll
l l l ll
ll lll lllll
l l l ll l ll
lollollollollol
Aqui está o mesmo caso de teste com os caminhos coloridos dos dez l
:
Caso de teste 5:
Entrada de string: "AbCdEeDcBaAbCdEeDcBa_CCCCC"
entrada de caracteres:'C'
Saída:
AbCdEeDcBaAbCdEeDcBa_CCCCC
C C C C C
C C C C CCC
C C C C C C C
C C C C C C C
C C C C C C C
C C C C C C C
C C C C C C C
C C C CC C C
C C CC C C
C C CC C C
C C CC C
CC CC C C
CC CC C C
C C CC C C
C C CC C C C
C C C C C C
C C CC C C C
C C C C C C C
C C C C C C C
C C C C C CC
C C C C C C
C C C C CCC
C C C CCCC
C C C C
C C CCCCC
AbCdEeDcBaAbCdEeDcBa_CCCCC
Aqui está o mesmo caso de teste com os caminhos coloridos dos sete C
:
Caso de teste 6:
Entrada de string: "XyX"
entrada de caracteres:'X'
Saída:
XyX
XX
X
XyX
Aqui está o mesmo caso de teste com os caminhos coloridos dos dois X
:
Caso de teste 7:
Entrada de string: "aaaa"
entrada de caracteres:'a'
Saída:
aaaa
aa
aaa
aaa
aaaa
Aqui está o mesmo caso de teste com os caminhos coloridos dos quatro a
:
length(input)
tudo coincide novamente, mas pode ser mais cedo, como o primeiro caso de teste prova. Mas parece que você está realmente certo sobre o múltiplo de 3 partes (embora eu não tenha 100% de certeza).Respostas:
Stax , 24 bytes
Execute e depure on-line
Esta é a representação ascii do mesmo programa.
Ele obtém os índices de todos os caracteres e os modifica até que eles sejam iguais aos índices originais. Para cada alteração, imprima uma sequência com o caractere nesses índices.
fonte
Perl 5 ,
-plF
10110099989796 bytesSubstitua
\0
por um literal de 0 byte para obter 96. Observe que o link Try It Online possui 97 bytes porque não parece possível inserir um caractere 0 literal lá.O código golf perl highlighter acha que
#
começa um comentário. Quão ingênuo 😈Experimente online!
Como funciona
$l
é um contador para o qual a linha após a primeira em que estamos inseridos (porém, é decrescente, por exemplo, -3 por 3 linhas abaixo da sequência superior). Depois de imprimir a sequência inicial, uma vez que repetidamente faz o seguinte.Pesquise a primeira sequência de ocorrências do caractere de destino e calcule em que deslocamento deve aparecer:
(++$#$l%3*$l-$l+"@-")%@F
qual é a posição atual mais o número da linha (negativo) vezes-1, 0, 1
(cíclico). Construir uma corda com que muitas vezes\0
seguidas pelo personagem alvo eor
que em um acumulador$$l
(que é um acumulador diferente para cada$l
ea razão$l
contagem para baixo em vez de até porque$1
,$2
etc são somente leitura). Simultaneamente,$#$l
refere-se a uma matriz diferente a cada vez no loop. O resultado é a$l
linha th, mas com em\0
vez de espaços.Os caracteres de destino na primeira sequência são substituídos por,
\0
para que você acabe com a sequência original com "buracos" (com\0
) nas posições originais do caractere de destino. Se você,xor
com o acumulador, os furos forem preenchidos se, e somente se, o acumulador tiver os caracteres de destino nas posições originais, o resultado será a sequência original. Isso é usado para finalizar o loop. Se o loop ainda não estiver concluído, imprima o acumulador com a\0
substituição por espaço.Quando o loop termina, a
-p
opção mais uma vez imprime a primeira string e o programa é concluído.O personagem alvo é escolhido de uma maneira bastante complicada. Ele
${\<>}
converte uma linha lida de STDIN em uma referência que é imediatamente desreferenciada e substituída no regex. O\Q
prefixo escapa a todos os caracteres especiais em uma regex (como.
e*
). O\E
está implícito. Oo
modificador faz com que a parte da pesquisa nunca seja avaliada novamente, mas apenas repetida em todas as correspondências subsequentes (o que é bom, pois não há mais nada no STDIN).fonte
Python 2 ,
199193191 bytesExperimente online!
Se o loop puder sair via exceção:
Python 2 , 187 bytes
Experimente online!
fonte
(j[i]-i%3+1)%l
por dois bytes.C (gcc) , 261 bytes
Experimente online!
fonte
JavaScript (Node.js) ,
197194 bytesExperimente online!
Recebe entradas na sintaxe de currying, ie
f(s)(c)
.Não é perfeito, mas preciso de JS. Muitas funções em função.
fonte
Ruby ,
189 176 171 156 150 146 144137 bytesExperimente online!
fonte
Gelatina , 33 bytes
Experimente online!
Chame como uma função. (link diádico)
Encontrei algumas alternativas de 33 bytes , mas nenhuma melhoria real.
fonte