Skip to content

Instantly share code, notes, and snippets.

@oxinabox
Last active December 14, 2020 22:37
Show Gist options
  • Star 1 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save oxinabox/e64ec6c764b9ab367d1920626a9ece72 to your computer and use it in GitHub Desktop.
Save oxinabox/e64ec6c764b9ab367d1920626a9ece72 to your computer and use it in GitHub Desktop.
Advent of Code 2020, in DexLang
'# Advent of Code 2020. Day 1
DexLang, [Lyndon White](http://oxinabox.net)
## part 1
From the list find two entries that sum to 2020, and compute their product.
list = [1567, 1223, 1758, 1842, 1933, 1898, 1409, 1058, 1533, 1417, 1032, 1634, 1477, 1394, 1888, 1972, 1237, 1390, 1677, 1546, 1302, 1070, 1369, 1455, 1065, 1924, 1593, 1131, 1064, 1346, 1914, 1129, 1830, 1450, 1278, 1740, 1809, 1176, 1734, 1102, 1807, 1982, 1603, 1736, 2008, 1980, 1905, 1633, 1732, 1350, 1865, 1988, 1805, 1998, 1152, 1046, 1870, 1557, 1789, 1766, 1945, 1359, 1002, 1126, 1719, 1497, 1296, 1560, 1936, 1929, 1464, 2005, 1281, 618, 1257, 1107, 1632, 1688, 1964, 1803, 1360, 1384, 1889, 1411, 1328, 1452, 1868, 1515, 1586, 1631, 1618, 1087, 1710, 1094, 1774, 1295, 1700, 1636, 1230, 1421, 1910, 1522, 1366, 1144, 1757, 1493, 1316, 1103, 687, 1371, 1720, 1155, 1559, 1900, 989, 1367, 1999, 1066, 1773, 1787, 1402, 1047, 1806, 1956, 1219, 1555, 1307, 1419, 1706, 1884, 1109, 1181, 2010, 1298, 1730, 1078, 1848, 1398, 1687, 2007, 1550, 1664, 1225, 1079, 1698, 350, 1222, 1377, 1977, 1510, 1571, 1630, 1029, 1379, 1942, 1949, 1249, 1829, 1297, 1530, 1607, 1324, 1069, 1476, 928, 1039, 1855, 1644, 1454, 1310, 1172, 547, 1034, 1878, 1479, 1457, 1319, 1810, 1759, 1439, 1851, 545, 1470, 2003, 1908, 1564, 1491, 1174, 1301, 1689, 1276, 1781, 1392, 1499, 1962, 1653, 1823, 1381, 1827, 1974]
' helper: `lastSomething`
Given a table of `Maybe`s, returns the last that is not `Nothing`
def lastSomething (xs:n=>Maybe a) : Maybe a =
fold Nothing \i state. (select (isNothing xs.i) state xs.i)
:p lastSomething [Nothing, Just 1, Just 2, Nothing]
' Solve the actual problem
lastSomething for i. lastSomething for j.
-- i < j as we only need to check triangle of combinations
(select (i<j && (list.i + list.j) == 2020)
(Just $ list.i * list.j)
Nothing
)
' ## Part 2
Find 3 numbers that sum to 2020 and report their product
Lets not over complicate this and just copy the above
lastSomething for i. lastSomething for j. lastSomething for k.
-- i < j < k as we only need to check triangle of combinations
(select (i<j && j < k && (list.i + list.j + list.k) == 2020)
(Just $ list.i * list.j * list.k)
Nothing
)
'# Advent of Code 2020. Day 2
DexLang, [Lyndon White](http://oxinabox.net)
This needs [my branch](https://github.com/google-research/dex-lang/pull/306) of Dex that has Char equality support.
'## Part 1
Check how many passwords follow the rule of letter occuring between min and max times
rules = [{letter='p', min=2, max=4, password=AsList _ "vpkpp"}, {letter='b', min=6, max=16, password=AsList _ "bbbbbbbbbbbbbbbpb"}, {letter='z', min=6, max=7, password=AsList _ "zzfzzdz"}, {letter='q', min=4, max=6, password=AsList _ "tfzqvqcpcmqqjqzd"}, {letter='k', min=7, max=8, password=AsList _ "rkkkknkw"}, {letter='t', min=5, max=14, password=AsList _ "ttttnttttttdttttttt"}, {letter='b', min=2, max=10, password=AsList _ "bfbbbbcbnpbbbbt"}, {letter='h', min=3, max=4, password=AsList _ "hrht"}, {letter='c', min=2, max=6, password=AsList _ "ccccccc"}, {letter='g', min=5, max=7, password=AsList _ "pmtgqgg"}, {letter='h', min=16, max=18, password=AsList _ "vhhhhhhhhhhhhphhrnh"}, {letter='k', min=8, max=10, password=AsList _ "kklxkkkqkkkkk"}, {letter='b', min=2, max=5, password=AsList _ "bcbdbbr"}, {letter='l', min=6, max=8, password=AsList _ "lllnllxb"}, {letter='t', min=2, max=13, password=AsList _ "kvdsdnbclhxntktxdwq"}, {letter='z', min=3, max=4, password=AsList _ "zjwz"}, {letter='s', min=12, max=16, password=AsList _ "ssssssssssswssss"}, {letter='h', min=1, max=5, password=AsList _ "mckhhhs"}, {letter='s', min=11, max=18, password=AsList _ "ksssssssgssssssssk"}, {letter='f', min=6, max=7, password=AsList _ "hcmxbfx"}, {letter='r', min=4, max=11, password=AsList _ "grrrcnkjfdr"}, {letter='t', min=6, max=10, password=AsList _ "tdttttrtbjl"}, {letter='h', min=8, max=10, password=AsList _ "vphrhhmhhz"}, {letter='t', min=7, max=8, password=AsList _ "tghttttt"}, {letter='h', min=2, max=11, password=AsList _ "hhhhhhhhhhhhhh"}, {letter='g', min=5, max=6, password=AsList _ "gggggq"}, {letter='p', min=4, max=6, password=AsList _ "dgpmnqv"}, {letter='v', min=5, max=9, password=AsList _ "nmfnvhtrlzhbvd"}, {letter='z', min=1, max=8, password=AsList _ "zwzqzzzz"}, {letter='l', min=10, max=12, password=AsList _ "hllllllhlklldzlmk"}, {letter='n', min=10, max=11, password=AsList _ "brnjfbnnnmnnnnw"}, {letter='d', min=1, max=3, password=AsList _ "jmscsdw"}, {letter='d', min=13, max=20, password=AsList _ "xdqcsdqdpkppddbdtdgg"}, {letter='w', min=1, max=3, password=AsList _ "wfppvkswrwmnq"}, {letter='p', min=2, max=10, password=AsList _ "xbppppmppppppc"}, {letter='r', min=1, max=4, password=AsList _ "rrrr"}, {letter='q', min=4, max=5, password=AsList _ "qqqgq"}, {letter='f', min=7, max=8, password=AsList _ "fchfwjcfpvffdfh"}, {letter='d', min=2, max=5, password=AsList _ "dtddddddgdddx"}, {letter='t', min=11, max=15, password=AsList _ "zcwngpdjtzcpfvt"}, {letter='c', min=11, max=12, password=AsList _ "ccccccccccqz"}, {letter='v', min=8, max=10, password=AsList _ "vvkbszvvwr"}, {letter='t', min=3, max=5, password=AsList _ "psttst"}, {letter='f', min=1, max=7, password=AsList _ "fffsfffffffffrftfff"}, {letter='z', min=3, max=4, password=AsList _ "zqzz"}, {letter='l', min=12, max=13, password=AsList _ "mlklllhkdmllndplj"}, {letter='x', min=11, max=17, password=AsList _ "jttxgmtmpxxxxzfpf"}, {letter='d', min=2, max=7, password=AsList _ "ddqggvrdmrgc"}, {letter='l', min=5, max=15, password=AsList _ "ckjvllsnmczlnsh"}, {letter='l', min=1, max=3, password=AsList _ "nlllllllllll"}, {letter='r', min=4, max=7, password=AsList _ "ctlrfrb"}, {letter='k', min=4, max=12, password=AsList _ "sknbxdzmnckkk"}, {letter='m', min=2, max=16, password=AsList _ "nmmgwpkncdpfglcpzj"}, {letter='n', min=4, max=5, password=AsList _ "nmnnkjn"}, {letter='h', min=3, max=6, password=AsList _ "hhhkhk"}, {letter='n', min=5, max=15, password=AsList _ "ncmnngnngbnnndjx"}, {letter='r', min=1, max=6, password=AsList _ "rrrklrh"}, {letter='j', min=7, max=16, password=AsList _ "jzjjjjdkjjjjjjjjjj"}, {letter='l', min=1, max=2, password=AsList _ "lcxdxl"}, {letter='t', min=1, max=11, password=AsList _ "gttttttttttt"}, {letter='w', min=6, max=10, password=AsList _ "cvtsdlwggwbgn"}, {letter='q', min=3, max=4, password=AsList _ "qpzhj"}, {letter='b', min=5, max=6, password=AsList _ "sbjcbx"}, {letter='h', min=4, max=5, password=AsList _ "dxjhhhpj"}, {letter='z', min=4, max=5, password=AsList _ "zbckhf"}, {letter='r', min=8, max=13, password=AsList _ "xhscjbqthpfkffjh"}, {letter='j', min=5, max=7, password=AsList _ "jjjxjcdtj"}, {letter='b', min=13, max=15, password=AsList _ "bbbbbblbbbwbtbbbbb"}, {letter='x', min=16, max=19, password=AsList _ "xxxgxxxxcwxxxxxksxx"}, {letter='s', min=2, max=5, password=AsList _ "sssss"}, {letter='s', min=11, max=12, password=AsList _ "fwgcsmxfszgs"}, {letter='m', min=1, max=3, password=AsList _ "mmbm"}, {letter='p', min=5, max=10, password=AsList _ "ppgfpzczphpp"}, {letter='r', min=11, max=13, password=AsList _ "rrrrrrrtgrrrc"}, {letter='g', min=4, max=6, password=AsList _ "nggdwbhktgjhsnrwmg"}, {letter='b', min=6, max=9, password=AsList _ "pnrtwgbwwdhmrbp"}, {letter='w', min=5, max=6, password=AsList _ "wwwqqww"}, {letter='s', min=10, max=14, password=AsList _ "ssssssssstsssss"}, {letter='k', min=1, max=9, password=AsList _ "hkkkkkkkkk"}, {letter='n', min=2, max=3, password=AsList _ "nnktnnnc"}, {letter='m', min=4, max=7, password=AsList _ "prmrmmmsj"}, {letter='t', min=13, max=15, password=AsList _ "tfqttttttkttqttttttt"}, {letter='p', min=6, max=8, password=AsList _ "ppppptpplprh"}, {letter='l', min=12, max=14, password=AsList _ "lllllllllllllll"}, {letter='g', min=11, max=12, password=AsList _ "ggggqppgkpzc"}, {letter='n', min=2, max=3, password=AsList _ "hpnnvn"}, {letter='f', min=1, max=5, password=AsList _ "gffffdfffmzf"}, {letter='w', min=9, max=18, password=AsList _ "lwjnfkwrjqtqnvjkhcw"}, {letter='x', min=6, max=7, password=AsList _ "mmxxxxn"}, {letter='j', min=12, max=14, password=AsList _ "hhpwdljfljpvxl"}, {letter='m', min=3, max=5, password=AsList _ "zxlrmrqknmv"}, {letter='l', min=6, max=9, password=AsList _ "slbllllllxlld"}, {letter='g', min=11, max=16, password=AsList _ "gggggggggglggggcg"}, {letter='h', min=1, max=6, password=AsList _ "hwhwlg"}, {letter='k', min=18, max=19, password=AsList _ "kkxvgrkkzkmkkkkkktk"}, {letter='c', min=3, max=10, password=AsList _ "cchccccccfccc"}, {letter='m', min=9, max=10, password=AsList _ "nssbtshpmmn"}, {letter='m', min=6, max=7, password=AsList _ "mtvbmpfpmm"}, {letter='t', min=4, max=13, password=AsList _ "wkmdgpwpcznlqsqtcjf"}, {letter='m', min=1, max=3, password=AsList _ "mmvm"}, {letter='p', min=2, max=11, password=AsList _ "ljvgtkpdlmpznlphxfgj"}, {letter='p', min=5, max=9, password=AsList _ "kppppcppnqpppqpzpppw"}, {letter='w', min=8, max=9, password=AsList _ "wwwwwwwwfw"}, {letter='m', min=4, max=7, password=AsList _ "bvmmlsqsh"}, {letter='v', min=2, max=5, password=AsList _ "vvrvv"}, {letter='j', min=4, max=10, password=AsList _ "jjfwjvxjjjwjj"}, {letter='f', min=5, max=6, password=AsList _ "ffffjf"}, {letter='w', min=1, max=3, password=AsList _ "pwwzd"}, {letter='v', min=4, max=6, password=AsList _ "vvvrvzvvv"}, {letter='s', min=11, max=15, password=AsList _ "ssssspsssscssssd"}, {letter='c', min=3, max=7, password=AsList _ "wrxltgcvpmc"}, {letter='p', min=2, max=3, password=AsList _ "pplp"}, {letter='f', min=3, max=5, password=AsList _ "nfnxfg"}, {letter='r', min=8, max=9, password=AsList _ "rrrsrrrhrr"}, {letter='j', min=3, max=7, password=AsList _ "dpmcvjj"}, {letter='b', min=10, max=16, password=AsList _ "bbbbbbbbbbbbbbrnbb"}, {letter='q', min=13, max=15, password=AsList _ "qqqqqxqqqqqqqqhqq"}, {letter='v', min=6, max=7, password=AsList _ "wvvvvzvv"}, {letter='j', min=2, max=7, password=AsList _ "rbtzvjhnvfznhfbskcp"}, {letter='n', min=7, max=8, password=AsList _ "nnnnncbnn"}, {letter='j', min=14, max=15, password=AsList _ "jjjjjjjgjjjjjjbjj"}, {letter='g', min=8, max=12, password=AsList _ "gggdgggghgqggggjgg"}, {letter='b', min=9, max=10, password=AsList _ "rlcbfbbbbbb"}, {letter='k', min=11, max=12, password=AsList _ "kkkkkkkkkktkk"}, {letter='k', min=11, max=12, password=AsList _ "kmkkkkkkkkqk"}, {letter='c', min=11, max=14, password=AsList _ "ccccfccccccccncccq"}, {letter='k', min=13, max=16, password=AsList _ "pkkkkkjkkkbkrkkkkzk"}, {letter='d', min=7, max=17, password=AsList _ "dhdvddzjddrwdchdd"}, {letter='z', min=1, max=8, password=AsList _ "zqlzzzzzz"}, {letter='p', min=3, max=9, password=AsList _ "ppfppsppwppbp"}, {letter='r', min=7, max=9, password=AsList _ "rrnrrrbrrrrrhrrr"}, {letter='t', min=4, max=7, password=AsList _ "tfqxtgl"}, {letter='l', min=4, max=5, password=AsList _ "ljmglll"}, {letter='d', min=5, max=6, password=AsList _ "tdvffd"}, {letter='r', min=4, max=13, password=AsList _ "rwrqbdbtbrtmrmlrgrr"}, {letter='g', min=15, max=19, password=AsList _ "gggggggggggggggggggg"}, {letter='r', min=7, max=8, password=AsList _ "lrkrfxtrrj"}, {letter='z', min=5, max=6, password=AsList _ "zkdlwzwv"}, {letter='r', min=9, max=10, password=AsList _ "rzrrrrrrfr"}, {letter='r', min=3, max=5, password=AsList _ "rrbcgrbrqrrd"}, {letter='t', min=15, max=16, password=AsList _ "cqnkntxktjwtttctt"}, {letter='p', min=9, max=12, password=AsList _ "ppppppppdpppp"}, {letter='d', min=8, max=10, password=AsList _ "tgddddgdck"}, {letter='n', min=6, max=9, password=AsList _ "nnnnncnxgpnnnnnn"}, {letter='w', min=1, max=4, password=AsList _ "wpwxtjwlwt"}, {letter='d', min=3, max=11, password=AsList _ "dclddmdkqdmf"}, {letter='w', min=5, max=7, password=AsList _ "zgwkpnwkqctwxj"}, {letter='x', min=4, max=6, password=AsList _ "phmxxhvlf"}, {letter='g', min=1, max=2, password=AsList _ "gjrvfg"}, {letter='t', min=11, max=13, password=AsList _ "ttbtptlzltttvttqttj"}, {letter='p', min=2, max=6, password=AsList _ "nmqsppqcqxntchq"}, {letter='z', min=10, max=13, password=AsList _ "dszzzzzgzzplf"}, {letter='j', min=5, max=7, password=AsList _ "kjwbjjqjjgd"}, {letter='r', min=12, max=16, password=AsList _ "rrrrrrjrrrrbrrrlrr"}, {letter='p', min=4, max=6, password=AsList _ "dppppx"}, {letter='w', min=11, max=20, password=AsList _ "wkswvxjwwzhxwwwqgqwn"}, {letter='f', min=8, max=9, password=AsList _ "qffwwmfwjf"}, {letter='g', min=3, max=4, password=AsList _ "pbgdtg"}, {letter='q', min=3, max=8, password=AsList _ "dqqqqqql"}, {letter='d', min=16, max=17, password=AsList _ "djddpdddddddddddsd"}, {letter='q', min=4, max=7, password=AsList _ "qqqqqqmq"}, {letter='r', min=13, max=14, password=AsList _ "rrlrsrrrrrrrrsrr"}, {letter='k', min=10, max=12, password=AsList _ "kkkkkkkkkhkkk"}, {letter='z', min=1, max=3, password=AsList _ "hdqwpdtmzgnpnffrh"}, {letter='g', min=2, max=4, password=AsList _ "gtgrg"}, {letter='l', min=5, max=7, password=AsList _ "lllltlllq"}, {letter='s', min=6, max=8, password=AsList _ "sqcvnsgs"}, {letter='q', min=1, max=3, password=AsList _ "qdqbqq"}, {letter='j', min=1, max=4, password=AsList _ "jknh"}, {letter='z', min=4, max=5, password=AsList _ "zzxlz"}, {letter='c', min=2, max=5, password=AsList _ "ccccjc"}, {letter='l', min=7, max=8, password=AsList _ "lllqfltlwll"}, {letter='p', min=8, max=9, password=AsList _ "pplpppppt"}, {letter='j', min=4, max=19, password=AsList _ "vkmrhblhpvfjlbwjlxjm"}, {letter='l', min=4, max=5, password=AsList _ "rlllnl"}, {letter='j', min=3, max=13, password=AsList _ "hgqcvcnjwnrnjp"}, {letter='c', min=3, max=5, password=AsList _ "cpcbbjp"}, {letter='z', min=4, max=5, password=AsList _ "jtpjzdrwcbrzhvmzz"}, {letter='s', min=4, max=8, password=AsList _ "bqsbvtrs"}, {letter='d', min=13, max=14, password=AsList _ "ddjddddddddpqddd"}, {letter='l', min=5, max=6, password=AsList _ "lllllll"}, {letter='z', min=7, max=9, password=AsList _ "zzzzzzzzpz"}, {letter='f', min=3, max=4, password=AsList _ "rpsgm"}, {letter='l', min=9, max=13, password=AsList _ "dllldlllllllb"}, {letter='h', min=16, max=17, password=AsList _ "thvclfldkhxzcqwvhp"}, {letter='z', min=8, max=9, password=AsList _ "zzzzzzzzz"}, {letter='d', min=9, max=10, password=AsList _ "dtddddddtdk"}, {letter='k', min=3, max=6, password=AsList _ "sxbvkk"}, {letter='x', min=4, max=14, password=AsList _ "xffvxhtxxnmjcxm"}, {letter='h', min=6, max=11, password=AsList _ "kthhhhfqhwf"}, {letter='z', min=3, max=5, password=AsList _ "pzzzq"}, {letter='x', min=3, max=4, password=AsList _ "xxxwxx"}, {letter='w', min=2, max=4, password=AsList _ "sqdwjg"}, {letter='t', min=5, max=6, password=AsList _ "mmgjhkqxts"}, {letter='w', min=7, max=9, password=AsList _ "wwwwwwwwkww"}, {letter='c', min=13, max=15, password=AsList _ "cccccccccccjccj"}, {letter='j', min=2, max=4, password=AsList _ "qjmhjpzbwfj"}, {letter='h', min=9, max=10, password=AsList _ "hhhjhhhhhzpwh"}, {letter='x', min=3, max=6, password=AsList _ "xxtxxlgx"}, {letter='q', min=11, max=14, password=AsList _ "qqqqqqqqqqqqqsq"}, {letter='n', min=2, max=6, password=AsList _ "kqnxcnnx"}, {letter='m', min=9, max=10, password=AsList _ "mmmmmpmmbm"}, {letter='p', min=9, max=12, password=AsList _ "pphpspzpppdp"}, {letter='j', min=4, max=5, password=AsList _ "jmndj"}, {letter='w', min=11, max=13, password=AsList _ "wgdmhwgcwlwqbwpxwkw"}, {letter='b', min=5, max=12, password=AsList _ "bdzqgjbfbbbbbqwb"}, {letter='v', min=9, max=10, password=AsList _ "kvqpggvvcvpv"}, {letter='s', min=9, max=12, password=AsList _ "lsbxnblrxfggt"}, {letter='r', min=9, max=12, password=AsList _ "rrrrrrrrrrrqrrr"}, {letter='s', min=9, max=10, password=AsList _ "nshmnkcdsz"}, {letter='z', min=1, max=2, password=AsList _ "kzzz"}, {letter='v', min=4, max=6, password=AsList _ "vsslvv"}, {letter='j', min=8, max=9, password=AsList _ "jjjjjjjjk"}, {letter='n', min=5, max=6, password=AsList _ "nnvnnn"}, {letter='k', min=3, max=5, password=AsList _ "nnjsljhcwtckqjs"}, {letter='b', min=2, max=5, password=AsList _ "cbhjxd"}, {letter='c', min=4, max=10, password=AsList _ "ccxzqktkqjsggfcckccc"}, {letter='f', min=13, max=16, password=AsList _ "ffffffffffffzffvf"}, {letter='l', min=1, max=4, password=AsList _ "slllll"}, {letter='v', min=7, max=9, password=AsList _ "vxvvvdrvnvwwklvv"}, {letter='r', min=3, max=9, password=AsList _ "rrtrrrrrrr"}, {letter='n', min=2, max=3, password=AsList _ "bnnsnf"}, {letter='b', min=9, max=12, password=AsList _ "txbxbvbtkbbbbbbbgq"}, {letter='c', min=6, max=17, password=AsList _ "ccccrcccccgcccccccc"}, {letter='d', min=3, max=7, password=AsList _ "qcddhpm"}, {letter='t', min=15, max=18, password=AsList _ "ttttttttttttttztttt"}, {letter='v', min=2, max=5, password=AsList _ "mvxcfbgzzfgrqts"}, {letter='q', min=3, max=4, password=AsList _ "vqwqqqmgk"}, {letter='k', min=3, max=8, password=AsList _ "kknkkkkkkk"}, {letter='z', min=4, max=6, password=AsList _ "skclpzmrlgzzzvzsl"}, {letter='h', min=3, max=4, password=AsList _ "hhsh"}, {letter='z', min=8, max=11, password=AsList _ "zzzzzzzzzzzznxzzzz"}, {letter='p', min=1, max=5, password=AsList _ "ppppc"}, {letter='f', min=2, max=6, password=AsList _ "nffwwj"}, {letter='g', min=5, max=7, password=AsList _ "gwtwfqmdfcgtth"}, {letter='q', min=1, max=17, password=AsList _ "wqfvwgcwcpwtgvtwf"}, {letter='c', min=6, max=16, password=AsList _ "ccccccccccccccccxccc"}, {letter='p', min=8, max=10, password=AsList _ "ppppprpppc"}, {letter='k', min=4, max=6, password=AsList _ "kqkkkkkkkkkk"}, {letter='q', min=3, max=10, password=AsList _ "cvqgjxqcrj"}, {letter='l', min=3, max=6, password=AsList _ "hcbgpfjhscfbrsfkzk"}, {letter='s', min=2, max=5, password=AsList _ "mskwssbdstsbssr"}, {letter='m', min=2, max=8, password=AsList _ "fzmfccddffc"}, {letter='v', min=6, max=8, password=AsList _ "vfmvltvv"}, {letter='w', min=3, max=4, password=AsList _ "wwwk"}, {letter='x', min=5, max=6, password=AsList _ "kxwxlxjxx"}, {letter='f', min=14, max=16, password=AsList _ "ffffffhffffffffk"}, {letter='q', min=7, max=8, password=AsList _ "lmqqlnqqpv"}, {letter='s', min=6, max=8, password=AsList _ "mzssssds"}, {letter='l', min=7, max=8, password=AsList _ "fgwtpwrltlvs"}, {letter='n', min=3, max=4, password=AsList _ "nmncnnkhnclmhdkbsv"}, {letter='f', min=8, max=9, password=AsList _ "fffffffftf"}, {letter='x', min=2, max=11, password=AsList _ "xcxfxxpxxdj"}, {letter='f', min=10, max=16, password=AsList _ "fffffffffffffffh"}, {letter='m', min=2, max=6, password=AsList _ "mjmmmm"}, {letter='g', min=5, max=7, password=AsList _ "gfgshggrhg"}, {letter='q', min=9, max=13, password=AsList _ "qqqqqqqqqqqqjq"}, {letter='x', min=11, max=14, password=AsList _ "xxxxxxxxxxxxxgxx"}, {letter='m', min=5, max=8, password=AsList _ "mmmmkkmmfx"}, {letter='n', min=3, max=4, password=AsList _ "nwdnnnn"}, {letter='x', min=1, max=7, password=AsList _ "tksssgxnlvkphdxzcsx"}, {letter='r', min=1, max=3, password=AsList _ "rrmn"}, {letter='m', min=2, max=5, password=AsList _ "mnmmmxmmmm"}, {letter='j', min=3, max=4, password=AsList _ "rcjcrjf"}, {letter='z', min=6, max=14, password=AsList _ "wnchnnzkptzfwb"}, {letter='j', min=5, max=16, password=AsList _ "jjljcjkjjmzjjjnxfjj"}, {letter='k', min=8, max=14, password=AsList _ "kkkkjkknkkkkkk"}, {letter='d', min=5, max=8, password=AsList _ "lcfpxdpdsrxhcgb"}, {letter='d', min=1, max=3, password=AsList _ "ddscmtdh"}, {letter='d', min=6, max=7, password=AsList _ "lxdddkd"}, {letter='s', min=1, max=3, password=AsList _ "wssss"}, {letter='x', min=4, max=8, password=AsList _ "xgxjflxzdxhxxcx"}, {letter='w', min=3, max=6, password=AsList _ "nxwgww"}, {letter='l', min=12, max=16, password=AsList _ "ljjglfblllllpblk"}, {letter='n', min=9, max=10, password=AsList _ "nxnnnnnnnmn"}, {letter='m', min=3, max=4, password=AsList _ "mmlgfmc"}, {letter='k', min=5, max=13, password=AsList _ "lmvxkxkbqkbxmmsxkqfc"}, {letter='c', min=10, max=11, password=AsList _ "cccccccccch"}, {letter='v', min=13, max=16, password=AsList _ "vvvvvvvvvvvvvvvvvv"}, {letter='h', min=1, max=2, password=AsList _ "hkhdbhjcf"}, {letter='l', min=16, max=17, password=AsList _ "llllllllllllllllcl"}, {letter='c', min=1, max=2, password=AsList _ "zcccccp"}, {letter='x', min=2, max=10, password=AsList _ "jsgxvxxdrxwtsftx"}, {letter='r', min=17, max=18, password=AsList _ "rrrrrrrrrxrrrrrrrh"}, {letter='w', min=4, max=5, password=AsList _ "wwwpwwwwwwwww"}, {letter='f', min=1, max=3, password=AsList _ "fzffff"}, {letter='q', min=3, max=5, password=AsList _ "rqsqq"}, {letter='b', min=4, max=7, password=AsList _ "blkxxbbrkkbjzqqd"}, {letter='s', min=5, max=6, password=AsList _ "slsssssss"}, {letter='g', min=13, max=15, password=AsList _ "xgggggggggggcrxg"}, {letter='d', min=3, max=4, password=AsList _ "ddsddddddddddddddddd"}, {letter='r', min=3, max=8, password=AsList _ "cklssrprdmgggk"}, {letter='s', min=5, max=11, password=AsList _ "ndxsssddflsbsptdzfmh"}, {letter='g', min=5, max=20, password=AsList _ "sgpdgmnsgxgghmlmgqgz"}, {letter='p', min=13, max=14, password=AsList _ "kpppmppppzbppgpp"}, {letter='f', min=10, max=11, password=AsList _ "ffffffffffvff"}, {letter='g', min=4, max=8, password=AsList _ "gpgpggcnjggqg"}, {letter='n', min=8, max=10, password=AsList _ "npxntcdndpnrq"}, {letter='q', min=9, max=13, password=AsList _ "qqqqqqqqqqqqtq"}, {letter='n', min=5, max=8, password=AsList _ "nnnnwnpnnv"}, {letter='w', min=6, max=9, password=AsList _ "wwwwwwwkcwwwwwwww"}, {letter='g', min=6, max=7, password=AsList _ "gxgghmg"}, {letter='z', min=7, max=8, password=AsList _ "spgkbchz"}, {letter='v', min=6, max=14, password=AsList _ "jdpxvvdvtvpsqm"}, {letter='d', min=2, max=7, password=AsList _ "vjbktzd"}, {letter='s', min=2, max=3, password=AsList _ "ssxv"}, {letter='j', min=2, max=4, password=AsList _ "jtch"}, {letter='r', min=3, max=5, password=AsList _ "hghhr"}, {letter='k', min=17, max=19, password=AsList _ "kkkkkkkkkknkkkkkrkq"}, {letter='v', min=4, max=13, password=AsList _ "vvvcvvvvvvvqvwvv"}, {letter='k', min=5, max=8, password=AsList _ "dkpkvkkckkwbk"}, {letter='h', min=8, max=15, password=AsList _ "qdqhqglpgbsjgnhc"}, {letter='d', min=8, max=11, password=AsList _ "fdpddxmcdkdh"}, {letter='c', min=3, max=5, password=AsList _ "ccwcccccpc"}, {letter='z', min=10, max=11, password=AsList _ "wjnzrzkzwzfgrzzl"}, {letter='m', min=12, max=14, password=AsList _ "mmmwmmmmmmmmmmmm"}, {letter='q', min=2, max=4, password=AsList _ "kqcvqxxtdbtjrjmrgr"}, {letter='f', min=12, max=14, password=AsList _ "wjsfpfhxbfvffh"}, {letter='d', min=14, max=17, password=AsList _ "dddddddddddddddddddd"}, {letter='s', min=1, max=5, password=AsList _ "dsssssdssswqns"}, {letter='h', min=6, max=8, password=AsList _ "hnlbffhh"}, {letter='k', min=4, max=5, password=AsList _ "bhssktq"}, {letter='p', min=8, max=19, password=AsList _ "pppppppfpppppppppppp"}, {letter='q', min=18, max=19, password=AsList _ "qsxllxqlzkqqmkqshqd"}, {letter='p', min=3, max=6, password=AsList _ "qbpkpm"}, {letter='z', min=1, max=3, password=AsList _ "zxnlclfzbp"}, {letter='f', min=18, max=19, password=AsList _ "ffxmfdxfdfffffhrfjf"}, {letter='w', min=2, max=5, password=AsList _ "wvpwwwf"}, {letter='l', min=13, max=17, password=AsList _ "llplltllllllmlllp"}, {letter='t', min=6, max=8, password=AsList _ "jzwtpjkcktrpqp"}, {letter='f', min=3, max=4, password=AsList _ "wfhffdnfffffvfsfffz"}, {letter='c', min=5, max=7, password=AsList _ "csctcxrcq"}, {letter='f', min=5, max=8, password=AsList _ "fffftffff"}, {letter='h', min=10, max=12, password=AsList _ "hjhmhwhzckhg"}, {letter='r', min=7, max=9, password=AsList _ "rrrrrrgrrr"}, {letter='z', min=11, max=13, password=AsList _ "zzzkzgfzzrzzrzz"}, {letter='q', min=14, max=18, password=AsList _ "hpsqffzbhqqldqrtcz"}, {letter='t', min=8, max=12, password=AsList _ "jtjttjtzvttvttptttlt"}, {letter='w', min=1, max=3, password=AsList _ "wwrwwwwwpwvwwcnf"}, {letter='d', min=2, max=6, password=AsList _ "clmpddfddhdd"}, {letter='l', min=6, max=8, password=AsList _ "lllllpfll"}, {letter='z', min=5, max=6, password=AsList _ "fhrdnz"}, {letter='n', min=3, max=7, password=AsList _ "gxjntsp"}, {letter='t', min=4, max=8, password=AsList _ "nddttttgnvt"}, {letter='l', min=2, max=4, password=AsList _ "lbxlhlllllllllllfl"}, {letter='l', min=2, max=5, password=AsList _ "llkdlbx"}, {letter='q', min=3, max=6, password=AsList _ "wqbbhnmcwplxlm"}, {letter='c', min=4, max=9, password=AsList _ "wkcccjcqrlclcgcccrc"}, {letter='h', min=3, max=4, password=AsList _ "thjh"}, {letter='s', min=2, max=6, password=AsList _ "hsbnjgjqj"}, {letter='s', min=7, max=10, password=AsList _ "sbshrhsvhnqtb"}, {letter='j', min=10, max=15, password=AsList _ "jjjjjjjjjcjjjjjjj"}, {letter='k', min=9, max=12, password=AsList _ "kkkkkkqkkkknkkkkkkkk"}, {letter='p', min=5, max=7, password=AsList _ "zrzpplx"}, {letter='v', min=7, max=12, password=AsList _ "vvvvvvvvvvvjvv"}, {letter='s', min=14, max=15, password=AsList _ "sssvssspssssswss"}, {letter='z', min=11, max=13, password=AsList _ "nzzzzzzzzfzzrzz"}, {letter='b', min=6, max=8, password=AsList _ "pwvlqbhlswggnhbwthjl"}, {letter='t', min=8, max=12, password=AsList _ "tcxpmxcbswgt"}, {letter='m', min=4, max=5, password=AsList _ "mmmxf"}, {letter='f', min=11, max=12, password=AsList _ "ffpffffwfwfk"}, {letter='r', min=3, max=8, password=AsList _ "rrrrrgrdxrr"}, {letter='f', min=6, max=7, password=AsList _ "fsfbffjfb"}, {letter='h', min=8, max=9, password=AsList _ "hhhhhhhhhhhhh"}, {letter='w', min=11, max=12, password=AsList _ "lwwwttwwkvpwwwwwc"}, {letter='s', min=1, max=14, password=AsList _ "pshssssssssssrsjs"}, {letter='x', min=4, max=6, password=AsList _ "xxxxxxxx"}, {letter='l', min=2, max=4, password=AsList _ "lldt"}, {letter='x', min=9, max=10, password=AsList _ "xxdxxxxxczxbxd"}, {letter='t', min=1, max=7, password=AsList _ "tgtttdst"}, {letter='z', min=8, max=9, password=AsList _ "zzzzqzzzd"}, {letter='g', min=11, max=12, password=AsList _ "ggggggggggdxg"}, {letter='p', min=10, max=13, password=AsList _ "ppppgppppppprppgp"}, {letter='g', min=2, max=16, password=AsList _ "qggkwxfvpcffplwg"}, {letter='n', min=17, max=18, password=AsList _ "nnnnnnnnnnnnnnnnnz"}, {letter='q', min=3, max=7, password=AsList _ "qqqqqbdqqq"}, {letter='h', min=4, max=8, password=AsList _ "hjmhrmhbvhj"}, {letter='d', min=12, max=15, password=AsList _ "bdzddppfddhpzjd"}, {letter='z', min=5, max=7, password=AsList _ "zzzzzzzzzz"}, {letter='v', min=3, max=4, password=AsList _ "vvvf"}, {letter='g', min=3, max=5, password=AsList _ "dcnwgqrvggfqbllvfgk"}, {letter='b', min=5, max=9, password=AsList _ "lsmsrwlvb"}, {letter='w', min=7, max=8, password=AsList _ "wwwwwwwsw"}, {letter='n', min=12, max=13, password=AsList _ "hrbpwjqrkhtxnnqqn"}, {letter='m', min=5, max=6, password=AsList _ "mvxqmmd"}, {letter='v', min=3, max=20, password=AsList _ "hmhjxjffzczvbwqfnngv"}, {letter='d', min=15, max=16, password=AsList _ "ddddddddddddhddd"}, {letter='x', min=4, max=7, password=AsList _ "jxxbwnxpbqrkx"}, {letter='z', min=5, max=7, password=AsList _ "zrzzzzmzt"}, {letter='c', min=16, max=20, password=AsList _ "hcdccfkcjcsxrcnccbpv"}, {letter='j', min=8, max=9, password=AsList _ "jjjqjjjjk"}, {letter='c', min=4, max=12, password=AsList _ "kszcxlswkcbvmxjsbdt"}, {letter='r', min=1, max=5, password=AsList _ "rrhnr"}, {letter='x', min=12, max=13, password=AsList _ "xxxxxbxxxxxxx"}, {letter='r', min=2, max=4, password=AsList _ "rrnl"}, {letter='m', min=1, max=8, password=AsList _ "rmmmmmvmmmmmm"}, {letter='k', min=10, max=13, password=AsList _ "kkkkkkkkkkkkbk"}, {letter='t', min=5, max=15, password=AsList _ "qtrtttxvtlxhtlpttwt"}, {letter='k', min=9, max=10, password=AsList _ "kkkkkkkkzh"}, {letter='q', min=17, max=18, password=AsList _ "qqqqqbqqqqqqqqqqwqq"}, {letter='k', min=1, max=2, password=AsList _ "jkftk"}, {letter='t', min=5, max=7, password=AsList _ "ltttktvtwtt"}, {letter='b', min=4, max=6, password=AsList _ "rbbtwb"}, {letter='w', min=1, max=5, password=AsList _ "gwwwwwmwww"}, {letter='x', min=6, max=8, password=AsList _ "txqxxtxtx"}, {letter='t', min=9, max=14, password=AsList _ "ttnttttnttttttw"}, {letter='s', min=3, max=6, password=AsList _ "spszzskl"}, {letter='x', min=4, max=9, password=AsList _ "xxxrxvxxkxx"}, {letter='r', min=11, max=14, password=AsList _ "rrrfhrbrjkrrgh"}, {letter='q', min=1, max=9, password=AsList _ "wqqqqqqqqqq"}, {letter='f', min=5, max=14, password=AsList _ "gfdjfdmfmmcgfrffsp"}, {letter='b', min=2, max=4, password=AsList _ "bvcb"}, {letter='c', min=9, max=12, password=AsList _ "ccccnccrcccccccc"}, {letter='s', min=9, max=14, password=AsList _ "ssssssssbgssssss"}, {letter='d', min=15, max=18, password=AsList _ "ddddddcdkdsddddddw"}, {letter='v', min=17, max=18, password=AsList _ "vvvvvvvvvvvvzvvvvbvv"}, {letter='k', min=3, max=7, password=AsList _ "mfkbzqnwhkgkk"}, {letter='p', min=2, max=5, password=AsList _ "cpqpp"}, {letter='r', min=7, max=10, password=AsList _ "frrrrrrrrnrrrrrqrw"}, {letter='h', min=5, max=6, password=AsList _ "fhhhxschhdpbh"}, {letter='k', min=1, max=2, password=AsList _ "kcrkkk"}, {letter='s', min=1, max=5, password=AsList _ "kssssssszsnssssssr"}, {letter='t', min=3, max=4, password=AsList _ "ztct"}, {letter='g', min=1, max=2, password=AsList _ "grkgc"}, {letter='t', min=8, max=9, password=AsList _ "tttctttcttqc"}, {letter='d', min=4, max=9, password=AsList _ "rddvdddddddddd"}, {letter='j', min=5, max=7, password=AsList _ "jjjjjjnj"}, {letter='f', min=4, max=5, password=AsList _ "ffrjd"}, {letter='x', min=14, max=16, password=AsList _ "jqvkmxlxfxbwplhxl"}, {letter='j', min=2, max=13, password=AsList _ "hkqphvkprvmjdfm"}, {letter='b', min=1, max=12, password=AsList _ "bbbbbbbbvbbjvbbbbbs"}, {letter='m', min=4, max=6, password=AsList _ "mmmnmm"}, {letter='q', min=16, max=18, password=AsList _ "rvfzkvqqmddvqfrrpq"}, {letter='c', min=7, max=14, password=AsList _ "czcccccccdpccgsc"}, {letter='z', min=1, max=8, password=AsList _ "zgzfbtzzqp"}, {letter='n', min=7, max=18, password=AsList _ "tzfktnkcpncxcsvxzv"}, {letter='x', min=2, max=3, password=AsList _ "xmxz"}, {letter='q', min=4, max=10, password=AsList _ "qqldqqqqqqql"}, {letter='f', min=2, max=6, password=AsList _ "ffvfpqfftg"}, {letter='c', min=12, max=15, password=AsList _ "cccccccccscxlccc"}, {letter='d', min=3, max=17, password=AsList _ "ddlzddghdddgwdddddd"}, {letter='g', min=11, max=13, password=AsList _ "lglgmqgcmlggbftgggd"}, {letter='q', min=12, max=13, password=AsList _ "ldjqqvqqhbfqn"}, {letter='h', min=4, max=5, password=AsList _ "hhhhp"}, {letter='f', min=9, max=11, password=AsList _ "tfkcfzcqpzfdggbpw"}, {letter='f', min=10, max=13, password=AsList _ "fffffffffkffffff"}, {letter='l', min=2, max=3, password=AsList _ "swln"}, {letter='j', min=6, max=10, password=AsList _ "kqsjnjtjmd"}, {letter='c', min=8, max=12, password=AsList _ "ccccctclccscmcc"}, {letter='r', min=10, max=18, password=AsList _ "rrrrrrrrrjrrjrrrrr"}, {letter='t', min=4, max=7, password=AsList _ "btcxktc"}, {letter='m', min=8, max=19, password=AsList _ "mmmmmmmmmmmmmmmmmmhm"}, {letter='j', min=10, max=12, password=AsList _ "jjjjjjrjjjlj"}, {letter='x', min=1, max=11, password=AsList _ "xlxxxxxxxxxxz"}, {letter='w', min=11, max=17, password=AsList _ "fblmwxqwbfdwlcqww"}, {letter='c', min=4, max=6, password=AsList _ "qchcclc"}, {letter='k', min=3, max=4, password=AsList _ "kkkkkkkbkkr"}, {letter='s', min=4, max=5, password=AsList _ "sssfssssssssw"}, {letter='m', min=4, max=6, password=AsList _ "bvmmvjrlvmzmmtsm"}, {letter='f', min=6, max=14, password=AsList _ "qftmhffffcccffsz"}, {letter='t', min=3, max=4, password=AsList _ "rzthtt"}, {letter='s', min=6, max=19, password=AsList _ "qshpkhjcsssqmzspxss"}, {letter='p', min=3, max=4, password=AsList _ "vshp"}, {letter='w', min=3, max=4, password=AsList _ "zwff"}, {letter='s', min=5, max=7, password=AsList _ "tngctss"}, {letter='g', min=11, max=14, password=AsList _ "bhshgkpgxrgkqwpprwv"}, {letter='t', min=3, max=7, password=AsList _ "ttptttt"}, {letter='q', min=1, max=3, password=AsList _ "qqzqqqvb"}, {letter='r', min=7, max=12, password=AsList _ "kvzjrmrhvxxs"}, {letter='j', min=11, max=12, password=AsList _ "jjjkjjjjjjjz"}, {letter='p', min=10, max=11, password=AsList _ "pppppppppxppp"}, {letter='s', min=1, max=10, password=AsList _ "rsssssssshsss"}, {letter='x', min=4, max=5, password=AsList _ "xxxdcx"}, {letter='n', min=3, max=4, password=AsList _ "fnlnfn"}, {letter='l', min=8, max=9, password=AsList _ "llfflqlfll"}, {letter='z', min=3, max=4, password=AsList _ "hzrz"}, {letter='f', min=15, max=16, password=AsList _ "tdzxfwjvdgsxczff"}, {letter='z', min=12, max=16, password=AsList _ "zzzzzzzvpzzzzzzzzz"}, {letter='f', min=4, max=8, password=AsList _ "fwfwffffqmfkff"}, {letter='z', min=7, max=8, password=AsList _ "zjvzzkzzzxmzz"}, {letter='r', min=7, max=8, password=AsList _ "drrcsrrg"}, {letter='z', min=7, max=8, password=AsList _ "znzzzzbzzz"}, {letter='l', min=7, max=8, password=AsList _ "llllllml"}, {letter='b', min=10, max=11, password=AsList _ "jbbbbbjbbbs"}, {letter='c', min=5, max=12, password=AsList _ "cccccccccccpc"}, {letter='n', min=9, max=13, password=AsList _ "nnnnnnnnpnnnn"}, {letter='q', min=7, max=8, password=AsList _ "rvqqqqhnrqqqjqq"}, {letter='d', min=4, max=8, password=AsList _ "xzqwgncdgqtd"}, {letter='r', min=6, max=7, password=AsList _ "rrrrrmr"}, {letter='q', min=1, max=2, password=AsList _ "rbql"}, {letter='f', min=13, max=14, password=AsList _ "ffkfjffjzqfcnfhshw"}, {letter='m', min=6, max=9, password=AsList _ "mmmhmmkmbmrlrwwmtfl"}, {letter='s', min=5, max=12, password=AsList _ "ssfsmsbwsrzssstsssss"}, {letter='m', min=6, max=14, password=AsList _ "bmpbqmjmqxmnrt"}, {letter='g', min=5, max=7, password=AsList _ "hgwgdntgwgsp"}, {letter='q', min=10, max=15, password=AsList _ "qzqqrbqmqqqqsntqqq"}, {letter='w', min=7, max=10, password=AsList _ "wwwwwwnwwwhz"}, {letter='v', min=5, max=7, password=AsList _ "vvvvrvv"}, {letter='z', min=2, max=3, password=AsList _ "zzzlz"}, {letter='r', min=5, max=9, password=AsList _ "rxqbhdrmr"}, {letter='c', min=10, max=15, password=AsList _ "bchccbcqqcrtcrj"}, {letter='g', min=8, max=10, password=AsList _ "hplggnlnbfpgfxmkgb"}, {letter='p', min=14, max=18, password=AsList _ "pwpqppdpfpppppqpph"}, {letter='t', min=8, max=9, password=AsList _ "ttlgpzmtdkzdrcstztf"}, {letter='l', min=13, max=19, password=AsList _ "slzsflllllwlllllllg"}, {letter='z', min=5, max=6, password=AsList _ "zqcnzz"}, {letter='c', min=11, max=14, password=AsList _ "ccctcccccwckch"}, {letter='v', min=3, max=5, password=AsList _ "vhblvzmvfv"}, {letter='v', min=18, max=19, password=AsList _ "vvvvvvvvbvvvvvvvvmv"}, {letter='g', min=4, max=5, password=AsList _ "gjjwgtlgjtggg"}, {letter='l', min=4, max=5, password=AsList _ "rlnvlvxllg"}, {letter='z', min=2, max=11, password=AsList _ "qzclmjsrfrsbrjtd"}, {letter='w', min=9, max=11, password=AsList _ "gwwwwwwwwsbfrbw"}, {letter='v', min=1, max=2, password=AsList _ "vzvvvvvvvvvvvvvvvvv"}, {letter='b', min=4, max=8, password=AsList _ "bzbpbpbjdfbdbqfz"}, {letter='m', min=10, max=16, password=AsList _ "wxcvdmldmzxvnxmmqb"}, {letter='c', min=4, max=11, password=AsList _ "cljrsmxwvbcx"}, {letter='n', min=12, max=17, password=AsList _ "lwzncwfjpwxbnnhnnpx"}, {letter='k', min=9, max=10, password=AsList _ "vfbbmbxwkd"}, {letter='c', min=17, max=19, password=AsList _ "ccccccccgcccccccccd"}, {letter='h', min=5, max=9, password=AsList _ "vhrhmhvsh"}, {letter='g', min=6, max=10, password=AsList _ "ggfggsggngwgpcgfvz"}, {letter='g', min=4, max=17, password=AsList _ "ccvgdkxzggzbsjvzqq"}, {letter='g', min=8, max=10, password=AsList _ "qggggggzggg"}, {letter='w', min=3, max=4, password=AsList _ "wwvh"}, {letter='r', min=4, max=5, password=AsList _ "gjrfrb"}, {letter='r', min=1, max=5, password=AsList _ "qrrrrrrr"}, {letter='k', min=11, max=15, password=AsList _ "kckkkkpjqmnkcwkkkkq"}, {letter='q', min=3, max=6, password=AsList _ "qwswqq"}, {letter='s', min=4, max=5, password=AsList _ "lsssss"}, {letter='d', min=12, max=13, password=AsList _ "mdwgdddtdfdvr"}, {letter='k', min=1, max=14, password=AsList _ "vkkkkkkkdkkkkkkk"}, {letter='t', min=1, max=6, password=AsList _ "zrgnxtt"}, {letter='d', min=8, max=9, password=AsList _ "kdqdfgndd"}, {letter='z', min=6, max=7, password=AsList _ "pfnzzzzzwjzxg"}, {letter='d', min=2, max=9, password=AsList _ "ddddddddddddkddd"}, {letter='x', min=5, max=7, password=AsList _ "krnfpjx"}, {letter='j', min=4, max=12, password=AsList _ "ksgkjzbqprvjqjxbp"}, {letter='m', min=10, max=11, password=AsList _ "hmzmmmnmmmpmmg"}, {letter='k', min=4, max=8, password=AsList _ "fxmkmppqnlckglvm"}, {letter='x', min=8, max=11, password=AsList _ "xxxxxxtrxxxdxxx"}, {letter='r', min=1, max=10, password=AsList _ "rwcrfrlhrsrhr"}, {letter='m', min=5, max=7, password=AsList _ "mmmmvmm"}, {letter='m', min=7, max=16, password=AsList _ "mmmmmjmhmmqmwmmqvfm"}, {letter='v', min=8, max=13, password=AsList _ "mdmrvvsvvmhcxknc"}, {letter='w', min=5, max=6, password=AsList _ "bwwxnw"}, {letter='g', min=11, max=12, password=AsList _ "ggggggggggwgggg"}, {letter='t', min=9, max=16, password=AsList _ "tgtttgtnttttdtttw"}, {letter='j', min=4, max=7, password=AsList _ "jjjjjvvnjj"}, {letter='p', min=12, max=17, password=AsList _ "vhbprgsmljmpzzhzn"}, {letter='v', min=4, max=13, password=AsList _ "vrcntbdvkvtdvzxnptvb"}, {letter='j', min=1, max=7, password=AsList _ "jjjjjjdjj"}, {letter='c', min=11, max=14, password=AsList _ "cjhcrkhcccccdc"}, {letter='j', min=17, max=18, password=AsList _ "jhjjjjjjjjjqjjjjjvj"}, {letter='m', min=8, max=9, password=AsList _ "jmmkmmmmdmwvmgz"}, {letter='x', min=9, max=12, password=AsList _ "dkxxxhqxxzzpcvcxgkx"}, {letter='m', min=16, max=17, password=AsList _ "mmmmmqmmmmmtmmmfmjm"}, {letter='b', min=3, max=13, password=AsList _ "mbbtrmxlzdpbt"}, {letter='g', min=1, max=5, password=AsList _ "bggggggg"}, {letter='m', min=11, max=19, password=AsList _ "dlgmdsscksdrtmmdpjrq"}, {letter='g', min=1, max=4, password=AsList _ "skgg"}, {letter='l', min=12, max=20, password=AsList _ "jcgnljnllllqftjrvnhl"}, {letter='d', min=2, max=3, password=AsList _ "drbdcl"}, {letter='t', min=2, max=3, password=AsList _ "mtwtt"}, {letter='f', min=8, max=9, password=AsList _ "fxstfnfsfffft"}, {letter='z', min=14, max=16, password=AsList _ "zzzzzzzzzzzzzzzrz"}, {letter='x', min=5, max=8, password=AsList _ "xxxxpxxxxxxt"}, {letter='t', min=10, max=11, password=AsList _ "ttttttttttv"}, {letter='r', min=5, max=16, password=AsList _ "xrwrrrqhhlqkhdlzr"}, {letter='n', min=5, max=7, password=AsList _ "nnnnnnhnnnnnnnnnnnnn"}, {letter='v', min=4, max=6, password=AsList _ "dzwfvxz"}, {letter='c', min=2, max=6, password=AsList _ "cccccccc"}, {letter='j', min=5, max=6, password=AsList _ "jjjpjkjhj"}, {letter='j', min=3, max=11, password=AsList _ "jjhnjjgjjghjjj"}, {letter='s', min=14, max=20, password=AsList _ "zskwnsmpsswctgwshxsm"}, {letter='j', min=1, max=3, password=AsList _ "tjfjj"}, {letter='d', min=2, max=8, password=AsList _ "dsdrssdwqq"}, {letter='j', min=9, max=10, password=AsList _ "rjjjjjjjqjjqjjj"}, {letter='b', min=8, max=10, password=AsList _ "clmwbzzjkb"}, {letter='k', min=4, max=9, password=AsList _ "klkdkkkkvkkkkkk"}, {letter='v', min=8, max=16, password=AsList _ "xvvsvvqqvvjvvvvv"}, {letter='d', min=4, max=5, password=AsList _ "qdrtd"}, {letter='p', min=3, max=4, password=AsList _ "pppt"}, {letter='p', min=4, max=5, password=AsList _ "ppvmp"}, {letter='g', min=5, max=13, password=AsList _ "sggmnggwtggmqggkg"}, {letter='g', min=9, max=17, password=AsList _ "ggcgggntdgjmgtgxg"}, {letter='q', min=12, max=13, password=AsList _ "jqqqqqqqqzqqqqq"}, {letter='v', min=2, max=3, password=AsList _ "tbvzcmzvn"}, {letter='m', min=1, max=5, password=AsList _ "vnmwtww"}, {letter='r', min=5, max=6, password=AsList _ "rrhkrs"}, {letter='c', min=14, max=15, password=AsList _ "cccchccccccccct"}, {letter='m', min=15, max=17, password=AsList _ "mmmmmmzmmmmmmmhmm"}, {letter='k', min=5, max=10, password=AsList _ "kqkkkkkkkkkkkkkkkkk"}, {letter='z', min=17, max=19, password=AsList _ "gxpjhhktxrlwwgqzlxzx"}, {letter='s', min=3, max=7, password=AsList _ "wsbssvscgss"}, {letter='k', min=3, max=5, password=AsList _ "kkkkf"}, {letter='m', min=4, max=7, password=AsList _ "jmmmgmbmmmv"}, {letter='p', min=2, max=7, password=AsList _ "vpchdqpxxwjpwdgr"}, {letter='w', min=3, max=6, password=AsList _ "wwwxwwdww"}, {letter='h', min=11, max=17, password=AsList _ "hhhhhhhhhhhhhhhhb"}, {letter='w', min=1, max=5, password=AsList _ "zwwwwwwwwwwwwwgw"}, {letter='m', min=2, max=5, password=AsList _ "mlmmmmk"}, {letter='p', min=10, max=11, password=AsList _ "nptppbpplpd"}, {letter='m', min=2, max=8, password=AsList _ "xcmsbqms"}, {letter='w', min=7, max=13, password=AsList _ "wjvwrwwwlxnsnw"}, {letter='r', min=3, max=9, password=AsList _ "rrrrrrrrv"}, {letter='t', min=2, max=4, password=AsList _ "nttw"}, {letter='q', min=17, max=18, password=AsList _ "ptqqpqrcrgqqqlqqmq"}, {letter='h', min=6, max=7, password=AsList _ "jhxhkchjhhrhh"}, {letter='n', min=8, max=11, password=AsList _ "nnbnnnnnnppgnnlnhbq"}, {letter='g', min=15, max=18, password=AsList _ "gggqggrsggzggggdggg"}, {letter='n', min=5, max=9, password=AsList _ "ptcnnjrnfnn"}, {letter='h', min=9, max=15, password=AsList _ "hshwhbhhxhzhhhhhw"}, {letter='x', min=1, max=3, password=AsList _ "fxxxx"}, {letter='z', min=3, max=6, password=AsList _ "zzpzqzzzqzzzzzznzzwz"}, {letter='p', min=10, max=11, password=AsList _ "lllpqpqvpppprppppp"}, {letter='n', min=13, max=15, password=AsList _ "mnnnnnnntqcpdnn"}, {letter='g', min=14, max=19, password=AsList _ "ggggggggggggggggggrg"}, {letter='w', min=3, max=11, password=AsList _ "qtlpkwswvwwww"}, {letter='g', min=3, max=8, password=AsList _ "lwgzgzml"}, {letter='w', min=1, max=4, password=AsList _ "wwsw"}, {letter='q', min=14, max=19, password=AsList _ "zcxqpjgxqfqqqqvjmklq"}, {letter='h', min=4, max=5, password=AsList _ "hrxkh"}, {letter='p', min=9, max=12, password=AsList _ "ppppgpppppppppp"}, {letter='t', min=8, max=11, password=AsList _ "pwgtdxrtwtbskjnq"}, {letter='m', min=2, max=4, password=AsList _ "pcdmkmlpwwxqw"}, {letter='r', min=1, max=4, password=AsList _ "rrrxrr"}, {letter='l', min=8, max=9, password=AsList _ "lllllwlbl"}, {letter='p', min=8, max=9, password=AsList _ "pppppppfp"}, {letter='x', min=4, max=5, password=AsList _ "jdxxs"}, {letter='h', min=3, max=5, password=AsList _ "hvwth"}, {letter='z', min=7, max=14, password=AsList _ "xkqhzztwjzzsgz"}, {letter='b', min=7, max=11, password=AsList _ "bbwbbbcbbbbb"}, {letter='f', min=2, max=4, password=AsList _ "fflf"}, {letter='m', min=4, max=9, password=AsList _ "cmmmqlmmlxmgmmmmtmpm"}, {letter='j', min=3, max=18, password=AsList _ "bnjznmljlhpfhcmnpcj"}, {letter='z', min=7, max=9, password=AsList _ "zzxzvcbzzzz"}, {letter='s', min=14, max=15, password=AsList _ "ssmssssssslssszss"}, {letter='v', min=12, max=19, password=AsList _ "vgvvvvnvsvvrzvrvvvv"}, {letter='q', min=8, max=10, password=AsList _ "qqqqcpqqqnqqqk"}, {letter='p', min=11, max=14, password=AsList _ "zzvpwltfptcszpv"}, {letter='h', min=2, max=9, password=AsList _ "khpnvdcvdh"}, {letter='q', min=8, max=12, password=AsList _ "dqqqqqqlqqqqqq"}, {letter='f', min=2, max=17, password=AsList _ "fffffffffgfgjfffxtt"}, {letter='n', min=1, max=8, password=AsList _ "jnnnnrnn"}, {letter='k', min=7, max=8, password=AsList _ "kkkhmkkdkkkk"}, {letter='j', min=10, max=11, password=AsList _ "xjwmjcjjqrpjvlbjj"}, {letter='v', min=3, max=4, password=AsList _ "vrvc"}, {letter='r', min=4, max=9, password=AsList _ "dprrlbbrsrgqzvkc"}, {letter='w', min=4, max=8, password=AsList _ "wrcwgsqghwwjw"}, {letter='r', min=11, max=12, password=AsList _ "rrzrrrrrrrrrf"}, {letter='c', min=4, max=5, password=AsList _ "rzccmcc"}, {letter='w', min=1, max=8, password=AsList _ "wqwvwcwtwww"}, {letter='f', min=7, max=9, password=AsList _ "hjfpvgffllfsfsft"}, {letter='d', min=1, max=3, password=AsList _ "nddd"}, {letter='c', min=12, max=13, password=AsList _ "ccccbccsccbbcccpcc"}, {letter='d', min=1, max=11, password=AsList _ "xdhddwddjdg"}, {letter='c', min=3, max=5, password=AsList _ "ccvcc"}, {letter='d', min=2, max=6, password=AsList _ "djddddfd"}, {letter='z', min=4, max=5, password=AsList _ "kzqszztpzz"}, {letter='s', min=2, max=5, password=AsList _ "ssssz"}, {letter='g', min=2, max=6, password=AsList _ "gdvjggrx"}, {letter='k', min=9, max=11, password=AsList _ "qzklmckckkmkkk"}, {letter='g', min=5, max=6, password=AsList _ "grjpwv"}, {letter='n', min=8, max=12, password=AsList _ "nnnnnnngnnnnnnn"}, {letter='z', min=15, max=19, password=AsList _ "zzzzzlmmczdzztgmzvzp"}, {letter='p', min=4, max=5, password=AsList _ "pprvpmpdwppbqpmpw"}, {letter='q', min=9, max=15, password=AsList _ "lfqrxjvdqnlqqtqgnqn"}, {letter='w', min=1, max=4, password=AsList _ "pwwww"}, {letter='q', min=1, max=9, password=AsList _ "qvqqqgqqfqnq"}, {letter='k', min=2, max=4, password=AsList _ "rwlkkcqxcrwd"}, {letter='q', min=2, max=12, password=AsList _ "qqdlpwqqftgjb"}, {letter='q', min=5, max=7, password=AsList _ "qqqtlfq"}, {letter='g', min=8, max=9, password=AsList _ "ggggggrgvtgg"}, {letter='l', min=6, max=13, password=AsList _ "llllllllllllklll"}, {letter='h', min=1, max=4, password=AsList _ "dhhhn"}, {letter='f', min=5, max=6, password=AsList _ "ffjjsfft"}, {letter='x', min=11, max=12, password=AsList _ "xxcxxxxxvxxxxx"}, {letter='z', min=5, max=7, password=AsList _ "zzzwzfh"}, {letter='d', min=12, max=14, password=AsList _ "vpblrhxdwrgdvkg"}, {letter='n', min=1, max=3, password=AsList _ "xwrjrjdj"}, {letter='z', min=8, max=9, password=AsList _ "zzzzdpzzghbzzzzwz"}, {letter='p', min=15, max=16, password=AsList _ "pppppppppppppppw"}, {letter='r', min=4, max=12, password=AsList _ "rrrvrrrrrrrrr"}, {letter='d', min=8, max=9, password=AsList _ "dddddddndd"}, {letter='l', min=4, max=10, password=AsList _ "llsfllllllll"}, {letter='z', min=2, max=13, password=AsList _ "kzkctzprbpkkd"}, {letter='c', min=2, max=4, password=AsList _ "qvcccd"}, {letter='q', min=6, max=7, password=AsList _ "qqqrqqfqdq"}, {letter='f', min=11, max=13, password=AsList _ "ffhffggfffgbf"}, {letter='r', min=9, max=19, password=AsList _ "wncrtrxrrrjhjcvtvsbt"}, {letter='h', min=9, max=11, password=AsList _ "hhhhhhhhlhh"}, {letter='s', min=8, max=10, password=AsList _ "ggwhksdslsp"}, {letter='h', min=3, max=13, password=AsList _ "hhhhhhhhhhhhfhhh"}, {letter='h', min=6, max=7, password=AsList _ "hwghlnh"}, {letter='r', min=7, max=10, password=AsList _ "rrrrrrjrrrr"}, {letter='f', min=9, max=10, password=AsList _ "fbjfbfffff"}, {letter='b', min=16, max=17, password=AsList _ "bbbbbbbbfbbbbbbjbbb"}, {letter='t', min=13, max=16, password=AsList _ "tttttttttttttttz"}, {letter='s', min=2, max=3, password=AsList _ "ssrsssjssss"}, {letter='b', min=1, max=3, password=AsList _ "sbbbbk"}, {letter='q', min=1, max=5, password=AsList _ "xcdbqqqdjxs"}, {letter='p', min=10, max=12, password=AsList _ "jppvpstpjjpp"}, {letter='b', min=8, max=15, password=AsList _ "bglbkmhbqbgfzfh"}, {letter='x', min=1, max=6, password=AsList _ "xxxxxfx"}, {letter='w', min=14, max=18, password=AsList _ "mwwwhtwjshwbvwrjrn"}, {letter='w', min=1, max=2, password=AsList _ "wtww"}, {letter='h', min=2, max=7, password=AsList _ "pxhntbg"}, {letter='c', min=2, max=7, password=AsList _ "ccccccs"}, {letter='z', min=2, max=5, password=AsList _ "zzzzczz"}, {letter='n', min=3, max=5, password=AsList _ "tggvn"}, {letter='h', min=13, max=14, password=AsList _ "hfhhhmthvhhwhdhhhhh"}, {letter='n', min=11, max=16, password=AsList _ "nnnnznnpnnlknnnn"}, {letter='d', min=2, max=6, password=AsList _ "dkdddddd"}, {letter='g', min=12, max=15, password=AsList _ "gxbgggggggbnggg"}, {letter='c', min=1, max=3, password=AsList _ "scxccc"}, {letter='w', min=5, max=6, password=AsList _ "wwwwwfwww"}, {letter='z', min=12, max=13, password=AsList _ "zzzzzzzzzzzczz"}, {letter='j', min=6, max=9, password=AsList _ "psjjmjrxjnrwxzjjnnf"}, {letter='h', min=15, max=16, password=AsList _ "hhhhhhhthhvhhhkhh"}, {letter='n', min=4, max=5, password=AsList _ "nnnnj"}, {letter='g', min=11, max=12, password=AsList _ "gqggdgggggggrgggm"}, {letter='n', min=2, max=5, password=AsList _ "mqnlthrtjnr"}, {letter='n', min=11, max=13, password=AsList _ "nnnnnnnnvnnnx"}, {letter='b', min=2, max=4, password=AsList _ "xbbr"}, {letter='j', min=2, max=7, password=AsList _ "rzjshrj"}, {letter='b', min=18, max=20, password=AsList _ "gzcxrqfqmlbqmvrttbbp"}, {letter='h', min=10, max=13, password=AsList _ "hhhhkhhhhrhhh"}, {letter='n', min=5, max=6, password=AsList _ "mkjnnnqbdpznlndnnd"}, {letter='w', min=5, max=6, password=AsList _ "wwwdqww"}, {letter='v', min=15, max=19, password=AsList _ "vvvvvxvvvvvvvvzvvvv"}, {letter='b', min=2, max=3, password=AsList _ "wlbhwdjwtncwpkbxvhc"}, {letter='f', min=4, max=5, password=AsList _ "ffrrf"}, {letter='v', min=15, max=16, password=AsList _ "vhvpvpvvvmckvbkvvvv"}, {letter='m', min=2, max=6, password=AsList _ "mmbnrsq"}, {letter='r', min=6, max=7, password=AsList _ "rlrqgrj"}, {letter='c', min=7, max=12, password=AsList _ "ccccccsccccmcc"}, {letter='g', min=1, max=9, password=AsList _ "kggggggglg"}, {letter='f', min=4, max=9, password=AsList _ "frfffffnfzfcfff"}, {letter='g', min=2, max=3, password=AsList _ "gcspt"}, {letter='v', min=8, max=14, password=AsList _ "dvkpxqztcqttvv"}, {letter='r', min=5, max=11, password=AsList _ "rrrrtrrrrrrrrrrrr"}, {letter='c', min=4, max=15, password=AsList _ "jdrnrvqrzckbrxmzsgl"}, {letter='t', min=3, max=5, password=AsList _ "dkttc"}, {letter='j', min=4, max=11, password=AsList _ "ppjjwjjtdjt"}, {letter='k', min=7, max=9, password=AsList _ "kkkkkkkkm"}, {letter='p', min=1, max=4, password=AsList _ "lcpp"}, {letter='w', min=3, max=6, password=AsList _ "wwwwwvw"}, {letter='h', min=3, max=13, password=AsList _ "ghhlhhhhhbhgt"}, {letter='f', min=5, max=6, password=AsList _ "ffzvft"}, {letter='p', min=1, max=2, password=AsList _ "bppp"}, {letter='m', min=6, max=12, password=AsList _ "lnnfbnmdrngmpt"}, {letter='n', min=7, max=8, password=AsList _ "blfngnngnnnn"}, {letter='s', min=5, max=8, password=AsList _ "ssssssss"}, {letter='d', min=2, max=8, password=AsList _ "ddddddds"}, {letter='x', min=6, max=11, password=AsList _ "gxnxbfxcrkjxxxhx"}, {letter='m', min=9, max=10, password=AsList _ "wzfmmmvmtfrmm"}, {letter='n', min=5, max=11, password=AsList _ "xgkpshnxwnn"}, {letter='z', min=14, max=18, password=AsList _ "ztzczzzznzzzzzzzvz"}, {letter='k', min=5, max=7, password=AsList _ "kgkkkks"}, {letter='z', min=10, max=11, password=AsList _ "zvglzzxvqzpdj"}, {letter='z', min=1, max=16, password=AsList _ "rdhsbnvmpfqpzmrzw"}, {letter='m', min=13, max=14, password=AsList _ "mmmmmmmmmmmmmxm"}, {letter='n', min=12, max=16, password=AsList _ "fsmnddnmkmjnkncn"}, {letter='l', min=2, max=5, password=AsList _ "mqlllmgb"}, {letter='k', min=2, max=4, password=AsList _ "xgmthfprbsk"}, {letter='q', min=2, max=4, password=AsList _ "qssq"}, {letter='r', min=12, max=13, password=AsList _ "rrrrrrrrrrrrq"}, {letter='v', min=1, max=19, password=AsList _ "vzdtngrnnvmnpzvbmwvg"}, {letter='m', min=7, max=11, password=AsList _ "lrjmsvmmmsjjmw"}, {letter='r', min=4, max=7, password=AsList _ "rxrbfzrtvrhdq"}, {letter='t', min=1, max=4, password=AsList _ "ltttttttt"}, {letter='k', min=5, max=16, password=AsList _ "cktfdzrxppmkjfhk"}, {letter='f', min=5, max=9, password=AsList _ "qfsfcfbtfl"}, {letter='p', min=2, max=7, password=AsList _ "pvtkpppmppppd"}, {letter='v', min=2, max=7, password=AsList _ "jkrmnjv"}, {letter='n', min=2, max=4, password=AsList _ "qnjhnnnnfnnk"}, {letter='n', min=2, max=3, password=AsList _ "ndvp"}, {letter='g', min=1, max=3, password=AsList _ "ggdgg"}, {letter='r', min=16, max=17, password=AsList _ "rrrrrbtrqrrrrrrvrrr"}, {letter='r', min=8, max=10, password=AsList _ "rbkprrrmvr"}, {letter='j', min=6, max=12, password=AsList _ "hqjwbjxjwjmjjqjhn"}, {letter='r', min=16, max=17, password=AsList _ "rzrrrrrkrrrrrrrvrrr"}, {letter='d', min=5, max=8, password=AsList _ "ddddldhdhd"}, {letter='g', min=9, max=20, password=AsList _ "ggggghgggggcggggglgq"}, {letter='c', min=7, max=9, password=AsList _ "rgmkcfctjpdccdwvtfcc"}, {letter='w', min=2, max=12, password=AsList _ "wwwswtswhwhbdww"}, {letter='t', min=4, max=10, password=AsList _ "ttdttttftt"}, {letter='g', min=2, max=9, password=AsList _ "svtkbzggg"}, {letter='r', min=4, max=7, password=AsList _ "rqrwrcwrqrr"}, {letter='s', min=9, max=15, password=AsList _ "dsssrzsksmswwsljbbs"}, {letter='d', min=5, max=13, password=AsList _ "dddhvdxhdrhddrd"}, {letter='s', min=11, max=19, password=AsList _ "zdssvpmlqxqjbsssckp"}, {letter='w', min=2, max=6, password=AsList _ "swcnwz"}, {letter='n', min=17, max=18, password=AsList _ "nnnnnnnnnnnsnnnnnlcn"}, {letter='t', min=6, max=7, password=AsList _ "tzzrcht"}, {letter='k', min=4, max=10, password=AsList _ "bdckkrckkzk"}, {letter='h', min=3, max=9, password=AsList _ "nrdrdvhhhh"}, {letter='s', min=1, max=4, password=AsList _ "gssss"}, {letter='h', min=3, max=15, password=AsList _ "jhhhtzmpvbhhjhck"}, {letter='g', min=3, max=5, password=AsList _ "xlgzfg"}, {letter='j', min=7, max=11, password=AsList _ "pmwflgjwjjrkl"}, {letter='j', min=6, max=18, password=AsList _ "jjjjjjjjjjjjjjjjjt"}, {letter='k', min=6, max=11, password=AsList _ "kkkkkskkkkkkvk"}, {letter='l', min=4, max=15, password=AsList _ "llllllllldlllllllll"}, {letter='w', min=5, max=6, password=AsList _ "rwtwfwg"}, {letter='x', min=1, max=11, password=AsList _ "xxxgxxxxxxx"}, {letter='v', min=2, max=7, password=AsList _ "vsgvvcvvv"}, {letter='r', min=12, max=14, password=AsList _ "rrgrrrrrprrjrrr"}, {letter='f', min=9, max=10, password=AsList _ "mclwdbqffzcsxqr"}, {letter='v', min=6, max=7, password=AsList _ "vvkvvvv"}, {letter='c', min=2, max=4, password=AsList _ "cczch"}, {letter='c', min=6, max=10, password=AsList _ "hcqccmccscccrck"}, {letter='v', min=1, max=4, password=AsList _ "vvvh"}, {letter='s', min=6, max=12, password=AsList _ "nwfjghlpqsks"}, {letter='p', min=4, max=5, password=AsList _ "hpcpt"}, {letter='d', min=6, max=11, password=AsList _ "rdbgvdggzsj"}, {letter='d', min=2, max=4, password=AsList _ "dddmdxx"}, {letter='n', min=1, max=14, password=AsList _ "gnnnsnpfnnnbvnnj"}, {letter='q', min=2, max=4, password=AsList _ "ckhqmjqqq"}, {letter='w', min=2, max=7, password=AsList _ "vwpmwnp"}, {letter='w', min=3, max=5, password=AsList _ "pnwwb"}, {letter='k', min=8, max=12, password=AsList _ "kckkkkkknkkkkkp"}, {letter='c', min=5, max=8, password=AsList _ "cccctcccccfcc"}, {letter='n', min=13, max=14, password=AsList _ "qnnnnmlnnwhnnx"}, {letter='f', min=3, max=4, password=AsList _ "qffb"}, {letter='w', min=11, max=12, password=AsList _ "rwwwwwwwwwjpw"}, {letter='b', min=6, max=11, password=AsList _ "pxgbbbcbbzbfbb"}, {letter='m', min=12, max=14, password=AsList _ "mmmmmmmmmmmvmmmmm"}, {letter='p', min=5, max=13, password=AsList _ "ppppxppppppppqpphh"}, {letter='l', min=5, max=10, password=AsList _ "llllwllllgll"}, {letter='c', min=1, max=8, password=AsList _ "ccfzcczscvjcc"}, {letter='m', min=2, max=4, password=AsList _ "cmlrm"}, {letter='j', min=4, max=7, password=AsList _ "szjkflj"}, {letter='p', min=6, max=9, password=AsList _ "cjnppqpsppppjpdbhpf"}, {letter='k', min=11, max=12, password=AsList _ "kkkjkkkkdkrkg"}, {letter='j', min=4, max=15, password=AsList _ "jjjqjjjjjjjjdxcjjjj"}, {letter='d', min=4, max=5, password=AsList _ "dddddd"}, {letter='l', min=4, max=5, password=AsList _ "hjlllqdwvl"}, {letter='r', min=12, max=14, password=AsList _ "rrmrrrrqrlrxrr"}, {letter='c', min=7, max=8, password=AsList _ "nbzxczcn"}, {letter='l', min=8, max=9, password=AsList _ "pgmlwccjlrg"}, {letter='z', min=6, max=8, password=AsList _ "zzzzzzbzzj"}, {letter='r', min=1, max=8, password=AsList _ "mrrrrrrrrrf"}, {letter='w', min=1, max=3, password=AsList _ "wwww"}, {letter='d', min=5, max=6, password=AsList _ "qldxdsdk"}, {letter='h', min=3, max=14, password=AsList _ "hfdhhhhhhhhhhshhh"}, {letter='q', min=9, max=10, password=AsList _ "lbvqvwfvnkmth"}, {letter='v', min=7, max=10, password=AsList _ "lvdvwnvvnvt"}, {letter='q', min=2, max=3, password=AsList _ "qqspq"}, {letter='m', min=10, max=13, password=AsList _ "mmmmmmmlmmmmcmmmm"}, {letter='w', min=4, max=6, password=AsList _ "wwwwwlw"}, {letter='h', min=1, max=9, password=AsList _ "jkkhqlhhd"}, {letter='x', min=6, max=8, password=AsList _ "xxxxxxxx"}, {letter='b', min=13, max=16, password=AsList _ "bbbbbbbbbbbbbbbs"}, {letter='m', min=17, max=18, password=AsList _ "lmmmspmmkmzmdmstvms"}, {letter='g', min=1, max=5, password=AsList _ "ncgnggglggrgggrh"}, {letter='t', min=2, max=6, password=AsList _ "sxjbjt"}, {letter='k', min=5, max=7, password=AsList _ "ktkkkkvk"}, {letter='k', min=7, max=8, password=AsList _ "kxkzkkkkks"}, {letter='p', min=7, max=11, password=AsList _ "jvrfhrjpspt"}, {letter='k', min=5, max=7, password=AsList _ "kkkkkkpk"}, {letter='h', min=3, max=6, password=AsList _ "qhthhhshhhxhhhh"}, {letter='l', min=1, max=6, password=AsList _ "llllzq"}, {letter='k', min=2, max=4, password=AsList _ "bhqk"}, {letter='m', min=2, max=3, password=AsList _ "tkfm"}, {letter='m', min=4, max=14, password=AsList _ "mlzmmxjjphrcmcn"}, {letter='w', min=15, max=19, password=AsList _ "wqwwwwwwwwwwwwfwwwlw"}, {letter='k', min=11, max=13, password=AsList _ "wzskknsplzkkpnkmk"}, {letter='g', min=3, max=4, password=AsList _ "gdgn"}, {letter='b', min=1, max=4, password=AsList _ "psdbbbbkntx"}, {letter='d', min=12, max=13, password=AsList _ "wdddddlddddfdd"}, {letter='d', min=4, max=5, password=AsList _ "dddjwdf"}, {letter='n', min=14, max=18, password=AsList _ "ntnsnnnnknrnnxnqnn"}, {letter='v', min=1, max=8, password=AsList _ "vvvvvvvtvvv"}, {letter='s', min=13, max=14, password=AsList _ "shwnbsssjwssss"}, {letter='g', min=3, max=6, password=AsList _ "dgglgfzzg"}, {letter='f', min=2, max=5, password=AsList _ "ffffmfff"}, {letter='t', min=8, max=15, password=AsList _ "dtxltcttwtttttt"}, {letter='z', min=9, max=14, password=AsList _ "zzzzzzzzzzzzznzz"}, {letter='w', min=6, max=10, password=AsList _ "swwwwwwwwbww"}, {letter='j', min=4, max=10, password=AsList _ "tqxwnppjxjbzrjppm"}, {letter='b', min=3, max=4, password=AsList _ "slbdt"}, {letter='d', min=3, max=7, password=AsList _ "bdsmhtr"}, {letter='z', min=10, max=19, password=AsList _ "gznrnzzzzzvkztzznzbl"}, {letter='t', min=8, max=12, password=AsList _ "whtztgtwtttt"}, {letter='r', min=3, max=9, password=AsList _ "rfccdfmnrpj"}, {letter='m', min=6, max=7, password=AsList _ "qhmmmpm"}, {letter='q', min=12, max=15, password=AsList _ "zrnwqblrdqlqjrlptg"}, {letter='c', min=6, max=10, password=AsList _ "ccccckccccccc"}, {letter='r', min=15, max=17, password=AsList _ "rrrrrrrrrrrrrrrrhr"}, {letter='g', min=3, max=11, password=AsList _ "ggggggggkgjgg"}, {letter='b', min=6, max=7, password=AsList _ "mxjzshbgsdjcwsbjchgk"}, {letter='h', min=10, max=11, password=AsList _ "hchghhhhhgh"}, {letter='d', min=4, max=6, password=AsList _ "qvdddctdd"}, {letter='b', min=2, max=5, password=AsList _ "qqpzfl"}, {letter='z', min=7, max=8, password=AsList _ "zztgzzzh"}, {letter='h', min=6, max=8, password=AsList _ "zmschbhh"}, {letter='b', min=7, max=15, password=AsList _ "wbbbjpbcbjbbrshp"}, {letter='n', min=1, max=10, password=AsList _ "ccnnznfnjd"}, {letter='s', min=7, max=8, password=AsList _ "snjqvsss"}, {letter='d', min=8, max=16, password=AsList _ "ddddddddddkddddcddd"}, {letter='t', min=8, max=17, password=AsList _ "tjtrttlttrtptctjr"}, {letter='d', min=5, max=7, password=AsList _ "ddddkddd"}, {letter='k', min=5, max=6, password=AsList _ "kkgkks"}, {letter='c', min=6, max=14, password=AsList _ "szcskczcftcctk"}, {letter='b', min=2, max=3, password=AsList _ "zblpbt"}, {letter='f', min=12, max=13, password=AsList _ "grpkpffxfftsf"}, {letter='s', min=6, max=14, password=AsList _ "sssssssssssssws"}, {letter='t', min=13, max=16, password=AsList _ "ttmmfcthmtcmttpn"}, {letter='h', min=1, max=4, password=AsList _ "zrhhs"}, {letter='k', min=2, max=3, password=AsList _ "krgk"}, {letter='l', min=3, max=4, password=AsList _ "lllv"}, {letter='z', min=8, max=9, password=AsList _ "zdbzzzzrzzz"}, {letter='g', min=7, max=8, password=AsList _ "njlrzggqjgg"}, {letter='c', min=4, max=5, password=AsList _ "dpcqc"}, {letter='n', min=4, max=6, password=AsList _ "nnnhnnn"}, {letter='l', min=3, max=4, password=AsList _ "lllq"}, {letter='v', min=5, max=7, password=AsList _ "jbvvvphvwnhkmjrbhcsn"}, {letter='d', min=12, max=14, password=AsList _ "kvbwfkjzdcpcjd"}, {letter='h', min=9, max=12, password=AsList _ "hrhhhhhhxhhhhhh"}, {letter='f', min=5, max=7, password=AsList _ "tffvfngffkhfff"}, {letter='v', min=2, max=7, password=AsList _ "vvvvvvhvvvvvvvvv"}, {letter='v', min=7, max=9, password=AsList _ "rcdhfnlhmwsgrzqz"}, {letter='j', min=9, max=11, password=AsList _ "pfgzjbrbmjj"}, {letter='j', min=6, max=7, password=AsList _ "ldxbbjnrjj"}, {letter='d', min=8, max=14, password=AsList _ "kdddsdqdvddqcckr"}, {letter='l', min=3, max=12, password=AsList _ "fxknndgbgdllkpzx"}, {letter='f', min=2, max=9, password=AsList _ "xffbmfnfffpqf"}, {letter='t', min=9, max=12, password=AsList _ "lttzwtgtktttkjct"}, {letter='s', min=2, max=11, password=AsList _ "zsxrcxtqwmv"}, {letter='s', min=5, max=8, password=AsList _ "ssdsspscsb"}, {letter='r', min=4, max=13, password=AsList _ "shdxtlrmzqlrrwtdnpwx"}, {letter='j', min=12, max=14, password=AsList _ "jjjlzzcvjjjvjjz"}, {letter='s', min=2, max=4, password=AsList _ "ssvsc"}, {letter='q', min=4, max=6, password=AsList _ "qkqkqqqqkq"}, {letter='z', min=9, max=11, password=AsList _ "czzmzwzbbhz"}, {letter='x', min=11, max=12, password=AsList _ "xxxxxxlxxxxpxxx"}, {letter='x', min=7, max=13, password=AsList _ "xxxxhxxxxxxxxxx"}, {letter='g', min=2, max=4, password=AsList _ "wggq"}, {letter='v', min=2, max=6, password=AsList _ "zvxpnqvqwpmbfwnrl"}, {letter='m', min=5, max=6, password=AsList _ "mmmmmc"}, {letter='v', min=1, max=4, password=AsList _ "vvccm"}, {letter='n', min=14, max=16, password=AsList _ "nngdnnnnnntxnwnn"}, {letter='q', min=6, max=14, password=AsList _ "qfdqszrcvfwcqj"}, {letter='z', min=13, max=14, password=AsList _ "zznzzszzzzzzdfz"}, {letter='p', min=2, max=4, password=AsList _ "cppp"}, {letter='q', min=3, max=7, password=AsList _ "qftqqdvh"}, {letter='t', min=4, max=6, password=AsList _ "rrqsftttxs"}, {letter='z', min=1, max=2, password=AsList _ "zzlzsz"}, {letter='g', min=3, max=4, password=AsList _ "vsbg"}, {letter='j', min=5, max=6, password=AsList _ "tzljjh"}, {letter='v', min=1, max=2, password=AsList _ "vptfbrwgvztwp"}, {letter='w', min=2, max=6, password=AsList _ "hqtnzw"}, {letter='f', min=8, max=9, password=AsList _ "ffdffhcxf"}, {letter='d', min=1, max=2, password=AsList _ "dbddddd"}, {letter='f', min=12, max=14, password=AsList _ "fffffffffsfffpff"}, {letter='t', min=12, max=13, password=AsList _ "ftwtgttttxxtbtwttt"}, {letter='k', min=6, max=8, password=AsList _ "qvpkkmkkk"}, {letter='b', min=2, max=9, password=AsList _ "tvjntzdbgmdbbbljwbmb"}, {letter='v', min=1, max=4, password=AsList _ "vfvvvc"}, {letter='v', min=8, max=12, password=AsList _ "vvvvvvvvvvvbv"}, {letter='n', min=2, max=4, password=AsList _ "wncnxnmch"}, {letter='t', min=10, max=12, password=AsList _ "tttqxrtttttvjrc"}, {letter='f', min=11, max=14, password=AsList _ "fffffffffffffpf"}, {letter='h', min=16, max=20, password=AsList _ "hhhjthhhtphchpkhmhhh"}, {letter='m', min=4, max=5, password=AsList _ "zzmml"}, {letter='c', min=6, max=7, password=AsList _ "ccccdcnclkccccck"}, {letter='c', min=15, max=17, password=AsList _ "sxzcbfcntlgccwckcd"}, {letter='t', min=9, max=17, password=AsList _ "mkfttrtvtwdsxxttf"}, {letter='t', min=2, max=3, password=AsList _ "dtzt"}, {letter='z', min=4, max=5, password=AsList _ "zzzbz"}, {letter='f', min=12, max=17, password=AsList _ "zcfftrnfwvfhnvfffsdf"}, {letter='f', min=7, max=16, password=AsList _ "ffdfxxtwffvdffjff"}, {letter='r', min=3, max=5, password=AsList _ "rrxrr"}, {letter='b', min=13, max=14, password=AsList _ "kbwbbbvbbmbwbb"}, {letter='f', min=10, max=15, password=AsList _ "zflnbhfqmhfsqnf"}, {letter='p', min=3, max=5, password=AsList _ "fwpptwzppkbhp"}, {letter='k', min=13, max=14, password=AsList _ "kkkkkkkkbkkkjkk"}, {letter='b', min=7, max=11, password=AsList _ "hqdbtbbhpht"}, {letter='f', min=1, max=6, password=AsList _ "tffffff"}, {letter='d', min=1, max=2, password=AsList _ "bddsrd"}, {letter='m', min=13, max=18, password=AsList _ "mmmmmmmmmmmmxmmmmlmm"}, {letter='x', min=3, max=4, password=AsList _ "xxkx"}, {letter='z', min=4, max=13, password=AsList _ "hzmwzszzzzlhzzxknb"}, {letter='h', min=10, max=15, password=AsList _ "hhhhhchhhbhbhhhhhk"}, {letter='h', min=3, max=4, password=AsList _ "vhhhb"}, {letter='z', min=10, max=11, password=AsList _ "zxwzzzzzllvzzzzmz"}, {letter='h', min=7, max=10, password=AsList _ "phdkrrhkmhh"}, {letter='j', min=2, max=11, password=AsList _ "jjjjjjjjjjtzjjjjg"}, {letter='g', min=3, max=4, password=AsList _ "gxfgggg"}, {letter='f', min=1, max=3, password=AsList _ "fwtdf"}, {letter='d', min=8, max=9, password=AsList _ "bjqxpvzdddx"}, {letter='c', min=7, max=15, password=AsList _ "vcccccccccccccccc"}, {letter='n', min=1, max=7, password=AsList _ "tvnpzhn"}, {letter='v', min=1, max=2, password=AsList _ "ktvv"}, {letter='g', min=2, max=3, password=AsList _ "gpggg"}, {letter='d', min=7, max=13, password=AsList _ "fddcdfgvbmpdd"}, {letter='s', min=4, max=5, password=AsList _ "rsssw"}, {letter='c', min=2, max=14, password=AsList _ "jckbwnnlkcmvnwtj"}]
'#### Record & length erased lists
We used `{letter='p', min=2, max=4, password=AsList _ "vpkpp"}`
to represent a rule + password.
The `{a=1, b=2}` gives us a record type.
`"abc"` in dex would become a `['a', 'b', 'c']` which is a fixed length table (array) with the length stored in the type)
in particular it would be a `Fin 4=>Char`.
But the password all have different lengths.
And dex requires tables to have homogeneous types.
So we use `AsList n x` to convert a table `x` of length `n` into a `List`.
And we can avoid passing in the `n` and pass in `_` which will make type inference work it out.
We will do the ame thing in reverse to use pattern matching to give us back an table to work with.
def countUses (d:Eq a) ?=> (needle:a) (haystack:n=>a) : Int =
fold 0 \x net. net + (BToI (haystack.x==needle))
:p countUses 'a' "abcaba"
dat = {letter='p', min=2, max=4, password=AsList _ "vpkpp"}
-- Lens accessor
:p getAt #letter dat
-- Patter Matching, both to destructure the record and to get a normal table out of the list
{letter=letter, min=imin, max=imax , password=(AsList _ password_str)} = dat
:p letter
:p password_str
uses = countUses letter password_str
:p imin < uses && uses < imax
:t dat
def followsRule (dat:{letter: Char & max: Int32 & min: Int32 & password: List Char}):Bool =
{letter=letter, min=imin, max=imax , password=(AsList _ password_str)} = dat
uses = countUses letter password_str
imin <= uses && uses <= imax
:p sum for i. BToI $ followsRule rules.i
'## Part 2
Actually what we need to check is the given letter occurs in either (but not both) in the `min` and in the `max` position.
Those record names not seem wrong but i am not going to regenerate the records.
What a twist
def hasLetterAtPos (password_str:n=>Char) (letter:Char) (pos:Int): Bool =
inbounds = pos <= size n
case inbounds of
False -> False
True -> (password_str.((pos-1)@_) == letter)
:p hasLetterAtPos "axb" 'x' 2
:p hasLetterAtPos "axb" 'y' 3
:p hasLetterAtPos "axb" 'x' 5
:p hasLetterAtPos "ccccccccc" 'c' 9
def xor (a:Bool) (b:Bool) : Bool =
(a && not b) || (not a && b)
:p xor False True
:p xor True True
:p xor False False
:p xor True False
def followsNewRule (dat:{letter: Char & max: Int32 & min: Int32 & password: List Char}):Bool =
{letter=letter, min=pos1, max=pos2 , password=(AsList _ password_str)} = dat
check = hasLetterAtPos password_str letter
(check pos1) `xor` (check pos2)
:p followsNewRule dat
:p followsNewRule {letter='a', min=1, max=3, password=AsList _ "abcde"}
:p followsNewRule{letter='b', min=1, max=3, password=AsList _ "cdefg"}
:p followsNewRule{letter='c', min=2, max=9, password=AsList _ "ccccccccc"}
:p sum for i. BToI $ followsNewRule rules.i
'# Advent of Code 2020. Day 3
DexLang, [Lyndon White](http://oxinabox.net)
This needs [my branch](https://github.com/google-research/dex-lang/pull/306) of Dex that has Char equality support.
https://adventofcode.com/2020/day/3
Today's solution doesn't feel great as I don't feel like i am taking proper advantage of index types.
Since I mostly work with them by converting to ordinal.
But I do't think there is structs yet for wrap-aroud or stepped indexing.
' I had some trouble with the `.`. and `#` in the web notebook view (though not actual repl) so swapped to `o` and `x`
geo_char = ["oooooooooooooooxoxooooooooooooo", "xxooxooooooooooooooooooooxoooxx", "ooooooxooxoxoooooxooxoxoxxooooo", "oooooooooxoooxooooooooooooooxox", "ooooooooooooxoooooooxxooooooooo", "oooxoooooxoooooxoooxoooooxooxoo", "ooooooooooooooxooxxoxooxoooooox", "oxxoooooxoooooxooooooxxoxoooooo", "oxooooooooooxxxooooxoooxxooooxo", "oooooxooooxoxoooooooxooooooxxoo", "oxooooxooooooxoooooooxoooooooox", "ooxoxoooooooxooxxoooooxxooooooo", "oooxoxooooxoooooooxoooooooxooox", "xxoxxoooxxooxooooooxoxoooooxoox", "oxoxoooooooxooxoxooooooxoooxoxo", "xoooooooxxoooooooxoooxooooooooo", "oooooxooooooxoxoxoooooxooooxxoo", "oxoxooooooooxooooxooxooxooooooo", "oooxooooxooxxxoooooooooxoooooxo", "ooooooooxooooooooxooooooooxoooo", "ooxxooooooooooooooxoooooxoxooxo", "oxoooxxoooooooooooooxoxoooooooo", "ooooxooxoooooooooooxoooooooxooo", "ooxooooxoooooooooooooooooooooxo", "xoxooooooooooooooooooxxooooooxx", "oxoxxooooxooooooxooooooooxooooo", "oooooooooxxoooooxooooxoooxxooxo", "xooooooooooxooxoxooooooooooooox", "oooooooooxoooxoxoxoxooxxooxxooo", "xoooxoooooxooxooxooooxoooxooooo", "ooxxoooooxooooooooooooooooooxoo", "xooxxxoooooxooooxoooooooxooxooo", "oooxxoxxooxooooooooooooxoooooox", "ooooooooxxxoooooooooxxxooooooxo", "xooxxooooxoooooooooxoooooooooxo", "ooooxoooooooooooooooooooooxoooo", "xooxooxxooxooxxxxoxxooxoooooxxo", "ooxoooxoxooooxooooxxoooooxooooo", "oooxoxoooooooooxoooooxoxooooooo", "ooooxooooooooooooooooxooxoooxxo", "ooooxooxooooooooooxoooxoxoxxooo", "ooooooooxooxxooooooooooooxoooox", "oooxooooooxxooooooooooxoxxoooxo", "oooooooxxoooooooooooooooooooooo", "oooooooxxooooooooooxooooxoxooox", "ooooooxxxoxxooxxooxooooxoooxoox", "xoxoooooooooooxxoooooxoooooooox", "ooxoooooooooooxooxxxooooxoxoxoo", "ooooooooxoooooooooooxooooooxxoo", "oooooooooxoooxxoxxxoooxxxooxooo", "oooooxoooooxooxxoooooooooxxoooo", "oooxxooooooooooooooxoooooxoooxx", "oxxooooxoooooooxxxoooooxooooooo", "oxoooooooooooxxoooooooooooooxxo", "ooooooxooxooxxoxxooooooxoooooox", "ooooooooxxxooooooooxooooooxoxoo", "xoxooooxoooooxooooooooxooooooxo", "oxxooxoooooooooxxoooxxooooxoooo", "oooooxoooooooooxoooxxoooooxoooo", "oooooooooooooxooooooooxxxooooxo", "ooooooxoooooooxoxooooooooxoxooo", "ooxooooxoxoooxooooxoooxoxoooxxo", "xoooxooooooxxooxxooooooxoxxoxxx", "oooxxoxooooxoooxooooxooooooooox", "oooxooxxxxoooooxxoxooxoxoooxxoo", "xxoxooxooooxxooooooxooooooxxooo", "xxxoooooooooxoxooxoxoooooxooooo", "oooxooooooooxooxxoooxoxoxooxoxo", "oooxxxooxoxxxoxoooxoooooooooooo", "ooooooooooooooooooooxxxoooooooo", "oooooooooooxoooooooooooxooooooo", "xooooooooooooooxoxoooooooooxxxo", "ooooooooooooooooooooxxoooooxoox", "xoxoooooxoooooooxoooxoooooooooo", "oxoooxooooooxooooxxoooxoooxoooo", "oooooxoxxooooooooooooooooooxxxo", "oooooooooxoxooxoxooooooxooooooo", "oooooooxoooooxxooxoxxoxoooooooo", "ooxooooooooooxoxxxoooooxooooxoo", "ooooooxoooooooooooooxoxoooooooo", "ooooooooxxooooxooooooooxooooooo", "oooxoooooooooooooxooooxoxoooooo", "xooooooooxooxxxxoooooxoooooxoxo", "oxxooooooxxoooxooooooooxooxoxoo", "ooooxxooooxoooxoooxooxxoooxoxoo", "xoxxoooxxxooxooooxxoxoooooooooo", "ooooxoxoooxoxoooxooxxoxxxoooxoo", "xoooooxxooxooxooooxoxoooooxxooo", "oxooxooooooooooxxoxoooooxxooooo", "oxooxooooooooxoxoxoxooooooooooo", "oxooxoooooxoooooooooooxoooxoooo", "oooxooooooxxooooooooooxxooxoooo", "oooxooxooooxoxxoooxooxoooooxxxo", "xoxooooxoooooxxoooooooooooooooo", "xooxooooooxoxoxoooooooxoooooooo", "ooooooxooooxoxooooxooxxooooxoox", "oxoooooxoxooooxxxoxxoooooooooxo", "oxxxooxoooooxooooooooxoxooooooo", "oxoooxooooooxooxoxooooooxooooox", "xoooooooooooooooxxxxoooxoooooxo", "oooooooxooooooooooxxoxoooooooox", "xooooooooxxooooxxoooooxxxooxxoo", "xooxoooooxooxxoooooxooooxooxooo", "xoooooxoooooooxxooooooxoxooooox", "xoxxooxooooooxxooxooooooooooooo", "xxoooxoooooxooooooooxxooooooooo", "ooooxooxxooooxoooxoooooooxoxooo", "ooooxoooxoooxxooxooooxooxoooxoo", "ooooooooooooooxoxoooxooooxxxooo", "oooxooooxooxxoooxxooxooooxxoooo", "xoxxoxooxooxooooooxoxoxoxoooxoo", "oooooooxooxooxxooooooooxoooooox", "xxoxooooxooooxxoxooooooxxoxoooo", "oxoooxooooooooooooooxooooooooxo", "oxoxooooxoooooooooxoooooooooooo", "oxooxooxxxoooooooooooooxooooxoo", "xooooooxoooxoxooxxooxoooxooooxo", "oooooooooooooooooooooooxoooxoxo", "oooooooooooooxooxoooxxooooooooo", "ooxoxooxooooxooooxooooooooxoooo", "xooooooxoxxooxoooxoxooooooooooo", "oooooxooooxoooooooooooxxoxooxoo", "ooxoxoooooxooooooooooooooxoxooo", "xoooooooxoooooxoooooooooooooooo", "xooooooooooooooxoooxooooxoooxoo", "oooxoooxxooxooxooooooooooooxooo", "ooooooxxxooooooooooooooooooooox", "oooooooooxoooooooxxooxooooxoooo", "ooooooooxoooxoxxooxoxxooooooxoo", "ooooxxxooxoxoooxoooxooxoxoooxxx", "xxoooxoooxxoxoooxoxoooxoxooooxo", "oooooooooxoooxoooooxxxooooooooo", "oooxooooooooxxooxoooooooxxooooo", "oxoooooooxxoooooooooxoooooxxoox", "oxooooooooooooooooooxoooxoooooo", "oxxooxooxoxoooooxoxxxoooooooooo", "oooxoooooxxooxoooooooooxoooxooo", "oxooooooxoxoooooooxoxoooooooooo", "oooooooooxoxoooxooooooooooxoxoo", "xooooooooooxoxxooxoxxooooxooooo", "oxoxooooxoooooxooxxoooooxoooxoo", "ooxooooooooxxoooxxooxooxooooxoo", "xoooooooooooxxooooxooxxxooooxoo", "oooooooooooxxoooooooooxxxxoooxo", "ooxooooooooxxxoooxoxoooooooooxo", "oxoooooooooooooooxoxxoxoxoooxoo", "oxoxxooxoooooxoxoooooxxooxooooo", "oooxoooxooxoxxoxxoooxoooooooxxo", "ooxoooxoooxooooooxxoxxoxxoooxoo", "xxooooxoooxoooxooooooooooooooox", "oooxxoooooooooooxooooooxooxoxoo", "xoooooooooxooooooxoxoxxoooooxoo", "ooooooooxooxoooooooooxxoooooooo", "ooxoxooooxxxoooooxxooxoooxooooo", "oooooooooxoooxoooooooxoooooxxoo", "xxoooooooooooooooooooooxoooxxoo", "oxoxooxooooooxooooooooooooooooo", "oooooxxxooxooooooxooxxxooxooooo", "oooxoooooxxoooooooooxooooooxoox", "ooooooxxoooooxoooxooooooooxoxoo", "ooxoxoooxooooooxoooxoxxoxxooooo", "oooxooooooooooxoooxoooooooxooxx", "oxxxooooooooxooooooooxxoooooooo", "ooxoxoxooooooooooxoxoooxxoooooo", "oooooooooxooooooooxooooooxxxoox", "ooooxxooxoooooooooxooooooooooox", "ooxxxxooxooooooooooooxxooooooox", "oooooxxoxooxxoooooooooxoooxoxoo", "oooxoooooooooxoooooxoooooxooooo", "oooooooxoooxooxoooxxoooooooooxo", "oooxoooxooxoooxooooxooxoooooooo", "xooooooooooooxxoxxoooxooooooooo", "oxoxoooooxoooooooxxxxoooooxoooo", "ooooooooooooooxooooooxoxooooooo", "ooooooooooooooxoooooooooooxooox", "xoooxooooooooxxxooooxoxooooxoxo", "xxoxooxooxooooooxooooooxoxoxooo", "oxooxoooooxooxoxooxoxoooooooxxo", "ooooooxxoxoooxoooxooooooxoooxoo", "xoooooooooooxxooooxoxoooooooooo", "ooooxoooooooxxxoxoooxoooooooooo", "oooooooooooooooooooooooxoooooxo", "ooooooooxoooxooxoooxoxoxoxoxooo", "oxoxoooooooooooxooooooxxoooxooo", "oooooooooooooooooooooooooxooooo", "oooooooooooooooooxoxxoxoooxxooo", "oooxoooxxoooooxoooooxxooooxoxoo", "oooxoooxoooooooooooooooooooxooo", "oooxooxooxoooxoooxooooxoooooooo", "xooooxoooxoooooxooooooooooooooo", "oooooooxoooooooooooxoooxooooooo", "ooooxooooxoooooxxoooooooxoooooo", "oooooooxooooooooooxxooooooooooo", "oxoxooooooooxooxxooooxooooooxoo", "oooooxoooooooxoxoooooooooxoooxo", "oxooxxxxoxoxoooooooooooooooxoox", "oooooxxxooxooxooooooooooxoxooxx", "ooxoooooooxoooxoooooxxooxooxoxo", "xooooxooooooxoooooooooooooooooo", "ooooooooxoxxoxooooxooooooooooox", "ooooxoxooooxxooxoxoooooxxoooooo", "oooxooxoooooooxooooxoooooxoxoxo", "xoooxooooooxoooooxoxoooooooooox", "ooooxooooxoooooooooooooooxooooo", "ooxxxooooooooooooooooooooooxxxo", "oxxooooxooxoooooooxxxoooooxooxo", "ooxxxooooooooooooxooooooooxoxxo", "oxooooooooxooooooxoooooxooxoooo", "ooooxooxxoooxoooxoxxxoooooooxox", "oooooooxoxxoooooooooooxoxooxooo", "oooooxoooxxoooooooooooooooooooo", "ooooxooooxoooxxooooooxooooooooo", "ooxooooooooooooxxooooxxxoxoooxo", "oxooooooooxoooooooooooooooxoooo", "xooxoxoxxoooooooooxooxxooooxxoo", "xoxooooxooxoxxooooxxoooxoxooooo", "oooooxoooooxxooooxoxooooooooxoo", "xooxoooxoooxooooxooooxooooooooo", "oooxooooooooxooxoxoooooxxoooooo", "ooxoooxoooxooooooooooooooooxxoo", "xooooooooxoxoxxoooooooxoxoooxoo", "xooooooxooxxxxoxxoooooxoxooxoxo", "ooooooooooooxooxoxooooxooooooxx", "ooxoooooxxooooxoooxoxoooooooooo", "oooxoooxoooooooooxoooxoxooooooo", "oxxxooxoooooooxxoxxoooooxoxoxoo", "oooxooooxoooooooooooooooxxoxooo", "ooooxxooxooxooxoxooooooxxooooox", "xoxooooooooooooooxxoooxxoooxxxx", "oooooxoxxoooxoxooooooooooooooox", "oxxoooooxoooooooooxoooooooxoxox", "xoxooxoooooxoooooooxoooooooxoox", "oooxoxoooooxoooooxooooooxoooooo", "oooooooxooooxooxoxooooooooooxoo", "ooooooxooooooxoxxoooxoooooooooo", "oooooxoooooooxxxoooxoooxoxooooo", "xooxoxoooooooooxoooooxoxxooooxo", "ooxoxoooooooooxooxooxooxoooooxo", "oxooxxooxooxooooxooooooxoxxooxo", "oooxxooooooxxxoooooxoxxoxxooooo", "oxoooooxoooxooxoooxoooooooooooo", "xxooxxooxoxxooooxooxooooooooooo", "oooxooxxooxooxoooooooooooooxoxx", "oooooooooooooooxxooooooooooooxo", "ooxoooooxxooooooooxxoxoooxoooox", "oxoxoooxoxoxooxoxoooooxooooxooo", "oxooooxoooooooooooooooxooxooooo", "ooooxoxxooxooooxooooooxoooxxxoo", "xooooooooooooooooxxxoooxoxooooo", "oooxoooxooooooxxooxoxooooxooooo", "oxooooxooooxoxoooxxoooooooooooo", "ooooxoooxxooxooxooooooooxoxxooo", "ooxxoooooxooxooxxoooooooooooooo", "ooxooxxooxoxooxxooooxooooxoooox", "oooxxoooooooooooooxoooooooooooo", "xooooxooooxoxooooooooxoooooxxox", "oooooxooxoxoooooxxxxoooxxxooooo", "ooooooooooooooooxooooooxooooooo", "oooooxoxoxoxoxooooxooxoooooooox", "oxxoxoooxoxoooooooxxooooxooooxo", "oooooxooooooooxoooooooooooooooo", "ooxoooooxooxoooxooxooooooooooox", "oxoooooxoooxxoooooxxooxoxooooxx", "ooooooxoooooooxooxooooooxxoxooo", "xoxooooooooooxoxxoxooooooooxooo", "oooxooxoooooooooooooxoooooooooo", "xooxooxooooooooooxooxxoxooooooo", "oxooxoooooooooooooooxxxxooxoooo", "oooooooxoooooxooooooxoooooxoxoo", "oxoooooooooooooooxoooxooooooooo", "oxooxooooooooooxooxoxooxxooxoox", "ooooooxxooxoooooxooxooooooxxxoo", "ooooooooooxoooxooxoooooooxooooo", "oxoxoxooxoooooxoxxoxoooxooxoooo", "ooooooooxoooooooxoooooxoxoooooo", "ooooooxoooooxxoooooxooooxxoxooo", "oooooooooooooooxooooooxooooooox", "ooxoxoooxoooooxoxoooxxooooooxoo", "xoxoooooooooxoxoooxooooooooxxxx", "xooooooooooxxooxooxooooooooxxoo", "oooooooooooooxooxoooooooxxoxoox", "ooxooooooooxoxooooxooooooooxoxo", "oxooooooxxxxooxooxooooooooooooo", "ooooooooooooxxxoooooooxoxooxooo", "xoxxooooooxxoooxoooxoooooooooxo", "ooooxxoxoxoxooooooxooooxooxooox", "oxooxoxooooxoooxoooooooooxooooo", "xoooxoooooxxooooooooooooxoooxoo", "xoxoooxooxoooooooooooooooooxooo", "ooooooooooooxoxooxoooooxoxoxoox", "oooooooooooooooooooxooooxoxxooo", "oooooxoooxoxooooxooooxoxoooooox", "oooooooxxoxoxooooooxxoooooooooo", "oxooxoooxxoxoooxooxooooooxooooo", "ooooooxoxooxooxxxooxxooxxoooooo", "oxoxoxoxoooooxoooxxxoooooxooxoo", "oxooooxoooooxoooooooxoooooooxoo", "ooooooooooxxoooooooooxxxxoooooo", "oxoxoooooooooooooxooxoxoooxoooo", "ooooooooxooooooooxxoooxoxooooxo", "ooooooooxoooooooooooooooooooooo", "ooxoxooooxoooooooooooooooxoooxx", "oooooooxoxoooxooxoooooxxoooooox", "oxoooxooooxooooooooooxxoooooooo", "oxoooooooooxoxooooooooooooxxooo", "oooooxooooooxxoooxoooooooxooxoo", "xoxooxoooooooooooooxoooxoooxooo", "ooooooxoooooooxooooooooooooxooo", "oooooooooooxxooooxooooooxxooooo", "oxoxooxoooooooooooooooooooooxoo", "xxooxxoooooxxxooxxoxooooooooooo", "oooxxooooooxxooooxoooxxoooooxoo", "xoooxoxxoooooooooooooxooooooooo", "ooooooxooxoooooooooxxxoxoooooox", "xoxoooooxooooooooooooooooooooox", "ooooxxxxxoooooxxooooooooxoxooxo", "oooooooooooxxooxxoxxxoooooooooo", "ooooooooooxxoooooxooooooooxooox", "oooooooxooxooooooxoooooxxooxxox", "oooooxxoxooooooooxoooooooooxooo", "ooooooxxoooooooooooooooooooooox", "oxoooooooxoxoxooooooooooooxooxo", "oooooxxoxoooooooxoxooooooooxooo"]
geo = for i. for j. geo_char.i.j=='x'
'## Part 1
Moving Right 3 and Down 1, how many trues encountered?
geo loops at end of row
def countTrees1 (geo:n=>m=>Bool) : Int =
sum for i.
i_ord = ordinal i
j_ord = mod (3*i_ord) (size m)
j = j_ord@m
BToI geo.i.j
:p countTrees1 geo
'## Part 2
def countTrees (geo:n=>m=>Bool) (down:Int) (right:Int) : Int64 =
sum for i.
i_ord = ordinal i
keep = (i_ord `mod` down) == 0
j_ord = mod (right*(i_ord `idiv` down)) (size m)
j = j_ord@m
IToI64 $ BToI $ select keep geo.i.j False
:p countTrees geo 1 3
ctg1 = countTrees geo 1
:p ctg1 1
:p ctg1 3
:p ctg1 5
:p ctg1 7
:p countTrees geo 2 1
:p (prod $ map ctg1 [1, 3, 5, 7]) * (countTrees geo 2 1)
' This one was fiddly and an messed it up a few times so this code tells me which positions are being checked
def posCheck (geo:n=>m=>Bool) (down:Int) (right:Int) : n=>(Maybe (Int&Int&Bool)) =
for i.
i_ord = ordinal i
keep = (i_ord `mod` down) == 0
j_ord = mod (right*(i_ord `idiv` down)) (size m)
j = j_ord@m
select keep (Just (i_ord+1, j_ord+1, geo.i.j)) Nothing
:p posCheck geo 2 1
'# Advent of Code 2020. Day 4
DexLang, [Lyndon White](http://oxinabox.net)
This was challenging given lack of any functions beyoud character equality for working with strings.
No substring, let along regex or a parse function.
This code is sloooow, dex makes my computer go brrrrrrr
https://adventofcode.com/2020/day/4
-- copied from the plotting branch
def str (n:Int) ?-> (s:(Fin n=>Char)) : String = AsList _ s
batch = [str "ecl:gry pid:860033327 eyr:2020 hcl:#fffffd\nbyr:1937 iyr:2017 cid:147 hgt:183cm", str "iyr:2013 ecl:amb cid:350 eyr:2023 pid:028048884\nhcl:#cfa07d byr:1929", str "hcl:#ae17e1 iyr:2013\neyr:2024\necl:brn pid:760753108 byr:1931\nhgt:179cm", str "hcl:#cfa07d eyr:2025 pid:166559648\niyr:2011 ecl:brn hgt:59i"]
' This is not the fastest method of checking if one string contains another. But it is the easiest to write.
def contains (eqA: Eq a) ?=> (needle:n=>a) (haystack:m=>a) : Bool =
any for i:m.
nottoolong = (ordinal i) < (size m - size n + 1)
(all for j:n.
hj_true = ((ordinal i) + (ordinal j))
hj = select nottoolong hj_true 0
select nottoolong (haystack.(hj@_) == needle.j) False)
:p contains "xb" "xbc"
:p contains "xbz" "xbcs"
:p contains "xbc" "xbc"
:p contains "xbcd" "xbc"
def containsL (eqA: Eq a) ?=> (needle:n=>a) (haystackL:List a) : Bool =
(AsList _ haystackT) = haystackL
contains needle haystackT
:p containsL "ecl:" batch.(1@_)
def isValid (passport:String) : Bool =
required_fields = ["byr", "iyr", "eyr", "hgt", "hcl", "ecl", "pid"]
all for i. containsL required_fields.i passport
:p isValid batch.(0@_)
:p isValid batch.(1@_)
:p isValid batch.(2@_)
:p isValid batch.(3@_)
full_batch = [str "ecl:hzl byr:1926 iyr:2010\npid:221225902 cid:61 hgt:186cm eyr:2021 hcl:H7d3b0c\n", str "hcl:Hefcc98 hgt:178 pid:433543520\neyr:2020 byr:1926\necl:blu cid:92\niyr:2010\n", str "iyr:2018\neyr:2026\nbyr:1946 ecl:brn\nhcl:Hb6652a hgt:158cm\npid:822320101\n", str "iyr:2010\nhgt:138 ecl:grn pid:21019503 eyr:1937 byr:2008 hcl:z\n", str "byr:2018 hcl:z eyr:1990 ecl:Hd06796 iyr:2019\nhgt:176in cid:75 pid:153cm\n", str "byr:1994\nhcl:Hceb3a1 hgt:176cm cid:80 pid:665071929 eyr:2024 iyr:2020 ecl:grn\n", str "cid:280 byr:1955 ecl:blu hgt:155cm hcl:H733820\neyr:2013 iyr:2011 pid:2346820632\n", str "hcl:H4a5917 hgt:61cm\npid:4772651050\niyr:2026 ecl:brn byr:2015 eyr:2026\n", str "iyr:2019 hcl:Ha97842 hgt:182cm eyr:2024 ecl:gry pid:917294399 byr:1974\n", str "ecl:H9c635c pid:830491851 hgt:175cm cid:141\niyr:2010\nhcl:z\nbyr:2026 eyr:1998\n", str "byr:1927 iyr:2011 pid:055176954 ecl:gry hcl:H7d3b0c eyr:2025 hgt:166cm\n", str "hcl:H733820 byr:2008 ecl:utc eyr:1920 pid:159cm hgt:66cm iyr:2030\n", str "pid:027609878\neyr:2022 iyr:2012\nbyr:1960 hgt:157cm\nhcl:Hb6652a\ncid:117\necl:grn\n", str "iyr:2025 pid:7190749793 ecl:grn byr:1984 hgt:71in hcl:c41681\ncid:259 eyr:1928\n", str "eyr:2029 pid:141655389 cid:52 hcl:Hcfa07d iyr:2019\necl:blu hgt:69in byr:1938\n", str "eyr:2020 hgt:166cm\necl:gry\npid:611660309 iyr:2011\nhcl:H623a2f byr:1943\n", str "hgt:190cm eyr:2022 byr:2000 cid:210 pid:728418346 hcl:Ha97842 ecl:xry iyr:2015\n", str "byr:1973 eyr:2028 iyr:2012\nhcl:Hff0ec8 pid:740554599 ecl:amb cid:58 hgt:155cm\n", str "iyr:2016 pid:922938570 ecl:oth hcl:Hfffffd hgt:154cm eyr:2021 byr:1966\n", str "ecl:amb\nbyr:1929\nhcl:Hc3bbea pid:511876219\niyr:2019\nhgt:191cm\neyr:2026\n", str "ecl:utc hgt:155cm pid:H9f0a41 iyr:2012 hcl:Hbd4141\nbyr:1998 eyr:2020\n", str "ecl:grn hgt:173cm cid:321 pid:851120816 byr:1968 hcl:Ha97842 eyr:2027\niyr:2014\n", str "hgt:155cm hcl:Hf40d77 pid:038224056 byr:1953 ecl:brn iyr:2014\neyr:2022\n", str "pid:181869721\niyr:2011 hgt:151cm hcl:H733820 cid:110 ecl:blu\nbyr:1931 eyr:2024\n", str "byr:1948\nhcl:H888785\nhgt:74in\ncid:112 ecl:hzl pid:921761213 eyr:2028\niyr:2015\n", str "ecl:gry\nbyr:1931\npid:600127430 hcl:H341e13 eyr:2027\niyr:2013 hgt:173cm\n", str "hgt:178cm pid:530791289 hcl:H6b5442\neyr:2022 byr:1979 iyr:2014 ecl:hzl\n", str "pid:412193170 hcl:Hcfa07d hgt:186cm iyr:2012 cid:284 eyr:2020 byr:1967\necl:grn\n", str "hcl:H6b5442\niyr:2015 pid:808448466 ecl:blu eyr:2022 hgt:159cm byr:1969\n", str "eyr:2020\niyr:2019 hgt:170cm pid:8964201562 hcl:H6b5442 byr:1947 ecl:amb\n", str "eyr:2029 ecl:hzl hcl:H866857 byr:1961\niyr:2017\n", str "ecl:H3456ba eyr:2013 iyr:2020 pid:378280953\nhcl:z hgt:174cm\n", str "hgt:172cm\ncid:202 ecl:oth eyr:2021 byr:1980\niyr:2012\nhcl:Hcfa07d pid:605707698\n", str "cid:281 hgt:161cm iyr:2017 pid:122936432 hcl:H602927 byr:1981 ecl:gry eyr:2021\n", str "byr:1959 hgt:193cm pid:083900241 iyr:2020 eyr:2037 hcl:H623a2f\necl:hzl\n", str "iyr:2030 hgt:153cm eyr:2022 hcl:Hefcc98 cid:131\nbyr:2016 ecl:hzl pid:64053944\n", str "hgt:172cm eyr:2025\nhcl:H866857\nbyr:1938 ecl:dne\npid:192cm iyr:2014\n", str "pid:016297574 cid:152 iyr:2015\neyr:2024 hcl:H341e13 byr:1965 hgt:175cm\necl:oth\n", str "pid:604330171 cid:125 byr:1974 hgt:160cm iyr:2014\neyr:2022 ecl:oth hcl:H6b5442\n", str "pid:59747275\nbyr:2027\nhgt:145\nhcl:1fd71f iyr:1944 eyr:2037 ecl:brn\n", str "iyr:2010\neyr:2021 byr:1953\npid:7098774146 ecl:brn hcl:98737d hgt:158cm\n", str "hcl:H602927 eyr:2039 pid:H81a5a1 iyr:2012 cid:67 byr:1951\necl:H6551f5 hgt:76cm\n", str "hgt:170cm ecl:oth\ncid:235 eyr:2022\nbyr:1929 iyr:2019\nhcl:H341e13 pid:797557745\n", str "iyr:2011\nhcl:H733820\neyr:2022 pid:830183476 ecl:blu byr:1976 cid:157 hgt:75in\n", str "hgt:164cm ecl:amb pid:653425455 hcl:H623a2f byr:1977 eyr:2020\niyr:2013\n", str "byr:2009 eyr:1953 hgt:178cm pid:H5d02f0\nhcl:Ha97842 iyr:2016\necl:amb\n", str "pid:009643210 eyr:2036 ecl:zzz\ncid:97 hcl:32e540 byr:2005 hgt:187cm iyr:2021\n", str "pid:155cm\niyr:2022 byr:2024 eyr:2031 ecl:amb cid:79\nhcl:Hcfa07d hgt:69cm\n", str "cid:176 ecl:oth\npid:688645779 byr:1933 eyr:2026 hgt:69cm\niyr:2016 hcl:H888785\n", str "hcl:H888785\neyr:2027\niyr:2020 pid:802243213 ecl:brn\nhgt:179cm byr:1976\n", str "hcl:H6cad3e hgt:164cm byr:1982 iyr:2020\necl:gry\npid:142160687 eyr:2023\n", str "hcl:H18171d\nhgt:153cm\niyr:2014 ecl:hzl cid:231 pid:167809118 byr:1997 eyr:2028\n", str "byr:1940\necl:hzl iyr:2016 cid:67 hcl:Hc800da\npid:563956960 eyr:2021\nhgt:189cm\n", str "pid:133094996 eyr:2032 hgt:60cm hcl:H623a2f byr:2030 ecl:dne iyr:2023\n", str "pid:65195409 hcl:d0d492\niyr:1956\nbyr:2019 ecl:Hbb043f eyr:2031 hgt:167in\n", str "iyr:2016 byr:2006 ecl:H35d62f eyr:2029\nhgt:186cm\nhcl:1d8307\n", str "eyr:1935 iyr:1960 pid:346667344 ecl:grn hgt:170cm hcl:cfcc36\n", str "ecl:oth byr:1979 pid:165581192\nhgt:177cm\nhcl:Hc0946f\niyr:2011\n", str "iyr:2011 eyr:2030 pid:250840477\nbyr:1934 cid:174 hgt:179cm hcl:H866857\necl:blu\n", str "hgt:157cm hcl:H7d3b0c eyr:2027 pid:979510046\necl:oth\n", str "iyr:2025\nhgt:69\necl:grt byr:1935\neyr:1928 pid:168cm\ncid:271 hcl:z\n", str "pid:998166233\niyr:2020 hgt:166cm ecl:amb byr:1995 hcl:Hfffffd\n", str "hcl:Hceb3a1 ecl:amb\niyr:2019\neyr:2024 hgt:184cm byr:1980 pid:839215481\ncid:146\n", str "byr:1967\npid:444303019 ecl:oth hgt:150cm eyr:2024\n", str "eyr:2023 byr:1960 iyr:2010\ncid:236 hcl:H733820 pid:900635506\nhgt:69in\necl:hzl\n", str "eyr:2029 pid:969574247\nhgt:150cm byr:1967\niyr:2010 ecl:blu\n", str "pid:575879605 iyr:2010\necl:hzl\nbyr:1963\nhgt:151cm\nhcl:Hc0946f cid:277\n", str "byr:1998 pid:621374275\necl:brn hcl:z iyr:2029\neyr:2024\nhgt:68cm\n", str "pid:365407169 ecl:amb hcl:H87f433 iyr:2011 eyr:2021 byr:1987\nhgt:175cm cid:201\n", str "hgt:175cm iyr:2020\necl:gry\neyr:2029 pid:806927384 cid:59\nbyr:1932 hcl:H888785\n", str "pid:589898274 cid:113 hcl:z hgt:184cm eyr:2000\necl:lzr iyr:2016 byr:2016\n", str "ecl:H2bafbb\neyr:2038 iyr:2027\nhcl:Hfffffd\nhgt:174 byr:2007\npid:093750113\n", str "eyr:2022 hgt:59in\nhcl:Hceb3a1\npid:159921662 ecl:gry\nbyr:1948 iyr:2014\ncid:50\n", str "hgt:190cm\niyr:2014 pid:480507618 hcl:Hfffffd byr:1945 eyr:2029\n", str "byr:1951 hgt:152cm ecl:brn iyr:2016 eyr:2029 cid:179 pid:027575942\nhcl:Hfffffd\n", str "cid:198 pid:728480773 eyr:2028 hgt:153cm iyr:2018\nhcl:H888785 ecl:amb byr:1983\n", str "byr:1968 hcl:Hc0946f ecl:grn eyr:2027\niyr:2013 pid:269749807\ncid:227\nhgt:178cm\n", str "eyr:2024 hgt:185cm ecl:oth\nhcl:H448ace byr:1987 iyr:2018 pid:454243136\n", str "byr:1930 ecl:grn iyr:2018 hgt:158cm\nhcl:H341e13 eyr:2021\n", str "eyr:2024 cid:194 pid:425431271\nhgt:169cm ecl:grn byr:1973\niyr:2014 hcl:Hfffffd\n", str "ecl:grn cid:110 iyr:2013 hcl:H18171d\nhgt:155cm eyr:2024 byr:1962 pid:522435225\n", str "byr:1934 ecl:hzl hgt:152cm iyr:2018\neyr:2024 pid:079740520\n", str "ecl:grn eyr:2023 hcl:c3f119 pid:468039715 iyr:2013 hgt:150cm byr:1955\n", str "pid:809357582 eyr:2025 byr:1958\nhcl:H6b5442 iyr:2013\nhgt:161cm ecl:hzl\n", str "hcl:Hb6652a pid:068979430 byr:1960 iyr:2010 ecl:grn hgt:159cm eyr:2021\n", str "cid:105 pid:495292692 byr:1965\nhcl:Hceb3a1 hgt:160cm ecl:amb\niyr:2020\n", str "iyr:2010\neyr:2024 byr:1941 ecl:grn hcl:Hb35770 hgt:171cm cid:132 pid:975699036\n", str "pid:767448421 hgt:186cm hcl:H733820\nbyr:1972 iyr:2020 eyr:2026 ecl:grn\n", str "pid:036236909 iyr:2012\nhgt:181cm hcl:H888785\neyr:2026\necl:hzl byr:1936\n", str "hgt:173cm\nbyr:1923 ecl:blu\neyr:2026 pid:570818321\nhcl:H733820 iyr:2016\ncid:59\n", str "pid:2711059768\nbyr:2024\ncid:139 ecl:blu hcl:z hgt:60cm\n", str "eyr:2025\npid:671193016\nbyr:1950 hcl:H6b4b25 iyr:2017 hgt:158cm ecl:blu\n", str "hgt:175cm iyr:2015 ecl:amb\nbyr:1984 eyr:2026 pid:342782894\ncid:140\n", str "iyr:2019 eyr:2027 byr:1972\npid:196266458\nhgt:158cm hcl:H7d3b0c cid:69\n", str "pid:604018034 iyr:2016 ecl:brn eyr:2028 hgt:172cm hcl:H6b5442 byr:1922\ncid:238\n", str "eyr:2024 ecl:gry byr:1970 pid:356551266 cid:340 hgt:162cm iyr:2013\n", str "ecl:amb\nhgt:151cm hcl:H18171d byr:1921 pid:187276410 eyr:2030 iyr:2015\n", str "eyr:2030 pid:056372924 hcl:Hd236d9 hgt:156cm\niyr:2014 ecl:blu\n", str "iyr:2014 eyr:2028 byr:1991\nhcl:Hb6652a pid:119231378 hgt:155cm ecl:blu\ncid:77\n", str "hcl:H341e13\neyr:2027\niyr:2012 ecl:grn hgt:152cm pid:405955710 byr:1970\n", str "iyr:2013 hgt:180cm eyr:1978 ecl:amb byr:1929 pid:3198111997 hcl:z\n", str "pid:32872520 ecl:H8a0dd4 iyr:1955 eyr:2036\nbyr:2027 cid:133 hcl:z hgt:184in\n", str "hgt:152cm pid:402361044\nhcl:Hefcc98 eyr:2029 ecl:grn iyr:2014\nbyr:1960\n", str "byr:1972 eyr:2026 pid:411187543 iyr:2014\nhgt:184cm cid:211 hcl:H866857 ecl:brn\n", str "ecl:brn\nhcl:Hefcc98\npid:311916712\nbyr:1957 hgt:151cm eyr:2020 iyr:2020\n", str "iyr:1968\nhcl:a28220\npid:Hed250d cid:240 eyr:2031\nhgt:181cm ecl:xry\n", str "ecl:grn byr:1946 hgt:172cm iyr:2010 hcl:Hb6652a pid:372011640 eyr:2026\n", str "ecl:brn\neyr:2026 byr:1980 hcl:Hc0946f\nhgt:151cm pid:153076317 iyr:2012\n", str "byr:1966 pid:852999809 ecl:oth\nhgt:163cm\niyr:2014 eyr:2029 hcl:H341e13\n", str "ecl:blu\nbyr:1959 hgt:191cm pid:195095631 iyr:2016 hcl:Hceb3a1 eyr:2028\n", str "byr:2001 ecl:gry hcl:H888785 iyr:2018 hgt:177cm pid:576714115\n", str "iyr:2017\nbyr:1949\necl:blu hgt:186cm cid:289 pid:859016371\nhcl:Hceb3a1 eyr:2021\n", str "byr:1999 hcl:Hb6652a eyr:2023\nhgt:175cm\necl:gry iyr:2013 cid:165 pid:194927609\n", str "hgt:70in eyr:2027 ecl:brn iyr:2012 pid:162238378 hcl:Hceb3a1 byr:1986\n", str "hgt:63in ecl:xry\nbyr:2011 iyr:2024\nhcl:5337b0\n", str "hcl:H341e13 eyr:2029\nhgt:184cm ecl:amb iyr:2012\nbyr:1970\n", str "byr:1920 pid:472914751\neyr:2028\nhgt:187cm hcl:Hcfa07d cid:290 ecl:gry\n", str "byr:1948 ecl:gry eyr:2025 hgt:151cm cid:276 hcl:H6b5442 pid:937979267\niyr:2016\n", str "byr:1934\npid:626915978 hcl:H623a2f hgt:167cm ecl:gry\niyr:2020 eyr:2023\n", str "byr:1949\nhgt:68in eyr:2027 iyr:2019 hcl:H733820 ecl:brn cid:237\npid:057797826\n", str "pid:155cm\nhgt:68cm ecl:lzr hcl:z cid:344 eyr:2028 iyr:2020 byr:2017\n", str "byr:1959\nhcl:H341e13 eyr:2022\niyr:2019 pid:728703569\nhgt:167cm\necl:oth\n", str "ecl:grn\neyr:2024 byr:1999\npid:566956828\niyr:2015 cid:293 hcl:H602927 hgt:192cm\n", str "byr:1939\necl:xry pid:929512270 hgt:66in iyr:1939 eyr:2030 hcl:Hefcc98\n", str "eyr:2026\niyr:2014\npid:176cm hcl:Hfffffd\necl:gry\nhgt:151cm byr:1933\ncid:256\n", str "ecl:oth eyr:2025 iyr:2017 hgt:159cm pid:055267863 cid:55 byr:2001 hcl:Hcfa07d\n", str "eyr:2029 byr:1954 ecl:hzl cid:123 iyr:2020 hgt:192cm hcl:H866857\npid:225593536\n", str "pid:320274514 cid:289 byr:1963\neyr:1942\necl:gmt hcl:z hgt:167in iyr:2022\n", str "byr:2013\necl:gmt\niyr:2011\nhcl:H733820 pid:He7962f\nhgt:178cm eyr:2029\n", str "pid:154cm ecl:hzl\neyr:2035 byr:2023 cid:104 iyr:2026\n", str "eyr:2024 ecl:hzl hcl:H7d3b0c iyr:2010\npid:105864164\nbyr:1955\nhgt:163cm\n", str "eyr:2021 hgt:151cm\niyr:2017 hcl:Hc0946f\necl:amb\ncid:150\npid:296798563\nbyr:1953\n", str "iyr:2012\nbyr:1990 hcl:H341e13\npid:189449931 eyr:2024 hgt:64in\n", str "hcl:z cid:79 byr:2028\neyr:2028 pid:886152432\necl:Hce0596 hgt:178cm\niyr:2029\n", str "ecl:brn\niyr:2019 hgt:151cm\nhcl:H341e13\nbyr:1969\npid:468846056\neyr:2022\n", str "ecl:grn hgt:157cm iyr:2012\neyr:2020\nhcl:Hb6652a cid:338\nbyr:1954 pid:153867580\n", str "iyr:2011\neyr:2027\nbyr:1935\nhgt:151cm\necl:blu pid:802665934 cid:276 hcl:H623a2f\n", str "hcl:Hefcc98 eyr:2026 ecl:amb\niyr:2014 pid:320160032\nhgt:157cm\nbyr:1976\n", str "eyr:2021 cid:172\niyr:2012 ecl:oth hgt:187cm\npid:432856831 byr:2001 hcl:H733820\n", str "eyr:2028 ecl:amb hcl:Hefcc98\niyr:2020 byr:1954 hgt:153cm\n", str "byr:1930 ecl:brn hcl:Hfffffd\npid:458840035 hgt:178cm eyr:2021\niyr:2011 cid:336\n", str "pid:216876576 hcl:H341e13\neyr:2028 iyr:2018 hgt:177cm byr:1938\necl:brn cid:214\n", str "byr:2029 eyr:1987\nhgt:75cm pid:193cm hcl:Hb6652a cid:246 iyr:2028\n", str "ecl:hzl hgt:151cm hcl:H7d3b0c\neyr:2030 pid:910999919\niyr:2019 byr:1956\n", str "byr:1950\ncid:95 iyr:2013 ecl:grn\neyr:2020 hcl:H623a2f\npid:603817559 hgt:159cm\n", str "pid:913791667\niyr:2018 byr:1959 hcl:Ha97842 hgt:179cm eyr:2029 ecl:gry\n", str "hgt:71in\necl:blu eyr:2028\nhcl:H18171d byr:1937 iyr:2011 pid:951572571\n", str "hcl:Hb6652a iyr:2015 hgt:170cm ecl:blu cid:292\nbyr:1977 pid:475457579 eyr:2020\n", str "ecl:amb eyr:2029\npid:530769382 iyr:2018 cid:53\nhgt:63in\nbyr:1954 hcl:H07de91\n", str "hcl:Hcfa07d hgt:185cm\nbyr:1929 iyr:2011\neyr:2027\n", str "iyr:2019 ecl:oth byr:2023 hcl:H341e13 pid:879919037\neyr:2030 hgt:174cm\n", str "hcl:z hgt:182cm ecl:grn iyr:2010 eyr:2020 pid:2063425865\ncid:182\nbyr:2019\n", str "byr:1930 hgt:185cm pid:412694897 eyr:2025 ecl:brn iyr:2020\nhcl:Ha97842\n", str "hgt:150cm byr:1955 eyr:2020 cid:149 pid:597600808\nhcl:Hceb3a1\necl:hzl\n", str "pid:209568495\neyr:2026 byr:1928 hcl:H341e13 hgt:183cm ecl:brn iyr:2011\n", str "pid:723789670 ecl:blu iyr:2013 byr:1933\ncid:239 hcl:H7d3b0c eyr:2026 hgt:151cm\n", str "byr:1978 eyr:2027 hgt:164cm\npid:009071063\nhcl:H602927 iyr:2014 ecl:blu\n", str "hcl:H18171d ecl:grn hgt:154cm cid:154 iyr:2016\nbyr:1952 pid:730027149 eyr:2024\n", str "eyr:2025 hcl:H888785 iyr:2013 cid:90\nbyr:1975 ecl:grn\npid:619198428 hgt:161cm\n", str "ecl:gry iyr:2013 pid:795604673 cid:198 byr:1962\nhcl:H6b5442 hgt:64in eyr:2021\n", str "hcl:Hceb3a1 ecl:oth iyr:2015\neyr:2021 pid:920586799 cid:302 hgt:60in\nbyr:1964\n", str "eyr:2021 ecl:gry iyr:2019\nhcl:H6b5442 hgt:192cm\nbyr:1996\npid:692698177\n", str "ecl:grn pid:141369492 byr:1956 eyr:2028 hcl:H6b5442 hgt:190cm iyr:2014\n", str "hcl:H6b5442\necl:grn iyr:2020 hgt:153cm\npid:312738382 eyr:2028\nbyr:1985\n", str "byr:1979\neyr:2021 ecl:gry hgt:175cm pid:787676021 cid:81 hcl:Hb6652a iyr:2012\n", str "cid:80 hgt:188cm byr:1964 pid:105773060 iyr:2014 hcl:H733820 ecl:gry eyr:2028\n", str "byr:1960 pid:251870522 iyr:2018 hgt:168cm ecl:blu hcl:Hc0946f eyr:2026\n", str "cid:270\npid:H5661f0 hgt:182in\necl:dne\nbyr:1930\nhcl:z iyr:2026\n", str "hcl:H888785 byr:1954 pid:170544716 eyr:2028 hgt:162cm cid:244\niyr:2014\necl:grn\n", str "iyr:2017\nhgt:69in\necl:hzl\npid:544135985 hcl:Hceb3a1 eyr:2020\n", str "hcl:92d4a1 iyr:2018 pid:178cm\ncid:347\nhgt:97 eyr:2017\necl:gmt byr:2004\n", str "ecl:oth iyr:2018 hcl:Hfffffd byr:1999 pid:853396129\ncid:119 eyr:2026 hgt:178cm\n", str "hgt:69in\nhcl:Hfffffd eyr:2026 byr:1922\niyr:2010 ecl:oth pid:664840386\n", str "hgt:178cm\nbyr:2000\niyr:2013 hcl:Hcfa07d\neyr:2028 pid:842454291\necl:amb\n", str "ecl:hzl\nhcl:H733820 pid:316835287 byr:1998\neyr:2024\niyr:2015 hgt:165cm\n", str "pid:684064750 byr:1928 ecl:gry iyr:2015 cid:343\nhgt:189cm\nhcl:H4c6cb4 eyr:2020\n", str "byr:1923 hcl:Ha97842 eyr:2024 ecl:gry\npid:095911913\nhgt:185cm iyr:2010\n", str "ecl:hzl\nbyr:1996\neyr:2023\nhgt:177cm\nhcl:Hb6652a pid:011541746\niyr:2011\n", str "hcl:Hefcc98\niyr:2014 ecl:oth byr:1942 pid:730960830\nhgt:183cm\neyr:2025\n", str "byr:1939 eyr:2029 ecl:amb hcl:Hfffffd\nhgt:188cm pid:732730418 iyr:2013 cid:313\n", str "hgt:164cm cid:217 byr:1985 hcl:H888785 eyr:2020\niyr:2014 ecl:oth\npid:071172789\n", str "eyr:2024 pid:215897274 ecl:Hc67898\nbyr:1972 hcl:H866857 iyr:2010 hgt:170cm cid:310\n", str "ecl:hzl pid:030118892 byr:1941 hgt:158cm hcl:Hb6652a\neyr:2029 iyr:2012\n", str "ecl:gry hcl:Hc0946f hgt:166cm pid:604313781\nbyr:1924 eyr:2023 iyr:2020\n", str "hcl:H602927 hgt:168cm eyr:2027 ecl:brn\npid:764635418 byr:1968 iyr:2010\n", str "pid:157933284\necl:grn\neyr:2030 byr:2000\nhgt:81 hcl:z\n", str "hcl:Hec24d1\npid:647881680 byr:1922\nhgt:178cm iyr:2020 ecl:amb eyr:2021 cid:94\n", str "ecl:hzl byr:1971 iyr:2018 pid:975690657 eyr:2027\nhgt:192in\ncid:202 hcl:Hc0946f\n", str "pid:678999378\nhgt:61in\nbyr:1981 hcl:Hcfa07d eyr:2029 iyr:2014\necl:oth\n", str "eyr:2022 iyr:2012 ecl:grn pid:883419125\nhcl:Hceb3a1\ncid:136 hgt:75in\nbyr:1952\n", str "iyr:2018 hgt:185cm\nbyr:1985 pid:119464380 eyr:2028 hcl:H623a2f ecl:gry\n", str "eyr:2025 hcl:Hceb3a1 byr:1953\ncid:277 hgt:164cm iyr:2010 pid:574253234\n", str "cid:252 ecl:amb pid:594663323\nhgt:75in hcl:Hcfa07d iyr:2019\neyr:2026 byr:1964\n", str "iyr:2026 hcl:z pid:60117235 ecl:lzr\nbyr:2016 hgt:156in eyr:1994\n", str "pid:448392350\neyr:2022 hcl:Ha97842\nhgt:157cm\necl:hzl\niyr:2018 byr:1973\n", str "ecl:brn\nbyr:1951\neyr:2028\nhcl:H7d3b0c iyr:2018 hgt:164cm\n", str "hgt:156cm\nbyr:1963\niyr:2014 eyr:2020 ecl:blu hcl:Hceb3a1\npid:Ha87d16\n", str "pid:447170366 ecl:blu hcl:H888785\niyr:2012 cid:236\nhgt:167cm\neyr:2022 byr:1942\n", str "hcl:H623a2f\neyr:2020 iyr:2017 cid:128 ecl:amb pid:279550425\nbyr:1983 hgt:154cm\n", str "byr:2014 eyr:2034 hgt:176in hcl:z\necl:Hd4e521\npid:3629053477 cid:177\niyr:1970\n", str "pid:30370825 byr:1966 eyr:2026\niyr:2026 hcl:H866857\ncid:346 ecl:Hf7c189\n", str "iyr:2010 pid:271066119 eyr:2023 hcl:Hefcc98 hgt:179cm byr:1956\n", str "byr:1966 hgt:156cm pid:977897485 cid:287 iyr:2011 hcl:Hb6652a ecl:amb eyr:2029\n", str "cid:211 ecl:gmt byr:2017\nhcl:z eyr:2029 hgt:180in iyr:2021 pid:81920053\n", str "byr:2019\npid:5229927737 hcl:75b4f1 hgt:146 iyr:2026 ecl:H92cf7d eyr:2032\n", str "eyr:2027 pid:604671573\necl:hzl\nhgt:189cm byr:1979\nhcl:Hefcc98 iyr:2020\n", str "iyr:2018 cid:192\neyr:2029 ecl:grn\npid:653764645 hgt:179cm\nhcl:H341e13 byr:1927\n", str "byr:2012\niyr:2015\nhcl:Hb6652a\npid:168500059 eyr:2038 cid:234 hgt:191cm ecl:zzz\n", str "ecl:gry hcl:H623a2f byr:1925\niyr:2016\neyr:2028 cid:157\nhgt:154cm\npid:196280865\n", str "cid:319 pid:928322396 ecl:gry\nbyr:1949\neyr:2028\nhcl:H341e13 hgt:171cm\niyr:2018\n", str "byr:2023\niyr:1953 hgt:154cm ecl:dne\nhcl:H888785\npid:066246061 eyr:1983\n", str "hcl:z\niyr:2016 byr:1986 ecl:utc\nhgt:179cm eyr:2019 pid:583251408\n", str "ecl:amb iyr:2014 pid:499004360\nbyr:1927 eyr:2021 hgt:193cm hcl:Hceb3a1\n", str "pid:631303194 ecl:gry\nhcl:H18171d cid:216 iyr:2019\neyr:2024 hgt:178cm\n", str "hcl:H341e13 cid:201\nbyr:1949 iyr:2019 ecl:gry pid:372356205\neyr:2024\n", str "hcl:H18171d\npid:867489359\nhgt:185cm\niyr:2020 ecl:amb\neyr:2030\nbyr:1955\n", str "byr:1991\necl:brn eyr:2025 hgt:184cm iyr:2016 pid:202216365\n", str "ecl:xry pid:H524139 hgt:151cm hcl:z eyr:2031 byr:2030 iyr:2005\n", str "byr:1971 hgt:178cm ecl:amb hcl:Hceb3a1\niyr:2010\neyr:2026 pid:396974525\n", str "iyr:2014\nhgt:177cm pid:928522073\neyr:2022\necl:hzl\nhcl:Hc0946f byr:1983\n", str "hgt:167cm hcl:Hceb3a1 iyr:2014\npid:172415447\neyr:2020 byr:1956\n", str "iyr:2011 hgt:188cm byr:1947 eyr:2020 pid:667108134 ecl:amb hcl:H44a86b\n", str "cid:302 ecl:brn pid:292483175 hgt:154cm\nbyr:1997\neyr:2026\niyr:2014 hcl:H623a2f\n", str "hgt:171cm\niyr:2014 hcl:z ecl:hzl pid:321513523 eyr:2027 cid:146\nbyr:2001\n", str "eyr:1956 ecl:dne hgt:75cm hcl:82e1fa\niyr:2030 byr:2027\n", str "eyr:2020\niyr:2011 pid:656669479 ecl:oth hgt:151cm hcl:Hefcc98 byr:1981\n", str "iyr:2013\nbyr:1934\npid:142890410 hgt:62in\neyr:2022\nhcl:H87cca4\necl:hzl\n", str "pid:006232726\nhgt:173cm ecl:hzl cid:110\neyr:2026 hcl:H866857 iyr:2017 byr:1992\n", str "cid:208\niyr:2014 ecl:brn eyr:2024 byr:1935 hgt:187cm\nhcl:Hb6652a\npid:770836724\n", str "iyr:2014 cid:144 hgt:169cm\neyr:2022\necl:oth\npid:117575716 hcl:Hfffffd byr:1926\n", str "byr:1971 ecl:brn\nhcl:H733820 eyr:1942 iyr:2013\npid:606274259 hgt:163cm cid:196\n", str "byr:1964\npid:997828217 eyr:2029 iyr:2017 ecl:blu hcl:H341e13\nhgt:158cm\n", str "pid:568202531 hcl:Hefcc98 hgt:154cm eyr:2029 iyr:2010\nbyr:1946\necl:blu\n", str "iyr:2011\npid:619355919\nbyr:1955\necl:brn hcl:H888785 eyr:2030 hgt:155cm\n", str "ecl:hzl pid:367152545\nhgt:162cm\ncid:221 hcl:H866857\neyr:2024\nbyr:1997 iyr:2019\n", str "hgt:157in\ncid:268 hcl:32371d byr:2020\necl:zzz pid:1081234390\n", str "ecl:hzl eyr:2026\nbyr:1969 pid:850482906 cid:166 hcl:H602927 hgt:60in\niyr:2019\n", str "hcl:Hc0946f\nhgt:176cm\necl:brn eyr:2026 iyr:2018 cid:172 byr:1986 pid:172963254\n", str "ecl:grn iyr:2016\nhgt:187cm\nbyr:1983\nhcl:Hefcc98\npid:722084344 eyr:2025\n", str "ecl:oth hcl:H341e13 pid:130312766 hgt:171cm iyr:2018 byr:1927 eyr:2024\n", str "byr:2021 hgt:152cm hcl:74dda6\neyr:1984 cid:216\niyr:2018 pid:95283942\n", str "hcl:Hb6652a pid:924778815 iyr:2017 ecl:gry\neyr:2035\nhgt:68cm\n", str "iyr:2010\nhcl:Hefcc98 ecl:brn eyr:2020 pid:801894599 hgt:163cm byr:1959\n", str "pid:798701070 eyr:2030\nhcl:H866857 ecl:hzl hgt:169cm byr:1994 cid:219 iyr:2010\n", str "pid:He9b41b\nhcl:H341e13 byr:1970\niyr:2014\necl:oth cid:266 hgt:68cm eyr:2023\n", str "byr:1931 pid:929960843 hgt:187cm hcl:H6b5442 cid:52 iyr:2010 eyr:2024 ecl:brn\n", str "iyr:2017 byr:1974\necl:hzl cid:243 pid:66053995 hgt:147 eyr:1920 hcl:z\n", str "iyr:2012 byr:1962 ecl:brn pid:773399437 hcl:H341e13\neyr:2026\n", str "pid:738442771 hgt:186cm eyr:2027 hcl:Hefcc98 iyr:2013\necl:brn byr:1928\n", str "pid:855794198\necl:oth\nhgt:67in\ncid:81\niyr:2011 hcl:Hb6652a eyr:2020\nbyr:1921\n", str "hcl:176abf hgt:161in\nbyr:2002 iyr:2016 eyr:2027 pid:639047770 ecl:brn\ncid:178\n", str "pid:335686451\nhcl:H86c240 iyr:2017 hgt:190cm byr:1968 ecl:amb\n", str "hgt:150cm\nhcl:094a87 ecl:H09c463 eyr:1926 pid:537511570 byr:2009\niyr:1998\n", str "hgt:74in\npid:927963411\neyr:2026 ecl:gry cid:323 iyr:2012 hcl:Hfffffd byr:1959\n", str "iyr:2018 byr:1978\nhcl:Hff1829 eyr:2023\npid:823129853 ecl:hzl\nhgt:65in\n", str "pid:189cm\necl:H00391e hgt:72cm hcl:11050f\nbyr:2029\neyr:1994\niyr:1935\ncid:186\n", str "ecl:grn byr:1942 pid:217290710 hgt:181cm eyr:2021 hcl:H7d3b0c iyr:2019 cid:320\n", str "byr:1983 iyr:2013 cid:122 hcl:Hceb3a1 eyr:2030 hgt:59in ecl:grn pid:946451564\n", str "ecl:amb\ncid:236 hgt:184cm\nhcl:Hcfa07d iyr:2017 pid:934730535 eyr:2021 byr:2002\n", str "byr:1950 ecl:hzl eyr:2030 hcl:H623a2f pid:742249321\nhgt:158cm iyr:2018\n", str "byr:1946 eyr:2021 hcl:Ha97842 pid:204671558 ecl:grn\niyr:2010 hgt:187cm\n", str "hcl:Hb6652a pid:528124882 hgt:162cm byr:1924 ecl:amb iyr:2027 cid:157\neyr:2028\n", str "hgt:180cm iyr:2013 byr:1926 pid:232265934 hcl:H602927 ecl:oth\n", str "byr:1984 ecl:brn\niyr:2016 pid:756596443 eyr:2030 hcl:H7d3b0c hgt:183cm\n", str "hgt:185cm\nhcl:Hfffffd byr:1991 eyr:2023 iyr:2014\necl:amb\npid:759105859\n", str "cid:82 iyr:2012 hgt:160cm eyr:2022 pid:593798464 ecl:gry hcl:H4e7571 byr:1983\n", str "pid:478427550\niyr:2010\necl:amb byr:1969 hgt:68in cid:94 eyr:2021 hcl:H866857\n", str "ecl:amb iyr:2019 byr:1986 hgt:170cm\nhcl:Hc0946f\npid:779205106 eyr:2027\n", str "ecl:brn eyr:2025 byr:1925\nhcl:H7d3b0c hgt:76in pid:576353079 iyr:2010\n", str "hgt:175cm hcl:4bf5ae ecl:amb\neyr:2029 pid:173cm cid:329\niyr:1952 byr:1972\n", str "ecl:grn\neyr:2030\niyr:2015 hcl:Hc0946f\nbyr:1989\nhgt:178cm\npid:287209519\n", str "pid:834505198 byr:1985 ecl:gry eyr:2024\ncid:295 hgt:169cm iyr:2017\n", str "hgt:170cm\npid:054644831 eyr:2023 iyr:1949 ecl:amb\nhcl:H888785\nbyr:1955\n", str "hgt:171cm\npid:947263309 iyr:2015 byr:1944 eyr:2027 ecl:grn cid:79 hcl:H341e13\n", str "eyr:1982\ncid:147\niyr:2015\nhgt:70cm hcl:a77c10 ecl:zzz byr:2007\npid:161cm\n", str "ecl:gry byr:1933\nhcl:Hc0946f pid:483275512 iyr:2012 eyr:2025 hgt:161cm\n", str "eyr:1985 hgt:176cm hcl:7b6ddc iyr:2012 cid:326 byr:1973 pid:929418396 ecl:gmt\n", str "ecl:gry\nbyr:1971\nhgt:184cm\neyr:2027 hcl:H3adf2c iyr:2017 cid:210\npid:693561862\n", str "eyr:2021 pid:779298835 byr:1921 hgt:193cm ecl:amb\niyr:2016 hcl:Hceb3a1\n", str "hcl:4a1444\nbyr:2019 iyr:2024 hgt:182in\ncid:87 ecl:H122264\npid:181cm\neyr:1927\n", str "cid:267 ecl:amb eyr:2020 byr:2000\nhcl:H18171d iyr:2012 hgt:190cm pid:18525759\n", str "ecl:oth byr:1988\niyr:2019 pid:660570833\nhcl:H866857 hgt:176cm\n", str "eyr:2030 hcl:H866857\nbyr:1967 cid:316 pid:560346474 iyr:2015\nhgt:160cm\necl:gry\n", str "ecl:hzl\niyr:2014 hgt:164cm hcl:H733820 eyr:2025\npid:106302413 byr:1920\n", str "iyr:2016 pid:515066491\necl:grn eyr:2026 hgt:179cm hcl:Hb6652a byr:1982\n", str "ecl:H7de6a0\niyr:2004 eyr:1955 hgt:154cm cid:138 byr:2004\npid:758934555\nhcl:a21980\n", str "pid:H2a21e0 ecl:H1b9b27 hgt:165in\nbyr:1998 iyr:2014 eyr:2032\n", str "eyr:2021 hgt:184cm pid:431054313 hcl:Hceb3a1 cid:109 byr:1977 ecl:blu\niyr:2011\n", str "pid:006339126 hgt:177cm\ncid:188 hcl:Ha97842\niyr:1959\necl:xry\n", str "byr:2000\necl:hzl eyr:2029\niyr:2011 hcl:H866857 hgt:74in\n"]
:p sum for i. BToI (isValid full_batch.i)
' # Part 2
data Rule =
Exactly Char
Digit
Hex
Space
def isDigit (d:Char):Bool=
digits = "1234567890"
any for i. d == digits.i
:p isDigit 'a'
:p isDigit '2'
def match (rule:Rule) (char:Char):Bool =
case rule of
Exactly c -> (char == c)
Digit -> (isDigit char)
Hex -> (isDigit char || any for i. char == "abcdef".i)
Space -> (char == '\n' || char == ' ')
:p match Hex 'a'
:p match Hex '0'
:p match Hex 'z'
:p match (Exactly ':') 'z'
:p match (Exactly ':') ':'
def containsRuleSeq (needle:n=>Rule) (haystack:m=>Char) : Bool =
any for i:m.
nottoolong = (ordinal i) < (size m - size n + 1)
(all for j:n.
hj_true = ((ordinal i) + (ordinal j))
hj = select nottoolong hj_true 0
nottoolong && (match needle.j haystack.(hj@_)))
:p containsRuleSeq [Exactly 'b'] "a byr d"
:p containsRuleSeq [Exactly 'b', Exactly 'y', Exactly 'r'] "a byr d"
:p containsRuleSeq [Exactly 'b', Exactly 'y', Exactly 'd'] "a byr d"
def containsRuleSeqLL (needleL:List Rule) (haystackL:String) : Bool =
(AsList _ needleT) = needleL
(AsList _ haystackT) = haystackL
containsRuleSeq needleT haystackT
'Generate all the acceptable possibilities:
We don't want to have to actually extract and parse numbers so we will just make a structure of RuleSequenceAlternatives
valid_eg = str "eyr:2029 ecl:blu cid:129 byr:1989 iyr:2014 pid:896056539 hcl:Ha97842 hgt:165cm\n"
invalid_eg = str "eyr:20291 ecl:blu cid:129 byr:1919 iyr:2014 pid:8960056539 hcl:Ha7842 hgt:165cm\n"
-- Real show isn't defined on integers
-- https://github.com/google-research/dex-lang/issues/311
-- This is a simple version that only handles up to 4 digits
-- and leftpads with 0
def showInt (x:Int) : String =
D = "0123456789"
d1 = x `mod` 10
d2 = ((x `mod` 100) - d1) `idiv` 10
d3 = ((x `mod` 1000) -d2 - d1) `idiv` 100
d4 = ((x `mod` 10000) -d3 -d2 - d1) `idiv` 1000
(select (d4>0) (AsList _ $ [D.(d4@_), D.(d3@_), D.(d2@_), D.(d1@_)])
(select (d3>0) (AsList _ $ [D.(d3@_), D.(d2@_), D.(d1@_)])
(select (d2>0) (AsList _ $ [D.(d2@_), D.(d1@_)])
(AsList _ $ [D.(d1@_)])
)))
:p showInt 91
def numSeqs (min:Int) (n:Type) : n=>List Rule =
for i:n.
(AsList _ digits) = (showInt (min + ordinal i))
AsList _ $ for j. Exactly digits.j
:p numSeqs 1 (Fin 3)
:p numSeqs 97 (Fin 5)
aspace = (AsList _ [Space])
' year
- byr (Birth Year) - four digits; at least 1920 and at most 2002.
- iyr (Issue Year) - four digits; at least 2010 and at most 2020.
- eyr (Expiration Year) - four digits; at least 2020 and at most 2030.
def validYear (code:(Fin 4)=>Char) (min:Int) (max:Int) (passport:String) : Bool =
field = AsList 4 $ for i. Exactly code.i
ndigits_s = Fin (max - min + 1)
digits_s = numSeqs min ndigits_s
any for i.
ruleL = field <> digits_s.i <> aspace
containsRuleSeqLL ruleL passport
validBirthYear = validYear "byr:" 1920 2002
validIssueYear = validYear "iyr:" 2010 2020
validEpirationYear = validYear "eyr:" 2020 2030
:p validBirthYear valid_eg
:p validBirthYear invalid_eg
' - hgt (Height) - a number followed by either cm or in:
- If cm, the number must be at least 150 and at most 193.
- If in, the number must be at least 59 and at most 76.
def validHeight (passport:String) : Bool =
field = AsList 4 $ for i. Exactly "hgt:".i
cm = AsList _ $ [Exactly 'c', Exactly 'm']
ndigits_cm = Fin (193 - 150 + 1)
digits_cm = numSeqs 150 ndigits_cm
valid_cm = any for i.
rule_cm = field <> digits_cm.i <> cm <> aspace
containsRuleSeqLL rule_cm passport
ndigits_in = Fin (76 - 59 + 1)
in = AsList _ $ [Exactly 'i', Exactly 'n']
digits_in = numSeqs 59 ndigits_in
valid_in = any for i.
rule_in = field <> digits_in.i <> in <> aspace
containsRuleSeqLL rule_in passport
valid_in || valid_cm
:p validHeight $ str "hgt:150cm "
:p validHeight $ str "hgt:15cm "
:p validHeight $ str "hgt:76in "
:p validHeight $ str "hgt:77in "
' hcl (Hair Color) - a H followed by exactly six characters 0-9 or a-f.
def validHairColor (passport:String) : Bool =
field = AsList _ $ for i. Exactly "hcl:H".i
digits = (AsList _ $ for i:(Fin 6). Hex )
ruleL = field <> digits <> aspace
containsRuleSeqLL ruleL passport
:p validHairColor valid_eg
:p validHairColor invalid_eg
' pid (Passport ID) - a nine-digit number, including leading zeroes.
def validPassportId (passport:String) : Bool =
field = AsList _ $ for i. Exactly "pid:".i
digits = (AsList _ $ for i:(Fin 9). Digit )
ruleL = field <> digits <> aspace
containsRuleSeqLL ruleL passport
:p validPassportId valid_eg
:p validPassportId invalid_eg
' ecl (Eye Color) - exactly one of: amb blu brn gry grn hzl oth.
def validEyeColor (passport:String) : Bool =
colours = ["amb", "blu", "brn", "gry", "grn", "hzl", "oth"]
fin = [str " ", str "\n"]
any for f. any for i.
(AsList _ needleT) = str "ecl:" <> str colours.i <> fin.f
containsL needleT passport
:p validEyeColor valid_eg
:p validEyeColor invalid_eg
def validPassport (p:String) : Bool =
validBirthYear p &&
validIssueYear p &&
validEpirationYear p &&
validEyeColor p &&
validPassportId p &&
validHairColor p &&
validHeight p
:p validPassport valid_eg
:p validPassport invalid_eg
:p sum $ for i. BToI $ validPassport full_batch.i
'# Advent of Code 2020. Day 5
DexLang, [Lyndon White](http://oxinabox.net)
https://adventofcode.com/2020/day/5
This one is notable as it uses Effects in Part 2
'## Binary Space Partition
data Partition =
Upper
Lower
def parsePartition (c:Char):Partition =
select (c=='B' || c=='R') Upper Lower
BoardingPass = {row:(Fin 7)=>Partition & column:(Fin 3)=>Partition}
def parseBoardingPass (x:(Fin 10)=>Char):BoardingPass =
{row=map parsePartition $ slice x 0 (Fin 7),
column=map parsePartition $ slice x 7 (Fin 3)}
x=parseBoardingPass "BFFFBBFRRR"
:p getAt #row x
:p getAt #column x
def part ((low,high):(Int&Int)) (side:Partition):(Int&Int) =
mid = low + ((high - low) `idiv` 2)
case side of
Lower -> (low,mid)
Upper -> (mid+1,high)
def (|>) (x:a) (f: a -> b) : b = f x
:p part (0, 127) Lower
:p part (0, 127) Lower |> part $ Upper
:p (part (0, 127) Lower |> part $ Upper) |> part $ Lower
:p part (44, 45) Lower
:p part (44, 45) Upper
def firstlast (d:Eq a) ?=> ((first,last):(a&a)) : a =
case (first==last) of
True -> first
False -> throw
:p firstlast (1,2)
:p firstlast (2,2)
def fullpart (bounds:(Int&Int)) (sides:n=>Partition) : Int =
firstlast $ fold bounds \si neobounds. part neobounds sides.si
:p fullpart (0, 127) $ getAt #row x
def getSeatId ({row=rowcode, column=columncode}:BoardingPass) : Int =
rowid = fullpart (0,127) rowcode
columnid = fullpart (0,7) columncode
rowid * 8 + columnid
:p getSeatId $ parseBoardingPass "BFFFBBFRRR"
:p getSeatId $ parseBoardingPass "FFFBBBFRRR"
:p getSeatId $ parseBoardingPass "BBFFBBFRLL"
full_data = ["BFFFFFFLLR", "FBBFFFFLRL", "BFFFBFFLRL", "BBBFBFFLLL", "FBBBFFFRLR", "FFBFBFFLLR", "FBFBFBBLLR", "BFBBFFFRLL", "FFFBFBBLRR", "BFFBBBBLRR", "FFBFBFBRRL", "BBFBBFFRLR", "BFBFBBFLRR", "BFFFBFFLLL", "FBBBFFFRRL", "BFFBFBBLRL", "BFBFBFFRRR", "FFBFBFBRLL", "FFFBBFBLLL", "BBFFBBBRLL", "FBFBBBFLRR", "FBFFFBFRRR", "FBFBBBBRLL", "BBBFFFFRRL", "FBFBFFBRLL", "BFBFBBFLLR", "BBFBFFBRRR", "FFFBBBFRRR", "FFBBFFBLLL", "BFBBBBBRLR", "BFBBFFFLLL", "BFFFFBFRRL", "FFFBBBFLLR", "BBFFBFBRRR", "BBFFFBFLRL", "BBFFBFBLLL", "FFBFBBFLLL", "BBBFFBFLRR", "BBFBFFFRLR", "FBFBBBBRRR", "BFBBBBBLLL", "BBBFFBBLLL", "BBFBFBFRRL", "BBFFFBFRRL", "BBFFFBBRRR", "BBBFBFFLLR", "FFBBFFBLRL", "BFBBBBFRRL", "FFBBBBBLLL", "FBBFBBBLRL", "BBFFFFBRLL", "FBFFBBBLRR", "FBBFFBFLRL", "FFFBFFBRRR", "FFFBFBBRLL", "FFBFFBBLLR", "FFFBBFBRRR", "BBFBBFFLRR", "FBBBBFBRRL", "BFBBFBFRRL", "FBBBBBBLRL", "BFBBFBFRLR", "FBBFFBBRLR", "FBBFBFFLRL", "FBBBBFFLLR", "BBBFFBBRLL", "BFFBFBBRLL", "BFFFBFBRLL", "BFBBFBFLRL", "BFBBBBFLRR", "BBFBFBBLRL", "FFBFBBFRLR", "BFBFFFBRRR", "BFFBFFBLLL", "FBFFFFFRLR", "FFBBFFFLLR", "BFFBFFFRRR", "FFFBBFBLRL", "BFFBBFBRLR", "BBFBFBBLLR", "FFFBFBFLLR", "FFBBFFFLRR", "FBBBBBFLLL", "FFBBBFBLLR", "FBFBFBFRRR", "BFBFFBBLRR", "FFBFFBBLRR", "BBFFBFFRLL", "FFFBFBFRLL", "FBBBBBBRRR", "BBBFFFFRLL", "FBFBBFFRLR", "FFBBBBFRRL", "BFBFBBFLLL", "BBFBBFBLRR", "BFBBBBBRRL", "FBBFBBBRLL", "FFBFFFFRLR", "FBFFBFFLLL", "FBFFBFFRRL", "BFFFFBBRLR", "BFFBBBFRRR", "BBFBFFBRRL", "BFBBFBFLLR", "BBBFFBBRRR", "BFBBFFFRRR", "FBBBFFFLLR", "FBBBBBBLLR", "BFBBBBFRLR", "FBBBFBBRLL", "BBBFFBBRLR", "BBFFBBFRRR", "BBBFFFBRLL", "FFFBBBBRRL", "BFFFFBBRRL", "FFBBFBFRRL", "BFFFFBFLRL", "FBBBBFBRLL", "BFFBBBBRRL", "BFFBBBBRLR", "FBBFFBBLRR", "BFBBFFBLLR", "BFBBFBFRRR", "FBFBFFFLRL", "BBFFFFBRRL", "FBFFBFFRLR", "BBFFFFFLLR", "FBFFBBBRRL", "FBBFBFFLLR", "FBBFFFFRLR", "FBBBBFBRLR", "FBFFBFFRLL", "BFBFFBFRLR", "BBFBFBBLRR", "FBBFBFBLLR", "FFBFFBFRRL", "BFFBBBFRLR", "FBFBFBBLRR", "FBFFBBBLLR", "FBFFBFBRRL", "FBBFBFFRLR", "FBBBFBBRRL", "FFFBFFBRRL", "BBFFBFFLRL", "FBBFBBFRLR", "BFFFFFBRLL", "FBBFFFFLRR", "FBBBBFFLLL", "BFBFBFFRLR", "BFFFFFBLRL", "FFBFBBFRLL", "BFBBFBBRRR", "FBFFBBFLLR", "BBFFBFBLRL", "FFFBFFBLLL", "BFBFFFFRLL", "BBFBFBFRLR", "FBBFBBFRRL", "BFBFFBBRLL", "FBFFFFBRLR", "BBFFFFFRRL", "BFFBBBBLLL", "FFBBBBFLRL", "FBFFBFBRLR", "FBBFBFFLLL", "FBBFBBFLRR", "FFBBFBFRLR", "FFBBFBBLRR", "BFFBBFFLRR", "FFFBBBBLRL", "BFFFFFFRRR", "FBFFFFBLRR", "FBFBBFBRLR", "BBFBFFFRRL", "FBBFBFBLRL", "BFFBFFBRRL", "BFFFBFBLRL", "FBBBFBFLLL", "BFFFBFFRRL", "BFFFBBBLRR", "FFFBFBFLLL", "BBFFBFBRLL", "BBBFFFFRRR", "BFFFFBBRLL", "BBFBFFBLRL", "FBFFFBBLLL", "FFBBBFBLRL", "BBFBBFBRLL", "FFFBBFBRRL", "BFFBFBFLRR", "BBFBFFBLRR", "BBFBBBBRLR", "BFBBFFBLRR", "FBBBFBBRLR", "BBFFFBFLLR", "FBFFBBFRLR", "BFBBFBBRLL", "BFBBFFBRLL", "FFBBBBBRLL", "BBFFFFBLLR", "FBFFFBBRRL", "BFBFFFBLRL", "FBBBFFBLLR", "BBFBFBBRLR", "FBFBFFFRRL", "BBFBFFFRLL", "BBFBFFFLRR", "BFBBFFFLRL", "FBFBFFFRRR", "BFBBBFBLRR", "FBBFFFFRRR", "BFBFBBBLLL", "BFFFFFBRRL", "BBFFFFBLLL", "FBFFFFFLLR", "BFBBBFBRLL", "FBBFBBFLRL", "FFFBFFFRLL", "BBFBBFBLRL", "BFFFFBFLLR", "FBBBBFBLRR", "BFBFFFBLRR", "FFFBBFFRRL", "BFBFBBFRRR", "FBFFBBBLLL", "FBFBFFBRRR", "BBFFFFBRLR", "BFFBFFFLLR", "BFBBFFBRLR", "FFBBFFFLLL", "FBBFBFFRRR", "FBFFBFBLLL", "BFFFFFFRRL", "FFFBFBBLRL", "BFBFFBBLLL", "FBBFBFBRRR", "FBBBBBFLRR", "FBFBFBFLRR", "BBBFBFFLRL", "FBBBFBFLRR", "BBFBBBFRLR", "BBFFBBBLRR", "FFBFBFFRRL", "BBBFFFBLLR", "BFBBFBFLRR", "FFBFFFBRRR", "FBFBBBBRLR", "FBBFFBFLLL", "FBBFBBFRLL", "FFFBBFBLRR", "FFBBFFBRLR", "FBFBBBFLLR", "FBFBFBBRRL", "BFFBBFBLLL", "BFBFBFBLRL", "FFBFBFBLRR", "FBFFBBFRLL", "FFBBFBBLRL", "BFBBFBBLRR", "BBFFBFFRRL", "FBBFFBFRLR", "BFBFBFBLLL", "FBFFFFBLLL", "FBFBBFBRRR", "FFFBFFBRLR", "BBFFBFFLRR", "BBFBBFBLLR", "BFFFFFBLLL", "FBBFBFBLLL", "FFBFBBFRRR", "BBFBFFFLLL", "FFBFBBFLRL", "FFFBFFBLRL", "BFFBFFBRLL", "FFFBFFBLRR", "FFBBFFBRRR", "BFBFBBBRRR", "BFBFBFFLLL", "FBFBBFFRLL", "FFBFFBFLRL", "FBBFFFBLRR", "BFBBFBBLRL", "FBFBBFBLRR", "FFBFBFFLLL", "FFFBBBFLLL", "BFBBFFFLLR", "BBFBFBFLLR", "FBFFBFBLLR", "BFBBBBFRRR", "FBBBBBFRLL", "BBFBFBBRRR", "FBBFFBBRRR", "FFFBBBBLLR", "BFFFFFBRRR", "BFFFFFBLLR", "BFFFBFBLLR", "BBFFFFFLLL", "BFBFFBBLRL", "BFFBBBFRLL", "FBFBBFBRLL", "FFFBBFFLLL", "FBBFFBBRLL", "BBFFFBBRLL", "FBBBBFBLLR", "FBBBBBBLRR", "BFFBBFFLLL", "BFFBBBFLLR", "BBFFBFBRLR", "BFFBFBFLRL", "FFBBFFBLLR", "BFFFBFFRRR", "FFBBFFFRLR", "BFFFFBFLLL", "BBFFBFFRRR", "BBBFFFBLRL", "BFFBBBFRRL", "FFBFFFFRLL", "BBBFFFFLLL", "BBFFBBBRRL", "FFFBFFFRRL", "FBFBBBFLLL", "BFFFBFBRLR", "FBBFFBFLLR", "BBFFBFBRRL", "FBFFFBFLRR", "FFBBFBFRRR", "BBFBBBFLLL", "BBFBBFBRRR", "BFBFFFFLRL", "FBBBFBBLLL", "FFBFBFFRLL", "FBFFBBFLRL", "BBFFBBFRLR", "BFFFBBBRRR", "FBFBBBFRRR", "FFBBFBBRLR", "FFBFBBBRLL", "BFBBFBFLLL", "FBFFBFFLRR", "BFBFBBFRRL", "BFFBBBFLRL", "BFBFFBBLLR", "BBBFFFBRRR", "BFFFBBFLLR", "FBBBBBFLLR", "FBFBFBFLRL", "FFBBFFFRRL", "BFBFFBFLRR", "FBFBFFFLLR", "BFFFFFBRLR", "BFBFFBBRLR", "BFBFFFBRLR", "FBBFBFBRLL", "FFBFFFBLRL", "FBFFFFBRRL", "BBBFFBBLLR", "BBFFFBBLLR", "FFBFFBFLLR", "FBFFFFBLLR", "FBFBFBBLRL", "FFBBBFFRRL", "FFBFFFFLLL", "FBFFFFBRRR", "BFBBBFBRLR", "FBBFBBFRRR", "FBBFBFBLRR", "BFBFBFBLRR", "BBBFFFBLLL", "FFBFBFBLLL", "FFFBBFBLLR", "BFBFBFFLRL", "FFFBBBBRRR", "BBFBFBBLLL", "FBBFFFBRRR", "BFBBFBBRLR", "BFFBBBBLRL", "BFBBBBFLLL", "BFBFFBFRRR", "BFFFBFFLRR", "BFBBFFBRRR", "BFFFBBFRRL", "BFFFBBFRLR", "FBBFFBBLLL", "BBFBBFBLLL", "BBBFFBFLRL", "BFBBBFBRRL", "BBFBBBFRLL", "FBFBFFBRRL", "BFBBFBBLLR", "BFFBBFBLLR", "FBBBFBFRLR", "FBBFFFBRLR", "BBFBFFBLLL", "FBBBBBFLRL", "BBFFFBFLRR", "FFFBFBBLLR", "BBFBBBFLRR", "FFFBBBBRLL", "FBBBFFFRLL", "FFBFBFFRLR", "FBBBFBBLLR", "BBBFFBFRRR", "BFFBFBFRLR", "FBBBBBBLLL", "FFBFBBBRRR", "FFBBFFBRLL", "BBBFBFFRRL", "BFFFBFFRLR", "BFFFBFFRLL", "BFBBBFBLLL", "FBFBBBBLRR", "FBBFBBFLLL", "FBBFFBBRRL", "BBFBFBFLLL", "FBBBFFBRLL", "FBBFBFBRRL", "BFFFFFFRLR", "BBFBFBFLRL", "FFBBBFFRLR", "FFFBBBFRRL", "FBFFFBBRLL", "FBBFFBBLLR", "BFBFFFFLRR", "FFBFBBBLRL", "FFBBBFBRRR", "BBFBFFBRLR", "FBBBBBFRRL", "FBFBBFBLLR", "BFBFBBFLRL", "BFBBBBBRRR", "BFBBBBFLLR", "FBBFBFFRLL", "FFBBBFFRRR", "FBFFFBFLLR", "BBFFFBFLLL", "FBFFFFFLLL", "BFFBFBBLLL", "FFBBFFBRRL", "BBFBFFBRLL", "BBFBBFBRLR", "FFFBFBFRLR", "BFFBBBBRLL", "FBFFBBFLLL", "BBFFFBFRLL", "FBFFBBFLRR", "BFBFFBFRRL", "BFFBBFBRRR", "FBFBBFFLRL", "FFFBBBBLRR", "FFBBBFFLLR", "FBFFFBFLLL", "FBFBFBBRLL", "FBFFFBFLRL", "BBFBBBBLRR", "FFBFFFBLLR", "BFFFFBFRRR", "FBFFFBBRLR", "FFBBBFBRRL", "BFFFFBFLRR", "FBBFFBFRLL", "BBFBFBFRRR", "FBFFFFBRLL", "FFBBFFFLRL", "FBFFFFFRRR", "BFFFBBFLRL", "FFBBFBFRLL", "FBBBBFFRRR", "FBFBBBBLLR", "FFBBBFBLRR", "FBFFFFFRRL", "BFBFFFFLLL", "BBFBFBBRLL", "FBBBBFFRRL", "FFBFFBFRLR", "FFBBFBBRRR", "BBFBBBBRRR", "BFFBFFFRLL", "BFFFFFFLRR", "BBFFBBFLRL", "FFBBFFFRRR", "BBFBFBFLRR", "FFBFFFFRRL", "FBFBBFFLLR", "FBBBFFBRLR", "FBFBBBFLRL", "BFBFBFFLLR", "FFFBFFFLLR", "FBFFBFBRRR", "BFBBBBBLRR", "BFFBBBBLLR", "BBFFFFFRLR", "BFFFFBBLRR", "BFFBBFFRRR", "BBFBBBBRRL", "BFBFFFFRRL", "FFBFBBBRRL", "FBFFFBFRLL", "FFBFFBBRRR", "FBBBFBBLRL", "FFFBFFFRRR", "FBFBFFBRLR", "FBFBFFFLRR", "FBFFBFFRRR", "FFFBFBFRRR", "FFBBBBBRRL", "BFBBBBFRLL", "FFFBFBBLLL", "BBBFFFBRRL", "FFBFBBFLRR", "FBBBFFFLRR", "BFFBBFBLRL", "FFBFBBBLLL", "FBFBBBFRLL", "FFBFFFFLLR", "FFBFBFFRRR", "FBBFBBBLLR", "BFBFBFBRLR", "BFBBFFFRRL", "FBFBBFBLLL", "BFFFBBBLLR", "BFFBFFBLLR", "FBBBBBFRLR", "FBBBFFBRRL", "BFBFBBBLRR", "BFFFBBBRLR", "FBFBFBBRRR", "FBFBFFFRLR", "FBBFFFFLLR", "FFBFBBBRLR", "BBFBBBBRLL", "FBBBFFFLRL", "FFBFBFBLRL", "BBFFBBFRLL", "FFBFFFBLRR", "BFFBFFFLRR", "FBFFFBBLRL", "BFBFFFBRLL", "BFBFFFBLLR", "FFFBBBFLRR", "FFBBBFBLLL", "FFBBBBBLRR", "FBBBBFFRLL", "FBFFFFFLRL", "FBBBBFFRLR", "FFFBBFFLLR", "BBFFFFFRLL", "FFBFFBBRLR", "FFFBFBFRRL", "BBFBBBFLLR", "BFBFFFFRRR", "BFFBFFFRLR", "FFBBFFFRLL", "FBFBFBBRLR", "FFBFBBBLRR", "BFBFBBBRLR", "FFBFBBBLLR", "FFBFBFBRRR", "FBBBFFBLRR", "FBFBBBFRLR", "FBBBBBBRRL", "FFBFFFBRLL", "BFBFFBFRLL", "FFBBBBBLRL", "FBBBBFBRRR", "BFFBFBFRLL", "BBBFFFBLRR", "FBBFFFBRRL", "BFBBBBBRLL", "BBFFBFFLLR", "FBFFBBBRLL", "FBBBFBFRRL", "BFFFBBBRLL", "FBBBFBFRLL", "BBFFFFBRRR", "FBBBFBFLLR", "FBBBBBFRRR", "FFBFFBFLRR", "FFBBFBFLLL", "BFFFBBFLLL", "BFBFFFBRRL", "FFBFFBBRLL", "BFBBBBBLRL", "BFBFFBFLLR", "FBFBFBFRLL", "BFFBBFFLRL", "BBFFFFBLRR", "BFBFFFFRLR", "BBFBBFFRLL", "BFBBBFFRRL", "BBFFBBBRRR", "BBBFFBBLRL", "FBBBFFBLLL", "BFFFFBBRRR", "FBFBFFBLRL", "FBBFFFBLLR", "FFBFFBFRLL", "BFFFFFFLRL", "BBFFFBBLLL", "BBFFFBBLRR", "BBBFFBFRLL", "FBFBFFFRLL", "FBBBFFFLLL", "BBFFFBBLRL", "FBBBFFBLRL", "FFBFFBBLRL", "FFBBBFFLRR", "BBFBBFFLRL", "BFFFBBBLLL", "BBFBBBBLLL", "FFBFFFFLRR", "BFBFBBBRLL", "FFBBFBBRLL", "FFBBFFBLRR", "FBFBBBBLLL", "BFBBFBBRRL", "BFFBFFBRLR", "BFFFFBFRLL", "BBFBFFFRRR", "FFBBFBBLLR", "FFBFBFFLRL", "BBFBBFFRRR", "FFFBBBFRLL", "FFBFBFBLLR", "FFBBBFBRLR", "BFBFBFBLLR", "FFFBBBBLLL", "FBBBFFFRRR", "FBFFFBFRLR", "BFFFFBBLRL", "FFFBFFFRLR", "BFBFFBFLRL", "BBBFBFFRLL", "BFFBFFFLRL", "BFFBFFBRRR", "FFBBBBFLRR", "BBFBFFFLRL", "FBFBBFFLRR", "FBFFBFBLRL", "BFFFBBFLRR", "FBFBBFFRRR", "FBFBBFFLLL", "BBFFBBFLRR", "BBBFFBFLLL", "BFFBBBFLRR", "FFBBBBFRLR", "FBFFFBBRRR", "FBFFBBBRLR", "FFFBBFFLRL", "FBFBBBBRRL", "FBBBBFFLRR", "FBBBFBBLRR", "BFFBBFBRRL", "BFBBFFBRRL", "BFBFFBBRRR", "BFBFFFFLLR", "BBFBBBBLRL", "FFBBFBFLRL", "FBFFFBBLRR", "BFFBFBFRRL", "BFFFFBBLLL", "FBBFBBBRLR", "FFBFFFBRRL", "BFFFFFFLLL", "BFFFFFBLRR", "FFBBBFFLRL", "FBBBFBFRRR", "BFBBFBBLLL", "BBFFBBBLLL", "BFBBFFFRLR", "BBFBFFFLLR", "FFBFFFBLLL", "BFBBBFBRRR", "BBFBBFFLLR", "FFBFBFBRLR", "FFFBFBBRRL", "BFFFBBBRRL", "FBBFFFFRLL", "FFBFFBBLLL", "BFBBBFFLLR", "BBBFFBFLLR", "FBBFFBFRRR", "FFBFBBFLLR", "BFFBBFFLLR", "BFFBFBBLRR", "FBBFBBBRRL", "FBBFBBBLRR", "FBFFBBBRRR", "FBBFFFBRLL", "BFFBBFFRLL", "FFBBFBFLRR", "FBFFFFBLRL", "FBFFBBFRRR", "BFFBBFFRRL", "BBBFFBBLRR", "BFFFBBBLRL", "FFBBFBFLLR", "BFFBFBBRLR", "FBFFBFBRLL", "FFFBBBFLRL", "FFBBBBBLLR", "BFBFBBFRLR", "FBFBFFBLRR", "FFFFBBBRRR", "BBFFBFBLLR", "BFFFBFBRRR", "BFFFBFBRRL", "BBFFFBBRLR", "FFBBBFFLLL", "FBBBBFBLRL", "BFBFFFBLLL", "FFFBFBFLRR", "FBBFBFFLRR", "FBBFFFBLLL", "BFFBBFBRLL", "FBFFBFFLLR", "BFFFFFFRLL", "FFFBBFFRRR", "FFFBBFBRLL", "FBFBFBFLLL", "BFBFBFBRRL", "FBFFBFBLRR", "FFFBBBBRLR", "BFFFBBFRLL", "FBBBFFBRRR", "BFBBBFFLRR", "BFBBBFFRLR", "BFBFBFFRRL", "FBBFBFFRRL", "BFFFBFFLLR", "FFBFFBFRRR", "BFBFBBBLLR", "BBFBBBFLRL", "BBFFFFBLRL", "BFFBBFFRLR", "BBBFFBFRLR", "BFFBBBFLLL", "BBFFBBBRLR", "BBFBBBFRRL", "BBFFFFFRRR", "BBFFBBFLLL", "FFFBBFFRLR", "BFFBFFBLRR", "BBFFBFBLRR", "BBBFFFFLLR", "FBBBFBFLRL", "FBBFBBBLLL", "BFFFBFBLRR", "FBBBBFBLLL", "FFFBFBBRRR", "BFFBFBFLLL", "BFBFBFBRRR", "FFBFFFFLRL", "FBBBFBBRRR", "FFBBBBFRLL", "BBFBBBBLLR", "BFBBFFBLLL", "BFBFBBBLRL", "BBBFBFFRRR", "FBBFFFBLRL", "FBFFBBFRRL", "FFFBFBBRLR", "FBFBBFFRRL", "FBFBBFBLRL", "BBFBBFFLLL", "BFFBFBBRRL", "FBFBBBBLRL", "FFFBFBFLRL", "BFFBFFFLLL", "FFBBBBFLLR", "FFBBBBFLLL", "FBFBFFFLLL", "FFBFBBFRRL", "BBBFBFFLRR", "BFFBBBBRRR", "FFBBBFBRLL", "FFFBBFFLRR", "BBFFBFFLLL", "BBBFFBFRRL", "FBBFBFBRLR", "FBBFBBFLLR", "FBBFBBBRRR", "FBFBBFBRRL", "BFFFFBFRLR", "FBBFFFFLLL", "BBFBBFBRRL", "BFBFFBFLLL", "FBBBBBBRLR", "FBFFFBFRRL", "BBFFFBBRRL", "FFBBBBBRLR", "FFFBBBFRLR", "BBFBFFBLLR", "BFFBFBFRRR", "BFFFBFBLLL", "FBFFFBBLLR", "FFBFBFFLRR", "FFFBFFFLLL", "BBFFFBFRLR", "BBBFFBBRRL", "FFBBFBBLLL", "BFFBFFBLRL", "FBFBFBFRLR", "BFFBFBFLLR", "FBBBBBBRLL", "BBFBFBBRRL", "BBBFFFFLRR", "FBFBFFBLLR", "BFBFBFFRLL", "FFBBBBBRRR", "BFBBBFFLRL", "BFFFFBBLLR", "BFBBBFBLRL", "BFBBBFFRLL", "BBFBBFFRRL", "BFBFBFFLRR", "BFBBBBFLRL", "FBBBBFFLRL", "BBFBBBFRRR", "FFBBBFFRLL", "FFFBFFFLRL", "BFBBFFFLRR", "FBFFBFFLRL", "BFBBFBFRLL", "FFBFFBFLLL", "FBFFFFFRLL", "BFFBBFBLRR", "FBFFFFFLRR", "FBFBFBFRRL", "BBBFBFFRLR", "FBFBFFBLLL", "BBFFFFFLRL", "BFBFBBBRRL", "FBBFFBFLRR", "BBBFFFFLRL", "BFBBBBBLLR", "BBFFFFFLRR", "FFFBBFFRLL", "BFBFBBFRLL", "BFBBBFFLLL", "BBFFBBBLRL", "BBFBFBFRLL", "FFBFFBBRRL", "FBFBFBBLLL", "BBFFBBBLLR", "FFBBFBBRRL", "FFFBFFBRLL", "BFBFFBBRRL", "BBBFFFBRLR", "BFBBFFBLRL", "FFFBFFBLLR", "BFFBFBBLLR", "FBFBFBFLLR", "BFFBFFFRRL", "FBBFFBBLRL", "BBFFFBFRRR", "FFBFFFFRRR", "BFFBFBBRRR", "FBFFBBBLRL", "BFFFBBFRRR", "BBBFFFFRLR", "BFBFBFBRLL", "FBBFFFFRRL", "BBFFBBFRRL", "BFBBBFBLLR", "FFBFFFBRLR", "FFFBBFBRLR", "FBFBBBFRRL", "BBFFBBFLLR", "BBFFBFFRLR", "FBBFFBFRRL", "FFFBFFFLRR", "FFBBBBFRRR"]
:p maximum $ for i. getSeatId $parseBoardingPass full_data.i
' ## Part 2
Find the seat ID that doesn't occur, and isn't right at front or back
This would be easy if we had a set.
But with only an array it is too slow
But we can make a BitSet out of an array
and the SeatId tells us which bit to set.
But to do this we are going to need to do code with effects.
So that we can set elements in that bitset.
' This is the number of cells we will need
num_seats = getSeatId $ parseBoardingPass "BBBBBBBRRR"
all_possible_seats = for i:(Fin num_seats). False
taken_seats = snd $ withState all_possible_seats \takenRef.
for i.
seat_id = getSeatId $ parseBoardingPass full_data.i
takenRef!(seat_id@_) := True
' now we need to find the first false that occurs after a true
data SearchState =
NotStarted
Active
Finished
myseat = snd $ fold (NotStarted, -1) \i (state, found).
cur = taken_seats.i
case state of
NotStarted -> (select cur (Active, found) (NotStarted, found))
Active -> (select cur (Active, found) (Finished, ordinal i))
Finished -> (Finished, found)
:p myseat
:p taken_seats.((myseat-1)@_)
:p taken_seats.(myseat@_)
:p taken_seats.((myseat+1)@_)
'# Advent of Code 2020. Day 6
DexLang, [Lyndon White](http://oxinabox.net)
https://adventofcode.com/2020/day/6
def asindC (c:Char):Fin 26 =
(I8ToI ((codepoint c) - (codepoint 'a')))@(Fin 26)
:p asindC 'a'
:p asindC 'z'
-- copied from the plotting branch
def str (n:Int) ?-> (s:(Fin n=>Char)) : String = AsList _ s
full_data = [str "necytxmlfhsu\nuecosjvlhpmk", str "mnslbuziphawkxyg\nwhpmnesikaglzb", str "kaw\nakw", str "qurg\nhrqug\nqrgu\ngruq", str "sczomkv\nzejkhvslmucbwdo\npxsianovzcmk\ntcokmvsyz\nozskvimcr", str "tfzajkxngwsqrbleic\ntijoqnerxsplwzgabkfc\nogkezbiwqtaxrscljfn\nxsqauezwnjckbtgiryfdml", str "piz\nzip", str "tlp\nnpl\nlpt", str "idbnxuclqgw\nsxfdnlatmbhcowigj\nplzgbwdqkcinx\nydxinwgcblr", str "nbuxjwhsrlekfyzpq\nkecyiurjfvqpbxhzsn\nnkxfhpbsuyrqjezom\ntinlhkbjsuydrqpzexf\npnzraelgquxhydsbjkf", str "obvmw\neoczsqun", str "nhdxqwk\ndnzmlxwhkapq\nwhxqdnk", str "jnqdabgc\nnacqdbgj", str "buyskiwz\nuazbkwys", str "mbfxswpli\nuswalhxz\nxnq\ntdcrjgoyekv", str "fancdpkmtuqy\nzdmenqjpaxftuy", str "jkul\nd\no", str "vhpoxgqsrtce\nhgopxeqcdrstv\nxcvrqoetpsgh", str "gekpzayfux\npyegazxukf\npkxaezhgyfu\nfegypukaxz\nzxpyefugka", str "yrpfd\nydsh", str "smjqcafnug\nmnicqsu", str "tkxi\nixakt\ntfncxkmi", str "kedibluzopjhagvtxf\nafiklbvtjeoudhgpzx\nlavbxpjzgedktoifuh\ntbgpaxjqeoifvklhzud\nzghidtfplxbvkoueja", str "gtvnqyrmf\nhogpb", str "cnelsqwj\natyimdbvfxuozkg", str "lgybpaeztvhrxducjiqosmnwk\nivpaygxweszductombhljrqk", str "grli\nlrig\nsjglri\ngirl\nrigl", str "qnwmxjbpecoyztufidhsg\nynqdiwhmusgtebjfzxcpo", str "luasrtmfkgywv\nvgskmufywrat", str "ceyux\nycux", str "nurijfsovkbxdp\nayqclmthgzwe", str "xeqjdhsubiovwrg\ngobdjqwvusehrx\nweqjgvhosudrbx\nngdubsvqxejrhow", str "ywdfqpxekujbovr\nyujfdoqbkxrepvw\nowfkudjbvyrxqep\noqjvedypxukwbrf\nxufwdpebyjrqokv", str "csujqndzmw\nwznscqmjud\ncqpwjzmunda\nwjumnzcqd", str "dhsow\nohswd\nwsnogh", str "cxfltiq\nixztfq\ngtfqiux\njtqfxi\nxiftzq", str "tr\nrt\nrt", str "pnuztcbegwiksd\ncuewibkptdnm\nnvqdpcjxekiwtauhofb\npbytreinuwdkc", str "y\ny\nhejq", str "rvmwqn\nwvrmq", str "knxmwecsjlrft\nhnmwzaqt\ndmywnitg\ntmwvquonh\nbwqvtmnh", str "e\ne\ne", str "qjtywgdlek\nnhifs\nzvxinh", str "nzhroemi\ndzruoegimh\nemzoirh", str "hpfkraltbxg\ngazxlmphrt", str "jyhugbxqz\nzbnox\nepdilfaw", str "vmr\nvsfm\nfmvsr\nmnvckiaqy", str "zegpfuwtkrnoqdh\neorznfkgpduth\ntkfpzhnredguo", str "zmqkwxipctney\nncwzeqpmkiytx\nyptienwzxkcqm\nyeqwcpxtkzmin", str "csbdyzl\nejoiwtzqabm\nlzbkup\nzbvprxf", str "wvpshngbmiftuzrxoyde\nszobihvwpdtylqerc\nphbdzoikvtajyesrw", str "ymuflnrxspqvkihbe\neymxrhlfnqksuivbp", str "rktwzd\nwtdkzir\nwkmaziqdrt\ntogpzwdkr", str "uwiazbylcpojst\nlcyibajuptwzso", str "dtoqbcxhlyrpfwjnkasugvm\nwunkfstmcjhqxliogrdvpy", str "wpnk\nhdpkwuftjymv\ncpkownz\nkpwz\nrqpwnk", str "tfplznqcju\npuqlsnzfjtv\njqtfpzlun\nntqpczjflu", str "ozalwumpqv\nztheoalrwsciyk", str "wyiqbsr\nbysqwri\nyrbswiq\niqwrsyb\niwbrysq", str "elnroc\nzmjlre\nvhelbru\njyhruezflvk", str "ftyceboh\nofybh", str "jvlbdm\nnoakrg", str "dokjncqauebfpmszvtl\nsuebonpdjmflaqctkvz\ndtjzmcblsvokpunaefq\ntjzmeqkafluvpbconsd", str "qhrmvegsicnyupf\nuifknverhsg\nizlrvgefndjwasuh", str "syxvtjwfucilqogmnpk\njwkytpqofgimvcsnlxu\ndwhglcxzoqnmjfkuiyvpst\nygwntxipqlmvkufcsoj", str "hdnqaburow\nhqwadmbocsgue\nbwoqtuadh\nadqhbwuo", str "dzfohqe\nehfqzod\nfdzhoqe\nhdofzeq", str "sxmkrghyvlwzbc\nyhkmwzxbgsvlc", str "qdumkytwlfsrja\ndrfqukzymilsjaw\njkwqumylsardf", str "pcvs\nprvc\nhmbpvc\nsvrpzc", str "epkjyc\njerpoy\ngjpye\nabxepuyj\nejyopc", str "ohe\ngheo\neoh\nofehy", str "klhziowmjpyfubdsaqtgvrcn\naytbormdiksnqpzhcfvulgjw\nlhmvkafdrscjgwnyiuptqobz", str "vcrqpdxljnmgusie\ncgdwmipluoe", str "hqibentfmxyszljow\nmsozdjnibrfytxqhle\nimlyxwehznjsbft\nysifkzbljphuxcmenvt", str "vjhdmkrpecniafgqlstxyzb\nzxjrkebfvcwyqihlsmpgtd\nxrfzidgthsbklmveypqcj\nvjxytzgdlbefsirkcmpqh", str "dyxrwbngpijkt\nxtwkdipaygjr\niklrmzwpjxgdtuye\npdgrxyjkitw\nxtirhvwgdkjyp", str "zbjdt\njdat\nshouqjtxcd", str "klarpuiv\niqaxjdps\ncpnafbsi", str "xfpiourcst\novfrlutxpb\ntrgqfxjuop\nrsktucfpox\nrtufoqpx", str "g\ng\ng", str "nfutbyvj\numvwyi", str "tjniwlydzqpsxbkcmugf\nutpmixqdvzbfcwgljs", str "wetypdlnxm\ncfavwyzji\nmywgu\nlyorqkbw\nwhdeyxp", str "qsbnwozepvhkmaxdrt\nqmsopwtaznxfkehdyrv\nxnvhwrzpemkqdtsoa\nituvkrhmdegazwsobnxpq", str "fxhwdio\nhofdxi\nhivztfonxdg\nfhkoidx", str "ja\njca\najzxt\nahjy\ntajc", str "epan\npcn\nudn", str "mfowepjdlnkags\noakwgflnp\npnlzgoawfk\nkfgrowlnap", str "uw\naimwo\nwzrhcjeq\nwtf\nw", str "x\ntvx\nx", str "tigsjdufrwomv\nvjrstigqudohwkm\nvisrjodutwbmg", str "ety\nexatp\nhicfzqnb\nuvejo", str "oqlgmk\nkgvqxd\njzhgkpdqy\nikegfwatqub\nnlogqkz", str "sl\nq", str "rkpew\neqrwk\nrakwe", str "r\nr\nr\nrb", str "u\npua", str "pjmhtvd\ndrjnpuvib\ndjsplvy\ndpvj", str "caugyqs\nhxwyqst\nsougylqre", str "krfshpzjmgav\nuwrqidcotlbxhj", str "mzivctbfjgwq\nlsomkypgajiq", str "ikoamrpc\nkmociarp\nbrkmpiwycoa\nitmckrodpa\nkmipacro", str "htbpcdqx\nctpbxdq", str "gpduzcoiyxhleqrknbaw\nnirehbulapcoxkzwdy\nicuzyxopwhkalendrb\naokdrxhlcebpyiuwnz", str "yzlvptdaubjerkh\niyaoltghebpndkjszr\nkqxjtldzpbcyawh\ndbjtlavzmfhkyp", str "vg\nsv", str "cdiaynroehqw\ncqtaridyohewn\ndciornehwayq\nrwhnoaeqicdy\nwqroadniechy", str "ivstkj\nvgciqk\nqkivg\nvkgi", str "fp\npf\npf\nfp\nfp", str "xidyqnk\njbicfant\nzabfhin", str "oqtys\nstqyo\nsyqot\nyostq\nboqytws", str "gmnqxaictud\ntucidaxqnmg\npgtquxidcnma\niagdtcfmquxn", str "yfhxgw\nrgn\nnsog", str "wndrqktbmfa\nfwqadkrtbnm\nmabfntkqword\nqbwntakrmdf", str "elanoudxhbzfrtvci\nztalefiodxrubvckhn\nulvabcnthpdzxoifer", str "omdrvepliwafhjynbscu\nmblrxjsfahocwnvyu\numcjlsowatvnfybhr\nuahvcnbwlmsjzfoyr", str "n\ntn\nn", str "grk\nrgk\nkrg\ngkr\nrgkhv", str "stmlnek\npgsltne", str "alcztk\nbctvk\nkhcgtb", str "nsgevcthrpykbwfoizda\nkhneritgszvbfycaowdp\nivybwzeaogdsrnfctphk", str "e\ne\ne", str "cxkzdbgiqyawnm\nafyvkbeirtjowmcl", str "omb\np", str "lnhwcoiyafs\nsoihnyxqfc\nohncjyifsq", str "o\no\nom\noxqnsd\noaj", str "okucjhiq\nxpgwcnqjiomyfluk\nirhoukdsbjqc", str "uolgz\nnglczu\nzlngu\nzmhlgvjru", str "mhdapszf\nanmfwdvkc\ndpamf", str "aqleivtyzsogjc\nsyvbgxqpdflezoac\nilvzqsjaegokyc", str "zxndhja\nhaxzd\nxhazd", str "mo\nom\nmo\nmo", str "vfxep\nxfepv\nxevpf\nvexfp\npevfx", str "mrtkehqnjxizgp\nkbunrqytcmes", str "nz\nipneu", str "bznteo\ntbzeoqwp\nolftzbpk\ngrzvityxudohjma", str "xg\nrg", str "rdu\nurvd\nrud\nrzud", str "somnbutz\ntuosnmb\nntomsbu", str "fxsvrzqntbueoyp\neqzsvxyunbroptf\nzvypnrxfsqebuot\nzrosbxeqpunvfty\nzprtfvsnbquexoy", str "qwzknfvl\nfunqlwkj\nnqkwflz\nfgxlkwzqn", str "rzqihd\nrbz\nzr\nuzer\nrbz", str "utrq\nosa\npm", str "zgdci\nbrhu", str "bxvymlzqkpha\nvmhlakpyxq\nypxvqkmhal\nxhvpymaqkl\naplqvkhmyx", str "sjntbvyogeplwzu\nrbjqiefhapxodwk", str "frlsoptqwbc\nljrzxqntfom", str "zlhvjamtpfonk\nlcokjzdhmfvnp\nsiohzynkmbjvlrf", str "osvgwnticelpzm\njvswetpozlcg", str "npmgrvysfj\nnvqxrjfsgmp\nvofthkcjsblpmudizwr", str "oiev\nlmeiov\noiezyv\nuievodkac", str "iforupqjzykdtc\nyqfhdcxvtopz\ntzqpfdycgo\nceyqfozvtpd\ndpxqflohzyatc", str "srz\nzsrt\nstrz\nxzs\nsz", str "dgo\nodg\nogd\ndog\nqogd", str "gotwqhick\nokhqtgicw\ngsouwitkjcqh\nhctgioqwk\ntkghocwiq", str "mfnziwvxtlpubqryojasd\nmzojuctvnbriypwflskqda\npmuavqjifnlhrtbyzwods", str "ozj\njoz\nzjo\njzo", str "jzwbhrscm\nrzmhjctb\nzbrhcmj", str "sucgimtr\nmyliojcrsg\nipcsegxrmv", str "znhvi\nhvin\nwosganie", str "wptoqxmafhg\nawqfhgcozmtx", str "azbqlviyrwjc\nybxcrawv", str "qa\nvcuwbfgsl\nhkraj", str "biglkjtpoqs\nzvxcfumeywrhand", str "ske\ns\nsp\nhs", str "n\nyn\nn\nn\nn", str "lrvsmxzkgi\nzgrmkdsxl\nlzgmpakrs\nwgqtrkmsfz\nnirmkugzds", str "crewvjdqsplkibthxz\nwxjmtpirhalqsckbdz", str "iecxrbplho\nxhrpibovlce\nbrxlgchopei\ncbhioprexln\nlchxirebop", str "f\nf\nq", str "nxqkrhdi\npkhdrquxn\nynqdlxkh\nxghkndq", str "wvknrdjx\nvknxrwdm\nkfvicpwndb", str "rcqwlutsanpdz\nyoxenmkvbjf", str "izqsa\nsqzai\nzqsai\nosiazq\nizqsa", str "ysokhbpzcqanmdifw\nkdlowyusmqhbjxci\nhibkmzocndqswy", str "yjwd\nbgas\nyj\nk", str "tzruq\nuorz\nzckrvux", str "rjn\nnrj\nnrj\njrn\nnjr", str "ecu\npzus\nwokxu\nruw\ntwu", str "fcnajztduyripl\nchmpkvlynsxrauobji", str "cwfgtjre\nejwufr\nfrwje\nnewvryfjbhq\niwjextrf", str "ltqapiwhzfeoncxdg\nhndclgoxeiwtpqfz\ncwnpdogxteilfqhz", str "uerinxhsygpbzcdvfmo\nlxeihducozgqnrymb\nedmugnyxifoczrbha\nucezhnrsdybmiotgx", str "xuvfhjeyi\nztcgaqs", str "yxrospmijwvcdb\nyjpbrcosuv", str "viuhdrgnlak\nlniaruvkdgh\nkhrgdnuiavl", str "qfzxb\ngfqx", str "k\nnzyo\nkcj", str "bmi\nbmi\nimb\nimb\nubmi", str "pl\npl\npl\nlp", str "x\nv\nx", str "hgwtocs\ngdctwhoi\niczwfgtoxh", str "wrcjdaqm\nwsrlog\njrnqmcw", str "ouhmpnyskxcqafidbjvgt\ndnimvbpytfsoagucjx\njpctsmuxiaovyqnfdbg\ngzbvfwmojuyxsrdtpcna\nyxfolphstnabcmuvjgd", str "nlrdxe\nceksxuhazmjo\nywxedfgqtpr", str "ckuwoghtaxrledvzms\nmtksozduwvrehxclag\nxwvcusrmlazoetkdgh\nregwvshxkdzuctomal", str "khsnymbpjz\nhzknspmbj", str "zqc\nkpgsjrqxiyd\nwtbuhoq\nqwc\neq", str "ljewzy\nqlwjy\nwzljy\nlwyj\nljwy", str "vpodmhni\nbvryknfg\njcutez", str "wedfcoh\nwigfnjkaoz\nexwoqfm\npfuohsw", str "adyzjwgqxv\nqjwvxzagyd", str "cazpofbyd\nnodypfbcam", str "ukvrcslyqzamhteowdfibx\nktrgqpmnawdycsivhzlbefx\nfxdabuylcveksjwrmzqhtio", str "xyb\nxesy\nxdqcy\nyex\nxy", str "hotd\nodhzqt\nothd\nhtod", str "hvkc\nlzei\nasw\na\nd", str "q\nq\nq\nq\nq", str "a\na\na", str "suqbvedipgzcjykfmaxno\njzfudeoxikpbvmgynsha\niswkepmodzvfgxnylujba", str "xpqjonkzlrfhtyw\nfjqksrlozypwnmxth\npkrohjnxlfzyqtw", str "pxuhsc\nhcxsnu\nhxcse\ncxhws\nhcrsex", str "iglfosahy\nhizgfalodbs\nlgfoiahs\ngsfalhyio", str "xrgzwbdnohfeijacsmltqp\ndjpgqrimtwcafsxnlebzoh", str "qlrn\nqrn\nqrn\nqrn", str "xhbiakuzcjm\nnfpykow\nklfs", str "lcubkpfhnomgwyarjetqd\nwtcrgofdnlpbaykquevhj", str "bdqusvnyetklmwizcopxjr\ndrbxlptyeqcvjwiusmzokn\noqcjzvuwslkpedbxmrntyi\njvlnxtdpkusyczbeomqirw\nwltriuqnpzcxbysvojdmek", str "tyeorbzjdxpqn\noprlqdnwbzyx\nbrnydoqzxp", str "bupvcrylqazehoknjtf\naqfroczbylpvuejk\nubqvelyfrzoxcpagkj", str "awbzx\naxuw\nywildxoa\nuwxnba", str "mjfvro\nwmrfjov\nojvmursf", str "zwxouqy\nouzyw", str "dsxf\nsfdti\nsyrfd", str "zmibfjk\nkimbz", str "nebq\nbeqn\neqnb\nbqnpe", str "avtnckldjpeys\nscjtklpdneyav\nkytncdpsvaelj\ntkpacjysdnvle\ndycsvtjplenak", str "mkyojv\nbiwro\nbotsx", str "owxyu\nwyuxo\nyxwuo", str "qgjplcvo\nvgjqocpl\nojvlcpgq", str "xczvkuohisrfqbagp\nprbeilfzognvqws\nvoitfqpgjmrzsb\nrvlfdoqigsbpz\nipqogbrzfmsv", str "j\ns\nst\nt\npzde", str "kuwbthejxcfrzgosmn\nxwcukhrtsgzf\ntkfcguxwshrz\nhxukfzgdwsrqict\nzwucgkfqhvxtrs", str "wvthikzpgrjaf\nswdnemkqobcyx", str "lewoquaprbkxyj\nxpelwoaksubcrhqd\ngbrxmluktiwnaopqe\nepxuyczokafblwjrq", str "mcyepsvwxr\nbhe\nnqeztgd\nuaehil", str "tq\nbe\ne", str "duqgair\ndfrwuiqga\nqaugidr", str "hmofng\nhgnomf\nmofghn\ngmotfhn", str "ewhblqnsmjict\nwhmbxvpjs\nufzyaogdkr", str "jqpynazsfvklied\nsjilykvqza\nizsvjlqayk\nqiksvzlajy", str "vbps\nvbstp\nevnigorks\nvbst\njslv", str "qgdzylwkbfou\njbwygulq\nqwhxrugpeb\ngiqdfvbwu", str "jubto\naeuvgdpx\nunl\nyorqui\nuqm", str "ic\nkci\na\ni\ngyfe", str "tjxp\nxtj\nxjt", str "ldspeai\neapidul\npeiadl\nipelad", str "oymwvfriux\nmoxuywvfir\nrmvxwoujifyb\nfpvwdumgyroxzi", str "mcplvnkgjfz\nidszwngkfcvpl\nnjzfklgcpvo\nfcvokpnlzg", str "xdnsilr\nirnlsx", str "bndvimefz\natopdu\nxhswykcqgrjl", str "kvlorsye", str "vsdoq\ndvos\nvodjs", str "bxczyfeajkmloi\njcimfkaloybxze\nceijaokfzyxmlb\nfeymoacbjxikzl\nkcxmiebzyaoljf", str "lo\nol", str "etxkfsgjlqoy\nfgshieyj\nesywfgj\ngwrjsyepf", str "jtzlgakxins\ngqlznxfabskijp\nikaxgsnzljh\nlgaizhkjxns\nhgaznkjxtlis", str "urhjiycw\nrhycisw\nzrwihkcy", str "xc\ncvx\ncx\ncxgl", str "audxneqrchg\nefkmodwqplrzsiyb", str "g\nx\nx", str "ziuplaqo\nczqtihuw\nzufiq\nnqzubpixak", str "cibdku\ndbckiu\nkdciub", str "eshpjzgtwrka\ntgwpafmsjkrehz\nsekbwtnxjhpzrag", str "dj\ndm\ndj", str "trqkdpwoxjfyg\ncsu\nancv\nlui\nebhmaz", str "ljbvexnhgwfs\nhfjbxneyilwgu\nznejqblcdhfgwx", str "b\nb\nb\nb\nb", str "idxrcyjegnu\nlrhvskceg\nrozwmgafbce", str "gzasrwjlukomvdxhbpc\ncahmgzurlvpwxbdjs\nuxjzsbgmdlchvprwa\nhramvdjxslubpzgcw", str "gw\nwge", str "fpgdzy\nwpfdbz\nzpfahde\nlfdpszcorx\nzfdgbqpha", str "gfuclekqavitdxr\neuwkvdirqtcxa\nriuxvaqkcdte", str "eqaphotimfdrukcgwbyx\ndxtowkygamibqcrfeuhp\noiutpbavhdyqergfcmxws\nahcteowdfrkugpibqjymx", str "pmixjle\nuxljemp\nlkpsej", str "mzqcwxuo\nxoucwzmq\nxcumzqsow\nzcuqxmwo", str "wt\nwt", str "tyrajn\nhdtgroynjae\njrnyat", str "uqifnlv\niqnevl\nvqienl\nnavciql", str "qjxpshtuzbmfnvogcalw\nskvzqthufxcjeagrmdiwlyb", str "lvaftw\nvkfaywtl\nlfvawtq", str "wpusqdfkybg\nmghtdxkpsur\ndsgxhumpk\njmdkpzrsixug", str "qcbalvykixze\nfmrhcsadlnio\ncpautjihl\nclgainupm\nilcaft", str "pklutwg\ngdpkrl\nlrpkg", str "wbup\nbygfurw\nubw", str "xsoqjceyhunvat\njshgokqucxvlyn", str "pyk\npyk", str "l\ns", str "m\nm\nhm", str "msultwhivz\nvzitlhwmus\nhtsmluvzwi\nihszwmvult\niwthzsumvl", str "wlohkegqpb\njzguytqrncd\nigqvesfa", str "h\nhgy", str "xb\nx\nx\nx\nx", str "ij\nji\nhqdl", str "k\nk\nfkswyr\nzk", str "frvpln\nvfcnlpr\nvfnrlp\nrnpvfl", str "ouy\nyu\nuy\nyu\nyug", str "rhekb\netnxfymlgdwovqzu\ncsbheji\nbeca", str "vj\nnfpv\nv\nv", str "ruvqehmija\nmdhjqrayuie\nksqrfgjeihpmlu", str "kbsnlqxfrizjauthodp\nuxdjbqniholafzrskt\neaokjungrdfshlbtzqix\nwjlsbciontzkdqfxhuar\nqjlosubzkfitnahrdx", str "sbzcefm\nzsmb\nszmb\nmszb\nsmzb", str "xzisbpmc\nprihnxstmfzb\nklpbmszijxw\nvmepbiszxaq\nzipmjbxvs", str "qjgbnvamedwi\nqajzdoksweb", str "gtkfqwlzashcen\ngeiqzsnhkfwctv\nesnmhfzgqutpwyk\nigselxqndbfwthkz", str "obpdyswkvthxgreanmjluq\nlahobnkyxtdrqgseuvcj", str "pw\nwpe\nylp\nep", str "owrlgniy\niljkvwxyhopufzsqdc", str "wxzgdpt\nsaxprdtkf\nqdxjotpgbwl\nxtdhjpl\nutdjphxci", str "gwkrjnizdxbvc\nhfnpygvaw\nygvutnaw", str "pecfzghqxturdijsblmk\nklsxuqpfhdbctrjgemzi\ndtuzljfxhmbgciqkeprs", str "iznfycwdrh\nzwnrchiydf", str "xutwndim\nosidj", str "knwyjicb\njc\nzjgc\ncju", str "jwtep\nhjer\negj", str "khwsitfnxyep\niwkpnxeh\nwephiklnx\nhcigwzkapxremn\nnwehmapkxib", str "vuqbmineogja\ndlrpainmvugj\nravsmgijfcuhynt\nawvpiunjmg", str "zdcalubhniv\nnclhvibudaz\nvhcdbuznila", str "bzcaorhqflg\njteyvpwsuxdnik", str "icr\nrvic\ncri\nric\nric", str "bqikw\nibwqk", str "ipxdcvmfulwejyg\nnqcelgydaskrxhi", str "pkovrgdljyh\nvq\nixwv\nvsxaczn", str "ix\nxi\nix", str "hkxl\nhklx\nuxlkcsvgeh\nkhlyjx\nblkxh", str "lhgcae\nyczfas\nconasulj\nxgbflezcuayo\nmvcidtapr", str "iwaepxckbvjnzmqft\npwiancxtmufqsvzj\ncpanmiftxjwqzv\nmhftvjnxzpowciqa", str "ir\nrd\nir", str "xt\nxt\ntx\nxtk\ntx", str "rdatjzibwsu\nmdsuarwtizjb", str "rselwj\nwetbjy\npzxqjowe\nnjtgbvwmei", str "qgcazvn\ngqsvcnz\nvczgqn", str "vmufbi\nefuinvmq\nuicgmkvr\nvnmilu\nubvwmix", str "lseymvjuidhkoptazcxrw\nwnbsukhpjoedczrlavgtmf\nscmrptkhdeazojwvquly", str "qopb\nevwqyl", str "syuzojncfrliwap\nwnocfplirjzsa\nizwrhvftqbdgpcjoasln\nljiznraspxofwc\nrzcpanjowslif", str "lpebrhxtam\niyuvknwfso", str "by\nyb", str "qshtypdlocawvgjb\nxvyrnwfqezshjoka", str "xhw\nnwhx\nhwx\nwhsex", str "xelcghsquwivjydnrzkbfpa\nelviwcpnsokhjqubgadxyzfr\ndcfqxvneymsutzkrlpgbjiwah", str "ghckb\nbgh", str "rdojuvqncia\nnracovyiw\ncvryoina\nechariovn", str "rjmdqahvbplcusigfx\ncluaqvsfhmrjbpgidx\ngvchlipxjsaufrbqdm\npjdsqmvlcaubfirhxg", str "tngbc\nbtcng\nnbgct\nbcgnt", str "aonpsbqkhwclrmdyuz\nmcgubhqdokarzlspnwy\nolhybcuasmrdzqwnkp\nlkshamocyrdznwuqbp\nwlunozascybqprmhkd", str "skilqth\nqhlts\nuslvqt\nfqstl\nftshql", str "fbtxdirelcsqzu\nicsyjfltxdeurq\nrueptfdcqylixs\nusqtxfdrclei\nlwqdvtxeirsfucna", str "xphvrbl\nbthixl\nwqjmohcfxyazlsb\nvhluxb", str "kbnogjrhe\nkrbngeohj\nhnekjbrog\nrkbeognjh\nkjrohebng", str "z\nyzn", str "wslprjfqa\nregwpyqdksaci", str "glmkujvbatqwc\nmtubqgclavrjwk\nwuqmjlgcabvtk\ngaluqbvctmkjw\nckblwqujgvmat", str "kgrmfstlejw\nbdithoauynzpv", str "wvyzhfdistmqkrugx\nnzlspqermfwjahui\nufqsipwozmhr", str "fdsavukrbpcm\nzrasokjlvudmpbf\neqvbkfrswpdtumag\ndmhkfplvbarnus", str "tdorlvb\npvdhiko\nomgsjwuavycxe\npziqbovhnf", str "f\na\nu\nu\nu", str "efg\negf\nfeg\nfge", str "wsf\nlmcd\nf\nv\nve", str "mibscvfqnhoxty\nrxphcsiqbofvnw\nuexoibzljkqagcnf", str "sbmhgyqvkuoljzwrfnxietca\nocjebltaqwursipnfkmx", str "xeh\nunxmh", str "du\nud\nud\ndu", str "tvzo\nvo\novft\nvto\npovdq", str "r\ns\nlhibgo\nqny\nnwk", str "cwxfhrgjdsyamtkv\nfshogpwdinlrcjexmt\nyxvdtzfrsgmcjqwbh", str "zil\nliz\nliz", str "iygvphrujkwaxl\nikjyutlxawvgrph\nhvuliyrdjakwpxg\nrjthkylwipxgvuad\nwivxkhlausgpjyr", str "vrxkaqzgmsyon\nvorxcumswqznyag", str "vlhuwzmdq\nbsoryk\nyeka", str "eiqwuz\nuvwznpqikr\nwluozi\nxjbyizufsagdtwm\nwzhuic", str "wydkjlfzpeqtgxorhmnuci\ntuczlfqrdnyxihgjopkwem\ntdpylmxcibgkfhjzwerasnou\nzelpcrdoygnxjvfmktuhwi\ngwmehyiojukcnfxrptzdl", str "vcuizfrlhqa\nrvizlucafhqj\ncviluqfhraz", str "wmgu\nve\nsgly\nfmwx", str "ke\nek", str "elhq\nhqel\nqehl\nehql", str "hzdfnwxtjysrio\nmykgu\nvy\nkpmaqy\ngbeykc", str "pfkj\nhfkpj\nkpfj\npfjk\nkpfjd", str "z\nt\nz\nt\noxy", str "ux\nauhzoj\nxu\nu", str "gcaldiph\nlhnfapi", str "slg\nslg\nlgs\nlgs\nsgl", str "h\nh\nh", str "qodwxpmskvjbtycuzghfe\npesjgxqzbtdcoyhwmu\nylthszqpuwebodxmgcj\nchqjetzxgdyopbwmuls", str "fkgtmuyoivdehpjcxsba\nagycjmdsfirvkuowtpbhex", str "ocaw\nmsclaw\ncwm\njdwceh", str "ekfyibdncovguazhjr\njkhgzbaoyidunvfr\nvyaihouznrkgjbfd\nxghojvrbdnzfuyaki", str "jpgqlhvyi\npqihag\nhqpig\ngupqhi\nghqip", str "glatmnqesbiwzkhup\njykuqrbswnmvocx", str "ykqwxpjgcshtdbau\ndfxqwpgbjcstkyua\nxsgatjcbkwdyqup\nusqykjpbgxdcwat", str "cmevolpwiq\nmoagpqevltjiw\nfmwziqbpuvleko\ndjvspewmohiql", str "mdux\nxmkud\nxmdu", str "vptyrkjxhcmounzgaw\nwkmranuoxcjhslzytdigq\nmjcazrxkguwfhbtnoy", str "e\nz\nmr\ne", str "vrqek\nkevrq", str "wb\nvcti\nhyar", str "e\ne", str "chqesv\nvesqch\neqhvcs", str "uae\nxzecw\neyl", str "bkgftdhvn\nnbfkgdtvhj\nnhftvgpkdb", str "fwxkbouizcyjg\nkwfqjgcyxzou\ngfkdoytrjpczuwx\ngyjvzcxfuowk\nmxcjzsnuaefowyhlkg", str "itwzbp\nyhnafe", str "dtnzjkibprafm\nfnarjbkiptzdm\nnjrtpifmkbdaze\nqkndmpaufbrjtiwzx", str "eknujdxzmytriao\nerkujinftzq\neskumatjicdnryz", str "lvzhmxewbgnkuorypfai\nibnwkrfogvhaezxumpyl\nhvbarmnowygqizujxplkef\nhegopvnwrfybamkluxiz", str "rdylnbotpv\nraugkqfelbnwy", str "vk\ngnuypkw\nkvj\nkjh", str "uprylxio\nluixrp\nruxplki", str "u\ngmu", str "ugbqne\nykvzwr\ni", str "vcqosrjbuxtl\nhovtxlrbcqsu\nbequwsltvxco\nvxarnqstcbuzlo\ncvuxqpobtsjl", str "ctviybroekm\ncyrtbevimok\ntvokrbciyme\nekctbyvmoir\ntymcviebokr", str "sdmkxgfhjlpyba\npuaowzsdqthkle\nzwredloshkpca", str "fjxo\njoxf\nfjxo\njfxo\nfxoj", str "mrqtv\nrvqtwfm\nrqmnvt\nwmrvtq\nqrftvm", str "qwtjlfobuydncgzheisxr\nqwxdlcuhjbnemaorpgfyzist", str "zenwdhikljm\nnejlmiwzkdh\njndelhwzkbmi\nzelhwnijkdm", str "jofdgmy\nojqdpbfg\ngduojf", str "awsgplcxqu\nmulxgapdcjqk\nacqjhfldpxgu\nxluqipvbngact", str "scdzqhyfplnx\nnxkygdjuzbcqsmvt\nzlxsqwnpdcay\nczsxnrqyold", str "qzvlitw\nnjapdb\nxkbcf\nuaogk", str "ok\ne\niu", str "qshidleorzbgjnvpuckyawt\npiojqrtzbnaukgwvchlesd\ngduvqkcnhioepstrljwbza\nqhripvstdjznlbgwuocake\njevrwsibcqlnutgkohdapz", str "upcealv\ngmpeyv\npve\nlpkuevz", str "pbtldk\nbpqhdk\ncibzd", str "lk\nhs\nkx\nl", str "fkuirx\nsy\nzgqw\nqmv\nqv", str "gdrtbwcjlhmqk\nakdlqzjhctgm\ndchqomkjylaftg", str "vwal\nficwjzusyom\nlw", str "z\njyxo\nn", str "x\nx\nx\ntwxs\nox", str "jzhaxuflebqwsipgctr\nmgawzjihxrpcuesfbqtl\nrljqhausvigxtofwczpbe\nifwjsdcbztphlxqrkeuag\nhizafygceblrquxwtnsjp", str "ioamx\nxiaomg\noxami\naxoim\namibxo", str "dxgwsbmlnyqruckezp\nxlurgtqncpwyfbisdkejm", str "vflkdqcxbzuwmengty\nswdbuexzlqvgmf", str "ehsmravbk\nehmvrkadb", str "qh\nhq\nthqx\nqh", str "uhi\naui\nui\niu\niu", str "wlrnmb\nyblnpr\nbztijfenkola", str "y\nfgzyvds\nyoj\niyp", str "ohbiqfxzp\nfpqihobx\nxhoeiqbfp", str "cgfi\nfigc\nfgci\ncflgi\ncihgfnv", str "vytbdxlzuwarjphnogic\ngexwbnqfizmhtdjyrcolas", str "hdeowrivjq\nuzihgmjwxrve\nwijeorhlqdsuv\nryeitfhvjw\nejhawvnuir", str "siaxlobjmkvcwhernytfugd\nrmtfsolejkdxihgvbnwcyua\noxglvkinrcebswamujfhtdy\ngwsatohiknljburmdycevxf\ncwuzdbgnethrvysmxolfkaji", str "m\ngm\nbhslre", str "xonqwkzcfbmtidpyvlsheu\npylzcoxmvqkehdsnftubjwi\nnworbkczxutyedsvqfhimpl", str "uatwvlgknhrfoqi\nnwhbtokfiq\nseniqpdzfhxmcotyw\nutoiqafwhn\nnqtoifwjh", str "oxiflw\nhflwxo\nloxwbf", str "mbt\ntbm", str "ocjflngrdakuypqiwxstzhmvbe\nykdaueiczwglbtrhjqnmsfxovp", str "wtlzyrcomasqnjude\nowhqdnmkzrpjlsxc\nloqdmszxgvrjwcn", str "on\nx\nx", str "lbeyqfxkwm\njmqnfxbgwde\noezbufqrtm", str "d\ny\ny\nta", str "z\np", str "fyx\nxfiy\nfxyw\nxdfcy\nfyx", str "csjxkozmnl\nslomjxkzc", str "hqwadymfsbtlxv\nkdvbatlfshwqmxy\nlyahsxmqfwdtbvz\nwxmlyahfdstvqb\ntvqdsxfynlhamwb", str "ojmvurikheablq\nukidqhvaljobe", str "imc\ntdkjmp\nmi", str "eq\neq", str "thgulyifqobdwvecmarsjnp\nndlygcmjahefquiswbrptvo", str "sjnptmdrlc\nuvebzmlodrncp\nlmypxkcfrnsd\ncnmhdlqxiarwpg", str "nzvqlh\nhlzvn\nlzhnv", str "juq\nju\nuj", str "tjqiucmynvozxh\nkmdvwafrxtq\nexgqmtv\nftsqxmv\nqklbtmxva", str "r\nr\npj", str "pkoy\nypok\nkypo\nokyp", str "f\nfl\nf\nf\nf", str "snvqdyx\ntdsxvnqy\ndeqynxsv\ndnsxqvy", str "lzhopfimuretwvd\njqgbvakrds", str "zfbocen\nmzbnacu", str "ezyxtajrv\nwzjuxreatv", str "mrsejiyuvfz\njkuctbxpoiw", str "nyvefxqicbah\nbrgeyltxvik\nkyuvilexbs\nztvixyepb\npxiygvbe", str "nadq\nnyt", str "prmt\nysjqkmocznhda\ngmlibeu\nbxmvf", str "rm\nwm\nm\nm", str "wyfjzdlvcgreb\nemlxnkpfjav\nelijupnfvh", str "pybv\nbpvy\nyrbvp", str "zrjkxshpufec\nvindgwtqbl", str "ngmtqzfcpudhw\ntphzgcwnqdfmu\nftzgphnmcudqw\nquzpmctfngdwh\ngqpdhufwcmtzn", str "szfcnb\nfczns\nfnzcbsg\nsznvafck", str "arcezgin\negcirazn\ngezcrian\nicgnraez", str "hgqucfnt\ngqnukt\nqgncut\ntuqnhg\nunfgqit", str "w\nsetbdgv", str "lck\nlxk\nkcl\nkl", str "emaqhxorctykufp\ntigjzqhv", str "mlvow\njqwo\nghksnruxipoac", str "hxnpeqt\nhtzen\nnhte\npchtne", str "ehovjgfzaql\nqhazvjlgeof\nkfgljqhavzoe\njvlzfhgoeqa\nveolzqfjgah", str "bdlitrzuwh\nepfmuhgvstibr"]
'## Part 1: Any
def combineAns (group_ans:n=>Char) : Int =
falses = for i:(Fin 26). False
sum $ map BToI $ snd $ withState falses \mergedRef.
for i.
case (group_ans.i == '\n') of
True -> ()
False -> (mergedRef!(asindC group_ans.i) := True)
:p combineAns "abc"
:p combineAns "abc\nad"
def combineAnsL (group_ansL:String) : Int =
(AsList _ group_ansT) = group_ansL
combineAns group_ansT
:p sum $ map combineAnsL full_data
'## Part 2: All
Unfortunately we did not pars this as a list of lists
But as a interesting and cunning trick,
we can check if all answer, via counting how many people (\n) there are as well as how many of each answer
def allAns (group_ans:n=>Char) : Int =
zeros = for i:(Fin 26). 0
(n_ans, merged_ans) = snd $ withState (1, zeros) \stateRef.
ncountRef = fstRef stateRef
mergedRef = sndRef stateRef
for i. case (group_ans.i == '\n') of
True -> (
ncountRef := (get ncountRef) + 1
)
False -> (
mergedRef!(asindC group_ans.i) := ((get mergedRef!(asindC group_ans.i)) + 1)
)
sum for i. BToI $ merged_ans.i == n_ans
:p allAns "abc"
:p allAns "abc\nad"
def allAnsL (group_ansL:String) : Int =
(AsList _ group_ansT) = group_ansL
allAns group_ansT
:p sum $ map allAnsL full_data
'# Advent of Code 2020. Day 7
DexLang, [Lyndon White](http://oxinabox.net)
https://adventofcode.com/2020/day/7
' TODO TODO TODO TODO TODO
' To save on parsing strings we are going to define constants for all the things.
'Adjectives:
vibrant = 1
shiny = 2
muted = 3
dim = 4
pale = 5
dark = 6
light = 7
drab = 8
dull = 9
plaid = 10
posh = 11
wavy = 12
bright = 13
mirrored = 14
faded = 15
striped = 16
clear = 17
dotted = 18
' colors
aqua = 1
magenta = 2
teal = 3
chartreuse = 4
violet = 5
maroon = 6
indigo = 7
red = 8
brown = 9
coral = 10
green = 11
bronze = 12
lavender = 13
gold = 14
plum = 15
turquoise = 16
olive = 17
tomato = 18
orange = 19
salmon = 20
black = 21
gray = 22
silver = 23
cyan = 24
crimson = 25
blue = 26
tancolor = 27
white = 28
fuchsia = 29
purple = 30
lime = 31
beige = 32
yellow = 33
adj = Int
color = Int
data BagDescription =
Bag adj color
BagQty = (BagDescription & Int)
data BagRule =
Rule BagDescription (List BagQty)
def (<*>) (qty:Int) (bag:BagDescription) : BagQty = (bag, qty)
def contain (bag:BagDescription) (contents:List BagQty) : BagRule =
Rule bag contents
full_data = [ (Bag vibrant aqua) `contain` (AsList _ [ 1<*>(Bag shiny magenta), 2<*>(Bag muted teal), 1<*>(Bag dim magenta), 1<*>(Bag muted chartreuse) ]), (Bag vibrant violet) `contain` (AsList _ [ 4<*>(Bag pale maroon) ]), (Bag dark indigo) `contain` (AsList _ [ 1<*>(Bag light maroon), 3<*>(Bag pale red), 1<*>(Bag drab brown), 4<*>(Bag dim magenta) ]), (Bag dark coral) `contain` (AsList _ [ 5<*>(Bag dull aqua), 5<*>(Bag plaid green), 2<*>(Bag posh bronze) ]), (Bag dim lavender) `contain` (AsList _ [ 2<*>(Bag muted violet), 5<*>(Bag wavy gold), 3<*>(Bag vibrant plum), 5<*>(Bag bright teal) ]), (Bag mirrored turquoise) `contain` (AsList _ [ 5<*>(Bag muted olive), 5<*>(Bag bright gold), 2<*>(Bag vibrant violet) ]), (Bag faded brown) `contain` (AsList _ [ 5<*>(Bag faded tomato) ]), (Bag muted orange) `contain` (AsList _ [ 5<*>(Bag dull aqua), 2<*>(Bag light salmon), 1<*>(Bag striped black), 1<*>(Bag pale gray) ]), (Bag posh black) `contain` (AsList _ [ 4<*>(Bag faded silver) ]), (Bag muted coral) `contain` (AsList _ [ 3<*>(Bag mirrored turquoise) ]), (Bag clear silver) `contain` (AsList _ [ 5<*>(Bag dark cyan) ]), (Bag clear crimson) `contain` (AsList _ [ 2<*>(Bag dim blue), 4<*>(Bag bright indigo) ]), (Bag clear salmon) `contain` (AsList _ [ 4<*>(Bag striped cyan), 1<*>(Bag muted maroon), 1<*>(Bag light bronze), 1<*>(Bag vibrant tancolor) ]), (Bag light olive) `contain` (AsList _ [ 1<*>(Bag faded white), 2<*>(Bag dull chartreuse), 5<*>(Bag faded gray) ]), (Bag muted maroon) `contain` (AsList _ [ 5<*>(Bag dark fuchsia), 5<*>(Bag drab violet) ]), (Bag posh plum) `contain` (AsList _ [ 2<*>(Bag striped gray), 5<*>(Bag dim violet) ]), (Bag light orange) `contain` (AsList _ [ 1<*>(Bag light purple) ]), (Bag drab white) `contain` (AsList _ [ 4<*>(Bag plaid lime), 1<*>(Bag drab gold) ]), (Bag plaid indigo) `contain` (AsList _ [ 5<*>(Bag clear lime), 1<*>(Bag dark fuchsia) ]), (Bag muted red) `contain` (AsList _ [ 1<*>(Bag dull bronze) ]), (Bag mirrored magenta) `contain` (AsList _ [ 5<*>(Bag plaid white), 1<*>(Bag faded plum), 5<*>(Bag wavy purple) ]), (Bag dotted lavender) `contain` (AsList _ [ 5<*>(Bag shiny olive), 3<*>(Bag plaid blue), 1<*>(Bag shiny gold) ]), (Bag drab bronze) `contain` (AsList _ [ 3<*>(Bag wavy silver), 4<*>(Bag light turquoise), 1<*>(Bag vibrant lavender), 5<*>(Bag light magenta) ]), (Bag plaid maroon) `contain` (AsList _ [ 2<*>(Bag dim salmon), 5<*>(Bag muted violet) ]), (Bag dull salmon) `contain` (AsList _ [ 5<*>(Bag striped beige), 2<*>(Bag muted plum), 1<*>(Bag posh teal) ]), (Bag dotted turquoise) `contain` (AsList _ [ 5<*>(Bag striped orange) ]), (Bag bright yellow) `contain` (AsList _ [ 2<*>(Bag shiny olive), 3<*>(Bag wavy teal), 1<*>(Bag pale plum), 3<*>(Bag mirrored coral) ]), (Bag dark black) `contain` (AsList _ [ 5<*>(Bag pale gray) ]), (Bag shiny yellow) `contain` (AsList _ [ 4<*>(Bag dark aqua), 2<*>(Bag drab lime), 2<*>(Bag bright gold), 4<*>(Bag dark cyan) ]), (Bag shiny red) `contain` (AsList _ [ 2<*>(Bag posh blue) ]), (Bag posh olive) `contain` (AsList _ [ 3<*>(Bag dim aqua) ]), (Bag muted chartreuse) `contain` (AsList _ [ 4<*>(Bag posh brown), 5<*>(Bag shiny magenta) ]), (Bag mirrored orange) `contain` (AsList _ [ 5<*>(Bag dotted salmon), 1<*>(Bag posh green) ]), (Bag muted plum) `contain` (AsList _ [ 1<*>(Bag dull red), 4<*>(Bag posh green) ]), (Bag light green) `contain` (AsList _ [ 2<*>(Bag wavy plum) ]), (Bag light cyan) `contain` (AsList _ [ 2<*>(Bag dotted crimson), 4<*>(Bag faded salmon), 3<*>(Bag muted coral), 3<*>(Bag plaid blue) ]), (Bag dull lavender) `contain` (AsList _ [ 3<*>(Bag drab gold), 5<*>(Bag plaid crimson) ]), (Bag posh red) `contain` (AsList _ [ 3<*>(Bag dotted salmon), 2<*>(Bag pale beige), 2<*>(Bag mirrored coral), 5<*>(Bag muted teal) ]), (Bag vibrant beige) `contain` (AsList _ [ 2<*>(Bag faded lime) ]), (Bag plaid blue) `contain` (AsList _ [ 5<*>(Bag dull red), 3<*>(Bag light maroon), 4<*>(Bag muted gold), 2<*>(Bag drab orange) ]), (Bag dotted white) `contain` (AsList _ [ 3<*>(Bag muted white) ]), (Bag drab fuchsia) `contain` (AsList _ [ 2<*>(Bag shiny fuchsia) ]), (Bag drab crimson) `contain` (AsList _ [ 1<*>(Bag posh beige), 4<*>(Bag drab violet) ]), (Bag drab beige) `contain` (AsList _ [ 3<*>(Bag mirrored orange), 1<*>(Bag wavy silver), 2<*>(Bag pale magenta), 1<*>(Bag drab lime) ]), (Bag posh teal) `contain` (AsList _ [ 2<*>(Bag clear brown) ]), (Bag mirrored brown) `contain` (AsList _ [ 2<*>(Bag faded tancolor) ]), (Bag clear coral) `contain` (AsList _ [ 1<*>(Bag muted chartreuse), 2<*>(Bag muted violet), 2<*>(Bag faded purple) ]), (Bag pale lime) `contain` (AsList _ [ 5<*>(Bag vibrant aqua), 3<*>(Bag wavy purple), 1<*>(Bag drab violet) ]), (Bag vibrant red) `contain` (AsList _ [ 5<*>(Bag shiny gold) ]), (Bag shiny fuchsia) `contain` (AsList _ [ 1<*>(Bag dark salmon), 1<*>(Bag posh white) ]), (Bag bright gray) `contain` (AsList _ [ 2<*>(Bag dim red) ]), (Bag drab lavender) `contain` (AsList _ [ 2<*>(Bag clear tomato), 1<*>(Bag faded red), 1<*>(Bag pale chartreuse) ]), (Bag clear red) `contain` (AsList _ [ 3<*>(Bag light salmon), 1<*>(Bag bright red), 5<*>(Bag dark indigo) ]), (Bag bright aqua) `contain` (AsList _ [ 3<*>(Bag faded brown), 1<*>(Bag shiny yellow) ]), (Bag faded red) `contain` (AsList _ [ 3<*>(Bag posh turquoise), 5<*>(Bag dark fuchsia) ]), (Bag faded turquoise) `contain` (AsList _ [ 3<*>(Bag drab fuchsia) ]), (Bag dim aqua) `contain` (AsList _ [ 1<*>(Bag faded white), 5<*>(Bag faded violet) ]), (Bag muted white) `contain` (AsList _ [ 5<*>(Bag pale red), 4<*>(Bag dull red), 3<*>(Bag dotted maroon) ]), (Bag dull gold) `contain` (AsList _ [ 3<*>(Bag posh green), 2<*>(Bag mirrored yellow), 2<*>(Bag dull olive), 2<*>(Bag bright purple) ]), (Bag faded blue) `contain` (AsList _ [ 3<*>(Bag wavy crimson), 1<*>(Bag plaid beige), 3<*>(Bag dotted orange), 1<*>(Bag vibrant purple) ]), (Bag faded gray) `contain` (AsList _ [ 1<*>(Bag bright gold) ]), (Bag dim bronze) `contain` (AsList _ [ 2<*>(Bag bright gold), 4<*>(Bag light brown), 5<*>(Bag muted chartreuse) ]), (Bag light teal) `contain` (AsList _ [ 5<*>(Bag striped tomato), 5<*>(Bag drab teal), 5<*>(Bag shiny lavender) ]), (Bag striped white) `contain` (AsList _ [ 1<*>(Bag plaid silver), 2<*>(Bag wavy plum), 3<*>(Bag dull maroon), 2<*>(Bag muted green) ]), (Bag vibrant salmon) `contain` (AsList _ [ 2<*>(Bag shiny violet), 4<*>(Bag light salmon) ]), (Bag dim plum) `contain` (AsList _ [ 1<*>(Bag dull blue), 5<*>(Bag vibrant bronze) ]), (Bag dotted fuchsia) `contain` (AsList _ [ 4<*>(Bag plaid green) ]), (Bag plaid crimson) `contain` (AsList _ [ 3<*>(Bag clear teal), 5<*>(Bag dark gray), 2<*>(Bag mirrored tancolor), 5<*>(Bag shiny fuchsia) ]), (Bag pale white) `contain` (AsList _ [ 2<*>(Bag muted silver), 1<*>(Bag muted lime) ]), (Bag bright violet) `contain` (AsList _ [ 2<*>(Bag clear chartreuse), 2<*>(Bag dull gray), 2<*>(Bag muted cyan) ]), (Bag drab red) `contain` (AsList _ [ 1<*>(Bag dotted white), 1<*>(Bag light plum), 5<*>(Bag muted indigo), 1<*>(Bag dull lime) ]), (Bag muted indigo) `contain` (AsList _ [ 3<*>(Bag mirrored blue), 5<*>(Bag light fuchsia) ]), (Bag vibrant cyan) `contain` (AsList _ [ 2<*>(Bag pale blue), 3<*>(Bag mirrored chartreuse) ]), (Bag mirrored gray) `contain` (AsList _ [ 1<*>(Bag shiny red), 2<*>(Bag pale blue), 4<*>(Bag dotted lime), 1<*>(Bag faded violet) ]), (Bag posh lavender) `contain` (AsList _ [ 3<*>(Bag vibrant aqua), 5<*>(Bag mirrored chartreuse) ]), (Bag dotted silver) `contain` (AsList _ [ 3<*>(Bag dark beige), 5<*>(Bag dotted teal), 3<*>(Bag mirrored indigo), 2<*>(Bag dim yellow) ]), (Bag wavy magenta) `contain` (AsList _ [ 4<*>(Bag wavy beige) ]), (Bag faded tomato) `contain` (AsList _ [ 3<*>(Bag plaid black), 5<*>(Bag bright orange), 2<*>(Bag vibrant blue) ]), (Bag mirrored maroon) `contain` (AsList _ [ 3<*>(Bag plaid gray) ]), (Bag pale bronze) `contain` (AsList _ [ 4<*>(Bag vibrant violet), 2<*>(Bag muted white) ]), (Bag plaid turquoise) `contain` (AsList _ [ 2<*>(Bag dotted lime), 3<*>(Bag striped beige), 1<*>(Bag pale crimson), 2<*>(Bag pale purple) ]), (Bag posh turquoise) `contain` (AsList _ [ 5<*>(Bag clear yellow), 1<*>(Bag dotted turquoise), 3<*>(Bag dim cyan), 5<*>(Bag pale maroon) ]), (Bag wavy white) `contain` (AsList _ [ 2<*>(Bag mirrored gray), 3<*>(Bag pale yellow) ]), (Bag vibrant tancolor) `contain` (AsList _ [ 1<*>(Bag wavy lavender) ]), (Bag pale turquoise) `contain` (AsList _ [ 2<*>(Bag dark gray), 4<*>(Bag faded green), 1<*>(Bag light maroon), 5<*>(Bag posh white) ]), (Bag faded beige) `contain` (AsList _ [ 1<*>(Bag striped brown), 1<*>(Bag dull gray), 5<*>(Bag mirrored blue) ]), (Bag bright maroon) `contain` (AsList _ [ 1<*>(Bag light blue), 5<*>(Bag dim bronze), 4<*>(Bag dotted beige) ]), (Bag shiny lavender) `contain` (AsList _ [ 3<*>(Bag dim gray), 4<*>(Bag pale gray) ]), (Bag dull beige) `contain` (AsList _ [ 3<*>(Bag dark crimson) ]), (Bag striped coral) `contain` (AsList _ [ 3<*>(Bag dark lavender), 2<*>(Bag mirrored turquoise), 5<*>(Bag posh maroon), 1<*>(Bag striped yellow) ]), (Bag shiny magenta) `contain` (AsList _ [ 1<*>(Bag plaid black) ]), (Bag muted magenta) `contain` (AsList _ [ 2<*>(Bag plaid beige) ]), (Bag light salmon) `contain` (AsList _ [ 5<*>(Bag striped black), 1<*>(Bag pale lavender) ]), (Bag shiny white) `contain` (AsList _ [ 2<*>(Bag bright gold), 3<*>(Bag mirrored olive) ]), (Bag dark tomato) `contain` (AsList _ [ 2<*>(Bag dark gold), 2<*>(Bag clear teal), 5<*>(Bag dull fuchsia), 4<*>(Bag dotted gold) ]), (Bag dotted violet) `contain` (AsList _ [ 3<*>(Bag plaid teal), 5<*>(Bag mirrored aqua) ]), (Bag plaid purple) `contain` (AsList _ [ 4<*>(Bag mirrored olive) ]), (Bag drab lime) `contain` (AsList _ [ 5<*>(Bag bright beige), 4<*>(Bag mirrored tancolor), 5<*>(Bag striped black), 4<*>(Bag faded green) ]), (Bag dull blue) `contain` (AsList _ [ 4<*>(Bag light red), 2<*>(Bag pale turquoise), 1<*>(Bag posh maroon) ]), (Bag muted tancolor) `contain` (AsList _ [ 1<*>(Bag pale magenta), 3<*>(Bag mirrored turquoise), 3<*>(Bag shiny blue), 4<*>(Bag dotted salmon) ]), (Bag dim teal) `contain` (AsList _ [ 1<*>(Bag posh turquoise), 3<*>(Bag dull red) ]), (Bag muted fuchsia) `contain` (AsList _ [ 4<*>(Bag pale salmon), 1<*>(Bag pale silver), 3<*>(Bag pale maroon), 2<*>(Bag bright purple) ]), (Bag bright gold) `contain` (AsList _ [ 2<*>(Bag shiny magenta), 4<*>(Bag pale red), 4<*>(Bag posh brown) ]), (Bag faded lime) `contain` (AsList _ [ 5<*>(Bag vibrant bronze), 2<*>(Bag pale violet), 2<*>(Bag plaid coral) ]), (Bag posh tancolor) `contain` (AsList _ [ 3<*>(Bag bright lavender), 2<*>(Bag striped blue), 5<*>(Bag shiny gold) ]), (Bag posh bronze) `contain` (AsList _ [ 3<*>(Bag plaid olive), 3<*>(Bag dotted salmon) ]), (Bag shiny lime) `contain` (AsList _ [ 1<*>(Bag bright salmon), 3<*>(Bag faded green), 2<*>(Bag wavy aqua) ]), (Bag faded lavender) `contain` (AsList _ [ 2<*>(Bag bright silver) ]), (Bag muted black) `contain` (AsList _ [ 5<*>(Bag mirrored coral) ]), (Bag plaid chartreuse) `contain` (AsList _ [ 3<*>(Bag dull coral), 2<*>(Bag light tomato) ]), (Bag mirrored aqua) `contain` (AsList _ [ 2<*>(Bag dark cyan), 2<*>(Bag dark indigo) ]), (Bag dark yellow) `contain` (AsList _ [ 5<*>(Bag dotted lime), 1<*>(Bag dim cyan) ]), (Bag bright plum) `contain` (AsList _ [ 5<*>(Bag dim salmon) ]), (Bag striped gray) `contain` (AsList _ [ 3<*>(Bag plaid black), 1<*>(Bag wavy crimson), 5<*>(Bag bright orange) ]), (Bag faded salmon) `contain` (AsList _ [ 3<*>(Bag clear lime), 4<*>(Bag drab purple) ]), (Bag pale olive) `contain` (AsList _ [ 2<*>(Bag light magenta), 4<*>(Bag dim salmon), 5<*>(Bag light olive), 2<*>(Bag pale salmon) ]), (Bag faded crimson) `contain` (AsList _ [ 2<*>(Bag wavy beige), 4<*>(Bag dim aqua), 5<*>(Bag light lavender) ]), (Bag posh chartreuse) `contain` (AsList _ [ 5<*>(Bag pale lavender), 5<*>(Bag mirrored turquoise), 2<*>(Bag dark maroon) ]), (Bag posh aqua) `contain` (AsList _ [ 5<*>(Bag faded crimson), 2<*>(Bag mirrored tancolor) ]), (Bag faded coral) `contain` (AsList _ [ 2<*>(Bag dotted lime), 2<*>(Bag faded white) ]), (Bag striped bronze) `contain` (AsList _ [ 4<*>(Bag plaid blue), 1<*>(Bag plaid coral) ]), (Bag wavy orange) `contain` (AsList _ [ 5<*>(Bag pale tomato) ]), (Bag dim crimson) `contain` (AsList _ [ 4<*>(Bag posh tancolor), 1<*>(Bag muted gold) ]), (Bag clear gray) `contain` (AsList _ [ 3<*>(Bag striped lime), 4<*>(Bag vibrant fuchsia) ]), (Bag light gold) `contain` (AsList _ [ 4<*>(Bag bright tancolor), 5<*>(Bag faded lime), 4<*>(Bag faded plum), 5<*>(Bag clear brown) ]), (Bag wavy red) `contain` (AsList _ [ 4<*>(Bag pale red), 4<*>(Bag dotted maroon), 4<*>(Bag mirrored violet) ]), (Bag dull silver) `contain` (AsList _ [ 1<*>(Bag striped turquoise), 2<*>(Bag striped orange), 1<*>(Bag dotted plum), 3<*>(Bag muted coral) ]), (Bag striped magenta) `contain` (AsList _ [ 1<*>(Bag mirrored tancolor) ]), (Bag plaid plum) `contain` (AsList _ [ 4<*>(Bag wavy tancolor), 5<*>(Bag wavy brown), 5<*>(Bag shiny olive), 5<*>(Bag clear yellow) ]), (Bag faded chartreuse) `contain` (AsList _ [ 1<*>(Bag shiny teal) ]), (Bag clear chartreuse) `contain` (AsList _ [ 2<*>(Bag drab tancolor), 3<*>(Bag plaid maroon), 2<*>(Bag drab orange), 2<*>(Bag plaid salmon) ]), (Bag wavy olive) `contain` (AsList _ [ 5<*>(Bag dark lavender) ]), (Bag dull orange) `contain` (AsList _ [ 1<*>(Bag dull gray), 2<*>(Bag light magenta) ]), (Bag wavy gold) `contain` (AsList _ [ 5<*>(Bag vibrant yellow), 4<*>(Bag pale black), 2<*>(Bag light olive) ]), (Bag muted salmon) `contain` (AsList _ [ 5<*>(Bag dotted turquoise), 5<*>(Bag dotted violet) ]), (Bag wavy tancolor) `contain` (AsList _ [ 2<*>(Bag plaid green) ]), (Bag dotted cyan) `contain` (AsList _ [ 4<*>(Bag drab gold), 1<*>(Bag dark crimson), 3<*>(Bag pale lavender) ]), (Bag wavy coral) `contain` (AsList _ [ 3<*>(Bag mirrored blue), 5<*>(Bag wavy white), 1<*>(Bag striped indigo) ]), (Bag clear olive) `contain` (AsList _ [ 4<*>(Bag wavy silver), 2<*>(Bag pale orange), 2<*>(Bag bright tancolor) ]), (Bag light indigo) `contain` (AsList _ [ 1<*>(Bag pale purple), 4<*>(Bag clear teal), 1<*>(Bag plaid indigo), 4<*>(Bag dim blue) ]), (Bag dotted tomato) `contain` (AsList _ [ 4<*>(Bag dim cyan) ]), (Bag pale indigo) `contain` (AsList _ [ 2<*>(Bag muted chartreuse), 4<*>(Bag faded salmon), 3<*>(Bag dull brown) ]), (Bag bright magenta) `contain` (AsList _ [ 1<*>(Bag vibrant salmon), 1<*>(Bag pale teal), 4<*>(Bag faded orange) ]), (Bag faded gold) `contain` (AsList _ [ 4<*>(Bag striped cyan) ]), (Bag shiny orange) `contain` (AsList _ [ 5<*>(Bag vibrant turquoise), 3<*>(Bag pale purple) ]), (Bag posh salmon) `contain` (AsList _ [ 1<*>(Bag dotted crimson), 3<*>(Bag dark maroon) ]), (Bag dull violet) `contain` (AsList _ [ 2<*>(Bag clear indigo) ]), (Bag posh gray) `contain` (AsList _ [ 1<*>(Bag shiny fuchsia), 1<*>(Bag faded plum), 5<*>(Bag pale turquoise) ]), (Bag dull chartreuse) `contain` (AsList _ [ 4<*>(Bag dull red), 1<*>(Bag striped black), 3<*>(Bag dark tancolor), 3<*>(Bag muted maroon) ]), (Bag dotted chartreuse) `contain` (AsList _ [ 5<*>(Bag striped aqua) ]), (Bag dim magenta) `contain` (AsList _ [ ]), (Bag light lime) `contain` (AsList _ [ 2<*>(Bag shiny magenta), 3<*>(Bag striped black) ]), (Bag drab maroon) `contain` (AsList _ [ 2<*>(Bag vibrant bronze), 1<*>(Bag clear white), 2<*>(Bag dim gray) ]), (Bag drab salmon) `contain` (AsList _ [ 2<*>(Bag wavy crimson), 3<*>(Bag dim gold), 5<*>(Bag drab chartreuse) ]), (Bag dotted crimson) `contain` (AsList _ [ 4<*>(Bag pale purple), 3<*>(Bag plaid coral) ]), (Bag dull red) `contain` (AsList _ [ 3<*>(Bag dark indigo), 2<*>(Bag posh white), 4<*>(Bag light maroon) ]), (Bag drab turquoise) `contain` (AsList _ [ 2<*>(Bag striped tomato), 1<*>(Bag bright gold), 5<*>(Bag mirrored tancolor), 1<*>(Bag drab chartreuse) ]), (Bag shiny teal) `contain` (AsList _ [ 4<*>(Bag bright lime), 2<*>(Bag pale red) ]), (Bag dark purple) `contain` (AsList _ [ 5<*>(Bag mirrored beige), 1<*>(Bag posh purple), 5<*>(Bag dotted beige) ]), (Bag drab aqua) `contain` (AsList _ [ 4<*>(Bag plaid blue), 3<*>(Bag dark salmon), 4<*>(Bag striped lime), 4<*>(Bag striped blue) ]), (Bag dull magenta) `contain` (AsList _ [ 2<*>(Bag clear white), 5<*>(Bag muted bronze) ]), (Bag pale tancolor) `contain` (AsList _ [ 1<*>(Bag pale lime) ]), (Bag dark fuchsia) `contain` (AsList _ [ 3<*>(Bag dim coral), 1<*>(Bag muted white), 2<*>(Bag plaid blue) ]), (Bag mirrored beige) `contain` (AsList _ [ 5<*>(Bag dotted magenta), 1<*>(Bag wavy olive), 1<*>(Bag dark tancolor) ]), (Bag drab tomato) `contain` (AsList _ [ 4<*>(Bag dim cyan) ]), (Bag shiny tomato) `contain` (AsList _ [ 2<*>(Bag shiny maroon), 2<*>(Bag dark lavender), 1<*>(Bag posh red), 3<*>(Bag vibrant green) ]), (Bag dim turquoise) `contain` (AsList _ [ 4<*>(Bag muted salmon), 2<*>(Bag bright purple), 4<*>(Bag plaid maroon), 3<*>(Bag bright beige) ]), (Bag mirrored salmon) `contain` (AsList _ [ 2<*>(Bag drab violet), 3<*>(Bag faded red) ]), (Bag pale crimson) `contain` (AsList _ [ 3<*>(Bag bright white), 5<*>(Bag plaid beige) ]), (Bag shiny cyan) `contain` (AsList _ [ 4<*>(Bag light blue) ]), (Bag clear lavender) `contain` (AsList _ [ 5<*>(Bag bright turquoise) ]), (Bag vibrant purple) `contain` (AsList _ [ 5<*>(Bag pale turquoise), 2<*>(Bag posh orange) ]), (Bag striped purple) `contain` (AsList _ [ 5<*>(Bag muted orange), 5<*>(Bag dark aqua) ]), (Bag pale gray) `contain` (AsList _ [ 5<*>(Bag dark indigo), 1<*>(Bag vibrant violet), 3<*>(Bag pale maroon), 4<*>(Bag bright gold) ]), (Bag posh brown) `contain` (AsList _ [ 3<*>(Bag drab brown), 4<*>(Bag pale red), 2<*>(Bag posh white), 4<*>(Bag muted gold) ]), (Bag muted bronze) `contain` (AsList _ [ 2<*>(Bag clear magenta), 5<*>(Bag shiny green), 2<*>(Bag mirrored tancolor), 4<*>(Bag posh gray) ]), (Bag pale brown) `contain` (AsList _ [ 5<*>(Bag muted white), 3<*>(Bag plaid beige), 3<*>(Bag wavy lavender), 3<*>(Bag clear indigo) ]), (Bag dull yellow) `contain` (AsList _ [ 5<*>(Bag clear lime), 4<*>(Bag plaid blue), 4<*>(Bag dotted lime) ]), (Bag light tancolor) `contain` (AsList _ [ 5<*>(Bag dull blue), 2<*>(Bag drab yellow), 5<*>(Bag mirrored red) ]), (Bag posh gold) `contain` (AsList _ [ 4<*>(Bag dull chartreuse), 2<*>(Bag dim magenta) ]), (Bag pale silver) `contain` (AsList _ [ 4<*>(Bag dull aqua), 4<*>(Bag bright gold) ]), (Bag light beige) `contain` (AsList _ [ 3<*>(Bag posh orange), 3<*>(Bag mirrored gray), 2<*>(Bag bright red) ]), (Bag striped turquoise) `contain` (AsList _ [ 2<*>(Bag posh blue), 1<*>(Bag striped orange), 2<*>(Bag shiny tancolor), 5<*>(Bag vibrant aqua) ]), (Bag vibrant plum) `contain` (AsList _ [ 4<*>(Bag pale gray) ]), (Bag dotted teal) `contain` (AsList _ [ 2<*>(Bag dim magenta) ]), (Bag dull purple) `contain` (AsList _ [ 5<*>(Bag drab brown), 4<*>(Bag dotted maroon), 1<*>(Bag muted white) ]), (Bag mirrored fuchsia) `contain` (AsList _ [ 2<*>(Bag dark tomato), 4<*>(Bag faded tancolor), 2<*>(Bag faded white), 4<*>(Bag dotted orange) ]), (Bag dotted plum) `contain` (AsList _ [ 2<*>(Bag dull aqua), 4<*>(Bag faded green) ]), (Bag bright fuchsia) `contain` (AsList _ [ 2<*>(Bag wavy blue), 5<*>(Bag clear brown) ]), (Bag dim beige) `contain` (AsList _ [ 2<*>(Bag pale orange) ]), (Bag dotted orange) `contain` (AsList _ [ 2<*>(Bag faded brown), 1<*>(Bag clear tomato), 1<*>(Bag clear indigo) ]), (Bag plaid gold) `contain` (AsList _ [ 1<*>(Bag striped turquoise), 3<*>(Bag vibrant magenta), 5<*>(Bag shiny gray), 5<*>(Bag shiny red) ]), (Bag clear plum) `contain` (AsList _ [ 3<*>(Bag dim turquoise), 3<*>(Bag faded magenta), 2<*>(Bag dull coral) ]), (Bag muted green) `contain` (AsList _ [ 3<*>(Bag dim crimson) ]), (Bag bright black) `contain` (AsList _ [ 3<*>(Bag pale purple), 3<*>(Bag plaid white), 1<*>(Bag clear teal), 3<*>(Bag pale magenta) ]), (Bag dim gray) `contain` (AsList _ [ 3<*>(Bag dull coral), 1<*>(Bag pale turquoise), 5<*>(Bag wavy cyan), 5<*>(Bag striped lime) ]), (Bag dotted beige) `contain` (AsList _ [ 5<*>(Bag dull aqua), 3<*>(Bag dark fuchsia), 1<*>(Bag pale violet), 4<*>(Bag dim gold) ]), (Bag mirrored lime) `contain` (AsList _ [ 4<*>(Bag plaid tomato), 1<*>(Bag pale lavender), 5<*>(Bag shiny blue), 1<*>(Bag light gray) ]), (Bag bright chartreuse) `contain` (AsList _ [ 1<*>(Bag dotted teal), 3<*>(Bag shiny lavender) ]), (Bag vibrant tomato) `contain` (AsList _ [ 1<*>(Bag vibrant coral) ]), (Bag mirrored purple) `contain` (AsList _ [ 4<*>(Bag dark tancolor), 4<*>(Bag faded coral) ]), (Bag pale tomato) `contain` (AsList _ [ 1<*>(Bag dull maroon), 2<*>(Bag striped tancolor), 5<*>(Bag muted cyan), 2<*>(Bag dark maroon) ]), (Bag vibrant brown) `contain` (AsList _ [ 1<*>(Bag vibrant bronze), 2<*>(Bag pale yellow), 4<*>(Bag wavy coral) ]), (Bag dim green) `contain` (AsList _ [ 2<*>(Bag striped coral) ]), (Bag muted lavender) `contain` (AsList _ [ 3<*>(Bag clear purple), 4<*>(Bag dark red), 1<*>(Bag light silver), 1<*>(Bag dull blue) ]), (Bag wavy crimson) `contain` (AsList _ [ 5<*>(Bag muted teal), 1<*>(Bag drab brown), 3<*>(Bag posh brown) ]), (Bag wavy tomato) `contain` (AsList _ [ 4<*>(Bag striped blue), 3<*>(Bag mirrored lime), 1<*>(Bag shiny gray), 1<*>(Bag dark plum) ]), (Bag muted aqua) `contain` (AsList _ [ 3<*>(Bag clear silver), 3<*>(Bag bright chartreuse), 4<*>(Bag striped teal), 2<*>(Bag clear indigo) ]), (Bag posh blue) `contain` (AsList _ [ 2<*>(Bag posh teal), 4<*>(Bag dark maroon), 2<*>(Bag drab brown), 5<*>(Bag faded coral) ]), (Bag vibrant silver) `contain` (AsList _ [ 5<*>(Bag drab yellow), 3<*>(Bag faded silver), 2<*>(Bag bright silver) ]), (Bag dim chartreuse) `contain` (AsList _ [ 4<*>(Bag pale beige) ]), (Bag shiny gray) `contain` (AsList _ [ 3<*>(Bag dotted magenta), 4<*>(Bag plaid crimson) ]), (Bag dim salmon) `contain` (AsList _ [ 4<*>(Bag clear lime), 3<*>(Bag muted tomato), 2<*>(Bag shiny olive) ]), (Bag clear orange) `contain` (AsList _ [ 4<*>(Bag posh beige), 5<*>(Bag dotted gray), 5<*>(Bag dotted turquoise) ]), (Bag plaid salmon) `contain` (AsList _ [ 4<*>(Bag bright indigo) ]), (Bag posh beige) `contain` (AsList _ [ 3<*>(Bag pale red) ]), (Bag clear lime) `contain` (AsList _ [ 1<*>(Bag bright gold) ]), (Bag faded magenta) `contain` (AsList _ [ 5<*>(Bag dim salmon), 3<*>(Bag dull aqua), 5<*>(Bag drab crimson) ]), (Bag drab blue) `contain` (AsList _ [ 5<*>(Bag dark maroon), 4<*>(Bag wavy plum) ]), (Bag plaid aqua) `contain` (AsList _ [ 5<*>(Bag mirrored orange), 3<*>(Bag dull violet), 3<*>(Bag bright salmon) ]), (Bag muted teal) `contain` (AsList _ [ 4<*>(Bag dull red), 1<*>(Bag light maroon), 4<*>(Bag dark cyan) ]), (Bag posh green) `contain` (AsList _ [ 1<*>(Bag mirrored chartreuse), 4<*>(Bag muted chartreuse), 5<*>(Bag plaid olive), 4<*>(Bag dark salmon) ]), (Bag posh fuchsia) `contain` (AsList _ [ 3<*>(Bag bright cyan), 1<*>(Bag bright salmon), 4<*>(Bag dim salmon), 1<*>(Bag light black) ]), (Bag muted yellow) `contain` (AsList _ [ 2<*>(Bag muted teal), 5<*>(Bag pale orange) ]), (Bag clear cyan) `contain` (AsList _ [ 3<*>(Bag clear teal), 5<*>(Bag drab aqua), 2<*>(Bag drab brown) ]), (Bag wavy salmon) `contain` (AsList _ [ 5<*>(Bag dark fuchsia), 2<*>(Bag dull gray), 4<*>(Bag pale tancolor) ]), (Bag dull crimson) `contain` (AsList _ [ 5<*>(Bag faded indigo), 2<*>(Bag plaid black) ]), (Bag mirrored white) `contain` (AsList _ [ 2<*>(Bag dotted plum), 2<*>(Bag dark coral), 3<*>(Bag faded gray) ]), (Bag striped violet) `contain` (AsList _ [ 4<*>(Bag mirrored tancolor) ]), (Bag striped tancolor) `contain` (AsList _ [ 2<*>(Bag posh coral) ]), (Bag striped tomato) `contain` (AsList _ [ 1<*>(Bag muted teal), 1<*>(Bag faded tancolor) ]), (Bag faded aqua) `contain` (AsList _ [ 5<*>(Bag faded red), 2<*>(Bag mirrored coral), 5<*>(Bag light red), 2<*>(Bag mirrored purple) ]), (Bag drab olive) `contain` (AsList _ [ 2<*>(Bag drab gold) ]), (Bag bright lavender) `contain` (AsList _ [ 1<*>(Bag dark salmon), 1<*>(Bag striped olive) ]), (Bag plaid green) `contain` (AsList _ [ 2<*>(Bag bright gold) ]), (Bag dim purple) `contain` (AsList _ [ 1<*>(Bag plaid yellow), 3<*>(Bag muted plum), 2<*>(Bag vibrant magenta) ]), (Bag faded violet) `contain` (AsList _ [ 3<*>(Bag mirrored violet) ]), (Bag posh tomato) `contain` (AsList _ [ 1<*>(Bag dark indigo), 2<*>(Bag pale yellow), 5<*>(Bag dull orange) ]), (Bag dim silver) `contain` (AsList _ [ 1<*>(Bag dotted white), 5<*>(Bag faded white) ]), (Bag dotted red) `contain` (AsList _ [ 2<*>(Bag dull yellow), 4<*>(Bag dim lavender), 1<*>(Bag light gold) ]), (Bag bright indigo) `contain` (AsList _ [ 5<*>(Bag pale gray), 3<*>(Bag posh white) ]), (Bag faded fuchsia) `contain` (AsList _ [ 4<*>(Bag muted green), 3<*>(Bag posh magenta) ]), (Bag wavy silver) `contain` (AsList _ [ 1<*>(Bag dotted violet), 3<*>(Bag drab tomato), 4<*>(Bag dark fuchsia) ]), (Bag dim white) `contain` (AsList _ [ 2<*>(Bag bright magenta) ]), (Bag pale beige) `contain` (AsList _ [ 5<*>(Bag dim orange), 5<*>(Bag vibrant red) ]), (Bag vibrant orange) `contain` (AsList _ [ 4<*>(Bag dull violet), 2<*>(Bag mirrored salmon), 1<*>(Bag drab lavender) ]), (Bag clear fuchsia) `contain` (AsList _ [ 1<*>(Bag mirrored olive), 4<*>(Bag mirrored chartreuse), 1<*>(Bag posh beige) ]), (Bag vibrant indigo) `contain` (AsList _ [ 5<*>(Bag dim lavender), 4<*>(Bag drab blue), 1<*>(Bag muted beige) ]), (Bag dim brown) `contain` (AsList _ [ 2<*>(Bag posh brown) ]), (Bag plaid beige) `contain` (AsList _ [ 1<*>(Bag dark tancolor), 5<*>(Bag clear teal), 2<*>(Bag light gray), 4<*>(Bag wavy lime) ]), (Bag bright crimson) `contain` (AsList _ [ 4<*>(Bag drab chartreuse), 4<*>(Bag vibrant blue), 5<*>(Bag mirrored lime), 2<*>(Bag muted plum) ]), (Bag shiny purple) `contain` (AsList _ [ 1<*>(Bag muted crimson) ]), (Bag wavy bronze) `contain` (AsList _ [ 1<*>(Bag dim brown), 3<*>(Bag light salmon), 1<*>(Bag muted teal), 3<*>(Bag plaid olive) ]), (Bag faded bronze) `contain` (AsList _ [ 2<*>(Bag striped blue), 2<*>(Bag posh white), 2<*>(Bag posh orange) ]), (Bag dark orange) `contain` (AsList _ [ 2<*>(Bag vibrant aqua), 5<*>(Bag dark maroon), 1<*>(Bag mirrored aqua) ]), (Bag drab green) `contain` (AsList _ [ 2<*>(Bag faded aqua), 5<*>(Bag posh crimson) ]), (Bag clear white) `contain` (AsList _ [ 3<*>(Bag plaid black), 2<*>(Bag posh white), 5<*>(Bag posh lavender), 1<*>(Bag dull purple) ]), (Bag wavy black) `contain` (AsList _ [ 4<*>(Bag bright magenta) ]), (Bag posh crimson) `contain` (AsList _ [ 3<*>(Bag dark yellow), 1<*>(Bag mirrored purple), 2<*>(Bag dark maroon), 5<*>(Bag shiny olive) ]), (Bag dotted gray) `contain` (AsList _ [ 4<*>(Bag posh maroon), 2<*>(Bag mirrored chartreuse), 5<*>(Bag wavy fuchsia) ]), (Bag vibrant lavender) `contain` (AsList _ [ 2<*>(Bag plaid coral), 4<*>(Bag posh brown), 4<*>(Bag dim tancolor) ]), (Bag drab violet) `contain` (AsList _ [ 4<*>(Bag muted gold) ]), (Bag striped maroon) `contain` (AsList _ [ 4<*>(Bag dotted lavender), 2<*>(Bag dark fuchsia), 3<*>(Bag bright olive) ]), (Bag plaid white) `contain` (AsList _ [ 2<*>(Bag wavy olive), 2<*>(Bag pale blue), 4<*>(Bag pale aqua) ]), (Bag pale gold) `contain` (AsList _ [ 4<*>(Bag bright teal), 2<*>(Bag posh bronze), 3<*>(Bag shiny maroon), 1<*>(Bag pale brown) ]), (Bag vibrant olive) `contain` (AsList _ [ 3<*>(Bag plaid green), 2<*>(Bag light maroon), 3<*>(Bag dotted salmon), 4<*>(Bag faded tomato) ]), (Bag dotted maroon) `contain` (AsList _ [ ]), (Bag light blue) `contain` (AsList _ [ 2<*>(Bag dim violet), 1<*>(Bag vibrant beige) ]), (Bag mirrored tancolor) `contain` (AsList _ [ 4<*>(Bag drab brown), 1<*>(Bag striped orange), 5<*>(Bag light maroon), 2<*>(Bag dotted maroon) ]), (Bag dark beige) `contain` (AsList _ [ 1<*>(Bag drab maroon) ]), (Bag light silver) `contain` (AsList _ [ 1<*>(Bag shiny chartreuse), 2<*>(Bag dim turquoise) ]), (Bag dull green) `contain` (AsList _ [ 2<*>(Bag striped chartreuse), 2<*>(Bag mirrored gold), 4<*>(Bag dim fuchsia) ]), (Bag faded silver) `contain` (AsList _ [ 3<*>(Bag drab violet) ]), (Bag bright beige) `contain` (AsList _ [ 5<*>(Bag bright teal), 5<*>(Bag mirrored violet) ]), (Bag striped gold) `contain` (AsList _ [ 2<*>(Bag wavy beige), 4<*>(Bag dim black) ]), (Bag wavy fuchsia) `contain` (AsList _ [ 4<*>(Bag posh green) ]), (Bag shiny blue) `contain` (AsList _ [ 3<*>(Bag posh maroon) ]), (Bag mirrored indigo) `contain` (AsList _ [ 3<*>(Bag striped cyan), 2<*>(Bag vibrant blue), 5<*>(Bag wavy violet) ]), (Bag dim tomato) `contain` (AsList _ [ 4<*>(Bag dull orange), 5<*>(Bag shiny green), 1<*>(Bag plaid olive) ]), (Bag plaid violet) `contain` (AsList _ [ 1<*>(Bag dull violet), 4<*>(Bag plaid fuchsia) ]), (Bag dark white) `contain` (AsList _ [ 3<*>(Bag drab orange) ]), (Bag drab indigo) `contain` (AsList _ [ 3<*>(Bag dark red), 2<*>(Bag plaid tomato), 5<*>(Bag clear white) ]), (Bag shiny beige) `contain` (AsList _ [ 2<*>(Bag posh tomato) ]), (Bag striped indigo) `contain` (AsList _ [ 5<*>(Bag clear lavender), 5<*>(Bag dotted indigo), 1<*>(Bag muted cyan), 5<*>(Bag dark olive) ]), (Bag drab cyan) `contain` (AsList _ [ 1<*>(Bag drab orange), 4<*>(Bag posh gold) ]), (Bag light red) `contain` (AsList _ [ 4<*>(Bag dark indigo), 1<*>(Bag vibrant violet), 4<*>(Bag shiny magenta) ]), (Bag muted gold) `contain` (AsList _ [ 3<*>(Bag light maroon), 1<*>(Bag striped orange), 4<*>(Bag pale maroon) ]), (Bag clear indigo) `contain` (AsList _ [ 4<*>(Bag faded green), 3<*>(Bag clear crimson), 2<*>(Bag vibrant cyan) ]), (Bag faded tancolor) `contain` (AsList _ [ 5<*>(Bag bright gold) ]), (Bag shiny salmon) `contain` (AsList _ [ 1<*>(Bag bright lavender), 1<*>(Bag posh blue), 4<*>(Bag shiny coral) ]), (Bag dull turquoise) `contain` (AsList _ [ 5<*>(Bag drab yellow), 5<*>(Bag dotted plum), 5<*>(Bag plaid magenta) ]), (Bag posh lime) `contain` (AsList _ [ 4<*>(Bag wavy tancolor), 4<*>(Bag shiny tomato), 4<*>(Bag dim violet), 5<*>(Bag bright tancolor) ]), (Bag pale green) `contain` (AsList _ [ 1<*>(Bag wavy gray), 2<*>(Bag faded lavender), 1<*>(Bag vibrant yellow) ]), (Bag mirrored gold) `contain` (AsList _ [ 2<*>(Bag light gray), 5<*>(Bag wavy tancolor) ]), (Bag mirrored green) `contain` (AsList _ [ 1<*>(Bag faded violet) ]), (Bag dark red) `contain` (AsList _ [ 3<*>(Bag faded bronze), 4<*>(Bag dark green), 4<*>(Bag wavy crimson) ]), (Bag bright tomato) `contain` (AsList _ [ 4<*>(Bag faded bronze) ]), (Bag mirrored crimson) `contain` (AsList _ [ 5<*>(Bag faded red), 1<*>(Bag drab crimson) ]), (Bag faded orange) `contain` (AsList _ [ 2<*>(Bag muted teal), 5<*>(Bag pale maroon), 1<*>(Bag dark yellow) ]), (Bag striped silver) `contain` (AsList _ [ 4<*>(Bag mirrored lime), 1<*>(Bag dull tancolor), 1<*>(Bag pale fuchsia), 1<*>(Bag wavy purple) ]), (Bag wavy aqua) `contain` (AsList _ [ 4<*>(Bag vibrant aqua), 4<*>(Bag shiny fuchsia), 4<*>(Bag dotted turquoise), 4<*>(Bag striped olive) ]), (Bag striped lavender) `contain` (AsList _ [ 5<*>(Bag shiny lavender), 3<*>(Bag pale lime) ]), (Bag vibrant white) `contain` (AsList _ [ 2<*>(Bag dim bronze), 2<*>(Bag light red), 5<*>(Bag shiny gold) ]), (Bag vibrant yellow) `contain` (AsList _ [ 1<*>(Bag shiny turquoise), 5<*>(Bag dull beige), 4<*>(Bag dark gold), 5<*>(Bag dull tomato) ]), (Bag striped green) `contain` (AsList _ [ 5<*>(Bag striped tomato) ]), (Bag muted silver) `contain` (AsList _ [ 5<*>(Bag striped maroon), 5<*>(Bag light salmon), 4<*>(Bag clear maroon) ]), (Bag light plum) `contain` (AsList _ [ 5<*>(Bag mirrored blue), 2<*>(Bag vibrant coral), 5<*>(Bag dim brown), 2<*>(Bag striped yellow) ]), (Bag posh yellow) `contain` (AsList _ [ 1<*>(Bag mirrored salmon), 5<*>(Bag light plum) ]), (Bag plaid magenta) `contain` (AsList _ [ 3<*>(Bag dull plum), 2<*>(Bag mirrored tancolor) ]), (Bag plaid tancolor) `contain` (AsList _ [ 4<*>(Bag light turquoise), 4<*>(Bag faded purple), 3<*>(Bag mirrored crimson) ]), (Bag shiny black) `contain` (AsList _ [ 3<*>(Bag striped violet), 1<*>(Bag dim cyan), 2<*>(Bag dim white) ]), (Bag wavy brown) `contain` (AsList _ [ 2<*>(Bag plaid lavender) ]), (Bag vibrant gold) `contain` (AsList _ [ 1<*>(Bag clear tomato), 1<*>(Bag wavy olive), 2<*>(Bag faded magenta) ]), (Bag clear brown) `contain` (AsList _ [ 2<*>(Bag dim blue) ]), (Bag dim fuchsia) `contain` (AsList _ [ 2<*>(Bag bright gold), 5<*>(Bag wavy purple), 3<*>(Bag posh orange) ]), (Bag muted turquoise) `contain` (AsList _ [ 1<*>(Bag light turquoise), 3<*>(Bag vibrant plum), 5<*>(Bag posh maroon), 1<*>(Bag muted maroon) ]), (Bag shiny coral) `contain` (AsList _ [ 3<*>(Bag striped yellow) ]), (Bag dotted coral) `contain` (AsList _ [ 1<*>(Bag dark orange), 4<*>(Bag striped violet) ]), (Bag shiny bronze) `contain` (AsList _ [ 5<*>(Bag mirrored yellow), 4<*>(Bag light violet), 4<*>(Bag light crimson) ]), (Bag dull cyan) `contain` (AsList _ [ 2<*>(Bag dim cyan), 5<*>(Bag pale red) ]), (Bag bright tancolor) `contain` (AsList _ [ 4<*>(Bag pale gray), 4<*>(Bag posh brown), 3<*>(Bag shiny fuchsia) ]), (Bag pale purple) `contain` (AsList _ [ 5<*>(Bag wavy cyan), 5<*>(Bag dark salmon), 2<*>(Bag dark indigo), 1<*>(Bag plaid black) ]), (Bag shiny gold) `contain` (AsList _ [ 2<*>(Bag pale maroon), 5<*>(Bag pale purple), 4<*>(Bag posh brown), 1<*>(Bag dotted turquoise) ]), (Bag dim tancolor) `contain` (AsList _ [ 4<*>(Bag dark violet), 3<*>(Bag shiny blue) ]), (Bag wavy green) `contain` (AsList _ [ 3<*>(Bag plaid gray) ]), (Bag pale orange) `contain` (AsList _ [ 3<*>(Bag dim lime), 2<*>(Bag dark coral) ]), (Bag faded maroon) `contain` (AsList _ [ 5<*>(Bag clear black), 3<*>(Bag light lavender), 3<*>(Bag light black), 2<*>(Bag muted orange) ]), (Bag drab teal) `contain` (AsList _ [ 2<*>(Bag dotted crimson), 3<*>(Bag dim teal), 5<*>(Bag pale turquoise), 4<*>(Bag dark plum) ]), (Bag bright orange) `contain` (AsList _ [ 3<*>(Bag pale maroon), 1<*>(Bag pale bronze), 3<*>(Bag dotted maroon) ]), (Bag posh coral) `contain` (AsList _ [ 3<*>(Bag dim gold), 1<*>(Bag bright indigo), 3<*>(Bag clear black) ]), (Bag mirrored bronze) `contain` (AsList _ [ 5<*>(Bag dull violet), 3<*>(Bag vibrant red) ]), (Bag pale lavender) `contain` (AsList _ [ 2<*>(Bag pale purple), 1<*>(Bag pale red), 4<*>(Bag vibrant blue), 3<*>(Bag muted chartreuse) ]), (Bag wavy lavender) `contain` (AsList _ [ 3<*>(Bag drab chartreuse), 1<*>(Bag posh teal) ]), (Bag pale blue) `contain` (AsList _ [ 1<*>(Bag dark tancolor), 4<*>(Bag faded violet), 3<*>(Bag dim coral) ]), (Bag striped yellow) `contain` (AsList _ [ 2<*>(Bag pale red) ]), (Bag shiny aqua) `contain` (AsList _ [ 3<*>(Bag pale magenta) ]), (Bag faded olive) `contain` (AsList _ [ 1<*>(Bag vibrant white), 4<*>(Bag muted cyan) ]), (Bag dark chartreuse) `contain` (AsList _ [ 3<*>(Bag dim magenta), 3<*>(Bag dull plum), 2<*>(Bag pale lime) ]), (Bag dim lime) `contain` (AsList _ [ 3<*>(Bag muted white), 4<*>(Bag striped blue) ]), (Bag wavy cyan) `contain` (AsList _ [ 4<*>(Bag light maroon) ]), (Bag light bronze) `contain` (AsList _ [ 1<*>(Bag dull lime) ]), (Bag muted beige) `contain` (AsList _ [ 4<*>(Bag wavy blue), 2<*>(Bag dotted violet), 4<*>(Bag shiny orange) ]), (Bag dim coral) `contain` (AsList _ [ 4<*>(Bag wavy crimson), 3<*>(Bag mirrored tancolor), 2<*>(Bag wavy cyan), 5<*>(Bag light maroon) ]), (Bag dark green) `contain` (AsList _ [ 2<*>(Bag striped gray), 3<*>(Bag pale lavender), 1<*>(Bag striped lime) ]), (Bag pale cyan) `contain` (AsList _ [ 2<*>(Bag vibrant green), 1<*>(Bag mirrored lime), 5<*>(Bag vibrant chartreuse), 1<*>(Bag shiny lime) ]), (Bag shiny crimson) `contain` (AsList _ [ 4<*>(Bag dull aqua), 1<*>(Bag pale turquoise) ]), (Bag pale black) `contain` (AsList _ [ 3<*>(Bag vibrant olive), 2<*>(Bag dull aqua), 1<*>(Bag drab turquoise) ]), (Bag striped crimson) `contain` (AsList _ [ 4<*>(Bag dotted lavender), 2<*>(Bag clear orange) ]), (Bag clear maroon) `contain` (AsList _ [ 2<*>(Bag muted bronze), 3<*>(Bag vibrant olive), 1<*>(Bag striped lavender) ]), (Bag dim olive) `contain` (AsList _ [ 1<*>(Bag wavy lavender), 1<*>(Bag dotted salmon), 1<*>(Bag pale silver), 5<*>(Bag vibrant coral) ]), (Bag dotted indigo) `contain` (AsList _ [ 3<*>(Bag dark salmon), 2<*>(Bag shiny turquoise), 4<*>(Bag plaid coral) ]), (Bag plaid orange) `contain` (AsList _ [ 2<*>(Bag mirrored plum), 5<*>(Bag faded lime), 4<*>(Bag dotted brown), 2<*>(Bag pale tancolor) ]), (Bag light maroon) `contain` (AsList _ [ ]), (Bag light violet) `contain` (AsList _ [ 5<*>(Bag clear yellow), 4<*>(Bag muted chartreuse) ]), (Bag light lavender) `contain` (AsList _ [ 3<*>(Bag striped olive), 1<*>(Bag posh black) ]), (Bag muted lime) `contain` (AsList _ [ 2<*>(Bag muted turquoise), 3<*>(Bag mirrored yellow), 5<*>(Bag clear gray) ]), (Bag faded black) `contain` (AsList _ [ 1<*>(Bag bright crimson), 1<*>(Bag dotted beige), 2<*>(Bag shiny magenta) ]), (Bag wavy blue) `contain` (AsList _ [ 5<*>(Bag vibrant plum), 5<*>(Bag shiny fuchsia), 2<*>(Bag posh orange), 1<*>(Bag wavy purple) ]), (Bag dark turquoise) `contain` (AsList _ [ 5<*>(Bag shiny tancolor), 2<*>(Bag dull silver), 2<*>(Bag muted lime), 2<*>(Bag mirrored tancolor) ]), (Bag mirrored teal) `contain` (AsList _ [ 4<*>(Bag pale brown), 5<*>(Bag drab lime), 5<*>(Bag striped beige) ]), (Bag vibrant gray) `contain` (AsList _ [ 5<*>(Bag bright yellow), 1<*>(Bag vibrant teal) ]), (Bag clear purple) `contain` (AsList _ [ 5<*>(Bag bright silver), 1<*>(Bag bright teal), 1<*>(Bag wavy lime), 4<*>(Bag striped blue) ]), (Bag striped lime) `contain` (AsList _ [ 1<*>(Bag mirrored violet), 3<*>(Bag dim cyan), 3<*>(Bag vibrant turquoise), 2<*>(Bag muted white) ]), (Bag mirrored lavender) `contain` (AsList _ [ 2<*>(Bag faded yellow) ]), (Bag posh maroon) `contain` (AsList _ [ 1<*>(Bag dotted salmon), 5<*>(Bag drab violet), 5<*>(Bag striped lime), 3<*>(Bag dotted olive) ]), (Bag faded yellow) `contain` (AsList _ [ 1<*>(Bag dull plum), 5<*>(Bag dim fuchsia) ]), (Bag dull aqua) `contain` (AsList _ [ 2<*>(Bag pale maroon) ]), (Bag dark tancolor) `contain` (AsList _ [ 4<*>(Bag dark salmon) ]), (Bag dim maroon) `contain` (AsList _ [ 4<*>(Bag posh aqua), 3<*>(Bag striped yellow) ]), (Bag faded purple) `contain` (AsList _ [ 5<*>(Bag clear teal), 2<*>(Bag dark olive) ]), (Bag clear tomato) `contain` (AsList _ [ 2<*>(Bag pale maroon) ]), (Bag dull gray) `contain` (AsList _ [ 5<*>(Bag light brown), 3<*>(Bag bright gold), 4<*>(Bag faded white), 3<*>(Bag vibrant coral) ]), (Bag dull maroon) `contain` (AsList _ [ 4<*>(Bag clear indigo), 5<*>(Bag shiny magenta), 3<*>(Bag drab tomato), 4<*>(Bag dim violet) ]), (Bag pale coral) `contain` (AsList _ [ 2<*>(Bag pale bronze), 2<*>(Bag wavy salmon) ]), (Bag drab silver) `contain` (AsList _ [ 3<*>(Bag dark coral), 5<*>(Bag shiny violet), 5<*>(Bag faded indigo) ]), (Bag plaid black) `contain` (AsList _ [ 1<*>(Bag dull red) ]), (Bag plaid silver) `contain` (AsList _ [ 4<*>(Bag clear cyan) ]), (Bag dotted blue) `contain` (AsList _ [ 2<*>(Bag plaid beige), 4<*>(Bag posh cyan), 4<*>(Bag shiny gray) ]), (Bag dotted magenta) `contain` (AsList _ [ 1<*>(Bag drab orange), 5<*>(Bag wavy aqua), 2<*>(Bag wavy lavender) ]), (Bag clear aqua) `contain` (AsList _ [ 4<*>(Bag striped magenta), 4<*>(Bag muted chartreuse) ]), (Bag pale red) `contain` (AsList _ [ ]), (Bag bright turquoise) `contain` (AsList _ [ 1<*>(Bag wavy purple), 3<*>(Bag vibrant turquoise), 2<*>(Bag dark brown) ]), (Bag vibrant magenta) `contain` (AsList _ [ 5<*>(Bag drab brown), 2<*>(Bag striped olive), 5<*>(Bag light plum) ]), (Bag dull brown) `contain` (AsList _ [ 4<*>(Bag drab teal), 4<*>(Bag bright gold), 4<*>(Bag dim blue), 3<*>(Bag dotted teal) ]), (Bag dotted olive) `contain` (AsList _ [ 5<*>(Bag striped orange), 1<*>(Bag wavy cyan), 3<*>(Bag wavy crimson) ]), (Bag bright teal) `contain` (AsList _ [ 3<*>(Bag dim coral), 1<*>(Bag dark cyan), 4<*>(Bag bright indigo) ]), (Bag shiny chartreuse) `contain` (AsList _ [ 1<*>(Bag drab brown) ]), (Bag bright lime) `contain` (AsList _ [ 2<*>(Bag pale silver) ]), (Bag vibrant crimson) `contain` (AsList _ [ 4<*>(Bag shiny white), 4<*>(Bag pale black), 5<*>(Bag clear cyan), 1<*>(Bag bright tancolor) ]), (Bag muted brown) `contain` (AsList _ [ 5<*>(Bag drab purple) ]), (Bag dotted aqua) `contain` (AsList _ [ 1<*>(Bag dim gray), 1<*>(Bag dark indigo), 3<*>(Bag posh tancolor), 5<*>(Bag dim lime) ]), (Bag muted tomato) `contain` (AsList _ [ 1<*>(Bag faded orange), 3<*>(Bag vibrant aqua) ]), (Bag bright cyan) `contain` (AsList _ [ 4<*>(Bag dotted coral), 2<*>(Bag dull lime), 5<*>(Bag clear maroon) ]), (Bag posh violet) `contain` (AsList _ [ 1<*>(Bag light magenta), 4<*>(Bag pale maroon), 1<*>(Bag dark teal) ]), (Bag wavy turquoise) `contain` (AsList _ [ 1<*>(Bag shiny gray), 4<*>(Bag drab tancolor), 3<*>(Bag pale lavender) ]), (Bag dark magenta) `contain` (AsList _ [ 2<*>(Bag dull bronze) ]), (Bag drab gray) `contain` (AsList _ [ 4<*>(Bag dotted turquoise), 5<*>(Bag light aqua) ]), (Bag dull coral) `contain` (AsList _ [ 2<*>(Bag plaid black), 2<*>(Bag striped cyan), 3<*>(Bag faded bronze), 5<*>(Bag plaid crimson) ]), (Bag vibrant chartreuse) `contain` (AsList _ [ 5<*>(Bag pale turquoise) ]), (Bag bright purple) `contain` (AsList _ [ 5<*>(Bag vibrant salmon), 1<*>(Bag posh green), 4<*>(Bag vibrant beige) ]), (Bag mirrored tomato) `contain` (AsList _ [ 4<*>(Bag wavy beige), 5<*>(Bag striped tancolor), 2<*>(Bag pale aqua) ]), (Bag shiny violet) `contain` (AsList _ [ 3<*>(Bag shiny tancolor), 3<*>(Bag faded brown), 4<*>(Bag shiny green), 3<*>(Bag shiny orange) ]), (Bag plaid lavender) `contain` (AsList _ [ 1<*>(Bag light maroon) ]), (Bag faded green) `contain` (AsList _ [ 5<*>(Bag dark cyan), 2<*>(Bag clear teal), 5<*>(Bag muted olive) ]), (Bag dotted salmon) `contain` (AsList _ [ 3<*>(Bag dotted olive), 1<*>(Bag dark cyan) ]), (Bag faded white) `contain` (AsList _ [ 3<*>(Bag drab brown) ]), (Bag striped black) `contain` (AsList _ [ 2<*>(Bag dark green), 5<*>(Bag pale bronze), 2<*>(Bag plaid olive) ]), (Bag dotted brown) `contain` (AsList _ [ 1<*>(Bag drab salmon) ]), (Bag dark crimson) `contain` (AsList _ [ 1<*>(Bag vibrant teal), 2<*>(Bag dim gray), 1<*>(Bag posh orange), 3<*>(Bag faded tancolor) ]), (Bag pale teal) `contain` (AsList _ [ 5<*>(Bag dim violet) ]), (Bag striped cyan) `contain` (AsList _ [ 3<*>(Bag pale purple), 4<*>(Bag dull red), 1<*>(Bag dark indigo), 3<*>(Bag dark yellow) ]), (Bag mirrored coral) `contain` (AsList _ [ 2<*>(Bag shiny olive) ]), (Bag shiny maroon) `contain` (AsList _ [ 5<*>(Bag vibrant coral), 3<*>(Bag plaid maroon), 1<*>(Bag striped turquoise), 2<*>(Bag wavy violet) ]), (Bag dull indigo) `contain` (AsList _ [ 2<*>(Bag plaid magenta), 1<*>(Bag bright chartreuse) ]), (Bag drab magenta) `contain` (AsList _ [ 4<*>(Bag striped olive), 3<*>(Bag posh white) ]), (Bag clear tancolor) `contain` (AsList _ [ 4<*>(Bag light gold), 4<*>(Bag muted gold) ]), (Bag dark gray) `contain` (AsList _ [ 4<*>(Bag plaid blue), 5<*>(Bag drab brown), 3<*>(Bag pale gray), 3<*>(Bag mirrored violet) ]), (Bag wavy teal) `contain` (AsList _ [ 4<*>(Bag drab aqua), 3<*>(Bag pale salmon) ]), (Bag dotted tancolor) `contain` (AsList _ [ 2<*>(Bag pale bronze), 3<*>(Bag faded orange) ]), (Bag bright brown) `contain` (AsList _ [ 3<*>(Bag bright blue) ]), (Bag clear blue) `contain` (AsList _ [ 5<*>(Bag shiny crimson), 1<*>(Bag dark cyan) ]), (Bag clear yellow) `contain` (AsList _ [ 1<*>(Bag muted gold), 1<*>(Bag posh orange), 1<*>(Bag dull purple), 4<*>(Bag dark indigo) ]), (Bag pale aqua) `contain` (AsList _ [ 3<*>(Bag dim coral), 2<*>(Bag mirrored aqua) ]), (Bag dull olive) `contain` (AsList _ [ 1<*>(Bag dull yellow) ]), (Bag muted violet) `contain` (AsList _ [ 3<*>(Bag shiny tancolor) ]), (Bag striped aqua) `contain` (AsList _ [ 2<*>(Bag vibrant green), 2<*>(Bag faded coral), 2<*>(Bag dark cyan), 4<*>(Bag wavy beige) ]), (Bag pale fuchsia) `contain` (AsList _ [ 5<*>(Bag dull green), 2<*>(Bag dotted aqua) ]), (Bag shiny brown) `contain` (AsList _ [ 4<*>(Bag dim black) ]), (Bag plaid coral) `contain` (AsList _ [ 3<*>(Bag faded bronze), 2<*>(Bag pale lavender), 3<*>(Bag dotted tancolor), 2<*>(Bag wavy lavender) ]), (Bag posh magenta) `contain` (AsList _ [ 2<*>(Bag clear red), 4<*>(Bag dim brown) ]), (Bag wavy purple) `contain` (AsList _ [ 4<*>(Bag dim magenta) ]), (Bag plaid fuchsia) `contain` (AsList _ [ 2<*>(Bag striped olive), 3<*>(Bag light gray) ]), (Bag dim violet) `contain` (AsList _ [ 3<*>(Bag dark brown), 4<*>(Bag muted plum) ]), (Bag light turquoise) `contain` (AsList _ [ 5<*>(Bag clear brown), 5<*>(Bag muted chartreuse) ]), (Bag dull white) `contain` (AsList _ [ 4<*>(Bag wavy salmon), 3<*>(Bag dotted crimson), 1<*>(Bag dark coral), 1<*>(Bag pale chartreuse) ]), (Bag light brown) `contain` (AsList _ [ 2<*>(Bag plaid black), 3<*>(Bag light red) ]), (Bag dotted purple) `contain` (AsList _ [ 1<*>(Bag posh crimson), 4<*>(Bag vibrant red), 2<*>(Bag wavy beige) ]), (Bag striped orange) `contain` (AsList _ [ ]), (Bag clear green) `contain` (AsList _ [ 3<*>(Bag light plum), 1<*>(Bag wavy lavender), 1<*>(Bag shiny olive) ]), (Bag bright red) `contain` (AsList _ [ 5<*>(Bag dotted turquoise), 3<*>(Bag dim aqua), 2<*>(Bag posh orange) ]), (Bag dark bronze) `contain` (AsList _ [ 2<*>(Bag pale yellow), 1<*>(Bag striped brown), 3<*>(Bag striped chartreuse) ]), (Bag muted cyan) `contain` (AsList _ [ 3<*>(Bag muted olive), 2<*>(Bag shiny red), 1<*>(Bag vibrant lavender), 5<*>(Bag drab gold) ]), (Bag light coral) `contain` (AsList _ [ 3<*>(Bag shiny gray), 5<*>(Bag dull bronze), 5<*>(Bag muted fuchsia), 5<*>(Bag clear magenta) ]), (Bag shiny olive) `contain` (AsList _ [ 4<*>(Bag dull cyan), 5<*>(Bag dark gray) ]), (Bag drab orange) `contain` (AsList _ [ ]), (Bag striped salmon) `contain` (AsList _ [ 5<*>(Bag drab salmon), 5<*>(Bag pale plum) ]), (Bag plaid cyan) `contain` (AsList _ [ 2<*>(Bag bright blue), 1<*>(Bag mirrored gray), 5<*>(Bag faded violet) ]), (Bag plaid teal) `contain` (AsList _ [ 3<*>(Bag pale maroon), 1<*>(Bag clear teal) ]), (Bag faded cyan) `contain` (AsList _ [ 1<*>(Bag dim bronze), 3<*>(Bag light olive), 1<*>(Bag muted beige), 1<*>(Bag wavy teal) ]), (Bag clear magenta) `contain` (AsList _ [ 5<*>(Bag striped orange) ]), (Bag dull black) `contain` (AsList _ [ 1<*>(Bag shiny purple), 1<*>(Bag mirrored red), 4<*>(Bag dotted fuchsia), 3<*>(Bag vibrant crimson) ]), (Bag mirrored blue) `contain` (AsList _ [ 3<*>(Bag light brown) ]), (Bag mirrored black) `contain` (AsList _ [ 3<*>(Bag dim coral), 3<*>(Bag plaid purple) ]), (Bag dim black) `contain` (AsList _ [ 4<*>(Bag dim blue) ]), (Bag pale plum) `contain` (AsList _ [ 4<*>(Bag muted coral), 2<*>(Bag light purple) ]), (Bag dark salmon) `contain` (AsList _ [ 2<*>(Bag plaid blue), 4<*>(Bag vibrant turquoise), 3<*>(Bag posh white) ]), (Bag striped red) `contain` (AsList _ [ 1<*>(Bag dim plum) ]), (Bag striped beige) `contain` (AsList _ [ 1<*>(Bag dark tomato) ]), (Bag clear beige) `contain` (AsList _ [ 2<*>(Bag posh orange), 4<*>(Bag muted coral) ]), (Bag bright blue) `contain` (AsList _ [ 4<*>(Bag faded gold), 4<*>(Bag faded indigo) ]), (Bag light purple) `contain` (AsList _ [ 4<*>(Bag muted violet), 1<*>(Bag pale red) ]), (Bag dim indigo) `contain` (AsList _ [ 3<*>(Bag dim silver), 2<*>(Bag faded violet) ]), (Bag dotted green) `contain` (AsList _ [ 5<*>(Bag dotted chartreuse), 1<*>(Bag pale black) ]), (Bag pale yellow) `contain` (AsList _ [ 3<*>(Bag plaid tomato) ]), (Bag drab tancolor) `contain` (AsList _ [ 3<*>(Bag dim plum), 2<*>(Bag dark fuchsia) ]), (Bag bright white) `contain` (AsList _ [ 3<*>(Bag muted bronze) ]), (Bag shiny turquoise) `contain` (AsList _ [ 4<*>(Bag drab brown) ]), (Bag pale maroon) `contain` (AsList _ [ ]), (Bag faded indigo) `contain` (AsList _ [ 1<*>(Bag faded tomato), 2<*>(Bag light red), 5<*>(Bag vibrant bronze) ]), (Bag dotted black) `contain` (AsList _ [ 1<*>(Bag clear brown), 5<*>(Bag mirrored olive), 4<*>(Bag dim brown), 2<*>(Bag drab red) ]), (Bag light chartreuse) `contain` (AsList _ [ 5<*>(Bag muted black) ]), (Bag posh orange) `contain` (AsList _ [ 4<*>(Bag light maroon), 1<*>(Bag muted white) ]), (Bag vibrant turquoise) `contain` (AsList _ [ 1<*>(Bag dark maroon), 1<*>(Bag shiny magenta), 2<*>(Bag dotted maroon) ]), (Bag striped fuchsia) `contain` (AsList _ [ 5<*>(Bag clear blue), 5<*>(Bag pale black), 1<*>(Bag mirrored maroon), 2<*>(Bag dotted maroon) ]), (Bag dark violet) `contain` (AsList _ [ 5<*>(Bag clear white) ]), (Bag pale salmon) `contain` (AsList _ [ 1<*>(Bag vibrant violet), 3<*>(Bag plaid olive) ]), (Bag pale violet) `contain` (AsList _ [ 4<*>(Bag shiny chartreuse), 5<*>(Bag dark salmon), 3<*>(Bag bright indigo), 4<*>(Bag dark orange) ]), (Bag faded teal) `contain` (AsList _ [ 2<*>(Bag dark gray), 2<*>(Bag posh black), 3<*>(Bag plaid maroon) ]), (Bag drab yellow) `contain` (AsList _ [ 4<*>(Bag mirrored blue), 4<*>(Bag mirrored violet), 3<*>(Bag dim salmon), 1<*>(Bag clear yellow) ]), (Bag wavy indigo) `contain` (AsList _ [ 2<*>(Bag shiny olive), 5<*>(Bag plaid aqua) ]), (Bag shiny tancolor) `contain` (AsList _ [ 2<*>(Bag wavy purple), 1<*>(Bag dotted aqua), 1<*>(Bag light violet) ]), (Bag dull lime) `contain` (AsList _ [ 1<*>(Bag dull coral) ]), (Bag clear turquoise) `contain` (AsList _ [ 1<*>(Bag vibrant fuchsia), 5<*>(Bag dull beige) ]), (Bag dark blue) `contain` (AsList _ [ 2<*>(Bag dark violet), 2<*>(Bag dotted maroon), 4<*>(Bag bright aqua), 4<*>(Bag clear black) ]), (Bag drab black) `contain` (AsList _ [ 2<*>(Bag dim gold), 1<*>(Bag plaid crimson) ]), (Bag dotted bronze) `contain` (AsList _ [ 5<*>(Bag dim bronze) ]), (Bag mirrored cyan) `contain` (AsList _ [ 3<*>(Bag muted salmon) ]), (Bag light gray) `contain` (AsList _ [ 1<*>(Bag faded gold), 4<*>(Bag faded coral), 4<*>(Bag faded silver), 2<*>(Bag faded tomato) ]), (Bag vibrant blue) `contain` (AsList _ [ 2<*>(Bag muted gold) ]), (Bag dark maroon) `contain` (AsList _ [ 3<*>(Bag mirrored violet), 3<*>(Bag muted gold), 3<*>(Bag drab brown), 4<*>(Bag plaid black) ]), (Bag pale chartreuse) `contain` (AsList _ [ 5<*>(Bag dotted teal), 4<*>(Bag bright gold) ]), (Bag mirrored yellow) `contain` (AsList _ [ 4<*>(Bag dim cyan) ]), (Bag shiny plum) `contain` (AsList _ [ 3<*>(Bag dull green), 3<*>(Bag vibrant olive), 3<*>(Bag dim tancolor) ]), (Bag mirrored chartreuse) `contain` (AsList _ [ 1<*>(Bag dark tancolor), 5<*>(Bag drab aqua) ]), (Bag dark gold) `contain` (AsList _ [ 4<*>(Bag drab yellow), 4<*>(Bag pale bronze) ]), (Bag vibrant lime) `contain` (AsList _ [ 3<*>(Bag dull salmon) ]), (Bag dim blue) `contain` (AsList _ [ 2<*>(Bag dull cyan), 2<*>(Bag dull purple), 1<*>(Bag dark indigo) ]), (Bag dark brown) `contain` (AsList _ [ 5<*>(Bag dull chartreuse) ]), (Bag light tomato) `contain` (AsList _ [ 5<*>(Bag posh teal), 3<*>(Bag wavy yellow), 5<*>(Bag bright olive), 4<*>(Bag pale brown) ]), (Bag bright green) `contain` (AsList _ [ 2<*>(Bag bright teal) ]), (Bag shiny silver) `contain` (AsList _ [ 2<*>(Bag mirrored indigo), 4<*>(Bag faded silver), 2<*>(Bag dark lavender) ]), (Bag bright olive) `contain` (AsList _ [ 5<*>(Bag drab turquoise) ]), (Bag striped teal) `contain` (AsList _ [ 1<*>(Bag vibrant tancolor) ]), (Bag dotted yellow) `contain` (AsList _ [ 1<*>(Bag clear tomato), 5<*>(Bag muted orange), 3<*>(Bag striped turquoise), 3<*>(Bag dim lime) ]), (Bag posh white) `contain` (AsList _ [ ]), (Bag plaid red) `contain` (AsList _ [ 3<*>(Bag dotted teal), 2<*>(Bag light brown), 4<*>(Bag vibrant teal) ]), (Bag drab purple) `contain` (AsList _ [ 5<*>(Bag pale purple), 1<*>(Bag shiny blue), 2<*>(Bag shiny orange) ]), (Bag vibrant maroon) `contain` (AsList _ [ 3<*>(Bag shiny cyan), 5<*>(Bag striped lavender) ]), (Bag striped brown) `contain` (AsList _ [ 5<*>(Bag faded salmon), 4<*>(Bag clear violet), 1<*>(Bag plaid salmon), 5<*>(Bag dotted tomato) ]), (Bag muted blue) `contain` (AsList _ [ 1<*>(Bag drab chartreuse) ]), (Bag striped blue) `contain` (AsList _ [ 4<*>(Bag dark cyan) ]), (Bag striped plum) `contain` (AsList _ [ 2<*>(Bag wavy violet) ]), (Bag clear violet) `contain` (AsList _ [ 2<*>(Bag dotted crimson), 3<*>(Bag plaid magenta) ]), (Bag clear teal) `contain` (AsList _ [ 2<*>(Bag bright gold), 4<*>(Bag plaid black) ]), (Bag dim gold) `contain` (AsList _ [ 5<*>(Bag pale gray), 3<*>(Bag drab orange), 3<*>(Bag plaid black) ]), (Bag wavy violet) `contain` (AsList _ [ 3<*>(Bag dull beige) ]), (Bag wavy lime) `contain` (AsList _ [ 2<*>(Bag bright lavender) ]), (Bag muted purple) `contain` (AsList _ [ 3<*>(Bag wavy brown), 4<*>(Bag muted blue) ]), (Bag shiny indigo) `contain` (AsList _ [ 1<*>(Bag shiny aqua), 4<*>(Bag bright aqua), 2<*>(Bag clear turquoise) ]), (Bag dim orange) `contain` (AsList _ [ 5<*>(Bag striped lime) ]), (Bag clear bronze) `contain` (AsList _ [ 4<*>(Bag pale black), 4<*>(Bag bright olive) ]), (Bag wavy gray) `contain` (AsList _ [ 3<*>(Bag dotted teal), 2<*>(Bag striped lavender), 2<*>(Bag wavy aqua) ]), (Bag dull tancolor) `contain` (AsList _ [ 5<*>(Bag vibrant violet), 2<*>(Bag muted maroon), 5<*>(Bag vibrant plum), 3<*>(Bag shiny red) ]), (Bag drab chartreuse) `contain` (AsList _ [ 4<*>(Bag striped gray), 4<*>(Bag pale bronze), 5<*>(Bag dim aqua) ]), (Bag plaid gray) `contain` (AsList _ [ 1<*>(Bag shiny blue), 4<*>(Bag clear brown), 4<*>(Bag shiny tancolor), 4<*>(Bag plaid beige) ]), (Bag drab plum) `contain` (AsList _ [ 5<*>(Bag vibrant cyan), 3<*>(Bag vibrant aqua), 5<*>(Bag dim coral), 1<*>(Bag dull orange) ]), (Bag clear gold) `contain` (AsList _ [ 1<*>(Bag drab olive), 5<*>(Bag drab orange), 4<*>(Bag shiny tancolor) ]), (Bag dull tomato) `contain` (AsList _ [ 3<*>(Bag bright teal), 1<*>(Bag muted chartreuse) ]), (Bag bright silver) `contain` (AsList _ [ 1<*>(Bag dull chartreuse), 5<*>(Bag bright gold), 4<*>(Bag faded silver) ]), (Bag clear black) `contain` (AsList _ [ 5<*>(Bag dull orange), 3<*>(Bag dim black), 1<*>(Bag posh beige) ]), (Bag striped olive) `contain` (AsList _ [ 2<*>(Bag pale maroon) ]), (Bag light fuchsia) `contain` (AsList _ [ 5<*>(Bag pale silver), 4<*>(Bag dark olive), 1<*>(Bag clear magenta) ]), (Bag posh indigo) `contain` (AsList _ [ 2<*>(Bag wavy purple), 3<*>(Bag striped beige), 4<*>(Bag vibrant white) ]), (Bag dark aqua) `contain` (AsList _ [ 5<*>(Bag drab tomato), 4<*>(Bag faded red), 4<*>(Bag light magenta), 4<*>(Bag striped tomato) ]), (Bag plaid olive) `contain` (AsList _ [ 2<*>(Bag posh brown) ]), (Bag wavy plum) `contain` (AsList _ [ 3<*>(Bag shiny blue), 4<*>(Bag dark lavender), 5<*>(Bag pale violet) ]), (Bag vibrant teal) `contain` (AsList _ [ 4<*>(Bag dull purple), 4<*>(Bag dull plum) ]), (Bag dotted gold) `contain` (AsList _ [ 3<*>(Bag wavy maroon) ]), (Bag drab brown) `contain` (AsList _ [ ]), (Bag dull teal) `contain` (AsList _ [ 5<*>(Bag wavy beige), 1<*>(Bag muted tomato), 1<*>(Bag drab aqua) ]), (Bag mirrored plum) `contain` (AsList _ [ 4<*>(Bag muted chartreuse), 5<*>(Bag dull orange), 3<*>(Bag clear black) ]), (Bag wavy beige) `contain` (AsList _ [ 4<*>(Bag pale violet), 5<*>(Bag dim tancolor), 3<*>(Bag pale fuchsia), 2<*>(Bag wavy tancolor) ]), (Bag plaid lime) `contain` (AsList _ [ 3<*>(Bag pale crimson) ]), (Bag plaid brown) `contain` (AsList _ [ 2<*>(Bag dull green) ]), (Bag light black) `contain` (AsList _ [ 1<*>(Bag faded gold), 1<*>(Bag bright tancolor) ]), (Bag dim cyan) `contain` (AsList _ [ 2<*>(Bag clear yellow), 3<*>(Bag plaid blue), 1<*>(Bag dull purple) ]), (Bag drab coral) `contain` (AsList _ [ 1<*>(Bag bright gray), 1<*>(Bag muted magenta), 5<*>(Bag mirrored lime), 1<*>(Bag mirrored olive) ]), (Bag bright coral) `contain` (AsList _ [ 3<*>(Bag plaid blue) ]), (Bag mirrored silver) `contain` (AsList _ [ 5<*>(Bag clear white) ]), (Bag plaid tomato) `contain` (AsList _ [ 5<*>(Bag dull red), 3<*>(Bag shiny green), 5<*>(Bag drab fuchsia), 3<*>(Bag dull tomato) ]), (Bag faded plum) `contain` (AsList _ [ 5<*>(Bag dark violet), 3<*>(Bag dim brown) ]), (Bag light white) `contain` (AsList _ [ 5<*>(Bag dotted teal), 2<*>(Bag dim tancolor) ]), (Bag dull bronze) `contain` (AsList _ [ 3<*>(Bag vibrant turquoise) ]), (Bag vibrant coral) `contain` (AsList _ [ 3<*>(Bag faded bronze) ]), (Bag posh silver) `contain` (AsList _ [ 5<*>(Bag wavy olive), 3<*>(Bag dotted red), 3<*>(Bag faded violet) ]), (Bag dim yellow) `contain` (AsList _ [ 4<*>(Bag pale tomato), 4<*>(Bag dim tancolor), 3<*>(Bag vibrant gold), 2<*>(Bag bright gold) ]), (Bag bright salmon) `contain` (AsList _ [ 5<*>(Bag shiny orange), 2<*>(Bag dark yellow), 5<*>(Bag muted gold), 4<*>(Bag dark fuchsia) ]), (Bag light yellow) `contain` (AsList _ [ 3<*>(Bag clear cyan) ]), (Bag dim red) `contain` (AsList _ [ 3<*>(Bag clear lavender), 1<*>(Bag muted bronze), 4<*>(Bag vibrant salmon) ]), (Bag dark silver) `contain` (AsList _ [ 1<*>(Bag dull brown), 1<*>(Bag wavy lavender), 2<*>(Bag shiny crimson), 1<*>(Bag clear tancolor) ]), (Bag dull fuchsia) `contain` (AsList _ [ 5<*>(Bag striped cyan), 4<*>(Bag mirrored violet) ]), (Bag drab gold) `contain` (AsList _ [ 5<*>(Bag posh lavender), 4<*>(Bag mirrored olive), 2<*>(Bag dark tancolor), 3<*>(Bag dotted olive) ]), (Bag muted gray) `contain` (AsList _ [ 1<*>(Bag striped magenta), 2<*>(Bag dull tomato), 5<*>(Bag plaid olive), 1<*>(Bag faded gray) ]), (Bag bright bronze) `contain` (AsList _ [ 1<*>(Bag clear silver), 4<*>(Bag dim lime) ]), (Bag dark cyan) `contain` (AsList _ [ 5<*>(Bag dark maroon), 3<*>(Bag dull red), 1<*>(Bag bright gold) ]), (Bag dark plum) `contain` (AsList _ [ 1<*>(Bag vibrant turquoise) ]), (Bag wavy maroon) `contain` (AsList _ [ 5<*>(Bag shiny gold), 1<*>(Bag drab black) ]), (Bag light crimson) `contain` (AsList _ [ 2<*>(Bag light plum), 3<*>(Bag plaid purple) ]), (Bag wavy chartreuse) `contain` (AsList _ [ 2<*>(Bag pale gray), 5<*>(Bag dim purple), 2<*>(Bag drab turquoise) ]), (Bag plaid yellow) `contain` (AsList _ [ 5<*>(Bag muted tancolor), 2<*>(Bag wavy cyan), 3<*>(Bag light gold), 1<*>(Bag dim gold) ]), (Bag mirrored violet) `contain` (AsList _ [ ]), (Bag wavy yellow) `contain` (AsList _ [ 2<*>(Bag dim aqua), 1<*>(Bag dark fuchsia), 5<*>(Bag faded coral), 1<*>(Bag faded silver) ]), (Bag plaid bronze) `contain` (AsList _ [ 1<*>(Bag striped bronze) ]), (Bag vibrant green) `contain` (AsList _ [ 3<*>(Bag striped chartreuse), 3<*>(Bag pale lavender), 4<*>(Bag dotted lime), 4<*>(Bag plaid lavender) ]), (Bag muted crimson) `contain` (AsList _ [ 3<*>(Bag dim blue), 1<*>(Bag dull lime), 3<*>(Bag plaid indigo), 1<*>(Bag pale plum) ]), (Bag posh cyan) `contain` (AsList _ [ 5<*>(Bag drab brown), 5<*>(Bag faded blue) ]), (Bag vibrant black) `contain` (AsList _ [ 3<*>(Bag pale silver) ]), (Bag light aqua) `contain` (AsList _ [ 2<*>(Bag faded crimson), 3<*>(Bag dark bronze), 1<*>(Bag dim orange) ]), (Bag mirrored red) `contain` (AsList _ [ 3<*>(Bag light violet) ]), (Bag dark lime) `contain` (AsList _ [ 1<*>(Bag striped turquoise) ]), (Bag mirrored olive) `contain` (AsList _ [ 1<*>(Bag faded bronze), 1<*>(Bag drab aqua), 1<*>(Bag dark indigo), 3<*>(Bag posh white) ]), (Bag striped chartreuse) `contain` (AsList _ [ 2<*>(Bag mirrored gold) ]), (Bag dotted lime) `contain` (AsList _ [ 1<*>(Bag vibrant turquoise), 2<*>(Bag dotted turquoise), 5<*>(Bag dull red) ]), (Bag vibrant bronze) `contain` (AsList _ [ 1<*>(Bag posh green), 3<*>(Bag posh tancolor), 5<*>(Bag light salmon) ]), (Bag dark teal) `contain` (AsList _ [ 4<*>(Bag shiny lavender), 5<*>(Bag dull orange) ]), (Bag shiny green) `contain` (AsList _ [ 2<*>(Bag bright lavender), 3<*>(Bag shiny olive), 4<*>(Bag mirrored violet), 5<*>(Bag posh white) ]), (Bag light magenta) `contain` (AsList _ [ 2<*>(Bag pale maroon) ]), (Bag pale magenta) `contain` (AsList _ [ 5<*>(Bag dull aqua) ]), (Bag dull plum) `contain` (AsList _ [ 2<*>(Bag vibrant violet), 5<*>(Bag pale red), 2<*>(Bag wavy fuchsia) ]), (Bag muted olive) `contain` (AsList _ [ 5<*>(Bag bright teal) ]), (Bag vibrant fuchsia) `contain` (AsList _ [ 3<*>(Bag posh brown) ]), (Bag dark olive) `contain` (AsList _ [ 5<*>(Bag dim coral), 4<*>(Bag pale red), 5<*>(Bag drab aqua) ]), (Bag posh purple) `contain` (AsList _ [ 2<*>(Bag bright red), 4<*>(Bag pale coral), 1<*>(Bag dotted bronze) ]), (Bag dark lavender) `contain` (AsList _ [ 2<*>(Bag striped blue), 5<*>(Bag posh blue), 2<*>(Bag plaid green) ]) ]
:p full_data.1@_
can_be_contained_by = withState
'# Advent of Code 2020. Day 8
DexLang, [Lyndon White](http://oxinabox.net)
https://adventofcode.com/2020/day/8
So we are implementing an interpreter
data Instruction =
NOP Int
ACC Int
JMP Int
mini_data = [NOP (0), ACC (1), JMP (4), ACC (3), JMP (-3), ACC (-99), ACC (1), JMP (-4), ACC (6)]
full_data = [NOP (346), ACC (44), ACC (15), JMP (473), ACC (29), ACC (-13), JMP (525), ACC (22), ACC (13), NOP (265), JMP (397), JMP (39), ACC (39), NOP (-1), ACC (36), ACC (25), JMP (153), NOP (374), JMP (27), JMP (282), JMP (1), JMP (1), JMP (15), ACC (33), ACC (-3), JMP (533), ACC (25), ACC (-14), ACC (-16), JMP (245), NOP (567), ACC (7), JMP (147), ACC (26), ACC (40), ACC (-9), JMP (295), ACC (14), NOP (388), ACC (-1), JMP (-21), NOP (524), NOP (166), NOP (515), JMP (18), JMP (214), ACC (42), NOP (-35), ACC (7), JMP (492), ACC (14), ACC (48), JMP (326), ACC (48), ACC (-18), ACC (-5), JMP (343), JMP (81), ACC (18), ACC (16), ACC (21), JMP (355), ACC (48), NOP (358), ACC (49), ACC (-2), JMP (89), ACC (4), JMP (171), ACC (6), JMP (299), ACC (-8), JMP (150), ACC (41), ACC (-9), ACC (48), JMP (73), JMP (523), NOP (471), JMP (493), ACC (-16), NOP (440), ACC (2), ACC (33), JMP (117), ACC (3), ACC (34), JMP (310), ACC (8), JMP (197), ACC (26), ACC (47), JMP (194), NOP (115), JMP (259), NOP (456), JMP (420), NOP (398), JMP (235), ACC (44), ACC (47), JMP (218), JMP (1), JMP (275), ACC (12), JMP (434), ACC (50), ACC (10), NOP (361), JMP (367), ACC (-16), ACC (44), JMP (96), ACC (9), ACC (38), ACC (-15), NOP (-31), JMP (-55), NOP (421), ACC (50), ACC (12), JMP (-64), ACC (33), ACC (25), JMP (382), ACC (7), JMP (-22), JMP (95), ACC (44), ACC (32), ACC (23), JMP (1), JMP (456), ACC (49), JMP (15), JMP (312), ACC (6), JMP (216), ACC (7), JMP (458), JMP (465), NOP (372), ACC (35), ACC (32), ACC (13), JMP (-35), ACC (50), NOP (32), JMP (143), JMP (327), ACC (0), NOP (-82), NOP (-62), ACC (41), JMP (-81), ACC (-10), NOP (-106), JMP (82), ACC (1), ACC (11), JMP (124), ACC (25), ACC (17), JMP (-73), NOP (8), ACC (29), ACC (33), ACC (10), JMP (123), JMP (236), ACC (41), JMP (370), ACC (17), ACC (-13), ACC (35), JMP (-47), NOP (287), ACC (22), JMP (38), JMP (1), NOP (-52), NOP (-9), ACC (22), JMP (253), ACC (12), ACC (-18), ACC (21), NOP (-69), JMP (28), ACC (16), JMP (392), JMP (325), JMP (-74), ACC (34), ACC (47), ACC (41), JMP (201), NOP (361), ACC (50), JMP (30), JMP (-127), NOP (-171), JMP (349), ACC (11), NOP (156), ACC (1), ACC (-18), JMP (393), ACC (-8), JMP (1), ACC (-17), NOP (188), JMP (134), ACC (-9), ACC (-14), JMP (206), JMP (-209), JMP (1), ACC (49), NOP (112), ACC (-4), JMP (-20), ACC (41), JMP (-145), ACC (8), JMP (276), ACC (48), JMP (-5), JMP (-143), ACC (0), JMP (-161), JMP (238), ACC (8), JMP (-134), ACC (34), ACC (10), JMP (1), NOP (109), JMP (-100), ACC (41), ACC (-4), JMP (-12), ACC (42), ACC (46), ACC (-7), ACC (28), JMP (85), JMP (216), JMP (364), ACC (0), ACC (-6), NOP (331), ACC (33), JMP (163), ACC (37), ACC (20), ACC (33), ACC (45), JMP (-159), ACC (34), ACC (10), ACC (48), ACC (10), JMP (358), ACC (-9), JMP (276), ACC (27), ACC (45), NOP (129), ACC (32), JMP (243), ACC (0), ACC (-5), JMP (-24), ACC (44), NOP (307), ACC (-18), ACC (13), JMP (37), ACC (5), NOP (-125), NOP (-126), ACC (-18), JMP (186), JMP (-87), JMP (-262), NOP (-20), JMP (-108), ACC (26), ACC (20), JMP (193), NOP (185), JMP (129), ACC (26), JMP (122), ACC (-8), NOP (143), NOP (166), JMP (-236), ACC (33), JMP (-139), ACC (38), JMP (1), ACC (21), ACC (31), JMP (-79), ACC (-13), JMP (-78), ACC (29), JMP (160), ACC (48), ACC (-8), ACC (28), ACC (15), JMP (-284), JMP (25), ACC (24), JMP (1), JMP (-92), ACC (22), JMP (169), ACC (-15), ACC (16), ACC (4), JMP (-85), ACC (-18), ACC (-19), ACC (-2), JMP (-278), ACC (48), JMP (-195), JMP (-40), JMP (-110), ACC (47), JMP (-26), ACC (26), NOP (-187), ACC (40), ACC (42), JMP (167), ACC (50), ACC (36), ACC (-14), JMP (-313), NOP (-203), JMP (227), ACC (-15), ACC (22), JMP (-23), ACC (6), ACC (30), ACC (12), JMP (69), NOP (-212), NOP (-105), ACC (12), JMP (-155), NOP (69), ACC (-16), JMP (-68), ACC (-18), ACC (35), ACC (34), ACC (6), JMP (-80), ACC (7), ACC (19), ACC (-8), JMP (-94), ACC (12), NOP (-148), ACC (33), NOP (-41), JMP (-107), ACC (25), ACC (9), NOP (107), JMP (-44), JMP (1), JMP (-254), ACC (10), ACC (0), ACC (37), ACC (33), JMP (137), NOP (136), JMP (-225), ACC (-4), ACC (-17), ACC (39), JMP (-286), JMP (150), NOP (-380), ACC (34), ACC (16), NOP (146), JMP (105), JMP (119), JMP (-190), ACC (0), NOP (205), NOP (-302), JMP (-17), ACC (-4), JMP (-7), JMP (-14), JMP (-394), ACC (34), ACC (-1), ACC (37), ACC (-17), JMP (-312), NOP (-180), NOP (-139), ACC (21), JMP (-378), ACC (24), ACC (38), JMP (129), ACC (26), JMP (19), ACC (31), JMP (-190), ACC (29), ACC (-5), JMP (14), NOP (186), ACC (12), ACC (9), ACC (-16), JMP (9), ACC (2), NOP (-382), NOP (-284), NOP (-377), JMP (-169), JMP (129), ACC (49), JMP (-297), ACC (48), ACC (18), ACC (8), JMP (170), ACC (12), ACC (-4), ACC (28), JMP (-20), ACC (-11), JMP (-363), JMP (1), ACC (9), ACC (31), JMP (31), ACC (36), ACC (42), ACC (2), NOP (-131), JMP (-322), ACC (35), ACC (44), ACC (11), ACC (14), JMP (-213), ACC (-16), ACC (-15), ACC (-5), JMP (-277), ACC (-17), JMP (-252), ACC (-19), ACC (31), ACC (-16), ACC (-5), JMP (48), JMP (1), JMP (-97), ACC (5), JMP (-382), ACC (26), ACC (41), ACC (31), ACC (-2), JMP (-392), ACC (41), JMP (-124), ACC (45), ACC (24), ACC (10), JMP (-339), ACC (29), ACC (-10), ACC (-10), ACC (3), JMP (-456), JMP (-25), ACC (37), ACC (39), ACC (-11), ACC (-1), JMP (106), JMP (-328), JMP (-489), NOP (-111), NOP (-458), ACC (31), JMP (-100), ACC (-18), JMP (-258), ACC (-17), NOP (-46), ACC (43), ACC (45), JMP (-127), JMP (34), ACC (33), JMP (-200), NOP (-90), ACC (20), JMP (-271), ACC (41), JMP (-189), ACC (-16), NOP (-321), ACC (25), ACC (-12), JMP (-62), ACC (-1), JMP (1), ACC (35), ACC (39), JMP (-184), JMP (-236), NOP (-331), ACC (12), JMP (78), ACC (15), JMP (-30), ACC (-11), JMP (-117), JMP (-8), JMP (9), ACC (2), JMP (-497), ACC (10), ACC (0), ACC (-6), JMP (-155), JMP (-148), JMP (-95), JMP (-96), JMP (-249), NOP (-277), NOP (-411), ACC (-13), ACC (-2), JMP (-383), ACC (-13), JMP (-110), ACC (13), ACC (16), ACC (5), ACC (-2), JMP (-67), ACC (37), JMP (-491), ACC (35), ACC (34), ACC (32), ACC (-2), JMP (-546), ACC (-19), JMP (-322), ACC (48), ACC (18), ACC (35), ACC (8), JMP (-448), ACC (41), ACC (-15), ACC (34), ACC (46), JMP (-50), ACC (12), NOP (-184), ACC (14), ACC (38), JMP (-370), JMP (10), ACC (-14), ACC (-16), NOP (-259), NOP (-300), JMP (-400), ACC (38), ACC (29), ACC (27), JMP (-175), JMP (-456), ACC (30), JMP (-308), JMP (-538), JMP (1), ACC (-16), NOP (-127), JMP (-407), ACC (5), JMP (-57), ACC (21), ACC (3), ACC (42), ACC (43), JMP (-521), ACC (-9), ACC (20), NOP (-217), JMP (-15), ACC (37), ACC (-12), ACC (-18), JMP (1), JMP (-465), ACC (37), NOP (-577), ACC (8), ACC (43), JMP (1)]
:p mini_data
def runTilLoop (code:(n=>Instruction)) : Int =
no_hits = for i:n. False
fst $ fst $ snd $withState ((0, 0), no_hits) \stateRef.
acc_and_pc_Ref = fstRef stateRef
accRef = fstRef acc_and_pc_Ref
pcRef = sndRef acc_and_pc_Ref
hitsRef = sndRef stateRef
while (\(). (not $ get hitsRef!(get pcRef@n)
)) \().
instruction = code.(get pcRef@n)
hitsRef!(get pcRef@n) := True
pcRef := 1 + get pcRef
case instruction of
NOP _ -> ()
ACC v -> (accRef := v + get accRef)
JMP v -> (pcRef := v -1 + get pcRef) -- subtract 1 as will add it later
:p runTilLoop mini_data
-- :p runTilLoop full_data
' ## Part 2 fix it
If finishes without looping returns `Just acc`
def runTilLoopOrEnd (code:(n=>Instruction)) : (Maybe Int) =
inBounds: Int->Bool = \k. (size n > k) && k >= 0
no_hits = for i:n. False
(acc, pc) = fst $ snd $withState ((0, 0), (True, no_hits)) \stateRef.
acc_and_pc_Ref = fstRef stateRef
accRef = fstRef acc_and_pc_Ref
pcRef = sndRef acc_and_pc_Ref
continue_and_hits = sndRef stateRef
continueRef = fstRef continue_and_hits
hitsRef = sndRef continue_and_hits
while (\(). get continueRef) \().
instruction = code.(get pcRef@n)
hitsRef!(get pcRef@n) := True
pcRef := 1 + get pcRef
case instruction of
NOP _ -> ()
ACC v -> (accRef := v + get accRef)
JMP v -> (pcRef := v -1 + get pcRef) -- subtract 1 added before
-- we need to do it this way rather than as using && in while const or else it will try and look out of bounds, because short circuiting doesn't seem to work to prevent the check that happens with `@n`
continueRef := case (inBounds $ get pcRef) of
True -> (not $ get hitsRef!(get pcRef@n))
False -> False
select (pc >= size n) (Just acc) Nothing
:p runTilLoopOrEnd mini_data
def swapInstruction (inst:Instruction) : Instruction =
case inst of
NOP v -> JMP v
ACC v -> ACC v
JMP v -> NOP v
:p swapInstruction (NOP 0)
def needToCheck (inst:Instruction) : Bool =
case inst of
NOP v -> True
ACC v -> False
JMP v -> True
:p needToCheck (NOP 0)
def trial (code:(n=>Instruction)) (i:n) : (Maybe Int) =
newInst = swapInstruction code.i
case (needToCheck code.i) of
False -> Nothing
True -> (fst $ withState code \codeRef.
(codeRef!i := newInst)
runTilLoopOrEnd $ get codeRef)
:p trial mini_data (2@_)
:p trial mini_data (7@_)
def firstSomething (things:n=>Maybe a) : Maybe a =
fold Nothing $ \i state. select (isNothing state) things.i state
:p firstSomething [Nothing, Just 23, Nothing]
def doTrials (code:(n=>Instruction)) : (Maybe Int) =
firstSomething $ for i:n. trial code i
:p doTrials mini_data
:p doTrials full_data
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment