heh
| -rw-r--r-- | beeg-basic | bin | 80000000 -> 0 bytes | |||
| -rw-r--r-- | beeg2-larger-basic | bin | 40000000 -> 0 bytes | |||
| -rw-r--r-- | src/inp.txt | 141 | ||||
| -rw-r--r-- | src/main.rs | 81 | ||||
| -rw-r--r-- | src/util.rs | 53 |
5 files changed, 252 insertions, 23 deletions
diff --git a/beeg-basic b/beeg-basic Binary files differdeleted file mode 100644 index 6e01760..0000000 --- a/beeg-basic +++ /dev/null diff --git a/beeg2-larger-basic b/beeg2-larger-basic Binary files differdeleted file mode 100644 index 7b4f47a..0000000 --- a/beeg2-larger-basic +++ /dev/null diff --git a/src/inp.txt b/src/inp.txt index ba75626..aeadace 100644 --- a/src/inp.txt +++ b/src/inp.txt @@ -1 +1,140 @@ -4022724 951333 0 21633 5857 97 702 6 +OORRQQQQQDUDDDDDDDDDDDDDDDDDDDYYDDDDPGGGGGGGGGGGNNNNNNNTTTTTTTTTTYYYHKKKKKKKKKKXXXXXXXXXXXXYEEEEEEEEEEEEVVAAAAAAAAAAAAAAAATERREVEEEEEEEEEEEE +OOORQBQQQDDDDDDDDDDDDDDDDDDDDDDDDDDDDGGGGGGGGGGGGNNNNNNTTTTTTTTTTTTYHKKKKKKKKKKXXXXXXXXXXXEEEEEEEEEEEEEEEEEEAAAAAAAAAAAAAAREEEEEEEEEEEEEEEEE +OOOOOOOQODDDDDDDDDDDDDDDDDDDDDDDDDDGGGGGGGGGGGGGGNNNNNTTTTTTTTTTTTTHHHKKKKKKKKKKXXXXXXXXXEEEEEEEEEEEEEEEEEEEAAAAAAAAAAAAAARRREEEEEEEEEEEEEEE +OOOOOOOOOVVDDDDDDDDDDDDDDDDDDYYYYDDGGGGGGGGGGGGGNNNNNNTTTTTTTTTTHHHHHHKKKHHHHKKKXXXXXXXXXXXXEEEEEEEEEEEEEEEEAAAAAAAAAAAAAARREEEEEEEEEEEEEEEE +OOOOOOOOVVVDDDDDDDDDDDDDDDDDDYYYYYYYGGGGGGGCCCCNNNNNNNNTTUTTTTTTHHHHHKKKKHHHHHXXXXXXXXXXXXXXEREEEEEEEEEEEEEEEAAAAAAAAAAARRRRRREERRREEEEEEEEE +OOOOOOOODDDDDDDDDDDDDDDLDDDDDBYYYYYYYYYGGCCCCCCCNCCCNNNTDUUUTTTTRHHHHHHHHHHHHHXAAAAAXXXXXSSXXEEEEEEEEEENEEEEAAAAAAAAAAAAAARRRRRRRRRREEEEEEEE +OOOOOOOWWWWWWWDDDDDDDLLLDFFDBBYYYYYYYYYJCCCCCCCCCCCCNNNIIUUUTTRRRRRHHHHHHHHHHHAAAAAAAXXXSSSSSRREEEEEEEENEEAAAAKKKAAAAAAAAARRRRRRRRRREEEEEEEE +OOOOOOOOWWWWWDDDDDDLLLLLFFCBBYYYYYYYAAACCCCCCCCCCCCCIINIIUUUKTRRRRRSHXXXHHHHHUAAAAAXXXXXSSSSSREEREEEEEPAAAAKKAKKKAAAAAAARRRRRRRRRRREEEEEEEEE +OOOOOOWWWWWWWDDDDDDLLLLLFFCCBYYYYYYYACCCCCCCCCCCCCCIIIIIIIKKKKRRRRRRHXXXHHHXAAAAAAAAXXXSFSSSSSQQEEEECEEEVKKKKKKKKKKAAAAARRRRRRRRRRREEEEEEEEJ +OOOOOWWOOWWWWWDDDDOLILLLFLLCCYYYYYYYACCCCCCCCCCCCCCCIIIIIIIKKRRRRRRNRXXXXXXXXAAAAAAAXSSSSSVVSSQQEEEQCEEVVKKKKKKKKKXAAAAARRRRRRRRRFREEEEEEEEE +OOOOOOOOJJWWWJIIIDLLLLLLLLLCCCYYYYYYACCCCCCCCCCCCCCIIIIIIIIKKRRRRRRRRRXRXXXXXAAAAAJJJSSSSSVQQQQQQQEQQVVVVKKKKKKKKKKEKRRRRRRRRRRREEEEEEEEEEEE +OOOOOOOJJJJJJJJIIIIILLLLLLLCCCYYYCCCCUFFCCCCCCCCCCCIIIIIIIIIKRRRRRRRRRRRXXXXXAAAAAASSSSSSSVVVQQQQQQQQVVVVVKKKKKKKKKKKARRRRRRRRRPEEEEEEEEKKKK +OOJJOOOJJJJJJJIIIIIILLLLLLLLCCCCCCCCUUFUCCCCCCCCPCCIIIIIIIIRRRRRRRRRRXXXXXXXXAARRRSSSSSSSSSSQQQQQQQYQVHVVVVKKKKKKKKKKKKKKRRRRRRPPDDKEKEEKKKK +OOOJJJJJJJJJJJIIEEEILLLLLLLLLLCCCCCCUUFUCCCCCPCCPPPPIIIIITTTRRRRRRRRRXXXXXXJJJJRRRSSSSSSSSSSEQQQQQQQQVHHHHHKKKKKKKKKTKKKTRRRPPRDDDDKKKKEEKKK +OOJJJJJJJJJJJJEEEEEEELLLLLLLLLCCCCCUUUUUCCCCCPPPPKIIIIIIIIRRRRRRRRRRRRRRXXJJJJJRRRASSSSSSSSSEQQQQQHHVVHHHHHKKKKKKKKTTKTTTTPPPPDDDDDKKKKKKKKK +JJJJJJJJJJJJJEEPEEEEPLLLLLLLLLLCCCCCCUCUUSSSKKPKKKIIIIIIIIIJJRRRRRRRRRRXXXJJJJJRRRAASSSSSSSEEQQPQQHHHHHHHHKKKKKKKKTTTJTTTTTPPACDAADKKKKKKKKK +JJJJJJJJJJJJJEEEEEEEPLLLLLLLLLLCCCCCCCCCKKKKKKKKKKIIIIIIBIIIRRLRRRRRXXXXXXJJJRRRRRRRRRSHHHPPPPPPPHHHHHHHHKKKKKKKKKTTTTTTTTTPPAADAAAKKKKKKKKK +JJJJJJJJJJJJEEEEEEEEEXLLLLLLCCCCCCCCCCCKKKKKKKKKKKKKIIIIBIIILRLLRRRRXXXXXJJJRRRRRRRRRRSSHHPPPPPPPPHHHHHHHHKKKKKKKKTTTTTTTTTPPAAAAAAKKKKKKKKK +JJJJJJJJJJEEEEEEEEEEXXLLLLCCCCCCGCCCCCCKKKKKKKKKKKKKKKIIBBILLLLLRRRRPPPPXXJJRRRRRRRRRRSSNNNPPPPPPPPHHHHHHKKKKKKKKKKTTTTTTTTAAAAAAAAKKKKKKKKK +JJJJJJJJJJJJEEEEEEEEEXXXXCCCCCCCGCEECCCKKKKKKKKKKKKKKKIBBBBBBBRRRRRRRPPPPXXXRRRRRRRRRRSNNNNPPPPPPPPHHHHHKKKKKKKKKKKTTTTTTTTTAAAAAAAKKKKKKKKZ +JJJJJJJJJJJFEEEEEEEEXXXXXXXCCCCCGEEEECCGGHKKKKKKKKKKKKKBBBBBPPPPPPPPPPPPPPQQRRRRRRRRRRSNNNCCCPPPPPPIILHKKKKKKKKKKTTTTTTTTTTTAAAAAAAJKKKKKKKK +JJPJJJJJJJJEEEEEEEEEXXXXXXXCCCCCGGEEECGGGHKKKKKKKKKKKKKBBBBBBPPPPPPPPPPPPPQQRRRRRRRRRRVVNNNCCPPPIIIIIIOOKKKKFFKKFTTTTTTTTTTTAAAAAAKKKKKKKKKK +JPPPPPPPPPJEEGGEEEEEXXXXXCCCCCCGGGGGGGGGGGPKKKKKKKKKKKKKBBPPPPPPPPPPPPPPPBQQRRRRRRRRRRVVNNCCPPPPPIIIIIIIKYKKFFFFFTTTTTTTFTVVVVAAVAKVKKKKKKKK +PPMPPPPPPPGGGGGGGGGXXXXXXXXCCCCNNGGGGGGGLLPKKKKKKKKKKKKKBPPPPPPPPPPPPPPXXQQQRRRRRRRRRRAZNCCCCPPPCIIIIIIIIIFFZFFFFTTTTTTTTVVVVVVVVVVVKKKKKKKK +YPPPPPPPGGGGGGGGGGGXXXXXXNNCCCNNNNNGGGGGLAKKKLKKKKKKKKKKBPPPPPPPPPPPPPPXXQQQRRRRQZZZZZZZZCCCPPPCCIIIIIIIIPFFFFFFFFTTTTTTVVVVVVVVVVVVKKKKKKKK +YPPPPPPPPGGGGGGLLLLLLXXNNNNNNNNNNNNGGGLGLLLKKLKLKOKKKKKKBPPPPPPPPPPPPPXXXQQQRRRRQZZZZZZZZCCCCCPCIIIIIIIIIFPFFFFFFFMTTTTUVVUVVVVVVVVVKKKKKKKK +PPPPPPPPPGGGOGGGGGLLLXXXNNNNNNNNNNNBGGLLLLLKKLLLKOKKKKKPPPPPPPPPPPPPPPXXXXXQQQQQQQQZZZZZCCCICCCCCIIILLLIRFFFFFFFFFFFFUUUUUUVVVVVVVVVVKFKKKKK +PPPPPPPPPPOOOOGGGGLLLLXXNNNNNNNNNNNBGULLLLLLLLLKKKKKKKKPPPPPPPPPPPPPPPPXXXXXXQQQQNZZZZZZZCIICCCCCIYILRLRRRRFFFFFFFFFFUUUUUUVWWVVVWVVVKKKKOOO +PPPPPPPPPPOOOOGGGLLLLLLLNNLNNNNNNNNBNUULLLLLLLLLLLSKKSKKKPPPPFPFPPPPXXXXXXXXQQQQQNNNZCCZEIIICCICCRRLLRRRRRFFFFFFFFFFFUUUUUUUWWWWWWWWVVVKKXOX +PPPQPPPPPPOOOOGGGLLLLMMLLLLLLLNNNNNNNNUULLLLLLLLLSSSSSKKKPPPPFPFNPPPXXXXXXXXXQQNNNNFCCCIIIIIIIIICRRRRRRRRFFFFFFFFUUUUUUUUUUWWWWWWWWVVVVVVXXX +PPPPPPPPCWOOOOCGGGLLLLLLLLLLNNNNNNNNNNULLLLLLLLLLLSSSKKSKKPFPFPFFFXXXTXTTTXXXXQFFFFFFCIIIIIIIIIICRRRRRRRRFFFFFYFFUHHHUUUUUUUWWWWWWWXVVVVVXXX +PPKKPPPPCCCOCCCCCGLLLLLLLLLLLNNNNNNNJCLLLLLLLLLLLSSSSKSSKKKFFFFUFFQQQTXTTTTTTXGFFFFFFCCIIIIIIIITRRRRRRRRRRFFYFYYYYHHHHHHHHHUWWWWWWWXXXXXVXXX +CPKKCCPPCCCCCCCCCGLLLLLLLLLLLNJNNNNNJCLLLLLLLLLLLSSSSSSSSSFFFFSFFFFQQTTTTTTGGGGGFFFFFCCIIIIIIIITRRRRRRRRRRFYYYYYYYHHHHHHHHHUUWWWWLLXXXXXXXXX +CCCCCCPCCCCCCCCCCLLLLLSKLLLLJJJJJNNNJJXLLLLLLLLLSSSSSSSSSKKFFFFFFFFTTTTTTTTTTGUGUUFFFFCTTTTTTTTTTRRRRRRRRRRYYYYYYYHHHHHHHHHUUWWWWLLXXXXXXXXX +CCCCCCPCCCCCCCCAALSSSSSKLLJJJJJJJJJJJJJLDLLLLLLLFFSFSSSSSFFFFFFFFFKTTTTTTTTTTUUUUFFFFFCTTTTTTTTTTRRRRRRRRYYYYYYYYYHHHHHHHHHUUUWDWLLLXXXXXXXX +CCCCCCCCCCCCCCCCCLSSSSSKKSJJJJJJJJJJJJDDDDOLOCLFFFFFSSESFFFFFFFFFFFFTTTTTTTTHHUUUFFBBBBBBBBBBTTTTRRRRRRYYYYYYYYYYYHHHHHHHHHUUUXULLLLXXXXXXXX +CCCCCCCCCCCCCCCCSSSSSSSKSSSJJJJJJJJJJJJDDOOOOOVOFFFFSSFFFFFFFFFFFFFTTTTTTTTTTHUUUFFBBBBBBBBBBTSSSRRRRRRBYYYYYYYYYYHHHHHHHHHUUUUULLLLXXXXXXXX +CCCCCCCCCCCCCCCSSSSSSSSSSSSJJJJJJJJJJJDDDOOOOOOOOFYYYYYYYYYYFFFFFFFOOTTTTTTTTHUUUUFBBBBBBBBBBTSSSSSRRRSYYYYYYYYYYYHHHHHHHHHUUUUUDLLLLXXXXXXX +CCFCCCCCCCCCCCCSSSSSSSSSSSSSJJJJJJJJJJDDDDOOOOOOOOYYYYYYYYYYYFFFRRRFFFGTTTTTHHHHBBBBBBBBBBBBBYTTSSSSRSSYYYYYYYYYYYHHHHHHHHHUUUUSDLLLLXXXXXXX +CFFFCFFFCCCCCCCSSSSSSSSSSSSJJWWJWJJJJDDDDOOOOOOOOOYYYYYYYYYYYOOFFRFFFFGTSSTTMHHMBBBBBBBBBBBBBTTSSAASSSSYYYYYYYYYYYHHHHHHHHHUUUSSDLDDDDXXXXXX +FFFFCFFFFCCCCCCCSSSSSSSSSSZWWWJJWWJJDDDDDDDOOOOOOOYYYYYYYYYYYOOFFRRFFFFFFSSSMMMMBBBBBBBBTFTTTTTTAAASSSYYYYYYYYYYVVYYAAAADUUUUUUDDDDPDDIIXXXX +FFFFFFFFFCCCCSSCCSSSSSSSSWZWWWJJWWWWWDDDDDOOOOOOOYYYYYYYYYYYYOOFFRFFFFFFFSSSMMMBBBBBBBBBFFTTTAAAAAASAAAAFYYYYYYYVVVVAAAADUUUDDDDDDDDDDDIIXEX +FFFFFFFFFFFCVSVSSSVSSSSSQWWWWTTJWWWWWDDDDDOOOOOOOOYYYYYYYYYYYOOOFRFFFFFFFFSSMMMBBBBBBBBBQQTATAAAAAAAAAAAFFFFYYYYVVVVAAAAVUTUDDDDDDDDDDDKKEEE +FFFFFFFFFFFFVVVVVVVVVSSQQWWWWWWWWWWWWWWDDDDOOOOOOOYYYYYYYYYYYOOOOOFFFFFFFLMMMMMBBBBBBBBBQQOAAAAAAAAAAAAAFFFYYYYYVVVVVAVVVUBBBBBDDDDDDDDKZIIE +FFFFFFFFFFVVVVVVVVVVVVWWWWWWWWWWWWWWWWDDDDEEOOOOOEEYYYYYYYYYYOOOOFFFFFFFFMMMMMMBBBBBBBBBOOOAAAAAAAAAAAAAAFYYYYXYVVVVVVVVVVBBBBDDDDDDDDDKKKII +FFFWWFWFFVVVVVVVVVVVBWWWWWWWWWWWWWWWWWDDDDEEEEEYYYYYYYYYYYYYYOOOFFFFFFFFMMMMMMMMBBBBBBBBBBBAAAAAAAAAAAAAAYYYYYYVVVVVVVVVVVVVBBBBDDDDDDKKKKII +FFWWWWWWWWWWVVVVVVVBBWWWWWWWWWWWWWWWWWDDDDEEEEEYYYYYYYYYYYHHTHOOFFFFFFFFMMMMMMMMBBBBBBBBBBBAAAAAAAAAAAVYYYYYYYAVVVVVVVVVVVVVBBBBDDDDDDKKKKII +FFWWWWWWWWWWVVVVVVVVVWWWWFFWFFWWWWWWWWWXXDEEEEEYYYYYYYYYHHHHHHHFFFFFFFFFMMMMMMMMBBBBBBBBBBBAAAAAAAAAAAVYYYAAYAAVVVVVVVVVVVVVVBBDDDDDDKKKKKII +FFFWWWWWWWWWVVVVVVVVQQQQWFFFFWWWWWWWXWXXXDEEEEEEEEEYYYEEHHHHHHAFFFFFFFFFLMMMMMKKBBBBBBBBBBBAAAAAAAAAAAVVYYYAAAAJVJVVVVVVVVVVVDDDDDDIIKKKKKII +FFFFWWWWWWWWWVWWWWVVQQQQQQFFFFFWWWWXXXXXXXXEEEEEEELYYYHHHHHHHHHGHHFFLFFFLLLLMMKKBBBBBBBBBBBAAAAAAAAAAAAAYYYYAAJJJJJCVVVVVVVOODDDDDDIIIIIKKII +FFFFFWWWWWWWWWWWWWQQQQQQQQFFFFWWWWWXXXXXEXEEEEEEEELYYYHHHHHHHHHGHHHFLLLLLLLLLKKKKKKKKBBBBBBAAAAAAAAAAAAYYYYYAAJJJJJJVVJVVVVOOODDDDIIIIIIIIII +FFFFFWWWWWWWWWWWQQQQQQQQQQFFFFWJWPXXXXXXEEEEEEEEEEEYYYHHHHHHHHHHHLLLLLLLLLLLLKKKKKKKKBBBBBBAAAAAAAAAAAYYYYYYAAJJJJJJJJJOOOOOOODDDIIIIIIIIIII +FFFFFWWWWWWWWWWWQQQQQQQQQQFFFFPPPPXXXXXXEEEEEEEEEEEYYYHHHHHHHHHHHLLLLLLLLLLLLLAKKKKKKBBBBBBQQAYYYAAYAYYYYYYYYAAAJJJJJJJJJOOOOODDOIOIIIIIIIII +FFFWWWWWWWWWWWWWQQQQQSQQQFFPPPPPPPPXXXXXXXEEEEEEHHHHHHHHHHHHHHHHHLLLLLLLLLLLLLLUKKKKKBBBBBBQQQYYYYAYYYYYYYYYCYTTTJJJJJJJJOOOOOOOOOOIIIIIIIII +FFFFFWWWWWWWWWWWWWSQVQQQQQFFFPPPPPXXXXXXXXEEEEEEHHHHHHHHHHHHHHHLLLLLLLLLLLLLLLUUUUKKKBBBBBBQQQYYYYYYYYYYYYYTTTTTTJJJJJJJOOOOOOOOOIIIIIIIIIII +FFFFFFWWWWGWWWWWWWQQKKQQQFFFFFPPPMXXXSXXSSSSEEEEEHHHHHHHHHHHHHHHHLLLLLLLLLLLLLUUKKKKKKKKBBBQQQQQYYYYYYYYYYYTTTTTTTTTJJJJJOOOOOOOOOIIIIIIIIII +FFFFFFWWWWGWWWWWWKKKKKKQFFFFFFPSSSSXXSXSSSSCEECEEHHHHKHHHHHHNHKHHLLLLLLLLLLUUUUKKKMKKKKQBBBQQQQYYYYYYYYYYYYTTTTTTTTTJJJJJJOOOOOOOOIIIIIIIIII +FFFFFFFWWWWWWWWWKKKKKKKKKKFFFFFSSSSSSSSSSSCCQCCCCHHHHKKKKJKKKKKEEELLLLLLLLUUUUUQKQQQQQQQBBBQQQQYYYYYYYYYYYYTTTTTTTTTJJJJJJJOJJZZOOIIIIIIIIII +FFFFFFFSSWWWKKKKKKKKKKKKKFFFFFSSSSSSSSSSSCCCCCCCCHHKKKKKKKKKKKKKKEELLLDLLLLUUUQQQQQQQQQQBBBQQQQQYYYYYYYYYJJTTTTTTTTTJJJJJJJJJJZZZZZIIIIIIIII +FFFFFTFSSSSSSKKKKKKKKKKDKFFFFFSSSSSSSSSSSSCCCCCCCCCCCKKKKKKKKKKKKEELLDDDZLZUUUQQQQQQQQQQBBBAQQQQYYYYYYYYYJTTTTTTTTTTJJJJJJJJJJJZZHFIIIIIIIII +FFFFFFFQSSSSSKKKKKKKKKKKFFFFFSSSSSSSSSSSSSCCCCCCCCCCKKKKKKKKKKKKKEEEEZDDZZZUQQQQQQQQQQQQBBBAAAAQYYYYYYYYYJTTTTTTTTTTJJJJLJJJVVVZZHFFFIIIIIII +FFFFFFFQQSSSSKKKKKKKKKFFFFFFFFSSSSSSSSSSSSCCCCCCCCCNKKKKKKKKKKKKKEEEEZZZZZUUQQQQQQQQQQQQBBBAAAAAYYYYYYYNJJTTTTTTTTTTJJJJJVJVVFFFFFFFYYIIIIIC +FFFFFFFQQQQSSSSKKKKKKKFFFFFFFFFFSSSSSSSSSSSCCCCCCCNNKKKKKKKKKKKKKKKEEZZZZZUZJQQQQQQQQQQQBBBAAAAAAYAAAYJJJJTTTTTTTTTTJJJJJVJVVFFFFFYYYYIIIIIC +FFFFFFFQQQQSSSSSSKKKKKKFFFFFFFSSSSSSSSSSSSCCCNCCCNNNKKKKKKKKKKKKKKKEZZZZZZZZZQQQQQQQQQQQBBBAAAAAAAAAAYFFJJTTTTTTTTTTVVVVJVVVFFFFYYYYYYIIICCC +FFFFFQQQQQQQQSSSKKKKKKFFFFFFFFFFFSSSSSSSSSSCCNCCCCNNKKKKKKKKKKKKKKKKKZZZZZZZZZAAQQQAAAQYAAAAAAAAAAAAAYFFFJTTTTTTTTTTJVVVJVVVFFFFFYYYYYYYYCCC +FFQQQQQQQQQQQSSSKEKKKKKFFFFFFFFFCSSSSSSSSSSCCCPCPMNNKKKKKKKKKKKKKLKNNZZZZZZZZZAAAAAAAQQYAAAAAAAAAAAAAFFJJJTTTTTTTSSHHVVVVVVFFFFFYYYYYYYCCCCC +QQQQQQQQQQQQQVVVKKKKVKKFFFFFFFFFCYSSSSSSSSSSPPPPPMMMMKKKKKKKKKKKLLZZZZZZZZZZZZAAAAAAAAAAAAAAAAAAAAAAAFFJJJTTTTTTTHHHHVVVVVFFFFFFFYYYYYYYCCCC +QQQQQQQQQQQQVVVVVVVVVVVVVVFFFFFFYYSSSSSSSSSSPPPPPMMMMMMMKKKKKKILLLLZZZZZZZZZZAAAAAAAAAAAAAAAAAAAAAAFFFJJJJTTTTTTTHHHHVVLVVVFFFFFFYYYYYYYCYCC +QQQQQQQQQQQQQQVVVVVVVVVVVTFFFFFFYYYVSYYYYYYPPPPMMMMMMMMMKKIIIIIJLLLZZZZZZZZZZZAAAAAAAAAAAAAAAAAAAAAAAAAJJJTTTTTTTJYHMLLLLLLLSFOFPPYYYYYYYYOC +QQQQQQQQQQQQQQVVVVVVVVVVVAFFFFFYYYYYYYYYYYYYPPPMMMMMMMMMMIIIIIIIGGLLZZZZZZZZZFFFFAAAAAAAAAAAOOAAAAAAAAYYJJYYYYJJJJYLLLLLLLLLSSCCCPPPYYYVVVOO +QQQQQQQQQQQQQQVVVVVVVVUVVAFFSFFYYYYYYYYYYYPPPPPPMMMMMMMMIIIIIIIIILLLAZZZZZZZZFFFFFFFAAAAAAAOOOOAAAAAAYYYJJYYYYYJJYYYYLLLLLLLSCVCECPPPOVVVOOM +QQQQQQQQQQQQQXVVVVVVVVUVAAAAAFRYYYYYYYYYYYPPPPPPMMMMMMMMIIIIIIIIIALAAZZZZZFSFFFFFFFAAAAEEAAOOOOOOAAAAAAAWWYYYYYYYYYLLLLLLLLSSCCCCCCPPOOOOOOO +QQQQQQQQQQQXXXXVVVVVVVVXAAAAAYYYYYYYYYYYYPPPPPPPMMMMMMMMIIIIIIIIIALAAAAZFZFFFFFFFFFFAANEENROOOOOOOAAKAAAYYYYYYYYYYYYLLLLLLGGCCCCCCCPPOOOOOOO +QQQQQQQQQXQXXXVVVVVVVVXXAAAAAYYYYYYYYYYYPPPPPPPPPPMMMMMMMIIIIIIIIAAAAAFFFFFFFFFFFFFFAANNENNNLOOOOOOKKYYAYYYYYYYYYYYYYYLLLLGGGCCCCCCPOOOOOOOO +XXQQQQQQQXXXXVVVVVVVVVXXXAUAJJYYYYYYYYYYYPPPJPPPPPMMMMMMMIIIIIIAAAAAAAAFFFFFFFFFFFFFNNNEENNNNOOOORRKKYYYYYYYYYYYYYYYYYLLLLGGGGSCCCCOOOOOOOOO +XXXQQQXQQXXXXVVVVVEEEEXXXAUJJJJYYJYYYYYYPPPJJJJPPPMMMMMMMMIIIIIAARRAAAFFFFFFFFFFFFFFNNNNNNNNOROOOORRKKYYYYYYYYYYYYYYYYYLLAGGGASSSCOOOOOOOOOO +XXXQXXXXXXXXXXVVVVVVEUUUUXUJJUJJJJJJYYYYYJJJJJJJPPMMMMMMMIIAAIIAARRRAAAFFFFFFFFFFFFNNNNNNNNOOOOOOORRRKKYYYYYYYYYYYYYYLLLLAAAAAAOOHHOOOOOOOOO +XXXXXXXXXXXXXDZZZDVVEUUUUUUUUUJJJJJJJYYYYJJJJJJJPPPPMMSMMMAAAAAAARRAAAFFFFFFFFFFFFNNNNNNNNNOOOOZZORRRRRRRNNNNYYYYYYYLLLLAAAAAAAOOOOOOOOOOOOO +XXXXXXXXXDDDDDZZZDDDEEUUUUUUUJJJJJJJYYYYJJJJJJJJPPPPMMMAAAAAARRRRRRRRAAAFFFFFFFFFBBNNNNNNNNONBRZRRRRRRRRRRRNYYYYDYYDLLLAGAAAAAAAAAAOOOOOOOOO +XXXXXXXXXDXDDDDZZDDDEEEUUUUUUUJJJJJJJJJYYJJJJJJJPPPPAAAAAAAAAAARRRRRRRARRRFFFFFBBBBNNNNNNNNNNRRRRRRRRRRRRRRRRDDDDDDDAAAAAAAAAAAAAAABOOOOOOOO +XXXXXXXXXXXDDDDDZDDDEEEUUUUUUUJJUJJJJJJJJJJJJJPPPPPPAPAAAAAAAARRRRRRRRRRKRRFFFFXBBXXNNNNNNNNRRRRRRRRRRRRRRRRRDDDDDDDBBAAAAAAAAAAAABBOOOOOOOX +XXXXXXXXXXDDDDDDDDDDEEDZUUUUUUJJUJJJJJPJJJJJJJJPQPPPPPAAAAAAAAHRRRRRRRRRKRRFFFXXXXXXXNNNNNNNNNLRRRRRRRRRRRRDDDDDDDADDBBBAAAAAAAAAAAOOHOOLLOO +XXXXXXXXXXDDDDDDDDDDDDDDUUUUUUUUUJJPJPPJJJJJJJPPQQQPPOOOAAAARRRRRRRRRRRRRRRRXXXXXXXXXXXXXXXXXXRRRRRRRRRRRRDDDDDDDDDBBBBBBBAAAAAAAAAAOOOLLLZO +XXXXXXXXXXDDDDDDDDDDDDDDEEEEUJUUJJJPPDPPJJJPJPPQQQQPPOOOOAATRRRRRRRRRRRRRRRRXXXRXXXXXXXXXXXXXXRRRRRRRRRRRRLRDDDDDDBBBBDDBAAAAAAAAAAAALLLLLZZ +XXXXXSXSXXDDDDDDDDDDDDDDEEEEEEEEEEEEPPPPPPPPPPPQQQQQQWOOOAAARTRRRRRRRRRRRRRRRRRRXXXXXXXXXXXXXXBRRRRRRRRRRRLRRDDDDDBBBBDDAAAAAAAAAUAARLLLLLZZ +XXXSSSSSSSWDDDDDDDDDDDDDEEEEEEEEEEEEPPPPPPPPPPPQQQQQQQQOORAAARRRRRRRRRRRRRRRRRRRXXXXXXXXXXXXXXRRRRRRRRRRWRRRKDDBDBBDBDDDDDAAAAAAAAAAALLLLZZZ +XXXSSSSSSSDDDDDDDDDDDDDDEEEEEEEEEEEEEEEEEPPPPPQQQQQQQQQQORRAARRRYRRRRRHHHHHRRRRRXXXXXXXXXXXXXXTRRRRRRRXRWRRVVVBBBBBDDDDDDDDDAAAAAAABLLLLZZZZ +XXXXSSSSSSSSDDDDDDDDDDDDEEEEEEEEEEEEEEEEEPPTTTQQQQQQQQQQORRAAAARYRRRHHHHHHHHHXRRXXXXXXXXXXXXXXTVRVRRVRVVWVVVVYYYBBBDDDDDDDDDDAAAAAABLLLZZZZZ +EEEEESESSSSSDDDYDDDDDDDDDDEEEEEEEEEEEEEEEPTTTTQQQQQQQQQOORRAAAARRRRRHHHHHHHHHHRRRXXXXXRXXXXXXXTVVVVVVVVVVVVVVYYYBBBDDDDDDDDDDADAJAAJJZZZZZZZ +EEWEESESSSSSSCDDDDDDDYZZDDJEEEEEEEEEPPPPPPHTTTTQQQQQQQQOOORAAAARRRPHHHHHHHHHHHRRRRRRRRXXXXXXXXVVVVVVVVVVVVVVYYYYBBBDDDDDDDDDDDDJJJJJJZZZZZZZ +EEEEEEEESSSSSCCDDQYYYYYZZZZEEEEEEEEEPPPPPHPTTTTMQKQQQIQQOOOAAAARPHHHHHHHHHHHHHRRRRRRRRXXXXXXXXVVVVVVVVVIIVIIYBBYBBBBBDDDDDDDDDDDJJJJJJJZZZZZ +EEEEEEEESSSSSSCDDDIYYYZZZZZEEEEEEEEEPPPPPPPPTTTMQRRRXIBOOOOOOOORPPHHHHHHHHHHHHRRRRRRRRXXXXXXXXVVVVVVVVIIIIIIIBBBBBBBBOODDDDDDDJJJJJJJJZZZZZZ +EEEEEEEESJSSSJJJJDDYYYZLZZZEEEEEEEEEPPPPPPPXTTTTQRRIIIOOOOOPPPOOPHHHHHHHHHHHHHRRRRRRRRXXXXKKVVVVVVVVIIIIIIIIBBBBOBBBBOOODDDDDDJJJJJJJZZZZZPP +EEEEEEEEEJSSJJJJJJHYYPZZZZTEEEEEEEEEPPPPPPPXRRBRRRRRIIIIOODTTPPPPHHHHHHHHHHHHHRRRRRRRRXXXXXKKVVVVVVVVIIIIIIIIIBOOOOOOOOOODDDGDJJJJJJJZZZZPPP +EEEEEEEEEJJJJJJJJJYYYYZZZZZTTTTEEEPPCCCRRPPPRRRRRRRRIIIITTTTCTTPPHHHHHHHHHUUMMUUUKKKKXXXXXKKVVVVVVVVVVIIIIIIIIICOOOOOODDDDDDGRRRJJJJJJPPPPPP +PEEEEAEEEJJJJJJJJJYYTTZZZZZZTTTEEEPPCCRRRPRRRRRRRRRRIIITTTTTTTTPPHHHHHHHHHUUUUUUUUUKXXXXXKKKKVVVVVVIIIIIIIIIIIIIOOOOOOODDDDGGARRJJJJJJPPPPPP +PEEEEAAXXJJXJJJJJJJJTZZZZZZZZZTEEEECCCCARRRRRRRRRRRRIIITTTTTTTTTPHHHHHHHHHUDDUUUUUKKKXXXKKKKVVVVVVVIIIIIIIIIIIIOOOOOOOOOODDGGARRJRRJPPPPPPPP +PPEEEEEXIXXXJJJJNNNJJZZZZZZZEEEEEEEECCCARRRRRRRRRRRRIIIITTTTTTTTPPPTTTHHHHDDDUUUUUUKKKKKKHHHHHHHVVVIIIIIIIIIIIOOOOOOOOOOODDGGGRRRRRJPPPPPPPP +PEEEEEXXXXXXJNNNNNNZZZZZZZZEEEEEEEEEAACARRRRRRRRRRNNIIIIITTTTTTPPPPPTTTHHDDDDUUUUUKKKKKKKKHHHHHHHHVIIIGICIIIOOOOOOOOOOOOODDCRRRRRRRJPPPPPPPP +PXXXXXXXXXYYNNNNNNNZZZZZZZEEEEEEEEEEAAAAAARRRRRRRNNNIIIIITTTTTTPPPPTTTTHHDDDDDUUUKKKKKKKKHHHHHHHWWWWWCCCCCIIIOOOOOOOOOOODDDDRRRRRRRRRPPPPPPP +PXXXXXXXXXYYYNNNNNNNZZZZZZEEEEEEEEEAAAAAARRRRRRRNNNNIIIIITTTTTTPPPPTTTTHHHDDDDUUUKKKKKKKKKHHHHHHHCCCCCCCCCIOOOOOOOOOOOOOODDDRRRRRRRRRLPPPPPP +PXXXXXXXXYYXNNNNNNNNZZZZZZZEEEEAEEAAAAAAAAARRRRRNNNNNIIIAATTCTTPPPTTTTTHHDDDDDKKKKDKKKKKKHHHHHHHHCCCCCCCCCCCCOOOOOOOOOOOOOOOOORRRRRLLLLPPPPP +PXXXXXXXXXXXXNNNNNNNZZZZZZZEEEAAEAAAAAAAARRRRRRRNNNNNIIIAAAACCYCCCCCCTTTDDDDDDDKKDDDKKKHHHHHHHHHHICCCCCCCCCCCCCOOOOOOOOOOOOOOORRRRRRRPPPPPPP +XXXXXXXXXXXXXNNNNNNNZZZZZZZZZAAAAAAEEEAAAARRRRRRNNNNNNAAAAACCCCCCCCCCTTTDDDDDKKKKDDDKKKKHHHHHHHHHICCCCUCCCCCCCCCOOOOOOOOOOOOOOORRRRROPPPPPPP +XKXXXXXXXXXXXXNNNNNNCCZQZZRRRAAAAEAEEEAAARRRRRRNNNNNNNAAAAACCCCCCCCCCTTFDDDDDDKKKDDDDKHHHHHHHHHHHHQCCCUUCCCCCCCCOOOOOOOQOOOOOOORROOOOPPPPPPP +KKKKXXXXXXXXXXNNNNLCCCCCZCRRRRAAAEEEEEARRRRRRRRNNHNNNNAAAAAACCCCCCCCTTFFFDDDDKKKKDDDDDDDHHHHHHHHHHHRUUUUUCCCCCCCCOOOJOOOOOOOOOOOOOOOPPPPPPPP +KKKKXXXXXXXDXNNNNNLCCCCCCCRRRREEEEEEEEERRRRRKRRRRRNNNNAOAAACCCCCCCCCTTFFFFDDDDDDDDDDDDDHHHHHHHHHHHHRRUUUUUUCCCCCCCOOJJOOOMOOOOOOOOOOOPPPPPPP +KKKKKXXXXXXXXCCLLLLLCCCCCCIRRRREEEEEEEEEKKKKKRRRRKAAAAAOOOOOCCFFCCCCTTFFZZVVDVVDDDDDDDDHHHHHHHHHHHHHRJUUUCCCCNNCCCCCCJOOMMMOOOOOOOOOOPPPPPPP +KKKKKXXXXXXAXXCCLCLCCCCCCIIRRRRREEEEEEEEIKKKKKKKRKAAOOOOOOOOCCOFCCCCZTTZZZVVVVVVDDDDDDHHHHHHHHHHHHJJJJUUUUCCNUNNNCCCCJJMMMMOOOOOOWWOOPYYPPPP +KKKKKKXXXXAAXXCCLCCCCCCCCCIQRRRREEEEEEIIIKKKKKKKKKAAOOOOOOOOOCOFCZZCZZZZZVVVVDDDDDDDDDDHHHHHHHWWEHJJJJJUUNNNNNNNNNGCJJMMMMMMMMWWWWWWWPPPPWPW +KKKKKKKKKKKAAXCCCCCCCCCCCCIQQRRREEEEEEEIIIKKKKKKKAAOOOOOOOOOOOOOCZZZZZZZZZVVVVDDDDDDDDDDDHHHEEEEEJJJJJJJNNNNNNNNNNNJJJMMMMMMMMWWWWWWWWWWWWWW +KKKKKKKKKKCCCCCCCCCCCCCCCCCQHHHHEEEEEEIIIKKKKKKKAAKOOOOOOOOOOOOOOZZZZZZZZZZVVDDDDDDDDDDDDHHHHEEEJJJJJJJJYYYYFNNNNNNNJJMMMMMMMMWWWWWDWWTTTTTW +KKKKKKKKCCCCCCCCCCCCCCCCCCCQQQHHHEEEEEIKKKKKKKKKKKKKOOOOOOOOOOOOOZZZZZZZZZZVVDDDDDDDDDDDDDDDEEEJJJJJJJJJYYYMIINNNNJJJMMMMMMMMWWWWWDDWWWWWTTT +KKKKKKVKCCCCCCCCCCCCCCKKCCMQQQHHHEEEEEKIKKKKKKKKKKKKOOOOOOOOOOOOOZZZZZZZZZVVVVDDDDDDDDLLDDDEEEEEJJJJJJJJYYYYIIINNNNNIIMMMMMMMWWWWWDDDDTTTTTT +KKKKKVVVPPCBCBBBCBBBBBBBBPQQQQHHHHKKEKKIKKKKKKKKKKKKOOOOOOOOOOOOOZZZZZZZZZVVVVDDDDDDDDLLDDDDEEEEEEEEJYJJYYYYIIINNNNNIIIIMMMMWWWWWWWDDCTTTTTT +KKKKKVVVVVVBBBBBBBBBBBBBBPQQQQQHHKKKKKKKKKKKKKKKKKKKKOOOOOOOOOOAOOZZZZZZZZZVVVDDDDLLLLLLDDDDEEEEEEEEYYJJYYYYYIIIINNIIIIIMMMMMTWWWWWWTTTTTTTT +KKKKVVVVVVBBBBBBBBBBBBBBBBQQQQQQHHKKKKKKKKKKKKKKKKKKOOOOOOOOOOJOOOZZZZZIZZIIIVDDDLLLLLLEEEEEEEEEEEEYYYYJYYYYIIIIIIIIIIITMTMMMTWWWWWTTTTTTTTT +KKKKVVVVVVVBBBBBBBBBBBBBBQQQQQQHHHKKKKKKKKKWWKKKKKKKOOOOOOOOOOOOZZZZZZZIIIIIIIDDDLLLLLLLLEEEEEEEEEEYYYYYYYYYYIIIIIIIQIITTTTTTTWWWTTTTTTTTTTT +KKKKVVVVVVVBBBBBBBBBBBBBBBQQQQQQHHKKKKKKKWWWWWKKYKKOOOOPOOOOOOOOOOZZZZZIIIIIIIIDDLLLLLLLLLEEEEEEEEEYYYYYYYYYIIIIIIITTTTTTTTTTTTTWTTTTTTTTTTT +KKKKKVVVVXVVLBBBBBBBBBBBBBBQQQQLLLKKKKKKWWWWWWKKYOOOOOOPPPPOOOOOOZZZZZZIIIIIIIIILLLLLLLLLLLEYYEYYYYYYYYYYYYIIIIIIITTTTTTTTTTTTTTTTTTTTTTTTTT +KKKKKKKKVLLLLBBBBBBBBBBBBBQQTTQLLLKKKKKKWWWWIIIOOOOOOOPPPPPPPPPOOZZZZZZIIIIIIIIIIILLLLLLLLDDDYYYYYYYYYYYYYTPPIIIIITTTTTTTTTTTTTRRTTTTTTTTTTT +KKKKKKLLLLLLLBBBBBBBBBBBBBBBTTTLLLLKZKRKOOWIIIIIOOOOOPPPPPPPPOOOOOZZZZZIIIIIIIIIIILLLLLLLLDDDFYYYYYYYYYYYYTPPNIIINTETATTTTTTTTRRRRRRTTTTTTTT +KKKKKKKLRLLLLJBBBBBBBBBBBBGLLLLLLLLLLVKKOOOIIIIOOOOOOOOOPPPPPPPOPZZZZZZIIIIIIIIIILLLLLLLLLLDDFYYYYYYYYYYYYPPPNNNNNTTTTTTTTTTTTRRRRRRLLTTTTTT +KKKKKKKLLLLBBBBBBBBBBBBBBGGLLLLLLLLLLVKKOOOIOOOOOOOOOOPPPPPPPPPPPZZZZZIIIIIIIIIIILLLLLLLLLDDDDKKYYYYYYYYYYPPNNNNNNNNTTTCCTCTPRRRRRRRLPTTTTTV +KKKKKKLLLELLBLLLBBBBEBBBBBBLLLLLLLLLLVVOOYOOOOOOOOOOOPPPPPPPPPPZZZZZZZZIIIIIIIIIILLLLULLLLLDDDKKYYYYYYYYYPPPNNNNNNNNCCCCCCCPPRRRRRRLLITIIVVV +KKKKKLLLLLLLLLLLLLCBBBBBCCBLLLLLLLLLLVYYYYOOOOOOOOOOOPPPPPPPPPPZZZZZZZZIIIIIIIIIZLJLULLLLLGGDDKKKYYYYYYPPPPPNONNNNNNCCCCCCCPPPRPPRRLLIIIIVVV +KKKKKKKLLLLLLLLLLLCCCCCBCCLLLLLLLLLLLVYYYYYYOYOOOOOOOOWWPPPPPPPPZZZZZZZIIIIIIIZIZLJLULLLLLGGGDDDPPYYYYYYPPPNNNNNNNNNCCCCCCCCPPPPPRRRRRIVVVVV +KKKKKKKLDLLLLLLLLYCCCCCBCLLLLLLLLLLVVVYYYYYYYYYOOOOOOOWWPWPWPPHPPZPZZZZIIZZZIIZIZZEEEQQQQQGGGDDDGPPPYYPPPPNJNNNNNNNNNCCCCCCCCCPPPRRRRRVVVVVV +KKKKKKDNDLLLLLLLLYCCCCCCCCCPPDDLLLLVVVYYYYYYYYOOOOOOOOWWWWWWHHHPPPPHHHZZZZZZZIZZZEEEEEQQQQQGGDGGGPPPPPPPPPNNNNNNNNNNCCCCCCCCCPPPPRRRVRVVVVVV +KKKKKKDDDDDDLLLLYYYYCCCCCCCPPDPSSPVVVVYYYYYYYYOWOOOWWWWWWWWHHHHHHHHHHZZZZZZZZIZZZEEEEEQQQQQQGGGNNPNNPPPPPPPNNVNNCCCNCCCCICCCINPPPRRVVVVVVVVV +DKKKKKDDDDDDTLLYYYYYYCCCCCCPPPPPSPPVVVYYYYYYYYWWOOWWWWWWWWHHHHHHHHHHFZZZZZZZZZZZEEEEQQQQQQQQQGNNNNNNPPPPPPPPVVVWCCCNCCCIIIIIINPPPRRIIIVVVVVV +DDDDDDDDDDDTTLLYYYYYYCYCCCPPPPPPPPVVVVYYYYYYYYWWWWWWWWWWWWHHHHHHHHHHFZFZZZZZZZZZEEEEQQQQQQQQQGNNNNNNNNPPPLPPPVVWWCNNCCCIIIIIIPPPPRIIYVVVVVVV +DDDDDDDDDDDTTLLTTYYYYYYYCPPPPPPPVPPVVYYYYYYYYYYWWWWWWWWWWHHHHHHHHHHFFFFFZZZZZEEEEEEEQQQQQBGGNNNNNNNNNNNPPWWWWWWWWCCCCHHIIIIIIIIPIIIIIVVVVVVV +DDDDDDDDDDDDTTTTTTYTTTYYCCPPPPPPVVVVYYGYYYYYYYYWWWWWWWWWWWHHHHHHHHFFFFFFZZZZZEEEEEEEEQQBBBGGGNNNNNNNNNNNNNWWWWWWWCCCCCHHIIIIIIIIIIIIIIVVVVVV +KKDDDDDDDDDDTTTTTTTTTTTTCCCPPPPPVVVVVYYYYYYYYYWWWWWWWWWWWHHHHHHHHHFFFFFFFZZZZEEEEEEEQQQBBBBBGBBNNNNNNNNNNNWWWWWWWWWWHHHHHIIIIIIIIIIILLLVVLVL +KKDDDDDDDDTTTTTTTTTTTTTTCCCPPPPVVVVVYYYYYYYYYYWWWWWWWWWWWWHHHHHHHFFFFFFFFFFZZEEEEEEBQQQBBBBBBBBBNNNNNNNNNNWWWWWWWWWMHHHHHIIIIIIIIIIILLLLLLVL +KKKDDDDDHDTTTTTTTTTTTTTCCCPPPPPPPPVYYYYYYYYYYYWWWWWWWWWWWWHHHHHHHHQQFFFFFFFZZEEZEEBBQQQQBBBBBBBBBBNNNNNNNNWWWWWWWWWWHHHHHIIIIIIIIIIILLLLLLVL +KKKDDDDDDTTTTTTTTTTTTTTCCPPPPPPPPCYYYYYYYYYYRYWWWWWWWWWWWWHHHHHHHHQFFFFFFFFFZZZZZERBBBBBBBBBBBBBBBBBNNNWWWWWWWWWWWWWWHHNIIIIIIIIIIIICLLLLLLL +KKDDDDDDDTTTTTTTTTTTTTTTCCCPPPPPPCYLLYYLYYYRRWWWWWWWWWWWHHHHHHHHHHHHFGFFZZFFZZZEEEEEBBBBBBBBBBBBBBNNNNWWWWWWWWWWWWWNNNHNIIIIIIIIIIIICCLLLLLL +KKKKDDDDTTTTTTTTTTTTTTTCCCCCPPPPPYYYLLLLLYYRRRRRWWWTTWWWWQQHHHHHHHHHHHHFZZZZZZZEQEEEBXBBBBBBBBBBBBNNNNNWWWWWWWWWWWWWNNNNIIIIIIIIIIIICCLLLLLL diff --git a/src/main.rs b/src/main.rs index 44991c7..3095717 100644 --- a/src/main.rs +++ b/src/main.rs @@ -33,29 +33,67 @@ )] extern crate test; pub mod util; -use std::sync::OnceLock; - pub use util::prelude::*; +const SIZE: usize = 140; -#[no_mangle] -pub unsafe fn p1(i: &str) -> impl Display { - let i = i.as_bytes().trim_ascii_end(); - let mut o = [0u32; 8]; - const LUT: [u32; 10000000] = unsafe { - std::mem::transmute::<[u8; 10000000 * 4], _>(*include_bytes!("../beeg2-larger-basic")) - }; - reading::κ(i, &mut o); - o.into_iter().map(|stone| C!{ LUT[stone as usize] }).sum::<u32>() +fn explore( + (x, y): (usize, usize), + handled: &mut [[bool; 140]; 140], + char: u8, + get: &mut impl FnMut(usize, usize) -> Option<u8>, + tot: &mut u32, + count: &mut u32, +) { + if get(x, y) == Some(char) && handled[y][x] == false { + handled[y][x] = true; + // αbβ + // a.c + // γdδ + let α = get(x.wrapping_sub(1), y.wrapping_sub(1)) != Some(char); + let β = get(x.wrapping_add(1), y.wrapping_sub(1)) != Some(char); + let γ = get(x.wrapping_sub(1), y.wrapping_add(1)) != Some(char); + let δ = get(x.wrapping_add(1), y.wrapping_add(1)) != Some(char); + + let a = get(x.wrapping_sub(1), y) != Some(char); + let b = get(x, y.wrapping_sub(1)) != Some(char); + let c = get(x.wrapping_add(1), y) != Some(char); + let d = get(x, y.wrapping_add(1)) != Some(char); + fn u(a: bool) -> u32 { + a as u32 + } + // *tot += u(a) + u(b) + u(c) + u(d); + + *tot += u(a & b) + u(b & c) + u(c & d) + u(a & d); + *tot += u(!a & !b & α) + u(!b & !c & β) + u(!c & !d & δ) + u(!a & !d & γ); + *count += 1; + + explore((x.wrapping_sub(1), y), handled, char, get, tot, count); + explore((x + 1, y), handled, char, get, tot, count); + explore((x, y + 1), handled, char, get, tot, count); + explore((x, y.wrapping_sub(1)), handled, char, get, tot, count); + } } #[no_mangle] -pub unsafe fn p2(i: &str) -> impl Display { - let i = i.as_bytes().trim_ascii_end(); - let mut o = [0u64; 8]; - const LUT: [u64; 10000000] = - unsafe { std::mem::transmute::<[u8; 10000000 * 8], _>(*include_bytes!("../beeg-basic")) }; - reading::κ(i, &mut o); - o.into_iter().map(|stone| C! { LUT[stone as usize] }).sum::<u64>() +pub fn run(i: &str) -> impl Display { + let grid = unsafe { i.as_bytes().as_chunks_unchecked::<{ SIZE + 1 }>() }; + let handled = &mut [[false; SIZE]; SIZE]; + let mut get = |x: usize, y: usize| { + unsafe { core::hint::assert_unchecked(grid.len() == SIZE) }; + (x < SIZE && y < SIZE).then(|| grid[y][x]) + }; + (0..SIZE) + .flat_map(move |y| (0..SIZE).map(move |x| (x, y))) + .filter_map(|(x, y)| { + let mut sides = 0; + let mut area = 0; + (!handled[y][x]).then(|| { + let char = C! { grid[y][x]}; + explore((x, y), handled, char, &mut get, &mut sides, &mut area); + area * sides + }) + }) + .sum::<u32>() } fn main() { @@ -66,13 +104,12 @@ fn main() { // s.push_str(i);i // } // std::fs::write("src/inp.txt", s); - println!("{}", unsafe { p1(i) }); - println!("{}", unsafe { p2(i) }); - // println!("{}", p1(i)); + #[allow(unused_unsafe)] + println!("{}", unsafe { run(i) }); } #[bench] fn bench(b: &mut test::Bencher) { let i = boxd(include_str!("inp.txt")); - b.iter(|| unsafe { p1(i) }); + b.iter(|| unsafe { run(i) }); } diff --git a/src/util.rs b/src/util.rs index 40993d8..4720a05 100644 --- a/src/util.rs +++ b/src/util.rs @@ -199,6 +199,59 @@ pub enum Dir { W = b'L', } +pub struct UnionFind { + p: Vec<usize>, + s: Vec<usize>, +} + +impl UnionFind { + pub fn new(size: usize) -> Self { + Self { + s: vec![1; size], + p: (0..size).collect(), + } + } + + fn reset(&mut self) { + self.s.fill(1); + self.p + .iter_mut() + .enumerate() + .for_each(|(idx, val)| *val = idx); + } + + pub fn find(&mut self, key: usize) -> usize { + if self.p[key] == key { + return key; + } + let parent = self.find(self.p[key]); + self.p[key] = parent; + parent + } + + pub fn union(&mut self, a: usize, b: usize) -> bool { + let α = self.find(a); + let β = self.find(b); + if α == β { + return false; + } + let a = self.s[α]; + let b = self.s[β]; + if a >= b { + self.s[α] += b; + self.p[β] = α; + } else { + self.s[β] += a; + self.p[α] = β; + } + true + } + + fn group_size(&self, group: usize) -> usize { + self.s[group] + } +} + pub trait UnsoundUtilities<T> { fn ψ(self) -> T; } |