Advertisement
Benkex

Érettségi 2014 május

Oct 24th, 2020 (edited)
1,770
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 3.77 KB | None | 0 0
  1. anyag = [line for line in open("ip.txt", "r")]
  2.  
  3. #2
  4. print("2.feladat")
  5. print("Az állományban",len(anyag),"db adatsor van.")
  6.  
  7. #3
  8. print("\n3.feladat")
  9. ertekek = [sum(ord(L) if L!=":" else 0 for L in line) for line in anyag]
  10. print("A legalacsonyabb értékű ip cím:")
  11. print(anyag[ertekek.index(min(ertekek))])
  12.  
  13. #4
  14. print("4.feladat")
  15. print("Dokumentációs:",sum(1 if line[:9]=="2001:0db8" else 0 for line in anyag),"db")
  16. print("Globális egyedi:",sum(1 if line[:7]=="2001:0e" else 0 for line in anyag),"db")
  17. print("Helyi egyedi:",sum(1 if line[:2]=="fc" or line[:2]=="fd" else 0 for line in anyag),"db")
  18.  
  19. #5
  20. nulls = [line for line in anyag if sum(1 for L in line if L=='0')>=18]
  21. f = open("sok.txt", "w")
  22. for line in nulls:
  23.     f.write(line)
  24. f.close()
  25.  
  26. #6
  27. print("\n6.feladat")
  28. sorsz = int(input("Kérek egy sorszámot: "))
  29. print(anyag[sorsz-1], end = '')
  30.  
  31. def nonull(s):
  32.     for i in range(len(s)):
  33.         if s[i]=="0":
  34.             continue
  35.         else: return s[i:]
  36.     return "0"
  37.  
  38. reduced = ':'.join(nonull(sec) for sec in anyag[sorsz-1].split(":")).strip()
  39. print(reduced)
  40.  
  41. #7
  42. """print("7.feladat")
  43. szet = reduced.split(":0") #itt az elemek száma eggyel több lesz mint a :0-k száma
  44.  
  45. if szet[0] == reduced: #ha a string nem lett szétbontva (nem volt benne ":0") - vagyis nem lehet redukálni, akkor
  46.             # a belőle létrehozott split lista megegyezik az eredeti reduced-al
  47.    print("Nem redukálható tovább!")
  48. else:
  49.    vals = []; count=0; first = True
  50.    for sec in szet:                 # meg akarom számolni, hogy az egyes (rész - üres karakterek), (rész, üres karakterek)...
  51.                     # chunkok hány elemből állnak, s ez mehet egy listába [vals]
  52.                     # pl. szet=["1234:23", '', '', ":3456:12", '', ":5678"]
  53.                     # az, ha a szet-ben szét van bontva, az azt jelenti, hogy egy ":0" volt benne, azaz ott is
  54.                     # redukálható
  55.        if sec!='' and not first: # csekkolom hogy üres kar.-e (az elsőt kizárva, mert az sosem az), mert ha nem,
  56.                     # akkor egy szétbontott rész jön, vagyis az előző befejeződött
  57.            vals.append(count) # ekkor a vals-hoz hozzáadom a count-ot.... tudod mit, szar! kezdem elölről.
  58.            count=0
  59.        count+=1
  60.        first = False
  61.    removeAll = lambda L, r: list(filter(lambda a: a!=r, L))
  62.    removeAll(szet, '')
  63.    ind = vals.index(max(vals))
  64.    for i in range(len(szet)-1):
  65.        if i==ind:
  66.            print(szet[i]+":", end='')
  67.        else:
  68.            print(szet[i]+vals[i]*":0", end='')
  69.    print(szet[-1])"""
  70.  
  71. # I changed my mind: itt az új megoldás, az előző kevésbé érthető.
  72.  
  73. vals=[]; count=0
  74. for i in range(len(reduced)-1):
  75.     if reduced[i]==':':
  76.         if reduced[i+1]=='0': #... azaz ha :0 rész van...
  77.         count+=1        # találtunk egy részt
  78.         i+=1            # átugrás a 0-án
  79.     elif count>0:       # ha találtunk legalább egy ':0'-t,...
  80.         vals.append(count)  # ha ':' után vmi más van->mehet a listába
  81.         count=0     # reset
  82.  
  83. ind = vals.index(max(vals)) #melyik a legnagyobb Chunk
  84. szet = list(filter(lambda a: a!='', reduced.split(':0'))) # szétbontom chunkok nélküli részre
  85. # a filterrel kiszedem belőle a ''-ket, és visszaalakítom listává
  86.  
  87. for i in range(len(szet)-1):
  88.     if i==ind:
  89.         print(szet[i]+":", end='')   # ha a legnagyobb chunknál vagyunk->csak + 1db ':'
  90.                     # mert a következő IP rész úgyis ':'-tal kezdődik
  91.     else:
  92.         print(szet[i]+vals[i]*":0", end='') # itt meg annyi ":0" vissza, amennyi volt.
  93. 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,
  94. # mert a vals logikusan eggyel kevesebb elemű mint a szet
  95.  
  96. """
  97. pl.
  98. 2001:e00:800:2000:0:3009:0:730e
  99. szet=['2001:e00:800:2000', ':3009', ':730e']
  100. vals=[1, 1]
  101. 2001:e00:800:2000::3009:0:730e
  102. """
  103.  
  104.    
  105.            
  106.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement