ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 사다리 게임
    Python/이것저것 파이썬 2022. 12. 28. 22:32
    반응형
    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
    반응형
Designed by Tistory.