Vlan是一种为局域网设备进行逻辑划分的技术,为了标识不同的vlan 引入了vlan id 1~4094之间的整数,定义一个vlan id 的资源池
资源池中连续的vlan用开始vlan-结束vlan表示,不连续的用单个整数表示所有的vlan用英文逗号连接起来
现有一个vlan资源池,业务需要从资源池中申请一个vlan,需要你输出从vlan资源池中移除申请的vlan后的资源池
输入描述
第一行为字符串格式的vlan资源池,第二行为业务要申请的vlan vlan的取值范围1~4094
输出描述
从输入vlan资源池中移除申请的vlan后字符串格式的vlan资源池,输出要求满足题目中要求的格式,
并且要求从小到大升序输出,如果申请的vlan不在原资源池,输出升序排序的原资源池的字符串即可
输入池中vlan数量范围为2~2094的整数,资源池中vlan不重复且合法1~2094的整数
输入是乱序的
示例一 输入 1-5 2 输出 1,3-5 说明:原vlan资源池中有1 2 3 4 5 移除2后 剩下的1 3 4 5按照升序排列的方式为 1 3-5 示例二 输入 20-21,15,18,30,5-10 15 输出 5-10,18,20-21,30 说明: 原vlan资源池中有5 6 7 8 9 10 15 18 20 21 30 移除15后 剩下的为 5 6 7 8 9 10 18 20 21 30 按照题目描述格式并升序后的结果为5-10,18,20-21,30 示例三 输入 5,1-3 10 输出 1-3,5 资源池中有1 2 3 5 申请的资源不在资源池中 将原池升序输出为1-3,5
1 # coding:utf-8 2 def appends(result, start, last): 3 if start == last: 4 result.append(str(last)) 5 else: 6 result.append("-".join([str(start), str(last)])) 7 8 9 if __name__ == '__main__': 10 input_str = input("input string:") 11 request = int(input("Remove:")) 12 13 result = [] 14 sets = set() 15 for string in input_str.split(','): 16 if "-" in string: 17 ss = string.split("-") 18 for i in range(int(ss[0]), int(ss[1])+1): 19 sets.add(int(i)) 20 else: 21 sets.add(int(string)) 22 try: 23 sets.remove(request) 24 except NameError: 25 pass 26 27 last = start = list(sets)[0] 28 for i in range(1, len(sets)): 29 cur = list(sets)[i] 30 if cur == last+1: 31 last = cur 32 else: 33 appends(result, start, last) 34 start = last = cur 35 36 appends(result, start, last) 37 print(sorted(set(result)))