Esse desafio é imprimir a sequência de abacaba de uma profundidade específica.
Aqui está um diagrama das 5 primeiras seqüências ( a(N)
é a sequência abacaba de profundidade N, maiúscula / minúscula é apenas para mostrar o padrão, isso não é necessário na saída do seu programa):
a(0) = A
a(1) = aBa
a(2) = abaCaba
a(3) = abacabaDabacaba
a(4) = abacabadabacabaEabacabadabacaba
...
a(25) = abacabadabacabaeabacabadabacabafabacabadabacabaeabacabadabacabagabacabadabacabaeabacabadabacabafabacabadabacabaeabacabadabacabahabacabadabacabaeabacabadabacabafabacabadabacabaeabacabadabacabagabacabadabacabaeabacabadabacabafabacabadabacabaeabacabadabacabaiabacabadabacabaeabacabadabacabafabacabadabacabaeabacabadabacabagabacabadabacabaeabacabadabacabafabacabadabacabaeabacabadabacabahabacabadabacabaeabacabadabacabafabacabadabacabaeabacabadabacabagabacabadabacabaeabacabadabacabafabacabadabacabaeabacabadabacabajabacabadabacabaeabacabadabacabafabacabadabacabaeabacabadabacabagabacabadabacabaeabacabadabacabafabacabadabacabaeabacabadabacabahabacabadabacabaeabacabadabacabafabacabadabacabaeabacabadabacabagabacabadabacabaeabacabadabacabafabacabadabacabaeabacabadabacabaia...
Como você provavelmente pode dizer, a sequência da n-ésima abacaba é a última com a n-ésima letra e é novamente adicionada a ela. ( a(n) = a(n - 1) + letter(n) + a(n - 1)
)
Sua tarefa é criar um programa ou função que use um número inteiro e imprima a sequência abacaba dessa profundidade. A saída deve estar correta pelo menos para valores de até 15 inclusive.
Respostas:
Pitão, 11 bytes
Redução simples.
fonte
0
deve ser a seqüência vazia IMO, mas eu vou estar de acordo com a questão ...rev-doc.txt
ao lado desta resposta e ela deve mostrar-se facilmente simples.Python, 44 bytes
Parece suspeito, pode ser jogável.
fonte
Haskell,
3937 bytesExemplo de uso:
a 3
->"abacabadabacaba"
.Edit: @Angs encontrou dois bytes para salvar. Obrigado!
fonte
a n=a(n-1)++[97+n]++a(n-1)
funcionaria? Não é possível testar agora.[97+n]
é uma lista deInteger
ea(n-1)
é uma lista deChar
(akaString
). Você não pode concatenar listas com tipos diferentes.toEnum
faz umChar
fora doInteger
.['a'..]!!n
é 2 bytes mais curto quetoEnum(97+n)
Pitão,
1413 bytesAgradecemos a Jakube por salvar um byte!
Uma solução com 14 bytes:
VhQ=ks[k@GNk;k
.Explicação:
Experimente aqui !
fonte
V
?hQ
é apenaseval(input) + 1
=k
para=
. Pyth atribuirá automaticamente o resultadok
, já quek
é a primeira variável na expressão+k+@GNk
.Vt^2Q=+k@Gx_.BhN`1)k
(Nesse caso, ele está definido para fornecer os primeiros 2 ^ Q-1 caracteres conforme o desafio exigir, mas você pode ver como mudar isso.)Retina ,
3732 bytesO avanço de linha à direita é significativo. A entrada é recebida em unário .
Experimente online!
fonte
Brainfuck, 157 bytes
A entrada é dada em binário.
A idéia básica é duplicar repetidamente a sequência atual (começando com "a") e incrementar o último elemento após cada iteração:
a → aa → ab
ab → abab → abac
abac → abacabac → abacabac
...
Quando tudo isso for feito na quantidade especificada de vezes, o resultado será impresso excluindo o último elemento.
Explicação detalhada
A memória é organizada da seguinte maneira:
A contagem regressiva mantém o número de ciclos de cópia que ainda precisam ser executados. A sequência ABACABA é armazenada em blocos adjecentes, cada um composto por 3 células. Valor mantém o caractere do elemento (ou seja, "A", "B", "C" ...). O sinalizador Copiar indica se o elemento correspondente precisa ou não ser copiado no ciclo de cópia atual (0 = cópia, 1 = não). O fim sinalizador é definido como 0 para o último elemento enquanto está sendo copiado (é 1 em todos os outros casos).
Agora, para o programa atual (um pouco não destruído):
fonte
Haskell , 36 bytes
Experimente online!
Isso usa um método recursivo diferente da maioria das outras respostas. Para obter a próxima sequência na sequência, não juntamos duas cópias na sequência anterior com uma nova letra no meio, mas, em vez disso, incrementamos todas as letras e letras intercaladas
a
.fonte
bcb
vez decbc
?05AB1E , 12 bytes (não competitivo)
Código:
Eu serei amaldiçoado. Corrigi muitos bugs graças a esse desafio haha.
Explicação:
fonte
JavaScript (ES6),
4342 bytesUm byte salvo graças ao @Neil !
Ainda outra solução recursiva simples ...
fonte
(n+11).toString(36)
economiza 1 byte e funciona até (25)!CJam (14 bytes)
Demonstração online
fonte
Ruby (1.9 e superior), 38 bytes
?a
é uma maneira mais golfista de escrever,"a"
mas parece estranha quando misturada com ternário?:
fonte
R , 48 bytes
Experimente online!
Recursão simples.
fonte
paste0
é equivalente apaste
withsep=""
, para evitar os espaços entre as letras quepaste
seriam adicionadas por padrão.C #, 59 bytes
Apenas mais uma solução C # ...
fonte
Perl, 33 bytes
Não há necessidade real de não jogar golfe. Constrói a cadeia de caracteres anexando iterativamente o próximo caractere em seqüência mais o reverso da cadeia até o momento, usando o valor ASCII de 'a' como ponto de partida. Usos
$\
para salvar alguns traços, mas é o mais complicado possível.Trabalha para
a(0)
atravésa(25)
e até além. Embora você tenha entrado em ASCII estendido depoisa(29)
, ficará sem memória muito antes de ficar sem códigos de caracteres:a(25)
é ~ 64MiB.a(29)
é ~ 1GiB.Para armazenar o resultado de
a(255)
(não testado!), Seria necessário 2 ^ 256 - 1 = 1,15x10 ^ 77 bytes, ou aproximadamente 1,15x10 ^ 65 unidades de 1 terabyte.fonte
Java 7, 158 bytes
Eu gosto de espreitar o PPCG e gostaria de poder votar / comentar outras respostas.
A entrada é fornecida como parâmetros do programa. Isso segue o mesmo formato de muitas outras respostas aqui, pois é uma implementação recursiva direta. Eu teria comentado a outra resposta, mas ainda não tenho o representante para comentar. Também é um pouco diferente, pois a chamada recursiva é feita duas vezes, em vez de construir uma string e transmiti-la.
fonte
Mathematica,
3632 bytesVocê já assistiu TWOW 11B?
fonte
"",
e, em seguida, você pode usar a notação infix paraFold
.<>
e o número 2 funciona apenas para funções binárias.Python,
62544645 bytesEu gostaria de pensar que esse código ainda pode ser revertido de alguma forma.
Edit: Correção de bug graças a Lynn. -1 byte graças ao squid.
Experimente online!
fonte
Mathematica, 46 bytes
Função recursiva simples. Outra solução:
fonte
K5, 18 bytes
Aplique repetidamente uma função a um valor transportado (
"A"
) e a cada elemento de uma sequência. A sequência é os caracteres alfabéticos de B até um número N (`c$66+!
). A função une o argumento esquerdo em ambos os lados do argumento direito ({x,y,x}
).Em ação:
fonte
JavaScript,
6557 1 bytesDemo:
1 - obrigado Neil por salvar 8 bytes
fonte
(i+11).toString(36)
economiza 6 bytes.s="a";
para antesfor
dela, ela se tornará o valor de retorno padrão e você poderá descartar a fuga;s
para outro salvamento de 2 bytes.i
inline e soltando o incremento no loop for. Então ...for(i=0;i<n;)s+=(i+++11)...
Japonês,
2017 bytesTeste online!
Como funciona
Versão não concorrente, 14 bytes
A
ô
função é comoo
, mas cria o intervalo em[X..X+Y]
vez de[X..Y)
. Teste online!Eu prefiro alterar o 97 para o 94; nesse caso, a saída
5
é assim:fonte
Java, 219 bytes
Minha primeira tentativa de código de golfe. Provavelmente pode jogar golfe, mas estou com fome e vou almoçar.
Ungolfed:
Algoritmo recursivo de força bruta bastante simples, usa
char
manipulação.fonte
public
palavra-chave dea
eaddLetter
/j
.MATL , 14 bytes
Isso usa a versão 8.0.0 do idioma / compilador, anterior ao desafio.
Exemplo
Explicação
O secuence é criado primeiro com números
0
,1
,2
, ... Estes são convertidos em letras'a'
,'b'
,'c'
no final.Editar
Experimente online!
fonte
Powershell,
53,46,44, 41 bytesA colagem no console gerará uma saída errônea na segunda execução, uma vez que
$d
não é reinicializada.Economize 2 bytes usando + = Economize 3 bytes graças a @TimmyD
fonte
(
,)
.Gaia , 14 bytes
Experimente online!
fonte
PowerShell , 54 bytes
Experimente online!
fonte
Japonês , 8 bytes
Tente
fonte
Casca , 12 bytes
Experimente online!
Usa indexação baseada em 1, que espero que esteja OK.
Explicação
fonte
APL (NARS), 24 caracteres, 48 bytes
teste:
fonte
PHP
-r
, 43 bytesregister_argc_argv
deve estar ativado para que isso funcione.Experimente online!
PHP , 51 bytes
Uma função anônima que imprime a saída diretamente.
Experimente online!
fonte