Entrada
Um número inteiro não negativo n
e uma sequência não vazia s
contendo apenas caracteres alfanuméricos e sublinhados _
. O primeiro caractere de s
não é _
. Os sublinhados de s
são interpretados como espaços em branco que podem ser preenchidos com outros caracteres.
Definimos uma sequência infinita de "seqüências infinitas" da seguinte maneira. A corda é repetida apenas infinitamente várias vezes. Para todos , a string é obtida preenchendo seus espaços em branco com os caracteres de , para que o primeiro de seja substituído por , o segundo de , e assim por diante. Como a primeira letra de não é , todo espaço em branco é preenchido eventualmente, e nós denotamos pela cadeia infinita em que todos foram substituídos por seu valor final.s1 = s s s...
s
k > 1
sk+1
sk
s1
_
sk
s1[0]
s1[1]
s
_
s∞
_
Resultado
Os primeiros n
caracteres de como uma sequência.s∞
Exemplo
Considere as entradas n = 30
e s = ab_c_
. Nós temos
s1 = ab_c_ab_c_ab_c_ab_c_ab_c_ab_c_ab_c_...
Substituindo os espaços em branco de , temoss1
s1
s2 = abacbab_ccab_caabbc_abcc_abacbab_cc...
Substituímos novamente os espaços em branco, o que resulta ems1
s3 = abacbabaccabbcaabbc_abcccabacbab_cc...
Mais uma substituição:
s4 = abacbabaccabbcaabbcaabcccabacbabbcc...
A partir disso, já podemos deduzir os 30 primeiros caracteres , que sãos∞
abacbabaccabbcaabbcaabcccabacb
Esta é a saída correta.
Regras
Você pode escrever um programa completo ou uma função. A contagem de bytes mais baixa vence e as brechas padrão não são permitidas. Falha na entrada incorreta é aceitável.
Casos de teste
0 "ab__" -> ""
1 "ab__" -> "a"
3 "ab__" -> "aba"
20 "ab" -> "abababababababababab"
20 "ab__" -> "abababababababababab"
20 "ab_" -> "abaabbabaabaabbabbab"
30 "ab_c_" -> "abacbabaccabbcaabbcaabcccabacb"
50 "ab_a_cc" -> "abaabccabaaaccabbacccabcaaccabbaaccabaaaccabcaccca"
50 "abc____" -> "abcabcaabcbcaaabcbcbcabcaaababccbcbabccabcabcaaaba"
Respostas:
Pyth, 17
A entrada deve ser fornecida com a string na primeira linha e o comprimento na segunda, em STDIN. Por exemplo:
Experimente aqui.
Explicação:
fonte
APL
2928é usado assim:
Explicação:
Tryapl.org
fonte
⍣≡
é uma ideia bacana. Talvez eu devesse tentar portar isso para J ...CJam,
262420 bytes4 bytes salvos graças a Peter.
Teste aqui. Leva a corda primeiro e
n
segundo em STDIN.Você pode executar todos os casos de teste colando-os na entrada como estão (inclua o
-> output
se desejar) e usando o seguinte equipamento de teste (que reverte a ordem do código):Explicação
O resultado é impresso automaticamente no final do programa.
Uma observação sobre
[\]
: em princípio,[
lembra o tamanho atual da pilha e]
coleta tudo até o último tamanho lembrado em uma matriz. No entanto, se o tamanho da matriz ficar abaixo do tamanho lembrado no meio, o início da matriz será ajustado de acordo. Agora você pode pensar que a troca dos dois principais elementos da matriz não afeta o tamanho da matriz, mas\
na verdade exibe dois valores e os pressiona na ordem inversa. É isso que empurra o início da matriz para baixo em dois. Portanto,[\]
é a maneira mais curta de agrupar os dois principais elementos da pilha em uma matriz. Às vezes, o efeito colateral de colecioná-los em ordem inversa é bastante irritante, mas, neste caso, é exatamente o que eu preciso.fonte
_'_#)
g
porI*
. Funciona para mim no GolfScript.Python 3, 110 bytes
Precisa de um pouco mais de golfe, mas aqui está uma insanidade pura. Lê
n
então as
partir de STDIN.A parte divertida é que, na tarefa do loop que copiamos
b
, começamos a aparecerb
durante a compreensão da lista . Se a tarefa fosse inversa, não funcionaria!fonte
k, 30
fonte
Java - 162
174Não é todo dia que uso um loop do / while ao jogar golfe em Java: D
Isso apenas itera e preenche os espaços em branco quando eles chegam. Ele continua até que não haja mais
_
resultado.Com quebras de linha:
fonte
Java 8, 238
Menos golfe:
fonte
Ruby, 60
Concatena
s
para si próprion
vezes, depois geran
cópias de código que substituem sublinhadoss
, avalia essas cópias e retorna os primeirosn
caracteres do resultado. Como pelo menos um sublinhado é removido em cada loop, é garantido que ele nos dên
caracteres sem sublinhado.fonte
f
e correrputs f[10,"ab_"]
, eu recebo o seguinte erro:in 'eval': undefined method 'next' for #<Array:...
. Parece funcionar quando não há sublinhados na string.String#chars
mudou entre Ruby 1.9.3 e Ruby 2.0; no Ruby 1, ele retorna um enumerador quando não há bloco; no Ruby 2, uma matriz. Ele pode ser tornado insensível à versão alterandochars
paraeach_char
, ao custo de mais 4 bytes líquidos de código.Python 2, 75
Isso espera entrada como
(30,"ab_c_")
.No Python, strings não permitem atribuição. Portanto, é difícil substituir os espaços em branco pelo caractere desejado. Pode-se contornar isso convertendo para uma lista e retornando, mas achei mais curto gerar apenas a sequência de saída do zero, adicionando os caracteres desejados um de cada vez.
A saída que está sendo construída é
S
, que começa vazia. Percorremos os caracteres da entradas
copiados várias vezes para simular um círculo. Verificamos se está em branco através do Booleanb
. Verificamos a igualdadex=='_'
em vez da comparação porque o sublinhado está entre letras maiúsculas e minúsculas.Se o personagem não estiver em branco, basta adicioná-lo
S
. Se estiver em branco, adicionamos a próxima letra não utilizada da saída até o momentoS
. Rastreamos as letras usadas por um ponteiro de índicec
que começa em 0 e é incrementado cada vez que encontramos um espaço em branco.No final, imprimimos os primeiros
n
caracteres da sequência resultanteS
.Temos que usar
S[c:c+b]
no lugar do mais curto,b*S[c]
porque o último gera um erro fora dos limites quandoS
começa vazio ec
é 0. Isso nunca importa, porque temos a garantia de que o primeiro caracteres
não está em branco; portanto, issoS[c]
nunca é necessário, mas o código não sabe disso. Ativar oor
curto-circuito também pode resolver isso, mas custa mais caracteres.Python 2, 83
Uma porta Pyth-to-Python da solução de isaacg , que usa
split
ezip
executa a substituição:Ficou mais tempo porque, surpresa, os métodos nomeados são longos em python. Mas talvez possa ser melhorado riffling
s
es.split('_')
juntos de uma maneira mais curta.fonte
Haskell
(93)67Eu não escrevo nenhum Haskell há algum tempo,
então isso provavelmente pode ser reduzido em muito.mas foi tão bom que tivemos que encurtar e melhorar!Uso:
fonte
Lote - 425
Eu perco?
O lote tem limitações - eu aceito isso. Por exemplo; Eu tive que usar um loop for para obter uma única variável em um formato utilizável devido a limitações da sintaxe de análise de variáveis.
for %%b in (!c!)do...
existe apenas para que eu possa usar em%%b
vez de!c!
poder fazer a manipulação de strings!s:~%%b,1!
e fazer com que as variáveis se expandam no momento correto.Há algumas coisas bem básicas que eu poderia fazer para jogar ainda mais, mas provavelmente não abaixo de 400 bytes. Vou ter outra rachadura em breve.
fonte
ECMAScript 6, 78
Começa com uma string vazia e, para cada ocorrência de sublinhado, a substitui pelo caractere no próximo índice da string atual.
fonte
Python 2 -
9997 bytesComo 4 envios baseados em python não são suficientes ...
Exemplo:
fonte
ECMAScript 6,
9391Raspou 2 caracteres da primeira versão.
fonte
C # - 162
Eu roubei a solução Geobits e mudei para C #
1 caractere melhor, para que você possa melhorar os Geobits;)
fonte