from random import randint, shuffle
def main(member_num, line_num):
members = list(range(1, 1 + member_num)) # 1번부터
targets = list(chr(each + ord('A')) for each in range(member_num)) # A 부터
ladder = [[False for _ in range(member_num - 1)] for _ in range(line_num)]
# 가로선 선택
full_col = set(range(line_num))
prev_col = set()
for i in range(member_num - 1): # 좌에서 우로, 마지막 열은 가로선 없음.
temp = list(full_col - prev_col) # 좌측 열에서 선택한 가로선은 제외.
shuffle(temp) # 셔플
prev_col = set(temp[:randint(1, line_num - 2)]) # [1 ~ line_num - 2]개 고름
for each in prev_col:
ladder[each][i] = True
# 그림
print(''.join(f'{each:<3}' for each in members))
for i in range(line_num): # 행
for j in range(member_num - 1): # 열
if ladder[i][j]:
print(f'{"|":-<3}', end='')
else:
print(f'{"|":<3}', end='')
print('|')
print(''.join(f'{each:<3}' for each in targets))
# 결과 찾기
for i in range(line_num - 1, -1, -1):
for j in range(member_num - 1):
if ladder[i][j]:
targets[j], targets[j + 1] = targets[j + 1], targets[j]
# 결과 출력
for m, t in zip(members, targets):
print(m, '-', t)
if __name__ == '__main__':
main(10, 6) # member_num 62이하, line_num 3 이상
1 2 3 4 5 6 7 8 9 10
| |--| | | | | | | |
| |--| | |--| |--| |--|
|--| |--| | | |--| | |
| |--| | | |--| | |--|
| |--| |--| | |--| |--|
| | |--| |--| | |--| |
A B C D E F G H I J
1 - B
2 - A
3 - F
4 - D
5 - I
6 - C
7 - E
8 - G
9 - J
10 - H