Python 3.5 - 262 236 220 byte:
-16 byte grazie a @CatsAreFluffy! La mia intera funzione ora può finalmente essere in una sola riga! :)
from collections import*
def a(v):o=OrderedDict;j=[chr(i+97)for i in range(26)];d=o((j[i],(' '+'_'*(i+1)+'\n'+j[i]+'|'+'_'*(i+1)+'|'))for i in range(26));f=lambda w:'a'[w:]or f(w-1)+j[w]+f(w-1);[print(d[g])for g in f(v)]
Potrebbe essere un po 'lungo e può stampare nuove linee tra un edificio e l'altro, ma fa quello che deve. Puoi provarlo tu stesso per confermarlo.
MODIFICARE:
Il mio precedente codice golf non stampava il modello giusto. Tuttavia, ora quello mostrato sopra lo fa e lo fa bene secondo me. Puoi anche eseguirlo per te stesso per confermarlo.
Nota: Il programma stampa tutte le lettere minuscole dietro ogni "costruzione". Spero che va bene.
Versione Ungolfed con Spiegazione:
from collections import*
def a(v):
o=OrderedDict # Assign the OrderedSict function to "o"
j=[chr(i+97)for i in range(26)] # Create a list with all 26 lowercase letters of the alphabet
d=o((j[i],(' '+'_'*(i+1)+'\n'+j[i]+'|'+'_'*(i+1)+'|'))for i in range(26)) # Create a dict assigning each letter it's corresponding building with its corresponding length
f=lambda w:'a'[w:]or f(w-1)+j[w]+f(w-1) # Return the ABACABA sequence based on the user input
[print(d[g])for g in f(v)] # Print out the building according to the sequence returned by the above lambda function (thanks to @CatsAreFluffy for this method to print it! :) )
Fondamentalmente quello che sto facendo è prima importare la funzione Dizionario ordinato del modulo collezioni e quindi creare un dizionario ordinato, con ogni lettera minuscola nell'elenco "j" assegnata al suo edificio corrispondente, con la sua lunghezza corrispondente in caratteri di sottolineatura. Quindi computo la sequenza, in base all'input dell'utente, usando la f=lambda w:"a"[w:]or f(w-1)+j[w]+f(w-1)funzione, e quindi in base alla sequenza restituita da ciò, gli edifici, con ciascuna lettera corrispondente dietro di essi, vengono stampati.