Files
adventcode2024/5/5.ipynb
2024-12-11 23:09:05 +01:00

1229 lines
26 KiB
Plaintext

{
"cells": [
{
"cell_type": "code",
"execution_count": 1,
"metadata": {},
"outputs": [],
"source": [
"import networkx as nx\n",
"\n",
"with open('5/input', 'r') as f:\n",
" data=f.readlines()\n",
"\n",
"read_rules = True\n",
"sequences =[]\n",
"#was expecting fancier things\n",
"rules = nx.DiGraph()\n",
"\n",
"for ln,line in enumerate([line.strip() for line in data]):\n",
" if read_rules:\n",
" if len(line) == 0:\n",
" read_rules = False\n",
" continue\n",
" left,right = line.split('|')\n",
" rules.add_edge(left,right)\n",
" else:\n",
" sequences.append(line.split(','))"
]
},
{
"cell_type": "code",
"execution_count": 2,
"metadata": {},
"outputs": [],
"source": [
"def test_sequence(sequence):\n",
" for lidx,left in enumerate(sequence):\n",
" if rules.has_node(left):\n",
" for right in sequence[lidx:]:\n",
" if rules.has_node(right):\n",
" if rules.has_edge(right,left):\n",
" return False\n",
" return True"
]
},
{
"cell_type": "code",
"execution_count": 3,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"5087"
]
},
"execution_count": 3,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"sum([int(sequence[len(sequence)//2]) for sequence in sequences if test_sequence(sequence)])"
]
},
{
"cell_type": "code",
"execution_count": 4,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"[['91', '76', '94', '81', '45', '78', '21'],\n",
" ['34',\n",
" '76',\n",
" '63',\n",
" '42',\n",
" '31',\n",
" '41',\n",
" '83',\n",
" '56',\n",
" '15',\n",
" '53',\n",
" '23',\n",
" '28',\n",
" '79',\n",
" '71',\n",
" '94',\n",
" '77',\n",
" '91',\n",
" '49',\n",
" '74'],\n",
" ['57',\n",
" '25',\n",
" '69',\n",
" '86',\n",
" '61',\n",
" '37',\n",
" '29',\n",
" '74',\n",
" '94',\n",
" '45',\n",
" '53',\n",
" '84',\n",
" '83',\n",
" '21',\n",
" '91',\n",
" '34',\n",
" '76',\n",
" '16',\n",
" '66',\n",
" '85',\n",
" '82'],\n",
" ['91',\n",
" '57',\n",
" '98',\n",
" '86',\n",
" '21',\n",
" '85',\n",
" '78',\n",
" '54',\n",
" '34',\n",
" '82',\n",
" '76',\n",
" '29',\n",
" '45',\n",
" '84',\n",
" '99',\n",
" '46',\n",
" '61',\n",
" '16',\n",
" '66',\n",
" '25',\n",
" '89'],\n",
" ['79',\n",
" '99',\n",
" '58',\n",
" '49',\n",
" '22',\n",
" '78',\n",
" '89',\n",
" '35',\n",
" '63',\n",
" '19',\n",
" '12',\n",
" '28',\n",
" '11',\n",
" '71',\n",
" '65',\n",
" '53',\n",
" '17'],\n",
" ['12', '23', '61', '74', '91', '34', '53'],\n",
" ['76',\n",
" '53',\n",
" '17',\n",
" '49',\n",
" '79',\n",
" '63',\n",
" '56',\n",
" '15',\n",
" '28',\n",
" '91',\n",
" '58',\n",
" '34',\n",
" '22',\n",
" '74',\n",
" '77'],\n",
" ['41',\n",
" '91',\n",
" '15',\n",
" '31',\n",
" '79',\n",
" '29',\n",
" '83',\n",
" '58',\n",
" '94',\n",
" '17',\n",
" '56',\n",
" '76',\n",
" '63'],\n",
" ['41',\n",
" '63',\n",
" '54',\n",
" '65',\n",
" '84',\n",
" '66',\n",
" '99',\n",
" '78',\n",
" '28',\n",
" '85',\n",
" '89',\n",
" '46',\n",
" '35',\n",
" '45',\n",
" '79',\n",
" '82',\n",
" '77'],\n",
" ['23', '35', '58', '98', '49', '12', '11'],\n",
" ['84', '56', '41', '46', '28', '98', '79'],\n",
" ['84', '76', '23', '53', '25'],\n",
" ['16', '77', '75', '41', '12', '11', '42', '58', '89'],\n",
" ['46', '82', '84', '16', '41', '65', '45', '98', '56', '78', '99'],\n",
" ['54',\n",
" '71',\n",
" '77',\n",
" '35',\n",
" '11',\n",
" '41',\n",
" '89',\n",
" '16',\n",
" '65',\n",
" '21',\n",
" '46',\n",
" '85',\n",
" '49',\n",
" '56',\n",
" '79'],\n",
" ['15',\n",
" '35',\n",
" '79',\n",
" '78',\n",
" '41',\n",
" '89',\n",
" '28',\n",
" '49',\n",
" '77',\n",
" '56',\n",
" '71',\n",
" '17',\n",
" '19',\n",
" '75',\n",
" '98'],\n",
" ['57',\n",
" '76',\n",
" '37',\n",
" '17',\n",
" '83',\n",
" '91',\n",
" '81',\n",
" '49',\n",
" '86',\n",
" '58',\n",
" '69',\n",
" '74',\n",
" '11',\n",
" '15',\n",
" '22',\n",
" '31',\n",
" '61',\n",
" '94',\n",
" '25'],\n",
" ['46',\n",
" '65',\n",
" '25',\n",
" '98',\n",
" '99',\n",
" '61',\n",
" '45',\n",
" '82',\n",
" '89',\n",
" '81',\n",
" '85',\n",
" '69',\n",
" '21',\n",
" '37',\n",
" '35',\n",
" '54',\n",
" '78',\n",
" '86',\n",
" '76'],\n",
" ['89',\n",
" '12',\n",
" '83',\n",
" '74',\n",
" '11',\n",
" '77',\n",
" '28',\n",
" '15',\n",
" '71',\n",
" '63',\n",
" '35',\n",
" '19',\n",
" '79'],\n",
" ['12', '19', '28', '23', '74', '89', '77'],\n",
" ['98',\n",
" '85',\n",
" '77',\n",
" '37',\n",
" '99',\n",
" '41',\n",
" '25',\n",
" '35',\n",
" '19',\n",
" '16',\n",
" '65',\n",
" '81',\n",
" '66',\n",
" '89',\n",
" '61',\n",
" '57',\n",
" '75',\n",
" '84',\n",
" '21',\n",
" '46',\n",
" '82'],\n",
" ['11',\n",
" '49',\n",
" '91',\n",
" '94',\n",
" '76',\n",
" '15',\n",
" '23',\n",
" '31',\n",
" '34',\n",
" '71',\n",
" '28',\n",
" '79',\n",
" '42',\n",
" '17',\n",
" '63',\n",
" '69',\n",
" '22'],\n",
" ['23', '94', '74', '91', '31', '69', '25', '53', '15', '81', '22'],\n",
" ['75', '85', '98', '37', '63'],\n",
" ['78',\n",
" '54',\n",
" '37',\n",
" '82',\n",
" '41',\n",
" '16',\n",
" '46',\n",
" '71',\n",
" '99',\n",
" '66',\n",
" '75',\n",
" '56',\n",
" '21',\n",
" '84',\n",
" '65'],\n",
" ['34', '53', '71', '58', '86', '81', '57'],\n",
" ['85',\n",
" '19',\n",
" '77',\n",
" '82',\n",
" '98',\n",
" '56',\n",
" '49',\n",
" '75',\n",
" '41',\n",
" '89',\n",
" '71',\n",
" '17',\n",
" '12',\n",
" '79',\n",
" '35'],\n",
" ['23',\n",
" '22',\n",
" '37',\n",
" '76',\n",
" '15',\n",
" '31',\n",
" '86',\n",
" '94',\n",
" '82',\n",
" '61',\n",
" '74',\n",
" '58',\n",
" '57'],\n",
" ['22', '45', '91', '25', '42', '83', '15', '61', '66'],\n",
" ['35', '25', '45', '57', '75'],\n",
" ['81',\n",
" '75',\n",
" '77',\n",
" '46',\n",
" '25',\n",
" '37',\n",
" '84',\n",
" '85',\n",
" '89',\n",
" '16',\n",
" '78',\n",
" '19',\n",
" '66',\n",
" '69',\n",
" '98',\n",
" '35',\n",
" '21',\n",
" '82',\n",
" '61',\n",
" '57',\n",
" '65'],\n",
" ['58',\n",
" '41',\n",
" '77',\n",
" '15',\n",
" '42',\n",
" '71',\n",
" '12',\n",
" '35',\n",
" '53',\n",
" '83',\n",
" '19',\n",
" '74',\n",
" '63',\n",
" '75',\n",
" '22',\n",
" '89',\n",
" '79'],\n",
" ['11',\n",
" '23',\n",
" '49',\n",
" '19',\n",
" '42',\n",
" '94',\n",
" '34',\n",
" '56',\n",
" '75',\n",
" '53',\n",
" '22',\n",
" '83',\n",
" '28',\n",
" '15',\n",
" '31',\n",
" '71',\n",
" '17'],\n",
" ['35',\n",
" '53',\n",
" '17',\n",
" '22',\n",
" '77',\n",
" '12',\n",
" '75',\n",
" '83',\n",
" '11',\n",
" '41',\n",
" '71',\n",
" '23',\n",
" '56'],\n",
" ['41',\n",
" '85',\n",
" '79',\n",
" '11',\n",
" '65',\n",
" '49',\n",
" '77',\n",
" '75',\n",
" '17',\n",
" '42',\n",
" '99',\n",
" '28',\n",
" '71',\n",
" '35',\n",
" '89',\n",
" '63',\n",
" '78',\n",
" '22',\n",
" '19'],\n",
" ['45',\n",
" '85',\n",
" '35',\n",
" '66',\n",
" '75',\n",
" '63',\n",
" '98',\n",
" '84',\n",
" '89',\n",
" '21',\n",
" '78',\n",
" '54',\n",
" '82',\n",
" '25',\n",
" '77',\n",
" '16',\n",
" '19',\n",
" '41',\n",
" '99'],\n",
" ['53',\n",
" '74',\n",
" '25',\n",
" '83',\n",
" '23',\n",
" '54',\n",
" '29',\n",
" '81',\n",
" '86',\n",
" '82',\n",
" '22',\n",
" '57',\n",
" '61',\n",
" '94',\n",
" '76',\n",
" '91',\n",
" '69',\n",
" '34',\n",
" '31'],\n",
" ['65', '75', '16', '78', '99', '35', '98'],\n",
" ['86',\n",
" '91',\n",
" '11',\n",
" '57',\n",
" '53',\n",
" '29',\n",
" '23',\n",
" '69',\n",
" '83',\n",
" '81',\n",
" '31',\n",
" '17',\n",
" '71'],\n",
" ['71',\n",
" '17',\n",
" '42',\n",
" '63',\n",
" '41',\n",
" '74',\n",
" '58',\n",
" '22',\n",
" '53',\n",
" '56',\n",
" '28',\n",
" '83',\n",
" '79',\n",
" '91',\n",
" '34',\n",
" '15',\n",
" '19',\n",
" '23',\n",
" '94'],\n",
" ['34',\n",
" '37',\n",
" '23',\n",
" '29',\n",
" '54',\n",
" '57',\n",
" '94',\n",
" '61',\n",
" '84',\n",
" '45',\n",
" '22',\n",
" '69',\n",
" '83'],\n",
" ['21', '79', '12', '98', '42', '16', '78', '11', '28'],\n",
" ['28',\n",
" '49',\n",
" '86',\n",
" '58',\n",
" '81',\n",
" '69',\n",
" '53',\n",
" '74',\n",
" '17',\n",
" '57',\n",
" '12',\n",
" '91',\n",
" '11',\n",
" '23',\n",
" '25',\n",
" '22',\n",
" '42',\n",
" '76',\n",
" '83',\n",
" '29',\n",
" '31',\n",
" '94',\n",
" '34'],\n",
" ['84',\n",
" '78',\n",
" '75',\n",
" '35',\n",
" '19',\n",
" '65',\n",
" '69',\n",
" '21',\n",
" '85',\n",
" '81',\n",
" '66',\n",
" '25',\n",
" '99',\n",
" '16',\n",
" '77',\n",
" '98',\n",
" '45'],\n",
" ['77', '94', '28', '49', '31'],\n",
" ['11',\n",
" '58',\n",
" '74',\n",
" '83',\n",
" '41',\n",
" '34',\n",
" '19',\n",
" '75',\n",
" '42',\n",
" '49',\n",
" '12',\n",
" '23',\n",
" '15',\n",
" '71',\n",
" '94',\n",
" '53',\n",
" '22'],\n",
" ['86',\n",
" '74',\n",
" '49',\n",
" '71',\n",
" '28',\n",
" '22',\n",
" '63',\n",
" '83',\n",
" '15',\n",
" '34',\n",
" '17',\n",
" '58',\n",
" '91',\n",
" '23',\n",
" '53',\n",
" '69',\n",
" '12',\n",
" '31',\n",
" '11',\n",
" '76',\n",
" '42'],\n",
" ['98',\n",
" '85',\n",
" '75',\n",
" '99',\n",
" '63',\n",
" '35',\n",
" '16',\n",
" '65',\n",
" '71',\n",
" '37',\n",
" '77',\n",
" '82',\n",
" '79',\n",
" '41',\n",
" '19',\n",
" '54',\n",
" '89',\n",
" '66',\n",
" '21',\n",
" '78',\n",
" '84',\n",
" '45',\n",
" '56'],\n",
" ['29', '45', '85', '91', '94', '78', '81'],\n",
" ['56', '19', '46', '15', '35', '22', '71'],\n",
" ['46',\n",
" '66',\n",
" '29',\n",
" '61',\n",
" '16',\n",
" '65',\n",
" '57',\n",
" '54',\n",
" '76',\n",
" '89',\n",
" '98',\n",
" '21',\n",
" '25',\n",
" '91',\n",
" '45',\n",
" '85',\n",
" '99',\n",
" '78',\n",
" '37'],\n",
" ['76',\n",
" '31',\n",
" '94',\n",
" '84',\n",
" '15',\n",
" '61',\n",
" '83',\n",
" '57',\n",
" '58',\n",
" '91',\n",
" '25',\n",
" '34',\n",
" '37',\n",
" '53',\n",
" '66',\n",
" '81',\n",
" '22'],\n",
" ['94',\n",
" '29',\n",
" '61',\n",
" '74',\n",
" '69',\n",
" '34',\n",
" '31',\n",
" '91',\n",
" '37',\n",
" '84',\n",
" '86',\n",
" '25',\n",
" '15',\n",
" '83',\n",
" '23',\n",
" '81',\n",
" '21'],\n",
" ['74',\n",
" '25',\n",
" '12',\n",
" '58',\n",
" '29',\n",
" '69',\n",
" '61',\n",
" '94',\n",
" '53',\n",
" '42',\n",
" '57',\n",
" '49',\n",
" '11',\n",
" '86',\n",
" '23'],\n",
" ['41',\n",
" '84',\n",
" '85',\n",
" '78',\n",
" '45',\n",
" '21',\n",
" '99',\n",
" '35',\n",
" '75',\n",
" '57',\n",
" '54',\n",
" '77',\n",
" '66'],\n",
" ['79', '56', '89', '77', '78'],\n",
" ['91',\n",
" '31',\n",
" '66',\n",
" '81',\n",
" '69',\n",
" '46',\n",
" '76',\n",
" '16',\n",
" '82',\n",
" '25',\n",
" '29',\n",
" '21',\n",
" '84',\n",
" '98',\n",
" '85',\n",
" '45',\n",
" '61',\n",
" '74',\n",
" '54'],\n",
" ['77',\n",
" '78',\n",
" '17',\n",
" '28',\n",
" '54',\n",
" '35',\n",
" '16',\n",
" '82',\n",
" '99',\n",
" '65',\n",
" '41',\n",
" '89',\n",
" '71',\n",
" '12',\n",
" '63',\n",
" '98',\n",
" '19',\n",
" '46',\n",
" '66',\n",
" '56',\n",
" '79'],\n",
" ['49', '53', '23', '69', '74'],\n",
" ['22', '17', '41', '65', '77', '31', '83', '79', '19', '49', '53'],\n",
" ['77',\n",
" '15',\n",
" '23',\n",
" '17',\n",
" '12',\n",
" '22',\n",
" '42',\n",
" '65',\n",
" '79',\n",
" '71',\n",
" '75',\n",
" '11',\n",
" '89',\n",
" '49',\n",
" '41'],\n",
" ['17', '28', '77', '65', '12', '71', '79', '75', '31'],\n",
" ['99',\n",
" '81',\n",
" '45',\n",
" '21',\n",
" '82',\n",
" '84',\n",
" '57',\n",
" '54',\n",
" '86',\n",
" '78',\n",
" '66',\n",
" '29',\n",
" '25'],\n",
" ['22',\n",
" '69',\n",
" '83',\n",
" '31',\n",
" '71',\n",
" '76',\n",
" '17',\n",
" '79',\n",
" '94',\n",
" '86',\n",
" '34',\n",
" '42',\n",
" '63',\n",
" '53',\n",
" '12'],\n",
" ['75',\n",
" '61',\n",
" '69',\n",
" '84',\n",
" '46',\n",
" '16',\n",
" '19',\n",
" '45',\n",
" '35',\n",
" '86',\n",
" '78',\n",
" '54',\n",
" '25',\n",
" '21',\n",
" '82',\n",
" '85',\n",
" '57'],\n",
" ['57',\n",
" '58',\n",
" '23',\n",
" '53',\n",
" '83',\n",
" '42',\n",
" '94',\n",
" '76',\n",
" '61',\n",
" '15',\n",
" '22',\n",
" '45',\n",
" '34',\n",
" '31',\n",
" '29',\n",
" '81',\n",
" '86',\n",
" '37',\n",
" '25',\n",
" '84',\n",
" '66'],\n",
" ['99',\n",
" '81',\n",
" '57',\n",
" '69',\n",
" '82',\n",
" '45',\n",
" '89',\n",
" '85',\n",
" '46',\n",
" '61',\n",
" '86',\n",
" '21',\n",
" '78',\n",
" '16',\n",
" '37',\n",
" '76',\n",
" '66',\n",
" '34',\n",
" '29'],\n",
" ['83',\n",
" '53',\n",
" '74',\n",
" '41',\n",
" '22',\n",
" '11',\n",
" '58',\n",
" '12',\n",
" '77',\n",
" '79',\n",
" '71',\n",
" '56',\n",
" '65',\n",
" '17',\n",
" '35',\n",
" '49',\n",
" '75',\n",
" '42',\n",
" '19',\n",
" '15',\n",
" '28',\n",
" '89',\n",
" '23'],\n",
" ['56',\n",
" '58',\n",
" '49',\n",
" '83',\n",
" '11',\n",
" '17',\n",
" '71',\n",
" '42',\n",
" '53',\n",
" '76',\n",
" '77',\n",
" '15',\n",
" '63',\n",
" '12',\n",
" '31',\n",
" '79',\n",
" '74',\n",
" '91',\n",
" '41'],\n",
" ['69',\n",
" '23',\n",
" '34',\n",
" '29',\n",
" '66',\n",
" '82',\n",
" '16',\n",
" '25',\n",
" '31',\n",
" '21',\n",
" '57',\n",
" '91',\n",
" '81',\n",
" '54',\n",
" '74',\n",
" '86',\n",
" '94',\n",
" '84',\n",
" '61',\n",
" '45',\n",
" '83',\n",
" '53',\n",
" '37'],\n",
" ['45',\n",
" '85',\n",
" '46',\n",
" '21',\n",
" '75',\n",
" '54',\n",
" '63',\n",
" '77',\n",
" '79',\n",
" '56',\n",
" '82',\n",
" '41',\n",
" '71'],\n",
" ['56',\n",
" '82',\n",
" '46',\n",
" '54',\n",
" '98',\n",
" '99',\n",
" '65',\n",
" '19',\n",
" '35',\n",
" '45',\n",
" '85',\n",
" '41',\n",
" '84',\n",
" '25',\n",
" '16',\n",
" '89',\n",
" '78',\n",
" '37',\n",
" '63'],\n",
" ['19',\n",
" '71',\n",
" '42',\n",
" '46',\n",
" '12',\n",
" '85',\n",
" '63',\n",
" '89',\n",
" '56',\n",
" '49',\n",
" '79',\n",
" '41',\n",
" '99',\n",
" '11',\n",
" '77'],\n",
" ['85',\n",
" '77',\n",
" '78',\n",
" '99',\n",
" '61',\n",
" '41',\n",
" '75',\n",
" '89',\n",
" '57',\n",
" '37',\n",
" '65',\n",
" '25',\n",
" '54'],\n",
" ['54',\n",
" '66',\n",
" '57',\n",
" '69',\n",
" '21',\n",
" '78',\n",
" '25',\n",
" '85',\n",
" '81',\n",
" '29',\n",
" '86',\n",
" '61',\n",
" '65',\n",
" '99',\n",
" '37',\n",
" '98',\n",
" '16',\n",
" '89',\n",
" '46',\n",
" '76',\n",
" '45'],\n",
" ['99', '66', '57', '89', '41', '65', '16'],\n",
" ['42',\n",
" '35',\n",
" '17',\n",
" '19',\n",
" '28',\n",
" '11',\n",
" '15',\n",
" '74',\n",
" '94',\n",
" '77',\n",
" '71',\n",
" '22',\n",
" '75',\n",
" '83',\n",
" '53'],\n",
" ['46',\n",
" '29',\n",
" '57',\n",
" '65',\n",
" '45',\n",
" '86',\n",
" '81',\n",
" '61',\n",
" '84',\n",
" '78',\n",
" '98',\n",
" '66',\n",
" '35',\n",
" '69',\n",
" '25',\n",
" '37',\n",
" '82',\n",
" '21',\n",
" '85',\n",
" '89',\n",
" '76',\n",
" '16',\n",
" '99'],\n",
" ['58',\n",
" '56',\n",
" '31',\n",
" '22',\n",
" '75',\n",
" '15',\n",
" '77',\n",
" '34',\n",
" '11',\n",
" '79',\n",
" '19',\n",
" '17',\n",
" '49',\n",
" '23',\n",
" '71',\n",
" '28',\n",
" '63',\n",
" '12',\n",
" '53',\n",
" '74',\n",
" '83'],\n",
" ['41', '42', '99', '65', '12'],\n",
" ['21',\n",
" '37',\n",
" '16',\n",
" '99',\n",
" '31',\n",
" '82',\n",
" '81',\n",
" '61',\n",
" '85',\n",
" '34',\n",
" '86',\n",
" '29',\n",
" '76',\n",
" '45',\n",
" '57'],\n",
" ['22', '28', '75', '74', '63', '41', '65', '56', '89', '15', '79'],\n",
" ['65',\n",
" '19',\n",
" '63',\n",
" '35',\n",
" '98',\n",
" '12',\n",
" '85',\n",
" '28',\n",
" '21',\n",
" '75',\n",
" '78',\n",
" '17',\n",
" '89',\n",
" '77',\n",
" '46',\n",
" '54',\n",
" '99',\n",
" '16',\n",
" '11'],\n",
" ['42', '49', '71', '23', '76', '94', '53'],\n",
" ['49',\n",
" '63',\n",
" '76',\n",
" '53',\n",
" '15',\n",
" '28',\n",
" '42',\n",
" '83',\n",
" '58',\n",
" '71',\n",
" '29',\n",
" '11',\n",
" '34',\n",
" '22',\n",
" '94',\n",
" '74',\n",
" '69',\n",
" '31',\n",
" '79',\n",
" '23',\n",
" '12',\n",
" '86',\n",
" '17'],\n",
" ['82',\n",
" '56',\n",
" '45',\n",
" '19',\n",
" '21',\n",
" '79',\n",
" '61',\n",
" '99',\n",
" '89',\n",
" '63',\n",
" '77',\n",
" '85',\n",
" '54'],\n",
" ['83',\n",
" '49',\n",
" '74',\n",
" '12',\n",
" '75',\n",
" '77',\n",
" '58',\n",
" '35',\n",
" '53',\n",
" '79',\n",
" '94',\n",
" '17',\n",
" '56']]"
]
},
"execution_count": 4,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"incorrect_sequences=[sequence for sequence in sequences if not test_sequence(sequence)]\n",
"incorrect_sequences"
]
},
{
"cell_type": "code",
"execution_count": 5,
"metadata": {},
"outputs": [],
"source": [
"from functools import cmp_to_key\n",
"\n",
"def comparator(x, y):\n",
" # If both elements are in the graph\n",
" if x in rules.nodes and y in rules.nodes:\n",
" if rules.has_edge(x, y): # x must come before y\n",
" return -1\n",
" elif rules.has_edge(y, x): # y must come before x\n",
" return 1\n",
" # If one or both elements are missing, treat them as equal\n",
" return 0\n",
"\n",
"sorted_incorrect = [sorted(sequence, key=cmp_to_key(comparator)) for sequence in incorrect_sequences]"
]
},
{
"cell_type": "code",
"execution_count": 6,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"4971"
]
},
"execution_count": 6,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"sum([int(sequence[len(sequence)//2]) for sequence in sorted_incorrect if test_sequence(sequence)])"
]
}
],
"metadata": {
"kernelspec": {
"display_name": "Python 3 (ipykernel)",
"language": "python",
"name": "python3"
}
},
"nbformat": 4,
"nbformat_minor": 2
}