Aqui está a terceira cidade da ABACABA:
_
A|_|
B|__|
A|_|_
C|___|
A|_|
B|__|
A|_|
É feito da sequência ABACABA , que é basicamente:
- A (1ª iteração)
- lugar B - AB
- repita A - ABA (2ª iteração)
- Local C - ABAC
- Repita ABA - ABACABA (3ª iteração)
e você entendeu a ideia.
Os edifícios têm uma altura (correspondida pelo número de sublinhados) igual às letras convertidas em números como A = 1, B = 2, etc.
Entrada
Um número de iteração 1 <= n <= 26.
Resultado
A cidade da ABACABA de ordem n , incluindo as letras no início das linhas.
Respostas:
Python 2, 82 bytes
Percebi que ninguém havia postado o método de recursão binária e decidiu tentar ... e agora, com um truque emprestado de Sherlock9, é a resposta mais curta em python! (Além disso, obrigado a xnor por mais uma redução.) (E então Dennis, que raspou um punhado mais ...)
Ungolfed:
fonte
s
, e tornando a segunda linha uma função anon:f=lambda n:n*"?"and f(n-1)+"_"*(n-2)+"\n%c|%s|"%(64+n,"_"*n)+f(n-1);lambda n:" _"+f(n)
f=lambda n,s=1:n*"_"and" _"*s+f(n-1,0)+"_"*(n-2)+"\n%c|%s|"%(64+n,"_"*n)+f(n-1,0)
deve funcionar.Python 2, 99 bytes
Para encontrar o
i
número th da sequência ABACABA, escrevai
em binário, conte o número de zeros à direita e adicione um. Usamos o truque de bits clássicoi&-i
para encontrar a maior potência2
que dividei
e depois calcular o tamanho do bit. Na verdade, fazemos a contagemi
regressiva de2**n-1
para0
, o que é bom porque a sequência ABACABA é simétrica.Nós rastreamos o número atual e o último da sequência com a ajuda de uma variável "anterior"
b
. Isso nos diz quantos sublinhados devem ser impressos como a "saliência". O edifício final é desenhado corretamente sem excesso porque0
é tratado como tendo comprimento de bit1
.O formato da string para impressão é extraído do Sp3000 , como é o truque de usar o
input
para imprimir a primeira linha.fonte
MATL , 59 bytes
Isso usa a versão atual (15.0.0) do idioma.
Experimente online!
(Se as letras não precisassem ser incluídas na saída: o seguinte funcionaria, 48 bytes):
Explicação
fonte
CJam,
3735 bytesEsta é uma implementação iterativa do algoritmo recursivo da resposta da @ quintopia .
Experimente online!
Como funciona
fonte
JavaScript (ES6), 162 bytes
Onde
\n
está o caractere literal de nova linha.fonte
\n
é no final, se alguém estava pensando.Python 2,
123121 byteslink ideone (-2 bytes graças a @xsot)
f
gera a sequência ABACABA como uma lista de números, por exemplof(3) = [1, 2, 1, 3, 1, 2, 1]
. O deslocamento da entrada em 1 comparado ao desafio de sequência da ABACABA nos permite obter um byte emf
.A primeira linha é impressa separadamente, após o que todas as outras linhas são impressas usando uma expressão que leva em consideração o número atual e o próximo número. Apenas por diversão, a primeira linha é impressa usando
input()
.fonte
[0]
porL
.Pitão -
6462 bytesProvavelmente poderia jogar mais, mas bom o suficiente por enquanto.
Experimente aqui!
Explicação:
fonte
Python 3.5 -
262236220 bytes:-16 bytes graças a @CatsAreFluffy! Agora toda a minha função pode finalmente estar em uma única linha! :)
Pode demorar um pouco e pode imprimir novas linhas entre as construções, mas faz o que é necessário. Você pode testá-lo para confirmar.EDITAR:
Meu código anterior de golfe não imprimiu o padrão certo. No entanto, agora o mostrado acima faz, e faz bem na minha opinião. Você também pode executá-lo para confirmar isso.
Nota: O programa imprime todas as letras minúsculas atrás de cada "edifício". Espero que esteja tudo bem.
Versão não destruída com explicação:
Basicamente, o que estou fazendo é primeiro importar a função Dicionário Ordenado do módulo de coleções e, em seguida, criar um dicionário ordenado, com cada letra minúscula na lista "j" sendo atribuída ao edifício correspondente, com o comprimento correspondente em sublinhados. Depois, calculo a sequência, com base na entrada do usuário, usando a
f=lambda w:"a"[w:]or f(w-1)+j[w]+f(w-1)
função e, em seguida, com base na sequência retornada por isso, os edifícios, com a letra correspondente de cada um, são impressos.fonte
OrderedDict
comoo
alternativa? E mudarop
parap
eitem
paraj
também funciona.if
(todas as entradas são 1≤v≤26), alterarrange(26)
pararange(v)
e usar emreturn"\n".join(f(v))
vez defor
.from collections import*
e emo=OrderedDict
vez defrom collections import OrderedDict as o
range(26)
pararange(v)
resultados em umIndex Error
. Além disso, doingreturn"\n".join(f(v))
retornará SOMENTE a sequência, mas não os próprios edifícios. Além disso, suas dicas foram muito boas. Obrigado! :)Ruby, 129 bytes
Função anônima, retorna uma sequência de linhas múltiplas.
fonte
JavaScript (ES6), 143
Existem 2 linhas novas nos backticks que são significativas e contadas.
... ou 138 se as letras puderem estar em minúsculas.
Menos golfe
Teste
fonte
Powershell, 67 bytes
fonte