main.py 2.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899
  1. file = open('input.txt','r')
  2. tmp = file.readlines()
  3. count = 0
  4. items = []
  5. items.append('')
  6. for t in tmp:
  7. #print(str(count))
  8. if t == '\n':
  9. #print('newline')
  10. items.append('')
  11. count += 1
  12. else:
  13. #print(t)
  14. items[count] += ' '+t
  15. valid = 0
  16. def isvalid(item):
  17. tmp = item.strip().replace('\n','').split(' ')
  18. vals = []
  19. for t in tmp:
  20. vals.append(t.split(':'))
  21. for v in vals:
  22. print(v)
  23. if v[0] == 'byr':
  24. val = int(v[1])
  25. if val > 2002 or val < 1920:
  26. print('byr invlid')
  27. return False
  28. if v[0] == 'iyr':
  29. val = int(v[1])
  30. if val > 2020 or val < 2010:
  31. print('iyr invlid')
  32. return False
  33. if v[0] == 'eyr':
  34. val = int(v[1])
  35. if val > 2030 or val < 2020:
  36. print('eyr invlid')
  37. return False
  38. if v[0] == 'hgt':
  39. unit = v[1][-2:]
  40. if unit not in ['cm','in']:
  41. print('hgt wrong unit')
  42. return False
  43. val = int(v[1].replace(unit,''))
  44. if unit == 'in':
  45. if val > 76 or val < 59:
  46. print('hgt out of range')
  47. return False
  48. if unit == 'cm':
  49. if val > 193 or val < 150:
  50. print('hgt out of range')
  51. return False
  52. if v[0] == 'hcl':
  53. if len(v[1]) != 7:
  54. print('hcl to short')
  55. return False
  56. if v[1][1] == '#':
  57. print('hcl wrong format')
  58. return False
  59. for c in v[1].replace('#',''):
  60. if c not in ['0','1','2','3','4','5','6','7','8','9','a','b','c','d','e','f']:
  61. print('hcl unexpected char '+c)
  62. return False
  63. if v[0] == 'ecl':
  64. if len(v[1]) != 3:
  65. print('ecl to short')
  66. return False
  67. if v[1] not in ['amb', 'blu', 'brn', 'gry', 'grn', 'hzl', 'oth']:
  68. print('ecl undefined value')
  69. return False
  70. if v[0] == 'pid':
  71. if len(v[1]) != 9 or not v[1].isnumeric():
  72. print('pid invaldi')
  73. return False
  74. return True
  75. for i in items:
  76. if 'byr' not in i:
  77. continue
  78. if 'iyr' not in i:
  79. continue
  80. if 'hgt' not in i:
  81. continue
  82. if 'hcl' not in i:
  83. continue
  84. if 'ecl' not in i:
  85. continue
  86. if 'pid' not in i:
  87. continue
  88. if 'eyr' not in i:
  89. continue
  90. if isvalid(i):
  91. valid += 1
  92. print(str(valid))