Python 3,5 - 262 236 220 байт:
-16 байт благодаря @CatsAreFluffy! Вся моя функция теперь, наконец, может быть в одной строке! :)
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)]
Он может быть немного длинным, и он может печатать новые строки между строками, но делает то, что ему нужно. Вы можете проверить это самостоятельно, чтобы подтвердить это.
РЕДАКТИРОВАТЬ:
Мой предыдущий гольф-код не печатал правильный образец вообще. Тем не менее, теперь показанный выше, и это хорошо, на мой взгляд. Вы также можете запустить его для себя, чтобы подтвердить это.
Примечание . Программа печатает все строчные буквы за каждым «зданием». Я надеюсь, что все в порядке.
Ungolfed версия с объяснением:
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! :) )
По сути, я сначала импортирую функцию упорядоченного словаря модуля коллекций, а затем создаю упорядоченный словарь, в котором каждой строчной букве в списке «j» назначается соответствующее здание с соответствующей длиной в подчеркиваниях. Затем я вычисляю последовательность, основываясь на вводе пользователем, используя f=lambda w:"a"[w:]or f(w-1)+j[w]+f(w-1)
функцию, а затем на основе последовательности, возвращаемой этим, здания, с соответствующей буквой за ними, распечатываются.