You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
81 lines
2.0 KiB
81 lines
2.0 KiB
2 years ago
|
import ast
|
||
|
|
||
|
def comparison(_left, _rigth):
|
||
|
_wrong = ''
|
||
|
if type(_left) is list and type(_rigth) is list:
|
||
|
__for = min(len(_left), len(_rigth))
|
||
|
for j in range(__for):
|
||
|
_wrong = comparison(_left[j], _rigth[j])
|
||
|
if _wrong in ['yes', 'no']:
|
||
|
return _wrong
|
||
|
if len(_left) > len(_rigth):
|
||
|
_wrong = 'yes'
|
||
|
if len(_left) < len(_rigth):
|
||
|
_wrong = 'no'
|
||
|
elif type(_left) is list:
|
||
|
if _left == []:
|
||
|
_wrong = 'no'
|
||
|
return _wrong
|
||
|
_wrong = comparison(_left[0], _rigth)
|
||
|
if _wrong == '':
|
||
|
_wrong = 'yes'
|
||
|
elif type(_rigth) is list:
|
||
|
if _rigth == []:
|
||
|
_wrong = 'yes'
|
||
|
return _wrong
|
||
|
_wrong = comparison(_left, _rigth[0])
|
||
|
if _wrong == '':
|
||
|
_wrong = 'no'
|
||
|
else:
|
||
|
if _left > _rigth:
|
||
|
_wrong = 'yes'
|
||
|
if _rigth > _left:
|
||
|
_wrong = 'no'
|
||
|
return _wrong
|
||
|
|
||
|
|
||
|
def compare(left, rigth):
|
||
|
left = ast.literal_eval(left)
|
||
|
rigth = ast.literal_eval(rigth)
|
||
|
wrong = ''
|
||
|
_for = min(len(left), len(rigth))
|
||
|
for i in range(_for):
|
||
|
wrong = comparison(left[i], rigth[i])
|
||
|
if wrong in ['yes', 'no']:
|
||
|
return wrong
|
||
|
if len(left) > len(rigth):
|
||
|
wrong = 'yes'
|
||
|
return wrong
|
||
|
return 'no'
|
||
|
|
||
|
def loop(_item):
|
||
|
for q in range(len(sorted)):
|
||
|
if compare(_item, sorted[q]) == 'no':
|
||
|
sorted.insert(q, _item)
|
||
|
return
|
||
|
sorted.append(_item)
|
||
|
|
||
|
unsorted = []
|
||
|
sorted = []
|
||
|
|
||
|
with open('input13.txt','r') as f:
|
||
|
inp = f.read().splitlines(keepends=False)
|
||
|
|
||
|
for line in inp:
|
||
|
if line != '':
|
||
|
unsorted.append(line)
|
||
|
unsorted.append('[[2]]')
|
||
|
unsorted.append('[[6]]')
|
||
|
|
||
|
sorted.append(unsorted[0])
|
||
|
unsorted.pop(0)
|
||
|
for item in unsorted:
|
||
|
loop(item)
|
||
|
|
||
|
for index in range(len(sorted)):
|
||
|
if sorted[index] == '[[2]]':
|
||
|
divider1 = index + 1
|
||
|
if sorted[index] == '[[6]]':
|
||
|
divider2 = index + 1
|
||
|
|
||
|
print('Decoder Key:' ,(divider1 * divider2))
|