Python 3.5 - 262 236 220 bajtów:
-16 bajtów dzięki @CatsAreFluffy! Moja cała funkcja może teraz być wreszcie w jednym wierszu! :)
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)]
Może być trochę długi i może drukować nowe linie między budynkami, ale robi to, czego potrzebuje. Możesz to przetestować samodzielnie, aby to potwierdzić.
EDYTOWAĆ:
Mój poprzedni kod w golfa nie wydrukował właściwie żadnego wzoru. Jednak teraz ten pokazany powyżej ma i moim zdaniem robi to dobrze. Możesz również uruchomić go dla siebie, aby to potwierdzić.
Uwaga: Program drukuje wszystkie małe litery za każdym „budynkiem”. Mam nadzieję, że to w porządku.
Wersja bez golfa z Objaśnieniem:
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! :) )
Zasadniczo to, co robię, to najpierw zaimportować funkcję Uporządkowanego słownika modułu kolekcji, a następnie utworzyć uporządkowany słownik, przy czym każda mała litera na liście „j” jest przypisana do odpowiedniego budynku, z odpowiednią długością w podkreśleniach. Następnie obliczam sekwencję, na podstawie danych wejściowych użytkownika, używając f=lambda w:"a"[w:]or f(w-1)+j[w]+f(w-1)funkcji, a następnie na podstawie sekwencji zwróconej przez to, budynki, z odpowiadającymi im literami, są drukowane.