Considere a seguinte lista:
expected = [
'A',
'B',
'AB',
'C',
'D',
'CD',
'ABCD',
'E',
'F',
'EF',
'G',
'H',
'GH',
'EFGH',
'ABCDEFGH',
'I',
'J',
'IJ',
'K',
'L',
'KL',
'IJKL',
'M',
'N',
'MN',
'O',
'P',
'OP',
'MNOP',
'IJKLMNOP',
'ABCDEFGHIJKLMNOP',
...
]
Aqui está uma maneira de analisar: você está aprendendo a escrever caracteres chineses e deseja aprender cada vez mais grandes partes deles, ensaiando-os à medida que avança. Você começa com A, depois vai com B, então já existe uma sequência que é um par de dois, então você a combina. Então você vai com C e D, faz outro par, pratica. Então você ensaia: ABCD. Então o mesmo acontece com E até H, depois ensaie: ABCDEFGH. A lista é infinita.
O objetivo é gerar e imprimir um n-ésimo elemento desta lista, os índices subindo de zero. Suponha que após 'Z', você obtenha 'A' novamente.
O critério vencedor é o comprimento do código-fonte.
BC
ouCDEF
? O que decide o que concatenamos e o que não fazemos? Como é infinito se ele começa emA
novamente depoisZ
(quer dizer, em algum momento depoisABCDEFGHIJKLMNOPQRSTUVWXZ
temosABCDEFGHIJKLMNOPQRSTUVWXZAB
ou algo assim?)x,y,z,a,b...
).Respostas:
Python 2, 53 bytes
Experimente online!
Semelhante a esta construção com a transformação
x = u-v
,y = u
fonte
x^=y-x
de -1 byte.JavaScript (ES6), 59 bytes
Podemos economizar 2 bytes, tornando a sequência indexada 1 e usando uma simplificação semelhante à usada pelo KSab :
Experimente online!
JavaScript (ES6), 61 bytes
Retorna uma lista de números inteiros sem quebra automática.
Experimente online!
Baseado em uma construção de Donald Knuth. Entrada OEIS relacionada: A182105 .
Quão?
Esta é uma função recursiva de dois estágios.
JavaScript (ES6), 97 bytes
Retorna quebra automática de letras maiúsculas.
Experimente online!
Ou 91 bytes em minúsculas.
fonte
Python 2 , 60 bytes
Experimente online!
Baseado no uso de Arnauld da construção de Knuth . A condição
u&-u==v
pode ser substituída por uma condição mais simplesu/v%2>0
ouu&v>0
, alternativamente , já quev
sempre é uma potência de 2 queu
é divisível por.fonte
Wolfram Language (Mathematica) ,
8071 bytesExperimente online!
Retorna uma lista de números inteiros em vez de uma sequência de quebra automática de alfabeto. Indexado a 0.
Usa o OEIS A182105 , graças a @Arnauld.
Imprimindo a lista indefinidamente, 54 bytes
Experimente online!
1 indexado. A versão do TIO possui, em
lim
vez de∞
evitar falhas.fonte
Python 2 ,
938982 bytesExperimente online!
Retorna uma lista de números inteiros. Semelhante à abordagem Javascript de Arnauld .
fonte
Gelatina , 16 bytes
Programa completo. Imprime -
,
lista separada de números inteiros.fonte
Carvão ,
454235 bytesExperimente online! Link é a versão detalhada do código. 1 indexado. Não consegui encontrar uma fórmula simples para gerar o resultado, simplesmente segui o procedimento indicado na pergunta. Explicação:
Repita o número especificado
n
vezes.Empurre o próximo elemento para a matriz vazia predefinida
u
, calculada como ...... se houver mais de um elemento
u
e os dois últimos tiverem o mesmo comprimento ...... acrescente o penúltimo elemento ao último elemento (que cria o resultado na ordem inversa) ...
... caso contrário, a próxima letra poderá ser encontrada contando quantas letras adicionamos até agora e indexando ciclicamente no alfabeto maiúsculo predefinido. (A soma da extensão ou a extensão da soma falha quando a lista está vazia e o mapeamento da lista em uma sequência salva dois bytes sobre a inclusão de uma lista vazia em maiúsculas e minúsculas.)
Pegue o último elemento de
u
, que é on
th invertido da lista desejada e imprima implicitamente o reverso.fonte