{ "cells": [ { "cell_type": "code", "execution_count": 1, "metadata": { "collapsed": true }, "outputs": [], "source": [ "pi7 = \"\"\"lf AND lq -> ls\n", "iu RSHIFT 1 -> jn\n", "bo OR bu -> bv\n", "gj RSHIFT 1 -> hc\n", "et RSHIFT 2 -> eu\n", "bv AND bx -> by\n", "is OR it -> iu\n", "b OR n -> o\n", "gf OR ge -> gg\n", "NOT kt -> ku\n", "ea AND eb -> ed\n", "kl OR kr -> ks\n", "hi AND hk -> hl\n", "au AND av -> ax\n", "lf RSHIFT 2 -> lg\n", "dd RSHIFT 3 -> df\n", "eu AND fa -> fc\n", "df AND dg -> di\n", "ip LSHIFT 15 -> it\n", "NOT el -> em\n", "et OR fe -> ff\n", "fj LSHIFT 15 -> fn\n", "t OR s -> u\n", "ly OR lz -> ma\n", "ko AND kq -> kr\n", "NOT fx -> fy\n", "et RSHIFT 1 -> fm\n", "eu OR fa -> fb\n", "dd RSHIFT 2 -> de\n", "NOT go -> gp\n", "kb AND kd -> ke\n", "hg OR hh -> hi\n", "jm LSHIFT 1 -> kg\n", "NOT cn -> co\n", "jp RSHIFT 2 -> jq\n", "jp RSHIFT 5 -> js\n", "1 AND io -> ip\n", "eo LSHIFT 15 -> es\n", "1 AND jj -> jk\n", "g AND i -> j\n", "ci RSHIFT 3 -> ck\n", "gn AND gp -> gq\n", "fs AND fu -> fv\n", "lj AND ll -> lm\n", "jk LSHIFT 15 -> jo\n", "iu RSHIFT 3 -> iw\n", "NOT ii -> ij\n", "1 AND cc -> cd\n", "bn RSHIFT 3 -> bp\n", "NOT gw -> gx\n", "NOT ft -> fu\n", "jn OR jo -> jp\n", "iv OR jb -> jc\n", "hv OR hu -> hw\n", "19138 -> b\n", "gj RSHIFT 5 -> gm\n", "hq AND hs -> ht\n", "dy RSHIFT 1 -> er\n", "ao OR an -> ap\n", "ld OR le -> lf\n", "bk LSHIFT 1 -> ce\n", "bz AND cb -> cc\n", "bi LSHIFT 15 -> bm\n", "il AND in -> io\n", "af AND ah -> ai\n", "as RSHIFT 1 -> bl\n", "lf RSHIFT 3 -> lh\n", "er OR es -> et\n", "NOT ax -> ay\n", "ci RSHIFT 1 -> db\n", "et AND fe -> fg\n", "lg OR lm -> ln\n", "k AND m -> n\n", "hz RSHIFT 2 -> ia\n", "kh LSHIFT 1 -> lb\n", "NOT ey -> ez\n", "NOT di -> dj\n", "dz OR ef -> eg\n", "lx -> a\n", "NOT iz -> ja\n", "gz LSHIFT 15 -> hd\n", "ce OR cd -> cf\n", "fq AND fr -> ft\n", "at AND az -> bb\n", "ha OR gz -> hb\n", "fp AND fv -> fx\n", "NOT gb -> gc\n", "ia AND ig -> ii\n", "gl OR gm -> gn\n", "0 -> c\n", "NOT ca -> cb\n", "bn RSHIFT 1 -> cg\n", "c LSHIFT 1 -> t\n", "iw OR ix -> iy\n", "kg OR kf -> kh\n", "dy OR ej -> ek\n", "km AND kn -> kp\n", "NOT fc -> fd\n", "hz RSHIFT 3 -> ib\n", "NOT dq -> dr\n", "NOT fg -> fh\n", "dy RSHIFT 2 -> dz\n", "kk RSHIFT 2 -> kl\n", "1 AND fi -> fj\n", "NOT hr -> hs\n", "jp RSHIFT 1 -> ki\n", "bl OR bm -> bn\n", "1 AND gy -> gz\n", "gr AND gt -> gu\n", "db OR dc -> dd\n", "de OR dk -> dl\n", "as RSHIFT 5 -> av\n", "lf RSHIFT 5 -> li\n", "hm AND ho -> hp\n", "cg OR ch -> ci\n", "gj AND gu -> gw\n", "ge LSHIFT 15 -> gi\n", "e OR f -> g\n", "fp OR fv -> fw\n", "fb AND fd -> fe\n", "cd LSHIFT 15 -> ch\n", "b RSHIFT 1 -> v\n", "at OR az -> ba\n", "bn RSHIFT 2 -> bo\n", "lh AND li -> lk\n", "dl AND dn -> do\n", "eg AND ei -> ej\n", "ex AND ez -> fa\n", "NOT kp -> kq\n", "NOT lk -> ll\n", "x AND ai -> ak\n", "jp OR ka -> kb\n", "NOT jd -> je\n", "iy AND ja -> jb\n", "jp RSHIFT 3 -> jr\n", "fo OR fz -> ga\n", "df OR dg -> dh\n", "gj RSHIFT 2 -> gk\n", "gj OR gu -> gv\n", "NOT jh -> ji\n", "ap LSHIFT 1 -> bj\n", "NOT ls -> lt\n", "ir LSHIFT 1 -> jl\n", "bn AND by -> ca\n", "lv LSHIFT 15 -> lz\n", "ba AND bc -> bd\n", "cy LSHIFT 15 -> dc\n", "ln AND lp -> lq\n", "x RSHIFT 1 -> aq\n", "gk OR gq -> gr\n", "NOT kx -> ky\n", "jg AND ji -> jj\n", "bn OR by -> bz\n", "fl LSHIFT 1 -> gf\n", "bp OR bq -> br\n", "he OR hp -> hq\n", "et RSHIFT 5 -> ew\n", "iu RSHIFT 2 -> iv\n", "gl AND gm -> go\n", "x OR ai -> aj\n", "hc OR hd -> he\n", "lg AND lm -> lo\n", "lh OR li -> lj\n", "da LSHIFT 1 -> du\n", "fo RSHIFT 2 -> fp\n", "gk AND gq -> gs\n", "bj OR bi -> bk\n", "lf OR lq -> lr\n", "cj AND cp -> cr\n", "hu LSHIFT 15 -> hy\n", "1 AND bh -> bi\n", "fo RSHIFT 3 -> fq\n", "NOT lo -> lp\n", "hw LSHIFT 1 -> iq\n", "dd RSHIFT 1 -> dw\n", "dt LSHIFT 15 -> dx\n", "dy AND ej -> el\n", "an LSHIFT 15 -> ar\n", "aq OR ar -> as\n", "1 AND r -> s\n", "fw AND fy -> fz\n", "NOT im -> in\n", "et RSHIFT 3 -> ev\n", "1 AND ds -> dt\n", "ec AND ee -> ef\n", "NOT ak -> al\n", "jl OR jk -> jm\n", "1 AND en -> eo\n", "lb OR la -> lc\n", "iu AND jf -> jh\n", "iu RSHIFT 5 -> ix\n", "bo AND bu -> bw\n", "cz OR cy -> da\n", "iv AND jb -> jd\n", "iw AND ix -> iz\n", "lf RSHIFT 1 -> ly\n", "iu OR jf -> jg\n", "NOT dm -> dn\n", "lw OR lv -> lx\n", "gg LSHIFT 1 -> ha\n", "lr AND lt -> lu\n", "fm OR fn -> fo\n", "he RSHIFT 3 -> hg\n", "aj AND al -> am\n", "1 AND kz -> la\n", "dy RSHIFT 5 -> eb\n", "jc AND je -> jf\n", "cm AND co -> cp\n", "gv AND gx -> gy\n", "ev OR ew -> ex\n", "jp AND ka -> kc\n", "fk OR fj -> fl\n", "dy RSHIFT 3 -> ea\n", "NOT bs -> bt\n", "NOT ag -> ah\n", "dz AND ef -> eh\n", "cf LSHIFT 1 -> cz\n", "NOT cv -> cw\n", "1 AND cx -> cy\n", "de AND dk -> dm\n", "ck AND cl -> cn\n", "x RSHIFT 5 -> aa\n", "dv LSHIFT 1 -> ep\n", "he RSHIFT 2 -> hf\n", "NOT bw -> bx\n", "ck OR cl -> cm\n", "bp AND bq -> bs\n", "as OR bd -> be\n", "he AND hp -> hr\n", "ev AND ew -> ey\n", "1 AND lu -> lv\n", "kk RSHIFT 3 -> km\n", "b AND n -> p\n", "NOT kc -> kd\n", "lc LSHIFT 1 -> lw\n", "km OR kn -> ko\n", "id AND if -> ig\n", "ih AND ij -> ik\n", "jr AND js -> ju\n", "ci RSHIFT 5 -> cl\n", "hz RSHIFT 1 -> is\n", "1 AND ke -> kf\n", "NOT gs -> gt\n", "aw AND ay -> az\n", "x RSHIFT 2 -> y\n", "ab AND ad -> ae\n", "ff AND fh -> fi\n", "ci AND ct -> cv\n", "eq LSHIFT 1 -> fk\n", "gj RSHIFT 3 -> gl\n", "u LSHIFT 1 -> ao\n", "NOT bb -> bc\n", "NOT hj -> hk\n", "kw AND ky -> kz\n", "as AND bd -> bf\n", "dw OR dx -> dy\n", "br AND bt -> bu\n", "kk AND kv -> kx\n", "ep OR eo -> eq\n", "he RSHIFT 1 -> hx\n", "ki OR kj -> kk\n", "NOT ju -> jv\n", "ek AND em -> en\n", "kk RSHIFT 5 -> kn\n", "NOT eh -> ei\n", "hx OR hy -> hz\n", "ea OR eb -> ec\n", "s LSHIFT 15 -> w\n", "fo RSHIFT 1 -> gh\n", "kk OR kv -> kw\n", "bn RSHIFT 5 -> bq\n", "NOT ed -> ee\n", "1 AND ht -> hu\n", "cu AND cw -> cx\n", "b RSHIFT 5 -> f\n", "kl AND kr -> kt\n", "iq OR ip -> ir\n", "ci RSHIFT 2 -> cj\n", "cj OR cp -> cq\n", "o AND q -> r\n", "dd RSHIFT 5 -> dg\n", "b RSHIFT 2 -> d\n", "ks AND ku -> kv\n", "b RSHIFT 3 -> e\n", "d OR j -> k\n", "NOT p -> q\n", "NOT cr -> cs\n", "du OR dt -> dv\n", "kf LSHIFT 15 -> kj\n", "NOT ac -> ad\n", "fo RSHIFT 5 -> fr\n", "hz OR ik -> il\n", "jx AND jz -> ka\n", "gh OR gi -> gj\n", "kk RSHIFT 1 -> ld\n", "hz RSHIFT 5 -> ic\n", "as RSHIFT 2 -> at\n", "NOT jy -> jz\n", "1 AND am -> an\n", "ci OR ct -> cu\n", "hg AND hh -> hj\n", "jq OR jw -> jx\n", "v OR w -> x\n", "la LSHIFT 15 -> le\n", "dh AND dj -> dk\n", "dp AND dr -> ds\n", "jq AND jw -> jy\n", "au OR av -> aw\n", "NOT bf -> bg\n", "z OR aa -> ab\n", "ga AND gc -> gd\n", "hz AND ik -> im\n", "jt AND jv -> jw\n", "z AND aa -> ac\n", "jr OR js -> jt\n", "hb LSHIFT 1 -> hv\n", "hf OR hl -> hm\n", "ib OR ic -> id\n", "fq OR fr -> fs\n", "cq AND cs -> ct\n", "ia OR ig -> ih\n", "dd OR do -> dp\n", "d AND j -> l\n", "ib AND ic -> ie\n", "as RSHIFT 3 -> au\n", "be AND bg -> bh\n", "dd AND do -> dq\n", "NOT l -> m\n", "1 AND gd -> ge\n", "y AND ae -> ag\n", "fo AND fz -> gb\n", "NOT ie -> if\n", "e AND f -> h\n", "x RSHIFT 3 -> z\n", "y OR ae -> af\n", "hf AND hl -> hn\n", "NOT h -> i\n", "NOT hn -> ho\n", "he RSHIFT 5 -> hh\"\"\"" ] }, { "cell_type": "code", "execution_count": 2, "metadata": { "collapsed": false }, "outputs": [], "source": [ "pi7 = open('advent07.txt').read().strip()" ] }, { "cell_type": "code", "execution_count": 3, "metadata": { "collapsed": true }, "outputs": [], "source": [ "from collections import namedtuple\n", "\n", "Rule = namedtuple('Rule', ['command', 'antecedents', 'consequence'])" ] }, { "cell_type": "code", "execution_count": 4, "metadata": { "collapsed": true }, "outputs": [], "source": [ "def parse_arg(arg):\n", " #try:\n", " # return int(arg)\n", " #except ValueError:\n", " # return arg\n", " if arg.isnumeric():\n", " return int(arg)\n", " else:\n", " return arg\n", " \n", "def parse_rule(text):\n", " tokens = text.strip().split(' ')\n", " if tokens[0] == 'NOT':\n", " rule = Rule(command=tokens[0], antecedents=[parse_arg(tokens[1])], consequence=tokens[3])\n", " elif len(tokens) == 3:\n", " rule = Rule(command='ASSIGN', antecedents=[parse_arg(tokens[0])], consequence=tokens[2])\n", " else:\n", " rule = Rule(command=tokens[1], antecedents=[parse_arg(tokens[0]), parse_arg(tokens[2])], consequence=tokens[4])\n", " return rule" ] }, { "cell_type": "code", "execution_count": 5, "metadata": { "collapsed": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "123 -> x: Rule(command='ASSIGN', antecedents=[123], consequence='x')\n", "456 -> y: Rule(command='ASSIGN', antecedents=[456], consequence='y')\n", "x AND y -> d: Rule(command='AND', antecedents=['x', 'y'], consequence='d')\n", "x OR y -> e: Rule(command='OR', antecedents=['x', 'y'], consequence='e')\n", "x LSHIFT 2 -> f: Rule(command='LSHIFT', antecedents=['x', 2], consequence='f')\n", "y RSHIFT 2 -> g: Rule(command='RSHIFT', antecedents=['y', 2], consequence='g')\n", "NOT x -> h: Rule(command='NOT', antecedents=['x'], consequence='h')\n", "NOT y -> i: Rule(command='NOT', antecedents=['y'], consequence='i')\n", "lx -> zz: Rule(command='ASSIGN', antecedents=['lx'], consequence='zz')\n" ] } ], "source": [ "for r in ['123 -> x', '456 -> y', 'x AND y -> d', 'x OR y -> e', 'x LSHIFT 2 -> f', \n", " 'y RSHIFT 2 -> g', 'NOT x -> h', 'NOT y -> i', 'lx -> zz']:\n", " print(r, end=': ')\n", " print(parse_rule(r))" ] }, { "cell_type": "code", "execution_count": 6, "metadata": { "collapsed": false }, "outputs": [], "source": [ "def rule_can_fire(rule, known_values):\n", " return all(isinstance(a, int) or a in known_values for a in rule.antecedents)" ] }, { "cell_type": "code", "execution_count": 7, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "True" ] }, "execution_count": 7, "metadata": {}, "output_type": "execute_result" } ], "source": [ "rule_can_fire(parse_rule('NOT y -> f'), {'y': 12})" ] }, { "cell_type": "code", "execution_count": 8, "metadata": { "collapsed": true }, "outputs": [], "source": [ "def get_value(arg, known_values):\n", " if arg in known_values:\n", " return known_values[arg]\n", " else:\n", " return arg\n", "\n", "def fire_rule(rule, known_values):\n", " evaluated_args = [get_value(arg, known_values) for arg in rule.antecedents]\n", " if rule.command == 'ASSIGN':\n", " known_values[rule.consequence] = evaluated_args[0]\n", " elif rule.command == 'NOT':\n", " known_values[rule.consequence] = ~evaluated_args[0] % 65536\n", " elif rule.command == 'LSHIFT':\n", " known_values[rule.consequence] = (evaluated_args[0] << evaluated_args[1]) % 65536\n", " elif rule.command == 'RSHIFT':\n", " known_values[rule.consequence] = (evaluated_args[0] >> evaluated_args[1]) % 65536\n", " elif rule.command == 'AND':\n", " known_values[rule.consequence] = (evaluated_args[0] & evaluated_args[1]) % 65536\n", " elif rule.command == 'OR':\n", " known_values[rule.consequence] = (evaluated_args[0] | evaluated_args[1]) % 65536" ] }, { "cell_type": "code", "execution_count": 9, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "65518" ] }, "execution_count": 9, "metadata": {}, "output_type": "execute_result" } ], "source": [ "~17 % 65536" ] }, { "cell_type": "code", "execution_count": 10, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "339" ] }, "execution_count": 10, "metadata": {}, "output_type": "execute_result" } ], "source": [ "rules = [parse_rule(r) for r in pi7.splitlines()]\n", "len(rules)" ] }, { "cell_type": "code", "execution_count": 11, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "16076" ] }, "execution_count": 11, "metadata": {}, "output_type": "execute_result" } ], "source": [ "known = {}\n", "while 'a' not in known:\n", " for r in rules:\n", " if rule_can_fire(r, known) and r.consequence not in known:\n", " fire_rule(r, known)\n", "known['a']" ] }, { "cell_type": "code", "execution_count": 12, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "2797" ] }, "execution_count": 12, "metadata": {}, "output_type": "execute_result" } ], "source": [ "known = {'b': 16076}\n", "while 'a' not in known:\n", " for r in rules:\n", " if rule_can_fire(r, known) and r.consequence not in known:\n", " fire_rule(r, known)\n", "known['a']" ] }, { "cell_type": "code", "execution_count": 13, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "{'a': 2797,\n", " 'aa': 251,\n", " 'ab': 1023,\n", " 'ac': 232,\n", " 'ad': 65303,\n", " 'ae': 791,\n", " 'af': 2015,\n", " 'ag': 785,\n", " 'ah': 64750,\n", " 'ai': 1230,\n", " 'aj': 8174,\n", " 'ak': 1094,\n", " 'al': 64441,\n", " 'am': 7080,\n", " 'an': 0,\n", " 'ao': 0,\n", " 'ap': 0,\n", " 'aq': 4019,\n", " 'ar': 0,\n", " 'as': 4019,\n", " 'at': 1004,\n", " 'au': 502,\n", " 'av': 125,\n", " 'aw': 511,\n", " 'ax': 116,\n", " 'ay': 65419,\n", " 'az': 395,\n", " 'b': 16076,\n", " 'ba': 1007,\n", " 'bb': 392,\n", " 'bc': 65143,\n", " 'bd': 615,\n", " 'be': 4087,\n", " 'bf': 547,\n", " 'bg': 64988,\n", " 'bh': 3540,\n", " 'bi': 0,\n", " 'bj': 0,\n", " 'bk': 0,\n", " 'bl': 2009,\n", " 'bm': 0,\n", " 'bn': 2009,\n", " 'bo': 502,\n", " 'bp': 251,\n", " 'bq': 62,\n", " 'br': 255,\n", " 'bs': 58,\n", " 'bt': 65477,\n", " 'bu': 197,\n", " 'bv': 503,\n", " 'bw': 196,\n", " 'bx': 65339,\n", " 'by': 307,\n", " 'bz': 2043,\n", " 'c': 0,\n", " 'ca': 273,\n", " 'cb': 65262,\n", " 'cc': 1770,\n", " 'cd': 0,\n", " 'ce': 0,\n", " 'cf': 0,\n", " 'cg': 1004,\n", " 'ch': 0,\n", " 'ci': 1004,\n", " 'cj': 251,\n", " 'ck': 125,\n", " 'cl': 31,\n", " 'cm': 127,\n", " 'cn': 29,\n", " 'co': 65506,\n", " 'cp': 98,\n", " 'cq': 251,\n", " 'cr': 98,\n", " 'cs': 65437,\n", " 'ct': 153,\n", " 'cu': 1021,\n", " 'cv': 136,\n", " 'cw': 65399,\n", " 'cx': 885,\n", " 'cy': 1,\n", " 'cz': 0,\n", " 'd': 4019,\n", " 'da': 1,\n", " 'db': 502,\n", " 'dc': 32768,\n", " 'dd': 33270,\n", " 'de': 8317,\n", " 'df': 4158,\n", " 'dg': 1039,\n", " 'dh': 5183,\n", " 'di': 14,\n", " 'dj': 65521,\n", " 'dk': 5169,\n", " 'dl': 13437,\n", " 'dm': 49,\n", " 'dn': 65486,\n", " 'do': 13388,\n", " 'dp': 46590,\n", " 'dq': 68,\n", " 'dr': 65467,\n", " 'ds': 46522,\n", " 'dt': 0,\n", " 'du': 2,\n", " 'dv': 2,\n", " 'dw': 16635,\n", " 'dx': 0,\n", " 'dy': 16635,\n", " 'dz': 4158,\n", " 'e': 2009,\n", " 'ea': 2079,\n", " 'eb': 519,\n", " 'ec': 2591,\n", " 'ed': 7,\n", " 'ee': 65528,\n", " 'ef': 2584,\n", " 'eg': 6718,\n", " 'eh': 24,\n", " 'ei': 65511,\n", " 'ej': 6694,\n", " 'ek': 23295,\n", " 'el': 34,\n", " 'em': 65501,\n", " 'en': 23261,\n", " 'eo': 1,\n", " 'ep': 4,\n", " 'eq': 5,\n", " 'er': 8317,\n", " 'es': 32768,\n", " 'et': 41085,\n", " 'eu': 10271,\n", " 'ev': 5135,\n", " 'ew': 1283,\n", " 'ex': 5391,\n", " 'ey': 1027,\n", " 'ez': 64508,\n", " 'f': 502,\n", " 'fa': 4364,\n", " 'fb': 14623,\n", " 'fc': 12,\n", " 'fd': 65523,\n", " 'fe': 14611,\n", " 'ff': 47487,\n", " 'fg': 8209,\n", " 'fh': 57326,\n", " 'fi': 39278,\n", " 'fj': 0,\n", " 'fk': 10,\n", " 'fl': 10,\n", " 'fm': 20542,\n", " 'fn': 0,\n", " 'fo': 20542,\n", " 'fp': 5135,\n", " 'fq': 2567,\n", " 'fr': 641,\n", " 'fs': 2695,\n", " 'ft': 513,\n", " 'fu': 65022,\n", " 'fv': 2182,\n", " 'fw': 7311,\n", " 'fx': 6,\n", " 'fy': 65529,\n", " 'fz': 7305,\n", " 'g': 2047,\n", " 'ga': 23743,\n", " 'gb': 4104,\n", " 'gc': 61431,\n", " 'gd': 19639,\n", " 'ge': 1,\n", " 'gf': 20,\n", " 'gg': 21,\n", " 'gh': 10271,\n", " 'gi': 32768,\n", " 'gj': 43039,\n", " 'gk': 10759,\n", " 'gl': 5379,\n", " 'gm': 1344,\n", " 'gn': 5443,\n", " 'go': 1280,\n", " 'gp': 64255,\n", " 'gq': 4163,\n", " 'gr': 14919,\n", " 'gs': 3,\n", " 'gt': 65532,\n", " 'gu': 14916,\n", " 'gv': 47711,\n", " 'gw': 10244,\n", " 'gx': 55291,\n", " 'gy': 37467,\n", " 'gz': 1,\n", " 'h': 464,\n", " 'ha': 42,\n", " 'hb': 43,\n", " 'hc': 21519,\n", " 'hd': 32768,\n", " 'he': 54287,\n", " 'hf': 13571,\n", " 'hg': 6785,\n", " 'hh': 1696,\n", " 'hi': 7841,\n", " 'hj': 640,\n", " 'hk': 64895,\n", " 'hl': 7201,\n", " 'hm': 15651,\n", " 'hn': 5121,\n", " 'ho': 60414,\n", " 'hp': 10530,\n", " 'hq': 64815,\n", " 'hr': 2,\n", " 'hs': 65533,\n", " 'ht': 64813,\n", " 'hu': 1,\n", " 'hv': 86,\n", " 'hw': 87,\n", " 'hx': 27143,\n", " 'hy': 32768,\n", " 'hz': 59911,\n", " 'i': 65071,\n", " 'ia': 14977,\n", " 'ib': 7488,\n", " 'ic': 1872,\n", " 'id': 8016,\n", " 'ie': 1344,\n", " 'if': 64191,\n", " 'ig': 6672,\n", " 'ih': 14993,\n", " 'ii': 6656,\n", " 'ij': 58879,\n", " 'ik': 8337,\n", " 'il': 60055,\n", " 'im': 8193,\n", " 'in': 57342,\n", " 'io': 51862,\n", " 'ip': 0,\n", " 'iq': 174,\n", " 'ir': 174,\n", " 'is': 29955,\n", " 'it': 0,\n", " 'iu': 29955,\n", " 'iv': 7488,\n", " 'iw': 3744,\n", " 'ix': 936,\n", " 'iy': 4008,\n", " 'iz': 672,\n", " 'j': 1583,\n", " 'ja': 64863,\n", " 'jb': 3336,\n", " 'jc': 7496,\n", " 'jd': 3328,\n", " 'je': 62207,\n", " 'jf': 4168,\n", " 'jg': 30027,\n", " 'jh': 4096,\n", " 'ji': 61439,\n", " 'jj': 25931,\n", " 'jk': 1,\n", " 'jl': 348,\n", " 'jm': 349,\n", " 'jn': 14977,\n", " 'jo': 32768,\n", " 'jp': 47745,\n", " 'jq': 11936,\n", " 'jr': 5968,\n", " 'js': 1492,\n", " 'jt': 6100,\n", " 'ju': 1360,\n", " 'jv': 64175,\n", " 'jw': 4740,\n", " 'jx': 16036,\n", " 'jy': 640,\n", " 'jz': 64895,\n", " 'k': 4031,\n", " 'ka': 15396,\n", " 'kb': 48805,\n", " 'kc': 14336,\n", " 'kd': 51199,\n", " 'ke': 34469,\n", " 'kf': 1,\n", " 'kg': 698,\n", " 'kh': 699,\n", " 'ki': 23872,\n", " 'kj': 32768,\n", " 'kk': 56640,\n", " 'kl': 14160,\n", " 'km': 7080,\n", " 'kn': 1770,\n", " 'ko': 8170,\n", " 'kp': 680,\n", " 'kq': 64855,\n", " 'kr': 7490,\n", " 'ks': 16210,\n", " 'kt': 5440,\n", " 'ku': 60095,\n", " 'kv': 10770,\n", " 'kw': 65362,\n", " 'kx': 2048,\n", " 'ky': 63487,\n", " 'kz': 63314,\n", " 'l': 1571,\n", " 'la': 0,\n", " 'lb': 1398,\n", " 'lc': 1398,\n", " 'ld': 28320,\n", " 'le': 0,\n", " 'lf': 28320,\n", " 'lg': 7080,\n", " 'lh': 3540,\n", " 'li': 885,\n", " 'lj': 4085,\n", " 'lk': 340,\n", " 'll': 65195,\n", " 'lm': 3745,\n", " 'ln': 8105,\n", " 'lo': 2720,\n", " 'lp': 62815,\n", " 'lq': 5385,\n", " 'lr': 32681,\n", " 'ls': 1024,\n", " 'lt': 64511,\n", " 'lu': 31657,\n", " 'lv': 1,\n", " 'lw': 2796,\n", " 'lx': 2797,\n", " 'ly': 14160,\n", " 'lz': 32768,\n", " 'm': 63964,\n", " 'ma': 46928,\n", " 'n': 2460,\n", " 'o': 16348,\n", " 'p': 2188,\n", " 'q': 63347,\n", " 'r': 14160,\n", " 's': 0,\n", " 't': 0,\n", " 'u': 0,\n", " 'v': 8038,\n", " 'w': 0,\n", " 'x': 8038,\n", " 'y': 2009,\n", " 'z': 1004}" ] }, "execution_count": 13, "metadata": {}, "output_type": "execute_result" } ], "source": [ "known" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "collapsed": true }, "outputs": [], "source": [] } ], "metadata": { "kernelspec": { "display_name": "Python 3", "language": "python", "name": "python3" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.4.3" } }, "nbformat": 4, "nbformat_minor": 0 }