Python 3.5 - 262 236 220 byte:
-16 byte nhờ @CatsAreFluffy! Toàn bộ chức năng của tôi cuối cùng có thể nằm trong một dòng duy nhất! :)
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)]
Nó có thể hơi dài, và nó có thể in các dòng mới ở giữa tòa nhà, nhưng thực hiện những gì nó cần. Bạn có thể tự kiểm tra để xác nhận nó.
BIÊN TẬP:
Mã đánh gôn trước đây của tôi không in đúng mẫu nào. Tuy nhiên, bây giờ cái được hiển thị ở trên, và nó làm nó tốt theo quan điểm của tôi. Bạn cũng có thể chạy nó cho chính mình để xác nhận điều đó.
Lưu ý: Chương trình in tất cả các chữ cái thường phía sau mỗi "tòa nhà". Tôi hy vọng điều đó ổn.
Phiên bản Ungolfed với Giải thích:
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! :) )
Về cơ bản những gì tôi đang làm trước tiên là nhập chức năng Từ điển theo thứ tự của mô-đun bộ sưu tập, sau đó tạo một từ điển theo thứ tự, với mỗi chữ cái viết thường trong danh sách "j" được gán cho tòa nhà tương ứng của nó, với độ dài tương ứng ở dưới. Sau đó, tôi tính toán chuỗi, dựa trên đầu vào của người dùng, sử dụng f=lambda w:"a"[w:]or f(w-1)+j[w]+f(w-1)
hàm và sau đó dựa trên chuỗi được trả về bởi đó, các tòa nhà, với mỗi chữ cái tương ứng phía sau nó, được in ra.