rosien

Valid_passport

Feb 17th, 2021 (edited)
116
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 2.99 KB | None | 0 0
  1. file = open('Day4.txt')
  2. data = file.readlines()
  3. #data.append('\n')
  4. data = [line.strip() for line in data]
  5.  
  6. import re
  7. valid = 0
  8. traveler = []
  9. travelers = []
  10. for line in data:
  11.     if line == '':
  12.         travelers.append(traveler)
  13.         traveler = []
  14.     else:
  15.         for field in re.split(':| ', line):
  16.             traveler.append(field)
  17. travelers.append(traveler)
  18. valid = 0
  19. for passport in travelers:
  20.      if len(passport) == 16 or (len(passport) == 14 and 'cid' not in passport):
  21.             valid += 1
  22. valid  
  23.  
  24.  
  25. # part 2
  26.  
  27. #  def valid_passport (byr, iyr, eyr, hgt, hcl, ecl, pid):
  28. def byr(byr):
  29.     return (len(byr) ==4 and  int(byr) >= 1920 and int(byr)  <= 2002)
  30.  
  31. def iyr(iyr):
  32.     return (len(iyr) == 4 and int(iyr) >= 2010 and int(iyr) <= 2020)
  33.  
  34. def eyr(eyr):
  35.     return (len(eyr)== 4 and int(eyr) >= 2020 and int(eyr) <= 2030)
  36.  
  37. def hgt(hgt):
  38.     if hgt[-2:] == 'cm':
  39.         return (int(hgt[:-2]) >= 150 and int(hgt[:-2])<= 193)
  40.     elif hgt[-2:] =='in':
  41.         return (int(hgt[:-2]) >= 59 and int(hgt[:-2])<= 76)
  42.     return False
  43.  
  44. def ecl(ecl):
  45.     eyes= ['amb',  'blu',  'brn',  'gry',  'grn',  'hzl',  'oth']
  46.     return (ecl in  eyes)
  47.  
  48. def hcl(hcl):
  49.     target = ['0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'a', 'b', 'c', 'd', 'e', 'f']
  50.     total = 0
  51.     if  (hcl[0] =='#' and len(hcl[1:]) == 6):
  52.         for value in hcl[1:]:
  53.             total += value in target
  54.         if total == 6:
  55.             return True
  56.     return False
  57.  
  58. def pid(pid):
  59.     target = ['0', '1', '2', '3', '4', '5', '6', '7', '8', '9']
  60.     total = 0
  61.     if len(pid) == 9:
  62.         for value in pid:
  63.             total += value in target
  64.         if total == 9:
  65.             return True
  66.     return False
  67.    
  68. total_valid = 0
  69. for traveler in travelers:
  70.     if len(traveler) == 16 or (len(traveler) == 14 and 'cid' not in traveler):
  71.         valid = 0
  72.         for ind in range(0,len(traveler),2):
  73.             field = traveler[ind]
  74.             if field == 'pid':
  75. #                 print('pid',traveler[ind+1], pid(traveler[ind+1]))
  76.                 valid += pid(traveler[ind+1])
  77.             elif field == 'byr':
  78.                 valid += byr(traveler[ind+1])
  79. #                 print('byr',traveler[ind+1], byr(traveler[ind+1]))
  80.             elif field == 'iyr':
  81.                 valid += iyr(traveler[ind+1])
  82.             elif field == 'hgt':
  83.                 valid += hgt(traveler[ind+1])
  84. #                 print('hgt', traveler[ind+1], hgt(traveler[ind+1]))
  85.             elif field == 'hcl':
  86.                 valid += hcl(traveler[ind+1])
  87. #                 print('hcl', traveler[ind+1], hcl(traveler[ind+1]))
  88.             elif field == 'ecl':
  89.                 valid += ecl(traveler[ind+1])
  90. #                 print('ecl', traveler[ind+1], ecl(traveler[ind+1]))
  91.             elif field  == 'eyr':
  92. #                 print('eyr', traveler[ind+1], eyr(traveler[ind+1]) )
  93.                 valid += eyr(traveler[ind+1])
  94.         total_valid += (valid == 7)
  95.    
  96. total_valid    
Add Comment
Please, Sign In to add comment