Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- anyag = [line for line in open("ip.txt", "r")]
- #2
- print("2.feladat")
- print("Az állományban",len(anyag),"db adatsor van.")
- #3
- print("\n3.feladat")
- ertekek = [sum(ord(L) if L!=":" else 0 for L in line) for line in anyag]
- print("A legalacsonyabb értékű ip cím:")
- print(anyag[ertekek.index(min(ertekek))])
- #4
- print("4.feladat")
- print("Dokumentációs:",sum(1 if line[:9]=="2001:0db8" else 0 for line in anyag),"db")
- print("Globális egyedi:",sum(1 if line[:7]=="2001:0e" else 0 for line in anyag),"db")
- print("Helyi egyedi:",sum(1 if line[:2]=="fc" or line[:2]=="fd" else 0 for line in anyag),"db")
- #5
- nulls = [line for line in anyag if sum(1 for L in line if L=='0')>=18]
- f = open("sok.txt", "w")
- for line in nulls:
- f.write(line)
- f.close()
- #6
- print("\n6.feladat")
- sorsz = int(input("Kérek egy sorszámot: "))
- print(anyag[sorsz-1], end = '')
- def nonull(s):
- for i in range(len(s)):
- if s[i]=="0":
- continue
- else: return s[i:]
- return "0"
- reduced = ':'.join(nonull(sec) for sec in anyag[sorsz-1].split(":")).strip()
- print(reduced)
- #7
- """print("7.feladat")
- szet = reduced.split(":0") #itt az elemek száma eggyel több lesz mint a :0-k száma
- if szet[0] == reduced: #ha a string nem lett szétbontva (nem volt benne ":0") - vagyis nem lehet redukálni, akkor
- # a belőle létrehozott split lista megegyezik az eredeti reduced-al
- print("Nem redukálható tovább!")
- else:
- vals = []; count=0; first = True
- for sec in szet: # meg akarom számolni, hogy az egyes (rész - üres karakterek), (rész, üres karakterek)...
- # chunkok hány elemből állnak, s ez mehet egy listába [vals]
- # pl. szet=["1234:23", '', '', ":3456:12", '', ":5678"]
- # az, ha a szet-ben szét van bontva, az azt jelenti, hogy egy ":0" volt benne, azaz ott is
- # redukálható
- if sec!='' and not first: # csekkolom hogy üres kar.-e (az elsőt kizárva, mert az sosem az), mert ha nem,
- # akkor egy szétbontott rész jön, vagyis az előző befejeződött
- vals.append(count) # ekkor a vals-hoz hozzáadom a count-ot.... tudod mit, szar! kezdem elölről.
- count=0
- count+=1
- first = False
- removeAll = lambda L, r: list(filter(lambda a: a!=r, L))
- removeAll(szet, '')
- ind = vals.index(max(vals))
- for i in range(len(szet)-1):
- if i==ind:
- print(szet[i]+":", end='')
- else:
- print(szet[i]+vals[i]*":0", end='')
- print(szet[-1])"""
- # I changed my mind: itt az új megoldás, az előző kevésbé érthető.
- vals=[]; count=0
- for i in range(len(reduced)-1):
- if reduced[i]==':':
- if reduced[i+1]=='0': #... azaz ha :0 rész van...
- count+=1 # találtunk egy részt
- i+=1 # átugrás a 0-án
- elif count>0: # ha találtunk legalább egy ':0'-t,...
- vals.append(count) # ha ':' után vmi más van->mehet a listába
- count=0 # reset
- ind = vals.index(max(vals)) #melyik a legnagyobb Chunk
- szet = list(filter(lambda a: a!='', reduced.split(':0'))) # szétbontom chunkok nélküli részre
- # a filterrel kiszedem belőle a ''-ket, és visszaalakítom listává
- for i in range(len(szet)-1):
- if i==ind:
- print(szet[i]+":", end='') # ha a legnagyobb chunknál vagyunk->csak + 1db ':'
- # mert a következő IP rész úgyis ':'-tal kezdődik
- else:
- print(szet[i]+vals[i]*":0", end='') # itt meg annyi ":0" vissza, amennyi volt.
- print(szet[-1]) # meg végül az utsót nehogy kihagyjuk, azért volt len(szet)-1 a range, hogy a vals-nak jó legyen az i mindig,
- # mert a vals logikusan eggyel kevesebb elemű mint a szet
- """
- pl.
- 2001:e00:800:2000:0:3009:0:730e
- szet=['2001:e00:800:2000', ':3009', ':730e']
- vals=[1, 1]
- 2001:e00:800:2000::3009:0:730e
- """
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement