TT

#男人编号 0 - N
#女人编号 0 - N
#TT编号 0 - N
def dispalyTT():
    global N, TT_inside, TT_outside
    # 显示每个TT的里侧外侧都包括了谁的病毒
    print("\t--------当前TT的带毒状态--------")
    for index in range(N):
        print("\t %d号TT"%(index),end='')
        print("里:",end='')
        for gender, id in TT_inside[index]:
            if gender == '  male':
                print('%d号男'%id,end=',')
            else:
                print('%d号女'%id,end=',')
        print("外:",end='')
        for gender, id in TT_outside[index]:
            if gender == '  male':
                print('%d号男'%id,end=',')
            else:
                print('%d号女'%id,end=',')
        print('')
    print('************************************************************')
def infect_test(gender, id, virus):
    global Infected
    # 感染测试函数, 如果正在接触的TT中包含了其它相同性别的XX,就把Infected标记为True
    # virus 存储的是正在接触的TT中包含了哪些人的病毒

    for _gender, _id in virus:

        # 病毒中一个同性的,但是是别人的,GG
        if _gender == gender and _id != id:
            Infected = True
            print('Infected : %s %d using these TTs with virus : '%(gender,id), virus)

def make_love_test(male, female, tt_number):
    global N, TT_inside, TT_outside
    # 进行一次ML, 并判断是否会出现感染的情况

    # 从里到外,相连的TT的病毒相互感染一下
    for enum in range(tt_number):

        # 当前正在处理从里到外的第几个TT
        this_index = ( male + enum ) % N

        if enum == 0:
            # 如果是最里面的TT,要判断一下这个TT里侧是否包括其它男人的病毒
            infect_test('  male', male, TT_inside[this_index])
            TT_inside[this_index].add(('  male',male))
        else:
            # 对于其它情况,当前TT的里侧要附上前一个TT的外侧病毒
            last_index = (this_index - 1 ) % N
            TT_inside[this_index].update(TT_outside[last_index])

        if enum == tt_number - 1:
            # 如果是最外面的TT,要判断一下这个TT外侧是否包括其它女人的病毒
            infect_test('female', female, TT_outside[this_index])
            TT_outside[this_index].add(('female', female))
        else:
            # 对于其它情况,当前TT的外侧要附上后一个TT的里侧病毒
            next_index = (this_index + 1 ) % N
            TT_outside[this_index].update(TT_inside[next_index])
if __name__ == '__main__':
    
    # N对不知廉耻,但又让人同情的男人女人们
    N = 4

    # 标记是否存在感染的情况
    Infected = False

    # 存储每个TT里侧包含了哪些男人和女人的病毒
    TT_inside = [set() for _ in range(N)]

    # 存储每个TT外侧包含了哪些男人和女人的病毒
    TT_outside = [set() for _ in range(N)]

    # 你们这些男人不要急,一个一个来
    for male in range(N):

        #由多到少的使用TT
        for tt_number in range(N, 0, -1):

            # 算一下是哪个小可怜被无情的践踏了(保证每个女人只被一个TT接触)
            female = (male + tt_number - 1) % N

            # 输出当前正在交易的是哪一对,和它们使用的TT(由里到外)
            print('%d号男 x %d号女, 由里到外的TT编号 : '%(male,female),[(male + offset)%N for offset in range(tt_number)])
            
            # 来呀,快活呀
            make_love_test(male, female, tt_number)

            # Oh~ WTF ~ 感染了!
            if Infected == True:
                exit(-1)

        # 显示此时TT的里侧外侧都包括了谁的病毒
        #dispalyTT()

    # 嘻嘻嘻,happy ending
    print('没有任何感染')

猜你喜欢

转载自www.cnblogs.com/dc-blog/p/8908960.html
TT
tt1