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)))