Voici la 3ème ville ABACABA:
_
A|_|
B|__|
A|_|_
C|___|
A|_|
B|__|
A|_|
Il est constitué de la séquence ABACABA , qui est essentiellement:
- A (1ère itération)
- place B - AB
- répéter A - ABA (2e itération)
- Place C - ABAC
- Répétez ABA - ABACABA (3e itération)
et vous avez l'idée.
Les bâtiments ont une hauteur (correspondant au nombre de soulignements) égale aux lettres converties en nombres comme A = 1, B = 2, etc.
Contribution
Un numéro d'itération 1 <= n <= 26.
Production
La ville ABACABA d'ordre n , y compris les lettres au début des lignes.
Réponses:
Python 2, 82 octets
J'ai remarqué que personne n'avait posté la méthode de récursion binaire et j'ai décidé de lui donner un coup de feu ... et maintenant avec une astuce empruntée à Sherlock9, c'est la réponse la plus courte en python! (Aussi, merci à xnor pour un raccourcissement de plus.) (Et puis Dennis qui a rasé une poignée de plus ...)
Non golfé:
la source
s
, et en faisant de la deuxième ligne une fonction 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)
devrait fonctionner.Python 2, 99 octets
Pour trouver le
i
numéro e de la séquence ABACABA, écrivezi
en binaire, comptez le nombre de zéros de fin et ajoutez-en un. Nous utilisons le truc de bits classiquei&-i
pour trouver la plus grande puissance de2
ces divisionsi
, puis calculons la longueur des bits. En fait, nous comptonsi
de2**n-1
à0
, ce qui est bien car la séquence ABACABA est symétrique.Nous suivons à la fois le numéro actuel et le dernier de la séquence à l'aide d'une variable "précédente"
b
. Cela nous indique le nombre de traits de soulignement à imprimer en tant que "surplomb". Le bâtiment final est dessiné correctement sans surplomb car il0
est traité comme ayant une longueur de bit1
.Le format de chaîne pour l'impression provient de Sp3000 , tout comme l'astuce
input
pour imprimer la première ligne.la source
MATL , 59 octets
Cela utilise la version actuelle (15.0.0) de la langue.
Essayez-le en ligne!
(Si les lettres ne devaient pas être incluses dans la sortie: ce qui suit fonctionnerait, 48 octets):
Explication
la source
CJam,
3735 octetsIl s'agit d'une implémentation itérative de l'algorithme récursif de la réponse de @quintopia .
Essayez-le en ligne!
Comment ça fonctionne
la source
JavaScript (ES6), 162 octets
Où se
\n
trouve le caractère de nouvelle ligne littéral.la source
\n
est à la fin, si quelqu'un se demandait.Python 2,
123121 octetslien ideone (-2 octets grâce à @xsot)
f
génère la séquence ABACABA sous la forme d'une liste de nombres, par exemplef(3) = [1, 2, 1, 3, 1, 2, 1]
. Le décalage de l'entrée de 1 par rapport au défi de séquence ABACABA nous permet de jouer un octet dansf
.La première ligne est imprimée séparément, après quoi toutes les autres lignes sont imprimées en utilisant une expression qui prend en compte le numéro actuel et le numéro suivant. Juste pour le plaisir, la première ligne est imprimée en utilisant
input()
.la source
[0]
parL
.Pyth -
6462 octetsOn pourrait probablement jouer au golf plus, mais assez bien pour l'instant.
Essayez-le ici!
Explication:
la source
Python 3.5 -
262236220 octets:-16 octets grâce à @CatsAreFluffy! Ma fonction entière peut maintenant enfin être sur une seule ligne! :)
Il peut être un peu long et imprimer de nouvelles lignes entre les bâtiments, mais il fait ce qu'il faut. Vous pouvez le tester vous-même pour le confirmer.ÉDITER:
Mon code de golf précédent n'a pas imprimé le bon motif. Cependant, maintenant celui montré ci-dessus le fait, et il le fait bien à mon avis. Vous pouvez également l'exécuter vous-même pour le confirmer.
Remarque: Le programme imprime toutes les lettres minuscules derrière chaque "bâtiment". J'espère que ça va.
Version non golfée avec explication:
Fondamentalement, ce que je fais, c'est d'abord importer la fonction Dictionnaire ordonné du module collections, puis créer un dictionnaire ordonné, chaque lettre minuscule de la liste "j" étant affectée à son bâtiment correspondant, avec sa longueur correspondante en traits de soulignement. Ensuite, je calcule la séquence, en fonction de l'entrée de l'utilisateur, en utilisant la
f=lambda w:"a"[w:]or f(w-1)+j[w]+f(w-1)
fonction, puis en fonction de la séquence renvoyée par cela, les bâtiments, avec la lettre correspondante de chacun derrière, sont imprimés.la source
OrderedDict
tant queo
? Et passerop
àp
etitem
àj
fonctionne également.if
(toutes les entrées sont 1≤v≤26), passerrange(26)
àrange(v)
et utiliser à lareturn"\n".join(f(v))
place defor
.from collections import*
eto=OrderedDict
au lieu defrom collections import OrderedDict as o
range(26)
enrange(v)
résultats dans unIndex Error
. De plus, fairereturn"\n".join(f(v))
retournera UNIQUEMENT la séquence, mais pas les bâtiments eux-mêmes. À part cela, vos conseils étaient plutôt bons. Merci! :)Rubis, 129 octets
Fonction anonyme, retourne une chaîne multiligne.
la source
JavaScript (ES6), 143
Il y a 2 sauts de ligne à l'intérieur des backticks qui sont importants et comptés.
... ou 138 si les lettres peuvent être en minuscules.
Moins golfé
Tester
la source
Powershell, 67 octets
la source