Problem B: 以太网交换机的自学习算法
Problem Description
以太网交换机是一种即插即用的设备,其内部的帧交换表(又称为MAC地址表)是通过自学习算法自动地逐渐建立起来的。
自学习算法:
交换机收到一个帧之后,查找MAC地址表中与收到帧的源地址有无相匹配的项目。
如没有,就在MAC地址表中增加一个项目(源地址、进入的接口和时间);
如有,则更新原有的项目。
现假设有一台24端口的以太网交换机,在一开始,以太网交换机里面的MAC地址表是空的。你的任务是编写程序使用自学习算法建立以太网交换机的MAC地址表(最多24条项目)。
自学习算法:
交换机收到一个帧之后,查找MAC地址表中与收到帧的源地址有无相匹配的项目。
如没有,就在MAC地址表中增加一个项目(源地址、进入的接口和时间);
如有,则更新原有的项目。
现假设有一台24端口的以太网交换机,在一开始,以太网交换机里面的MAC地址表是空的。你的任务是编写程序使用自学习算法建立以太网交换机的MAC地址表(最多24条项目)。
Input Description
输入有若干行,每行表示进入交换机的帧相关的信息。包括4个部分:目的MAC地址 源MAC地址 进入的端口号 进入的时间,相互之间以空格分隔,其中MAC地址用十六进制表示。
Output Description
当所有输入结束后,按照MAC地址从小到大的顺序输出以太网交换机的MAC地址表,具体格式详见样例输出。其中Mac Address占18位,左对齐;Ports占8位,左对齐;Time左对齐。
Sample Input
ffff.ffff.ffff 0001.4339.b5a9 12 8
0050.0fc3.7770 0001.4252.89e7 3 15
0009.7c7c.c95e 0001.422b.486b 12 25
0050.0fc3.7770 0001.4252.89e7 3 48
ffff.ffff.ffff 0001.4339.b5a9 8 112
Sample Output
Mac Address Ports Time
0001.422b.486b 12 25
0001.4252.89e7 3 48
0001.4339.b5a9 8 112
ac代码:
1 def func(): 2 lines = [] 3 while True: 4 try: 5 #x作为中间量更新交换表的端口号 6 x = input() 7 if x ==' ': 8 break 9 x = x.split(' ', 3) 10 11 flag = 0 12 # 利用enumerate函数迭代数组,省去i++的操作 13 for i, element in enumerate(lines): 14 if x[1] == element[1]: 15 flag = 1 16 lines[i] = x 17 break 18 if flag == 0: 19 lines.append(x) 20 except: 21 break 22 23 lines = sorted(lines, key=lambda lines : lines[1], reverse=False) 24 print("Mac Address Ports Time") 25 for element in lines: 26 print( "%-18s%-8s%s" %(element[1],element[2],element[3]) ) 27 28 if __name__ == '__main__': 29 func()