#男人编号 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('没有任何感染')