Python 3,5 - 262 236 220 bayt:
@CatsAreFluffy sayesinde -16 bayt! Tüm fonksiyonum artık tek bir satırda olabilir! :)
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)]
Biraz uzun olabilir ve bina arasında yeni satırlar basabilir, ancak ihtiyaç duyduğu şeyi yapar. Onaylamak için kendiniz test edebilirsiniz.
DÜZENLE:
Önceki golf kodum ne olursa olsun doğru desen baskı vermedi. Ancak, şimdi yukarıda gösterilen ve benim görüşüme göre iyi yapıyor. Bunu onaylamak için kendiniz de çalıştırabilirsiniz.
Not: Program her "binanın" arkasındaki tüm küçük harfleri yazdırır. Umarım herşey yolundadır.
Açıklama ile birlikte yorum yapılmamış sürüm:
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! :) )
Temelde yaptığım şey, önce koleksiyon modülünün Sıralı Sözlük işlevini içe aktarmak ve daha sonra sıralı bir sözlük oluşturmaktır. Daha sonra diziyi, kullanıcının girdisine göre, f=lambda w:"a"[w:]or f(w-1)+j[w]+f(w-1)
işlevi kullanarak hesaplar ve daha sonra bunun döndürdüğü diziye dayanarak, her birinin arkasında karşılık gelen harf bulunan binalar yazdırılır.