Here is a fully functional one sided Turing machine simulator in CGOL. To run it place the turing.py script in golly scripts folder. Then copy the
to clipboard, and run the script.
Then there should be all possible combinations of state/head (in some order). So if you have 5 head states, and 5 tape states, you should have 25 lines of the turing rule, as follows:
Space is always the delimiter. The states are running numbers from 0..N-1
Notice the starting head state is always 0.
Code: Select all
import golly as g
reg = g.parse("54bo$52b3o$51bo$50bobo$50bobo$51bo4$85b2o$35b2o48bobo$35b2o50bo4b2o$83b4ob2o2bo2bo$83bo2bobobobob2o$86bobobobo$55b2o30b2obobo$55bobo33bo$57bo$48b2o7b2o18b2o$48b2o28bo7b2o$78bobo5b2o$38bob2o37b2o$36b3ob2o$35bo$36b3ob2o$38b2o2bo$41bobo$38b3obobo16bo$37bo2bo2bo15b3o27b2o$36bobobo17bo30bo$35bobo2b2o16b2o30b3o$35bobobo2bobo47bo$36b2ob2o2b2o2$94b2o$94b2o$37b2o43b2o$38bo44bo20bo$38bobo42bobo17bobo$39b2o43b2o17bobo$104bo3$112b2o$112bo$113b3o$115bo4$53b2o$53b2o$100b2o$100bo$101b3o$103bo5$109bo$9bo97b3o$9b3o94bo$12bo77b2o14b2o$11b2o77b2o2$85b2o$3b2o76bo3b2o$3bo76bobo$2obo75bobo$o2b3o4b2o67bo$b2o3bo3b2o66b2o$3b4o$3bo15b2o$4b3o12bobo87b2o$7bo13bo82b2o2bo2bo$2b5o14b2o66b2o13bobo2b2o$2bo85bobo16b2o$4bo83bo19bo$3b2o82b2o16bo2bob2o$104bobob2obo$105bobo$106bo2b2o$107b2ob3o$113bo$107b2ob3o$107b2obo2$99b2o$90b2o7b2o$91bo$91bobo$92b2o4$112b2o$112b2o5$77bo19bo$77b3o16bobo$80bo15bobo$67b2o10b2o16bo$68bo25b3o$68bobo19b2o2bo$58bo10b2o19bo$56b3o29bobo$55bo32b2o$55b2o$40b2o$41bo$41bob2o43b2o$42bo2bo42bobo$43b2o45bo$58b2o24b2o4b2o$58b2o24bobo$86bo$86b2o2$67bo3b2o$66bobo3bo$65bobo3bo$61b2obobo3bo$61b2obo2b4obo$65bobo3bobo$61b2ob2o2bo2bobo$62bobo2b2o3bo$50b2o10bobo$50b2o11bo!")
dup = g.parse("7b2o56bo$7b2o56b3o$68bo$67bobo$67bobo$68bo5$22b2o59b2o$22b2o59b2o4$63b2o$30bo11b2o18bobo$29bobo10b2o18bo$21bo3b2o2bobo29b2o7b2o$20bobo2bo2b2ob2o37b2o$20bobo3bobo$2b2o17bob4o2bob2o45b2obo$3bo19bo3bobob2o45b2ob3o$3o19bo3bobo55bo$o20bo3bobo50b2ob3o$21b2o3bo50bo2b2o$76bobo$58bo16bobob3o$58b3o15bo2bo2bo$34b2o25bo17bobobo$34b2o24b2o16b2o2bobo$49b2o24bobo2bobobo$48bo2bo23b2o2b2ob2o$49b2obo$52bo$52b2o$3b2o21b2o9b2o42b2o$3b2o21bobo9bo42bo$9b2o17bo6b3o41bobo$9b2o17b2o5bo43b2o3$7b2o$7b2o5b2o$14b2o6$65b2o$65b2o!", 125, 12)
dup_eater = g.parse("7b2o56bo$7b2o56b3o$68bo$67bobo$67bobo$68bo5$22b2o59b2o$22b2o59b2o4$63b2o$30bo11b2o18bobo$29bobo10b2o18bo$21bo3b2o2bobo29b2o7b2o$20bobo2bo2b2ob2o37b2o$20bobo3bobo$2b2o17bob4o2bob2o45b2obo$3bo19bo3bobob2o45b2ob3o$3o19bo3bobo55bo$o20bo3bobo50b2ob3o$21b2o3bo50bo2b2o$76bobo$58bo16bobob3o$58b3o15bo2bo2bo$34b2o25bo17bobobo$34b2o24b2o16b2o2bobo$49b2o24bobo2bobobo$48bo2bo23b2o2b2ob2o$49b2obo$52bo$52b2o$3b2o21b2o9b2o42b2o$3b2o21bobo9bo42bo$9b2o17bo6b3o41bobo$9b2o17b2o5bo43b2o3$7b2o$7b2o5b2o$14b2o6$65b2o$65b2o12$96b2o$96bo$97b3o$99bo!", 125, 12)
gld1 = g.parse("bo$2bo$3o!", 170, 1)
res_dup = g.parse("27b2o$28bo$28bobo$14b2o13b2o$14b2o3$8b2o40b2o$8b2o40b2o$12b2o$12b2o4$7b2o$7b2o5$31b2o$26b2o2bo2bo$26bobo2b2o7b2o$29b2o9b2o$30bo$27bo2bob2o$14b2o10bobob2obo$15bo11bobo$12b3o13bo2b2o$12bo16b2ob3o$35bo$29b2ob3o$29b2obo2$21b2o$12b2o7b2o$13bo$13bobo$14b2o4$34b2o$34b2o5$19bo$18bobo$18bobo$19bo$16b3o$16bo5$23b2o$23bo$21bobo$21b2o10bo$33b3o$36bo$35b2o$2o48b2o$2o48bo$47b2obo$46bo2bo$47b2o$32b2o$32b2o4$19b2o3bo$19bo3bobo$20bo3bobo$21bo3bobob2o$12b2o5bob4o2bob2o$12bo6b2o3bobo$13b3o6bobob2ob2o$15bo3b3obo3bobo$19bo2bo4bobo10b2o$20b2o6bo11b2o!", -58, 90)
res_ref = g.parse("10b2o11bo$10b2o10bobo$22bobo2b2o3bo$21b2ob2o2bo2bobo$25bobo3bobo$21b2obo2b4obo$21b2obobo3bo$25bobo3bo$26bobo3bo$27bo3b2o2$46b2o$46bo$18b2o24bobo$18b2o24b2o4b2o$3b2o45bo$2bo2bo42bobo$bob2o43b2o$bo$2o$15b2o$15bo32b2o$16b3o29bobo$18bo10b2o19bo$28bobo19b2o$28bo$27b2o10b2o$40bo$37b3o$37bo!", 98, -50)
res_snark = g.parse("27b2o$27bo$25bobo$25b2o$21bo$20bobo$20bobo$21bo2$33b2o$33bo$31bobo$31b2o3$10b2o$11bo$11bobo$12b2o3$25b2obo$25b2ob3o$31bo$25b2ob3o$26bobo$26bobo$27bo$3b2o$2bo2bo2b2o$3b2o2bobo13b2o$5b2o16bobo$5bo19bo$2b2obo2bo16b2o$2bob2obobo$6bobo$3b2o2bo$b3ob2o$o$b3ob2o$3bob2o2$13b2o$13b2o7b2o$22bo$20bobo$20b2o4$2o$2o5$16bo$15bobo$15bobo$16bo$17b3o$19bo!", -50, 16)
snark_head1 = g.parse("3b2o$4bo$2bo$2b5o14b2o$7bo13bo$4b3o12bobo$3bo15b2o$3b4o$b2o3bo3b2o$o2b3o4b2o$2obo$3bo$3b2o3$11b2o$12bo$9b3o$9bo!")
snark_head2 = g.parse("9b2o$9bobo$11bo4b2o$7b4ob2o2bo2bo$7bo2bobobobob2o$10bobobobo$11b2obobo$15bo2$b2o$2bo7b2o$2bobo5b2o$3b2o7$13b2o$13bo$14b3o$16bo!")
const_arr_delay = g.parse("6$51bo11b2o86bo11b2o$50bobo10b2o85bobo10b2o$42bo3b2o2bobo89bo3b2o2bobo$41bobo2bo2b2ob2o87bobo2bo2b2ob2o$41bobo3bobo91bobo3bobo$28bo9bo3bob4o2bob2o88bob4o2bob2o$28b3o5b3o5bo3bobob2o73b2o15bo3bobob2o$31bo3bo7bo3bobo77bo15bo3bobo$30b2o3b2o5bo3bobo75b2obo14bo3bobo$42b2o3bo77bobobo12b2o3bo$125bo2b2o2b2o$17b2o81bo22b3o6b2o$17b2o79b3o21bo$55b2o40bo24b2o31b2o$55b2o40b2o56b2o$70b2o98b2o$69bo2bo96bo2bo$70b2obo96b2obo$73bo99bo$73b2o17b2o79b2o$58b2o31bo2bo63b2o$59bo31bo2bo64bo$56b3o33b2o62b3o$44b2o10bo87b2o10bo$24bo6b2o11bobo97bobo$22b3o6b2o13bo99bo$3bobobobo11bo24b2o98b2o$2bob2ob2obo10b2o$2bo3bo3bo127b2o$3b2obo3b2o126bo$5bo133b3o$5bobo124b2o7bo$6b2o92b2o24b2o4b2o$99bobo24bobo$97b3obobo24bo$96bo5b2o24b2o$96b2o!", -220, 160)
const_SL_delay_bottom = g.parse("9$267b2o$268bo7b2o$268bobo5b2o$269b2o4$263b2o$263b2o17b2o$282b2o3$284b2o$284bobo$286bo$286b2o3$291b2o$286b2o2bo2bo$286bobo2b2o$271b2o16b2o$272bo17bo$269b3o15bo2bob2o$269bo16bobob2obo$287bobo$288bo2b2o$289b2ob3o$295bo$289b2ob3o$289b2obo2$281b2o$272b2o7b2o$273bo$273bobo$274b2o4$294b2o$294b2o5$279bo$278bobo$278bobo$279bo$276b3o$276bo91$78b2o$78bo$80bo$60b2o14b5o$61bo13bo$61bobo12b3o$62b2o15bo$76b4o$71b2o3bo3b2o$71b2o4b3o2bo$79bob2o$79bo$78b2o3$70b2o$70bo$71b3o$73bo21$23b2o$24bo$22bo$22b5o14b2o$27bo13bo$24b3o12bobo$23bo15b2o$23b4o$21b2o3bo3b2o18b2o$20bo2b3o4b2o18bo$20b2obo27bo$23bo22b2o2b2o$23b2o21bobo$48bob4o$47b2obo2bo$31b2o$32bo$29b3o$29bo$60b2o$38b2o20bo$39bo18bobo$39bobo16b2o10bo$40b2o28b3o$73bo$72b2o$87b2o$87bo$84b2obo$83bo2bo$84b2o$69b2o$69b2o4$56b2o3bo$56bo3bobo$57bo3bobo$58bo3bobob2o$49b2o5bob4o2bob2o$49bo5bobo3bobo$50b3o2bobo2bo2b2ob2o$52bo3bo3b2o2bobo$64bobo10b2o$65bo11b2o!", -620, 170)
const_SL_creator_top_snark = g.parse("$5b2o$6bo$4bo$4b5o14b2o$9bo13bo$6b3o12bobo$5bo15b2o$5b4o$3b2o3bo3b2o$2bo2b3o4b2o$2b2obo$5bo$5b2o3$13b2o$14bo$11b3o$11bo!", -60, 9)
const_bottom_SL = g.parse("34$614bo$612b3o$611bo$611b2o3$595b2o14b2o$596bo14bobo$596bobo13bo$597b2o3$538bo$536b3o$535bo$535b2o2$587bo$585b3o$569bo14bo$569b3o12b2o$572bo$571b2o$615bo$614bobo$470b2o11bo88b2o41b2o$470b2o10bobo87b2o$482bobo2b2o3bo$481b2ob2o2bo2bobo$485bobo3bobo$481b2obo2b4obo99b2o$481b2obobo3bo101b2o$485bobo3bo$486bobo3bo$487bo3b2o72b2o37b2o$506bo57bo2bo2b2o33bo$504b3o58b2o2bobo30b3o$503bo63b2o16b2o15bo$478b2o23b2o62bo17bo$478b2o84b2obo2bo15b3o$463b2o99bob2obobo16bo$462bo2bo102bobo$461bob2o100b2o2bo$461bo101b3ob2o$460b2o100bo$475b2o38b2o46b3ob2o$475bo38bo2bo47bob2o$476b3o36b2o$478bo11b2o83b2o$491bo83b2o7b2o$488b3o6bob2o17b2o64bo$488bo6b3ob2o17bo63bobo$494bo24b3o60b2o$495b3ob2o20bo$497bobo$497bobo203b2o$498bo10b2o51b2o139bobo$509bo52b2o141bo$510b3o186b2o3bob2o$512bo187bo3bo3bo$688b2o10bob2ob2obo$663b2o24bo11bobobobo$578bo85bo13b2o6b3o$577bobo84bobo11b2o6bo$577bobo74bo10b2o$578bo73b3o$579b3o69bo$581bo69b2o$636b2o$637bo$637bob2o$638bo2bo$639b2o$654b2o$654b2o$692b2o$692b2o2$663bo3b2o$662bobo3bo5b2o3b2o$661bobo3bo7bo3bo$657b2obobo3bo5b3o5b3o$657b2obo2b4obo3bo9bo$375b2o11bo272bobo3bobo$375b2o10bobo267b2ob2o2bo2bobo$387bobo2b2o3bo260bobo2b2o3bo$386b2ob2o2bo2bobo247b2o10bobo$390bobo3bobo247b2o11bo$386b2obo2b4obo$386b2obobo3bo$390bobo3bo$391bobo3bo$392bo3b2o86bo11bo$411bo72b3o7b3o$409b3o75bo5bo$408bo77b2o5b2o$383b2o23b2o$383b2o$368b2o$367bo2bo$366bob2o$366bo272b2o$365b2o272bo$380b2o38b2o56b2o20b2o135bobo$380bo38bo2bo55b2o20b2o118b2o15b2o$381b3o36b2o199bo$383bo11b2o224bobo17bo$396bo225b2o15b3o$393b3o6bob2o17b2o213bo$393bo6b3ob2o17bo190b2o22b2o$399bo24b3o188bo$400b3ob2o20bo188bobo$402bobo67b2o131bo10b2o$402bobo66bo2bo2b2o124b3o$403bo10b2o56b2o2bobo123bo36b2o$414bo59b2o16b2o108b2o35bobo$415b3o56bo17bo94b2o52bo$417bo53b2obo2bo15b3o92bo52b2o$471bob2obobo16bo92bob2o$475bobo111bo2bo$472b2o2bo113b2o$470b3ob2o129b2o$469bo135b2o$470b3ob2o$472bob2o152b2o$628b2o2b2o$482b2o130bo3b2o12bobo$482b2o7b2o120bobo3bo14bo$491bo120bobo3bo15b2o$489bobo116b2obobo3bo$489b2o117b2obo2b4obo$612bobo3bobo$608b2ob2o2bo2bobo$609bobo2b2o3bo$469b2o126b2o10bobo$469b2o126b2o11bo5$485bo$484bobo$484bobo$485bo$486b3o$488bo7$610b2o$610bobo$612bo$606b2o3bob2o$607bo3bo3bo$595b2o10bob2ob2obo$570b2o24bo11bobobobo$571bo13b2o6b3o$571bobo11b2o6bo$561bo10b2o$559b3o$558bo$558b2o$543b2o$544bo$544bob2o$545bo2bo$546b2o$561b2o$561b2o$599b2o$599b2o2$570bo3b2o$569bobo3bo5b2o3b2o$568bobo3bo7bo3bo$243b2o11bo307b2obobo3bo5b3o5b3o$243b2o10bobo112b2o192b2obo2b4obo3bo9bo$255bobo2b2o3bo104bo197bobo3bobo$254b2ob2o2bo2bobo101bobo193b2ob2o2bo2bobo$258bobo3bobo101b2o195bobo2b2o3bo$254b2obo2b4obo282b2o3b2o10bobo$254b2obobo3bo284bo4b2o11bo$258bobo3bo285bo$259bobo3bo264b2o14b5o$260bo3b2o108bo153bo2bo13bo$279bo70bo21b3o153b2obobo12b3o$277b3o70b3o18bo158bob2o15bo$276bo76bo17b2o157bo15b4o$251b2o23b2o74b2o174b3o10b2o3bo3b2o$251b2o274bo13b2o4b3o2bo$236b2o289b2o20bob2o$235bo2bo310bo$234bob2o310b2o$234bo116b2o$233b2o115bobo$248b2o38b2o60bo189b2o$248bo38bo2bo58b2o189bo$249b3o36b2o227b2o22b3o$251bo11b2o251bobo5b2o17bo$264bo80b2o169bo7b2o$261b3o6bob2o17b2o51bo2bo2b2o163b2o$261bo6b3ob2o17bo53b2o2bobo$267bo24b3o52b2o16b2o162bo$268b3ob2o20bo52bo17bo159b2obobo$270bobo71b2obo2bo15b3o155bobobobo$270bobo71bob2obobo16bo152bo2bobobobob2o$271bo10b2o64bobo170b4ob2o2bo2bo$282bo62b2o2bo175bo4b2o$283b3o57b3ob2o174bobo$285bo56bo180b2o$343b3ob2o$345bob2o2$355b2o$355b2o7b2o$364bo$362bobo$362b2o4$342b2o$342b2o5$358bo$357bobo$357bobo$358bo$359b3o$361bo9$259bo$257b3o$256bo$256b2o3$240b2o14b2o$241bo14bobo$241bobo13bo$242b2o8$232bo$230b3o$214bo14bo178b2o$214b3o12b2o177b2o$119b2o11bo84bo$119b2o10bobo82b2o$131bobo2b2o3bo118bo$130b2ob2o2bo2bobo116bobo157b2o$134bobo3bobo74b2o41b2o132b2o23bo88b2o$130b2obo2b4obo75b2o176bo21bobo88bobo$130b2obobo3bo255bobo19b2o91bo$134bobo3bo244bo10b2o106b2o3bob2o$135bobo3bo241b3o119bo3bo3bo$136bo3b2o95b2o143bo110b2o10bob2ob2obo$155bo81b2o143b2o84b2o24bo11bobobobo$153b3o211b2o100bo13b2o6b3o$152bo215bo48b2o50bobo11b2o6bo$127b2o23b2o56b2o37b2o117bob2o45bobo39bo10b2o$127b2o80bo2bo2b2o33bo118bo2bo46bo37b3o$112b2o96b2o2bobo30b3o120b2o47b2o35bo$111bo2bo97b2o16b2o15bo137b2o69b2o$110bob2o98bo17bo154b2o54b2o$110bo98b2obo2bo15b3o208bo$109b2o98bob2obobo16bo208bob2o$124b2o38b2o47bobo192b2o33bo2bo$124bo38bo2bo43b2o2bo179bo3b2o8b2o34b2o$125b3o36b2o42b3ob2o179bobo3bo59b2o$127bo11b2o66bo184bobo3bo60b2o$140bo67b3ob2o174b2obobo3bo99b2o$137b3o6bob2o17b2o41bob2o174b2obo2b4obo97b2o$137bo6b3ob2o17bo224bobo3bobo$143bo24b3o49b2o166b2ob2o2bo2bobo67bo3b2o$144b3ob2o20bo49b2o7b2o158bobo2b2o3bo67bobo3bo5b2o3b2o$146bobo80bo147b2o10bobo74bobo3bo7bo3bo$146bobo78bobo147b2o11bo71b2obobo3bo5b3o5b3o$147bo10b2o67b2o233b2obo2b4obo3bo9bo$158bo307bobo3bobo$159b3o300b2ob2o2bo2bobo$161bo301bobo2b2o3bo$207b2o242b2o10bobo$207b2o242b2o11bo5$223bo$222bobo$222bobo$223bo$224b3o$226bo31$89bo$89b3o$92bo185b2o$91b2o185b2o3$91b2o14b2o$90bobo14bo181b2o$91bo13bobo156b2o23bo$105b2o158bo21bobo$265bobo19b2o$255bo10b2o$253b3o$252bo$252b2o$237b2o$238bo48b2o$116bo121bob2o45bobo$116b3o120bo2bo46bo$119bo14bo105b2o47b2o$118b2o12b3o120b2o$26b2o103bo123b2o$27bo103b2o$25bo62bo$25b5o14b2o41bobo188b2o135b2o$30bo13bo42b2o41b2o132bo3b2o8b2o135bobo$27b3o12bobo85b2o131bobo3bo147bo$26bo15b2o218bobo3bo142b2o3bob2o$26b4o228b2obobo3bo144bo3bo3bo$24b2o3bo3b2o223b2obo2b4obo130b2o10bob2ob2obo$23bo2b3o4b2o75b2o150bobo3bobo104b2o24bo11bobobobo$23b2obo83b2o146b2ob2o2bo2bobo105bo13b2o6b3o$26bo232bobo2b2o3bo106bobo11b2o6bo$26b2o219b2o10bobo104bo10b2o$98b2o37b2o108b2o11bo103b3o$98bo33b2o2bo2bo223bo$34b2o63b3o30bobo2b2o224b2o$35bo65bo15b2o16b2o211b2o$32b3o83bo17bo212bo$32bo82b3o15bo2bob2o209bob2o$115bo16bobob2obo210bo2bo$133bobo215b2o$134bo2b2o227b2o$135b2ob3o225b2o$141bo262b2o$135b2ob3o263b2o$135b2obo$375bo3b2o$65bo61b2o245bobo3bo5b2o3b2o$65b3o50b2o7b2o244bobo3bo7bo3bo$68bo50bo249b2obobo3bo5b3o5b3o$67b2o50bobo247b2obo2b4obo3bo9bo$120b2o251bobo3bobo$369b2ob2o2bo2bobo$370bobo2b2o3bo$358b2o10bobo$140b2o216b2o11bo$140b2o$77b2o$70b2o5bobo$70b2o7bo$79b2o$125bo$66bo57bobo$65bobob2o53bobo$65bobobobo53bo$62b2obobobobo2bo47b3o$62bo2bo2b2ob4o47bo$64b2o4bo$70bobo$71b2o!", -1020, -360)
const_operation_unit = g.parse("10$275b2o$276bo$276bobo$262b2o13b2o$262b2o3$256b2o40b2o$256b2o40b2o$260b2o$260b2o4$255b2o$255b2o5$279b2o$274b2o2bo2bo$274bobo2b2o7b2o$277b2o9b2o$278bo$275bo2bob2o$262b2o10bobob2obo$263bo11bobo$260b3o13bo2b2o$260bo16b2ob3o$283bo$277b2ob3o$277b2obo2$269b2o$260b2o7b2o$261bo$261bobo$262b2o4$282b2o$282b2o5$267bo$266bobo$266bobo$267bo$264b3o$264bo11$296bo$285b2o7b3o$280bo5bo6bo$280b3o3bobo4b2o$283bo3b2o$282b2o2$307bo$305b3o$304bo$304b2o3$303b2o$303b2o2$213b2o$212bobo$189b2o22bo$190bo5bo88b2o$190bobo2bobo88bo$191b2o2b2o86b3o$283bo26b2o$305b2o2bo2bo$305bobo2b2o$290b2o16b2o$291bo17bo$223b2o63b3o15bo2bob2o$223bobo62bo16bobob2obo$225bo80bobo$225b2o80bo2b2o$308b2ob3o$314bo$308b2ob3o$197b2o109b2obo$198bo$195b3o102b2o$195bo95b2o7b2o$292bo$219b2o71bobo$219b2o72b2o4$228b2o83b2o$206b2o20bo84b2o$207bo18bobo$207bobo16b2o10bo$208b2o28b3o$241bo$240b2o56bo$255b2o40bobo$255bo41bobo$252b2obo42bo$251bo2bo40b3o$252b2o41bo$237b2o$237b2o2$214b2o$210b2o2b2o$209bobo12b2o3bo$209bo14bo3bobo$208b2o15bo3bobo$226bo3bobob2o$224bob4o2bob2o$223bobo3bobo$223bobo2bo2b2ob2o$224bo3b2o2bobo$232bobo10b2o$233bo11b2o15$430b2o$431bo$431bobo$417b2o13b2o$273b2o142b2o$273bo$271bobo$271b2o13b2o123b2o40b2o$286b2o123b2o40b2o$415b2o$415b2o$250b2o40b2o$250b2o40b2o$288b2o$288b2o120b2o$410b2o3$293b2o$293b2o$434b2o$429b2o2bo2bo$429bobo2b2o7b2o$432b2o9b2o$269b2o162bo$268bo2bo2b2o154bo2bob2o$260b2o7b2o2bobo141b2o10bobob2obo$260b2o9b2o145bo11bobo$271bo143b3o13bo2b2o$268b2obo2bo140bo16b2ob3o$268bob2obobo10b2o150bo$272bobo11bo145b2ob3o$269b2o2bo13b3o142b2obo$267b3ob2o16bo$266bo157b2o$267b3ob2o142b2o7b2o$269bob2o143bo$416bobo$279b2o136b2o$279b2o7b2o$288bo$286bobo$286b2o149b2o$437b2o3$266b2o$266b2o$422bo$421bobo$421bobo$422bo$282bo136b3o$281bobo135bo$281bobo$282bo$283b3o20b2o$285bo20bo$308bo$288b2o14b5o122b2o$289bo13bo126bobo$289bobo12b3o117b2o4bo$290b2o15bo114bo2bo2b2ob4o$304b4o114b2obobobobo2bo$299b2o3bo3b2o115bobobobo$299b2o4b3o2bo114bobob2o$307bob2o115bo$307bo$306b2o131b2o$258bo171b2o7bo$258b3o169b2o5bobo$261bo36b2o137b2o$260b2o36bo$299b3o$203b2o96bo$203bo$201bobo$201b2o13b2o$216b2o209b2o18b2o$428bo18bo$291b2o132b3o21bo$180b2o40b2o67bo133bo2b3o14b5o$180b2o40b2o65bobo135bo2bo13bo$218b2o69b2o135b2o2bobo12b3o$218b2o65bo145b2o15bo$284bobo158b4o$284bobo153b2o3bo3b2o$285bo154b2o4b3o2bo$223b2o223bob2o$223b2o72b2o149bo$297bo149b2o$295bobo$295b2o$439b2o$199b2o238bo$198bo2bo2b2o68b2o164b3o$190b2o7b2o2bobo69bo166bo$190b2o9b2o72bobo$201bo74b2o$198b2obo2bo$198bob2obobo10b2o$202bobo11bo72b2obo$199b2o2bo13b3o69b2ob3o$197b3ob2o16bo75bo53b2o$196bo92b2ob3o54b2o$197b3ob2o87bobo$199bob2o87bobo$291bo$209b2o56b2o69b2o$209b2o7b2o46bo2bo2b2o65bo23b2o$218bo48b2o2bobo13b2o50bobo21bo$216bobo50b2o16bobo50b2o19bobo$216b2o51bo19bo71b2o10bo$266b2obo2bo16b2o82b3o$266bob2obobo102bo$270bobo102b2o$196b2o69b2o2bo118b2o$196b2o67b3ob2o69b2o48bo$264bo74bobo45b2obo$265b3ob2o68bo46bo2bo$267bob2o67b2o47b2o$372b2o$212bo64b2o93b2o$211bobo63b2o7b2o$211bobo72bo$212bo71bobo62b2o$213b3o20b2o46b2o63b2o8b2o3bo$215bo20bo122bo3bobo$238bo121bo3bobo$218b2o14b5o122bo3bobob2o$219bo13bo30b2o93bob4o2bob2o$219bobo12b3o27b2o92bobo3bobo$220b2o15bo120bobo2bo2b2ob2o$234b4o121bo3b2o2bobo$229b2o3bo3b2o127bobo10b2o$229b2o4b3o2bo127bo11b2o$237bob2o39bo$237bo41bobo$236b2o41bobo$188bo91bo$188b3o90b3o$191bo36b2o53bo$190b2o36bo$229b3o341b2o$133b2o96bo342bo$133bo440bobo$131bobo426b2o13b2o$131b2o13b2o412b2o$146b2o2$221b2o331b2o40b2o$110b2o40b2o67bo332b2o40b2o$110b2o40b2o65bobo336b2o$148b2o69b2o337b2o$148b2o65bo$214bobo$214bobo171b2o$215bo172bo164b2o$153b2o231bobo164b2o$153b2o72b2o157b2o13b2o$227bo173b2o$225bobo$225b2o$365b2o40b2o168b2o$129b2o234b2o40b2o163b2o2bo2bo$128bo2bo2b2o68b2o197b2o167bobo2b2o7b2o$120b2o7b2o2bobo69bo197b2o170b2o9b2o$120b2o9b2o72bobo368bo$131bo74b2o365bo2bob2o$128b2obo2bo425b2o10bobob2obo$128bob2obobo10b2o260b2o151bo11bobo$132bobo11bo72b2obo185b2o148b3o13bo2b2o$129b2o2bo13b3o69b2ob3o333bo16b2ob3o$127b3ob2o16bo75bo355bo$126bo92b2ob3o350b2ob3o$127b3ob2o87bobo352b2obo$129bob2o87bobo161b2o$221bo161bo2bo2b2o176b2o$139b2o56b2o176b2o7b2o2bobo167b2o7b2o$139b2o7b2o46bo2bo2b2o171b2o9b2o171bo$148bo48b2o2bobo13b2o167bo172bobo$146bobo50b2o16bobo163b2obo2bo170b2o$146b2o51bo19bo163bob2obobo10b2o$196b2obo2bo16b2o166bobo11bo$196bob2obobo180b2o2bo13b3o$200bobo179b3ob2o16bo175b2o$126b2o69b2o2bo179bo198b2o$126b2o67b3ob2o181b3ob2o$194bo189bob2o$195b3ob2o$197bob2o193b2o$394b2o7b2o160bo$142bo64b2o194bo160bobo$141bobo63b2o7b2o183bobo160bobo$141bobo72bo184b2o162bo$142bo71bobo345b3o$143b3o20b2o46b2o346bo$145bo20bo$168bo212b2o$148b2o14b5o212b2o$149bo13bo30b2o$149bobo12b3o27b2o$150b2o15bo$164b4o$159b2o3bo3b2o227bo$159b2o4b3o2bo225bobo$167bob2o39bo185bobo$167bo41bobo185bo$166b2o41bobo186b3o20b2o$118bo91bo189bo20bo$118b3o90b3o209bo$121bo36b2o53bo189b2o14b5o$120b2o36bo245bo13bo$159b3o242bobo12b3o$161bo243b2o15bo$419b4o$414b2o3bo3b2o$414b2o4b3o2bo$422bob2o$422bo$151b2o268b2o$151bo$149bobo$149b2o262b2o$145bo267bo$144bobo267b3o$144bobo171b2o96bo$145bo172bo$316bobo$157b2o157b2o13b2o$157bo173b2o$155bobo$155b2o249b2o$295b2o40b2o67bo$295b2o40b2o65bobo$134b2o197b2o69b2o$135bo197b2o65bo$135bobo261bobo$136b2o261bobo$400bo$338b2o$149b2obo185b2o72b2o$149b2ob3o257bo$155bo254bobo$149b2ob3o255b2o$150bobo$150bobo161b2o$151bo161bo2bo2b2o68b2o$127b2o176b2o7b2o2bobo69bo$126bo2bo2b2o171b2o9b2o72bobo$127b2o2bobo13b2o167bo74b2o$129b2o16bobo163b2obo2bo$129bo19bo163bob2obobo10b2o$126b2obo2bo16b2o166bobo11bo72b2obo$126bob2obobo180b2o2bo13b3o69b2ob3o$130bobo179b3ob2o16bo75bo$127b2o2bo179bo92b2ob3o$125b3ob2o181b3ob2o87bobo141b2o$124bo189bob2o87bobo141b2o$125b3ob2o275bo$127bob2o193b2o56b2o$324b2o7b2o46bo2bo2b2o$137b2o194bo48b2o2bobo13b2o$137b2o7b2o183bobo50b2o16bobo$146bo184b2o51bo19bo$144bobo234b2obo2bo16b2o$144b2o235bob2obobo$385bobo176b2o$311b2o69b2o2bo177b2o$311b2o67b3ob2o$124b2o253bo$124b2o254b3ob2o$382bob2o$482b2o$327bo64b2o55b2o31b2o7bo$326bobo63b2o7b2o45bobo38b3o72b2o$140bo185bobo72bo46b2o38bo70b2o2bo2bo$139bobo185bo71bobo86b2o69bobo2b2o$139bobo186b3o20b2o46b2o143b2o16b2o$140bo189bo20bo144b2o47bo17bo$141b3o209bo142bo45b3o15bo2bob2o$143bo189b2o14b5o140bobo45bo16bobob2obo$334bo13bo30b2o113b2o10bo53bobo$334bobo12b3o27b2o125b3o52bo2b2o$335b2o15bo97b2o57bo52b2ob3o$349b4o98bo56b2o58bo$344b2o3bo3b2o93b3o72b2o37b2ob3o$344b2o4b3o2bo92bo74bo38b2obo$352bob2o39bo124b2obo$352bo41bobo122bo2bo31b2o$351b2o41bobo123b2o23b2o7b2o$335b2o58bo109b2o39bo$335bo60b3o73b2o31b2o39bobo$333bobo7b2o53bo73bo74b2o$333b2o8bo129b3o6b2o$344b3o128bo2b2o2b2o$248b2o96bo128bobobo12b2o3bo$248bo225b2obo14bo3bobo68b2o$246bobo228bo15bo3bobo67b2o$246b2o13b2o214b2o15bo3bobob2o$261b2o229bob4o2bob2o$491bobo3bobo$336b2o153bobo2bo2b2ob2o$225b2o40b2o67bo155bo3b2o2bobo49bo$225b2o40b2o65bobo163bobo10b2o36bobo$263b2o69b2o165bo11b2o36bobo$263b2o65bo221bo$329bobo217b3o$329bobo217bo$330bo$268b2o$268b2o72b2o$342bo$340bobo$340b2o$755b2o$244b2o510bo$243bo2bo2b2o68b2o435bobo$235b2o7b2o2bobo69bo421b2o13b2o$235b2o9b2o72bobo419b2o$246bo74b2o$243b2obo2bo$243bob2obobo10b2o473b2o40b2o$247bobo11bo72b2obo398b2o40b2o$244b2o2bo13b3o69b2ob3o400b2o$242b3ob2o16bo75bo399b2o$241bo92b2ob3o$242b3ob2o87bobo$244bob2o87bobo$336bo398b2o$254b2o56b2o421b2o$254b2o7b2o46bo2bo2b2o$263bo48b2o2bobo13b2o$261bobo50b2o16bobo$261b2o51bo19bo$311b2obo2bo16b2o423b2o$311bob2obobo435b2o2bo2bo$315bobo214b2o220bobo2b2o7b2o$241b2o69b2o2bo215bo224b2o9b2o$241b2o67b3ob2o214bobo225bo$309bo220b2o13b2o208bo2bob2o$310b3ob2o229b2o195b2o10bobob2obo$312bob2o427bo11bobo$740b3o13bo2b2o$257bo64b2o185b2o40b2o187bo16b2ob3o$256bobo63b2o7b2o176b2o40b2o210bo$256bobo72bo215b2o208b2ob3o$257bo71bobo215b2o208b2obo$258b3o20b2o46b2o$260bo20bo467b2o$283bo456b2o7b2o$263b2o14b5o268b2o187bo$264bo13bo30b2o241b2o187bobo$264bobo12b3o27b2o431b2o$265b2o15bo$279b4o$274b2o3bo3b2o$274b2o4b3o2bo242b2o232b2o$282bob2o39bo201bo2bo2b2o227b2o$282bo41bobo192b2o7b2o2bobo$281b2o41bobo192b2o9b2o$265b2o58bo204bo$265bo60b3o198b2obo2bo$263bobo7b2o53bo198bob2obobo10b2o200bo$263b2o8bo257bobo11bo200bobo$274b3o251b2o2bo13b3o197bobo$276bo249b3ob2o16bo198bo$525bo218b3o$526b3ob2o212bo$528bob2o2$538b2o$266b2o270b2o7b2o$266bo280bo$264bobo278bobo$264b2o279b2o$260bo$259bobo$259bobo$260bo264b2o$525b2o$272b2o$272bo$270bobo$270b2o$541bo$540bobo$249b2o289bobo$250bo290bo$250bobo289b3o20b2o$251b2o291bo20bo$567bo$547b2o14b5o$264b2obo280bo13bo$264b2ob3o278bobo12b3o$270bo278b2o15bo$264b2ob3o293b4o$265bobo290b2o3bo3b2o$265bobo290b2o4b3o2bo$266bo299bob2o$242b2o322bo$241bo2bo2b2o316b2o$242b2o2bobo13b2o$244b2o16bobo$244bo19bo292b2o$241b2obo2bo16b2o291bo$241bob2obobo309b3o$245bobo214b2o96bo$242b2o2bo215bo$240b3ob2o214bobo$239bo220b2o13b2o$240b3ob2o229b2o$242bob2o485b2o$550b2o179b2o$252b2o185b2o40b2o67bo$252b2o7b2o176b2o40b2o65bobo$261bo215b2o69b2o$259bobo215b2o65bo$259b2o282bobo$543bobo$544bo$482b2o$239b2o241b2o72b2o188b2o$239b2o315bo189b2o$554bobo$554b2o2$458b2o$255bo201bo2bo2b2o68b2o$254bobo192b2o7b2o2bobo69bo$254bobo192b2o9b2o72bobo209b2o$255bo204bo74b2o204b2o2bo2bo$256b3o198b2obo2bo277bobo2b2o$258bo198bob2obobo10b2o249b2o16b2o$461bobo11bo72b2obo175bo17bo$458b2o2bo13b3o69b2ob3o170b3o15bo2bob2o$456b3ob2o16bo75bo169bo16bobob2obo$455bo92b2ob3o188bobo$456b3ob2o87bobo191bo2b2o$458bob2o87bobo192b2ob3o$550bo199bo$468b2o56b2o216b2ob3o132b2o$468b2o7b2o46bo2bo2b2o211b2obo135bo$477bo48b2o2bobo13b2o335bobo$475bobo50b2o16bobo187b2o131b2o13b2o$475b2o51bo19bo178b2o7b2o131b2o$525b2obo2bo16b2o178bo$525bob2obobo195bobo$529bobo197b2o132b2o40b2o$455b2o69b2o2bo332b2o40b2o$455b2o67b3ob2o337b2o$523bo343b2o$524b3ob2o219b2o$526bob2o219b2o2$471bo64b2o324b2o$470bobo63b2o7b2o315b2o$470bobo72bo$471bo71bobo188bo$472b3o20b2o46b2o188bobo$474bo20bo136b2o99bobo$497bo134b2o100bo151b2o$477b2o14b5o233b3o147b2o2bo2bo$478bo13bo30b2o206bo149bobo2b2o7b2o$478bobo12b3o27b2o359b2o9b2o$479b2o15bo124b2o262bo$493b4o125bo23b2o234bo2bob2o$488b2o3bo3b2o123bobo21bo222b2o10bobob2obo$488b2o4b3o2bo123b2o19bobo223bo11bobo$496bob2o39bo104b2o10bo210b3o13bo2b2o$496bo41bobo115b3o208bo16b2ob3o$495b2o41bobo118bo230bo$539bo118b2o224b2ob3o$540b3o130b2o209b2obo$487b2o53bo80b2o48bo$487bo134bobo45b2obo202b2o$488b3o131bo46bo2bo194b2o7b2o$392b2o96bo130b2o47b2o196bo$392bo262b2o211bobo$390bobo262b2o212b2o$390b2o13b2o$405b2o$632b2o$480b2o150b2o8b2o3bo241b2o$369b2o40b2o67bo161bo3bobo240b2o$369b2o40b2o65bobo162bo3bobo$407b2o69b2o164bo3bobob2o$407b2o65bo167bob4o2bob2o$473bobo165bobo3bobo$473bobo165bobo2bo2b2ob2o220bo$474bo167bo3b2o2bobo220bobo$412b2o236bobo10b2o208bobo$412b2o72b2o163bo11b2o209bo$486bo384b3o$484bobo384bo$484b2o2$388b2o$387bo2bo2b2o68b2o$379b2o7b2o2bobo69bo$379b2o9b2o72bobo$390bo74b2o$387b2obo2bo$387bob2obobo10b2o$391bobo11bo72b2obo$388b2o2bo13b3o69b2ob3o$386b3ob2o16bo75bo$385bo92b2ob3o$386b3ob2o87bobo$388bob2o87bobo$480bo$398b2o56b2o$398b2o7b2o46bo2bo2b2o$407bo48b2o2bobo13b2o$405bobo50b2o16bobo$405b2o51bo19bo$455b2obo2bo16b2o$455bob2obobo$459bobo$385b2o69b2o2bo$385b2o67b3ob2o$453bo$454b3ob2o$456bob2o$682b2o$401bo64b2o214bo$400bobo63b2o7b2o203bobo$400bobo72bo204b2o13b2o$401bo71bobo219b2o$402b3o20b2o46b2o$404bo20bo$427bo231b2o40b2o$407b2o14b5o231b2o40b2o$408bo13bo30b2o242b2o$408bobo12b3o27b2o242b2o$409b2o15bo$423b4o$418b2o3bo3b2o$418b2o4b3o2bo272b2o$426bob2o39bo232b2o$426bo41bobo$425b2o41bobo$469bo$470b3o$417b2o53bo205b2o$417bo259bo2bo2b2o$418b3o248b2o7b2o2bobo$420bo248b2o9b2o$680bo$677b2obo2bo$677bob2obobo10b2o$681bobo11bo$678b2o2bo13b3o$410b2o264b3ob2o16bo$410bo264bo$408bobo265b3ob2o$408b2o268bob2o$404bo$403bobo282b2o$403bobo282b2o7b2o$404bo292bo$695bobo$416b2o277b2o$416bo401b2o$414bobo400bobo$414b2o395b2o4bo$675b2o132bo2bo2b2ob4o$675b2o132b2obobobobo2bo$393b2o417bobobobo$394bo417bobob2o$394bobo416bo$395b2o$691bo134b2o$690bobo124b2o7bo$408b2obo278bobo124b2o5bobo$408b2ob3o277bo132b2o$414bo277b3o20b2o$408b2ob3o280bo20bo$409bobo305bo$409bobo285b2o14b5o$410bo287bo13bo$386b2o310bobo12b3o$385bo2bo2b2o306b2o15bo97b2o18b2o$386b2o2bobo13b2o305b4o98bo18bo$388b2o16bobo299b2o3bo3b2o93b3o21bo$388bo19bo299b2o4b3o2bo92bo2b3o14b5o$385b2obo2bo16b2o306bob2o94bo2bo13bo$385bob2obobo323bo96b2o2bobo12b3o$389bobo323b2o101b2o15bo$386b2o2bo308b2o131b4o$384b3ob2o309bo127b2o3bo3b2o$383bo313bobo7b2o118b2o4b3o2bo$384b3ob2o307b2o8bo127bob2o$386bob2o318b3o124bo$612b2o96bo123b2o$396b2o214bo$396b2o7b2o203bobo$405bo204b2o13b2o199b2o$403bobo219b2o199bo$403b2o422b3o$700b2o127bo$589b2o40b2o67bo$589b2o40b2o65bobo$383b2o242b2o69b2o$383b2o242b2o65bo38b2o$693bobo38bo$693bobo38bobo$694bo30bo9b2o$632b2o91b3o$399bo232b2o72b2o20bo$398bobo305bo20b2o24b2o$398bobo303bobo46bo$399bo304b2o45bobo$400b3o348b2o10bo$402bo205b2o153b3o$607bo2bo2b2o68b2o81bo$599b2o7b2o2bobo69bo80b2o$599b2o9b2o72bobo93b2o$610bo74b2o93bo$607b2obo2bo163b2obo$607bob2obobo10b2o149bo2bo$611bobo11bo72b2obo75b2o$608b2o2bo13b3o69b2ob3o58b2o$606b3ob2o16bo75bo57b2o$605bo92b2ob3o$606b3ob2o87bobo34b2o$608bob2o87bobo33bobo4b2o$700bo34bo6bo6b2o3bo$618b2o56b2o56b2o7b3o3bo3bobo$618b2o7b2o46bo2bo2b2o62bo4bo3bobo$627bo48b2o2bobo13b2o53bo3bobob2o$625bobo50b2o16bobo50bob4o2bob2o$625b2o51bo19bo49bobo3bobo$675b2obo2bo16b2o48bobo2bo2b2ob2o$675bob2obobo66bo3b2o2bobo$679bobo75bobo10b2o$605b2o69b2o2bo77bo11b2o$605b2o67b3ob2o$673bo$674b3ob2o$676bob2o2$621bo64b2o$620bobo63b2o7b2o$620bobo72bo$621bo71bobo$622b3o20b2o46b2o$624bo20bo$647bo$627b2o14b5o$628bo13bo30b2o$628bobo12b3o27b2o$629b2o15bo$643b4o$638b2o3bo3b2o$638b2o4b3o2bo$646bob2o39bo$646bo41bobo87b2o$645b2o41bobo87bo$629b2o58bo86bobo$629bo60b3o83b2o13b2o$627bobo7b2o53bo98b2o$627b2o8bo$638b3o$542b2o96bo114b2o40b2o$542bo212b2o40b2o$540bobo250b2o$540b2o13b2o236b2o$555b2o2$630b2o$519b2o40b2o67bo167b2o$519b2o40b2o65bobo167b2o$557b2o69b2o$557b2o65bo$623bobo$623bobo$624bo149b2o$562b2o209bo2bo2b2o$562b2o72b2o127b2o7b2o2bobo$636bo128b2o9b2o$634bobo139bo$634b2o137b2obo2bo$773bob2obobo10b2o$538b2o237bobo11bo$537bo2bo2b2o68b2o159b2o2bo13b3o$529b2o7b2o2bobo69bo157b3ob2o16bo$529b2o9b2o72bobo154bo$540bo74b2o155b3ob2o$537b2obo2bo230bob2o$537bob2obobo10b2o$541bobo11bo72b2obo152b2o$538b2o2bo13b3o69b2ob3o150b2o7b2o$536b3ob2o16bo75bo158bo$535bo92b2ob3o157bobo$536b3ob2o87bobo159b2o$538bob2o87bobo$630bo$548b2o56b2o$548b2o7b2o46bo2bo2b2o158b2o$557bo48b2o2bobo13b2o143b2o$555bobo50b2o16bobo$555b2o51bo19bo$605b2obo2bo16b2o$605bob2obobo$609bobo175bo$535b2o69b2o2bo175bobo$535b2o67b3ob2o176bobo$603bo183bo$604b3ob2o178b3o20b2o$606bob2o180bo20bo$813bo$551bo64b2o175b2o14b5o$550bobo63b2o7b2o167bo13bo$550bobo72bo168bobo12b3o$551bo71bobo169b2o15bo$552b3o20b2o46b2o184b4o$554bo20bo228b2o3bo3b2o$577bo226b2o4b3o2bo$557b2o14b5o234bob2o$558bo13bo30b2o207bo$558bobo12b3o27b2o206b2o$559b2o15bo218b2o$573b4o218bo$568b2o3bo3b2o214bobo7b2o$568b2o4b3o2bo213b2o8bo$576bob2o39bo184b3o$576bo41bobo87b2o96bo$575b2o41bobo87bo$619bo86bobo$620b3o83b2o13b2o$567b2o53bo98b2o$567bo$568b3o225b2o$570bo114b2o40b2o67bo$685b2o40b2o65bobo$723b2o69b2o$723b2o65bo$789bobo$789bobo$560b2o228bo$560bo167b2o$558bobo167b2o72b2o$558b2o242bo$554bo245bobo$553bobo244b2o$553bobo$554bo149b2o$703bo2bo2b2o68b2o$566b2o127b2o7b2o2bobo69bo$566bo128b2o9b2o72bobo$564bobo139bo74b2o$564b2o137b2obo2bo$703bob2obobo10b2o$707bobo11bo72b2obo$543b2o159b2o2bo13b3o69b2ob3o$544bo157b3ob2o16bo75bo$544bobo154bo92b2ob3o$545b2o155b3ob2o87bobo$704bob2o87bobo$796bo$558b2obo152b2o56b2o$558b2ob3o150b2o7b2o46bo2bo2b2o$564bo158bo48b2o2bobo13b2o$558b2ob3o157bobo50b2o16bobo$559bobo159b2o51bo19bo$559bobo209b2obo2bo16b2o$560bo210bob2obobo$536b2o237bobo$535bo2bo2b2o158b2o69b2o2bo$536b2o2bobo13b2o143b2o67b3ob2o$538b2o16bobo210bo$538bo19bo211b3ob2o$535b2obo2bo16b2o212bob2o$535bob2obobo$539bobo175bo64b2o$536b2o2bo175bobo63b2o7b2o$534b3ob2o176bobo72bo$533bo183bo71bobo$534b3ob2o178b3o20b2o46b2o$536bob2o180bo20bo$743bo$546b2o175b2o14b5o$546b2o7b2o167bo13bo30b2o$555bo168bobo12b3o27b2o$553bobo169b2o15bo$553b2o184b4o$734b2o3bo3b2o$734b2o4b3o2bo$742bob2o39bo$533b2o207bo41bobo$533b2o206b2o41bobo$725b2o58bo$725bo60b3o$723bobo7b2o53bo$723b2o8bo$549bo184b3o$548bobo87b2o96bo$548bobo87bo$549bo86bobo$550b3o83b2o13b2o$552bo98b2o2$726b2o$615b2o40b2o67bo$615b2o40b2o65bobo$653b2o69b2o$653b2o65bo$719bobo$719bobo$720bo$658b2o$658b2o72b2o$732bo$730bobo$730b2o2$634b2o$633bo2bo2b2o68b2o$625b2o7b2o2bobo69bo$625b2o9b2o72bobo$636bo74b2o$633b2obo2bo$633bob2obobo10b2o$637bobo11bo72b2obo$634b2o2bo13b3o69b2ob3o$632b3ob2o16bo75bo$631bo92b2ob3o$632b3ob2o87bobo$634bob2o87bobo$726bo$644b2o56b2o$644b2o7b2o46bo2bo2b2o$653bo48b2o2bobo13b2o$651bobo50b2o16bobo$651b2o51bo19bo$701b2obo2bo16b2o$701bob2obobo$705bobo$631b2o69b2o2bo$631b2o67b3ob2o$699bo$700b3ob2o$702bob2o2$647bo64b2o$646bobo63b2o7b2o$646bobo72bo$647bo71bobo$648b3o20b2o46b2o$650bo20bo$673bo$653b2o14b5o$654bo13bo30b2o$654bobo12b3o27b2o$655b2o15bo$669b4o$664b2o3bo3b2o$664b2o4b3o2bo$672bob2o39bo$672bo41bobo$671b2o41bobo$715bo$716b3o$663b2o53bo$663bo$664b3o$666bo6$656b2o$656bo$654bobo$654b2o$650bo$649bobo$649bobo$650bo2$662b2o$662bo$660bobo$660b2o3$639b2o$640bo$640bobo$641b2o3$654b2obo$654b2ob3o$660bo$654b2ob3o$655bobo$655bobo$656bo$632b2o$631bo2bo2b2o$632b2o2bobo13b2o$634b2o16bobo$634bo19bo$631b2obo2bo16b2o$631bob2obobo$635bobo$632b2o2bo$630b3ob2o$629bo$630b3ob2o$632bob2o2$642b2o$642b2o7b2o$651bo$649bobo$649b2o4$629b2o$629b2o5$645bo$644bobo$644bobo$645bo$646b3o$648bo!", -1950, -1510)
const_push_pull = g.parse("1370b2o$1371bo$1371bobo$1357b2o13b2o$1357b2o3$1351b2o40b2o$1351b2o40b2o$1355b2o$1355b2o4$1350b2o$1350b2o5$1374b2o$1369b2o2bo2bo$1369bobo2b2o7b2o$1372b2o9b2o$1373bo$1370bo2bob2o$1357b2o10bobob2obo$1358bo11bobo$1355b3o13bo2b2o$1355bo16b2ob3o$1378bo$1372b2ob3o$1372b2obo2$1364b2o$1355b2o7b2o$1356bo$1356bobo$1357b2o4$1377b2o$1377b2o5$1362bo$1361bobo$1361bobo$1362bo$1359b3o$1359bo117$1400b2o$1401bo$1401bobo$1387b2o13b2o$1387b2o3$1381b2o40b2o$1381b2o40b2o$1385b2o$1385b2o4$1380b2o$1380b2o5$1280b2o122b2o$1281bo117b2o2bo2bo$1281bobo115bobo2b2o7b2o$1267b2o13b2o118b2o9b2o$1267b2o134bo$1400bo2bob2o$1387b2o10bobob2obo$1261b2o40b2o83bo11bobo$1261b2o40b2o80b3o13bo2b2o$1265b2o118bo16b2ob3o$1265b2o141bo$1402b2ob3o$1402b2obo2$1260b2o132b2o$1260b2o123b2o7b2o$1386bo$1386bobo$1387b2o2$1284b2o$1279b2o2bo2bo$1279bobo2b2o7b2o112b2o$1282b2o9b2o112b2o$1283bo$1280bo2bob2o$1267b2o10bobob2obo$1268bo11bobo$1265b3o13bo2b2o106bo$1265bo16b2ob3o103bobo$1288bo102bobo56b2o$1282b2ob3o104bo58bo$1282b2obo103b3o59bobo$1389bo47b2o13b2o$1218b2o54b2o161b2o$1217bobo45b2o7b2o$1211b2o4bo48bo$1209bo2bo2b2ob4o44bobo162b2o40b2o$1209b2obobobobo2bo45b2o162b2o40b2o$1212bobobobo216b2o$1212bobob2o217b2o$1213bo$1287b2o$1226b2o59b2o$1217b2o7bo203b2o$1217b2o5bobo203b2o$1224b2o2$1272bo$1271bobo$1271bobo180b2o$1272bo176b2o2bo2bo$1269b3o177bobo2b2o7b2o$1214b2o53bo182b2o9b2o$1215bo237bo$1212b3o235bo2bob2o$1212bo224b2o10bobob2obo$1438bo11bobo$1435b3o13bo2b2o$1435bo16b2ob3o$1458bo$1452b2ob3o$1452b2obo2$1444b2o$1435b2o7b2o$1436bo$1436bobo$1437b2o4$1457b2o$1457b2o5$1442bo$1441bobo$1154b2o285bobo$1154bo287bo$1152bobo284b3o$1152b2o10bo274bo$1164b3o$1167bo$1166b2o$1131b2o48b2o$1131b2o48bo$1178b2obo$1177bo2bo$1178b2o$1163b2o$1163b2o$1134bo$1132b3o$1131bo$1130bobo17b2o3bo$1130bobo17bo3bobo$1131bo19bo3bobo$1152bo3bobob2o$1143b2o5bob4o2bob2o$1143bo6b2o3bobo$1144b3o6bobob2ob2o$1115b2o29bo3b3obo3bobo$1115b2o33bo2bo4bobo10b2o$1151b2o6bo11b2o3$1135b2o$1135bobo$1137bo8bo$1128b2o7b2o7b3o$1128b2o19bo$1148b2o$1118bob2o$1116b3ob2o$1115bo$1116b3ob2o$1118b2o2bo$1121bobo$1118b3obobo16bo$1117bo2bo2bo15b3o4b2o$1116bobobo17bo7bobo$1115bobo2b2o16b2o7b2o$1115bobobo2bobo34bo$1116b2ob2o2b2o32b3o$1156bo$1156b2o2$1117b2o431b2o$1118bo432bo$1118bobo430bobo$1119b2o416b2o13b2o$1537b2o3$1531b2o40b2o$1531b2o40b2o$1535b2o$1094b2o439b2o$1094bo$1092bobo$1092b2o10bo$1104b3o26b2o395b2o$1107bo25b2o395b2o$1106b2o$1071b2o48b2o$1071b2o48bo$1118b2obo$1117bo2bo309b2o122b2o$1118b2o311bo117b2o2bo2bo$1103b2o326bobo115bobo2b2o7b2o$1103b2o312b2o13b2o118b2o9b2o$1074bo342b2o134bo$1072b3o475bo2bob2o$1071bo465b2o10bobob2obo$1070bobo17b2o3bo315b2o40b2o83bo11bobo$1070bobo17bo3bobo314b2o40b2o80b3o13bo2b2o$1071bo19bo3bobo317b2o118bo16b2ob3o$1092bo3bobob2o313b2o141bo$1083b2o5bob4o2bob2o450b2ob3o$1083bo6b2o3bobo454b2obo$1084b3o6bobob2ob2o$1055b2o29bo3b3obo3bobo309b2o132b2o$1055b2o33bo2bo4bobo10b2o297b2o123b2o7b2o$1091b2o6bo11b2o423bo$1536bobo$1537b2o$1075b2o$1075bobo356b2o$1077bo8bo342b2o2bo2bo$1068b2o7b2o7b3o340bobo2b2o7b2o112b2o$1068b2o19bo342b2o9b2o112b2o$1088b2o343bo$1058bob2o368bo2bob2o$1056b3ob2o355b2o10bobob2obo$1055bo362bo11bobo$1056b3ob2o353b3o13bo2b2o106bo$1058b2o2bo352bo16b2ob3o103bobo$1061bobo374bo102bobo$1058b3obobo16bo350b2ob3o104bo$1057bo2bo2bo15b3o4b2o344b2obo103b3o$1056bobobo17bo7bobo450bo$1055bobo2b2o16b2o7b2o335b2o$1055bobobo2bobo34bo315b2o7b2o$1056b2ob2o2b2o32b3o316bo$1096bo319bobo$1096b2o319b2o2$1057b2o$1058bo$1058bobo376b2o$1059b2o376b2o5$1422bo$1421bobo$1034b2o385bobo$1034bo387bo$1032bobo384b3o$1032b2o10bo374bo$1044b3o26b2o$1047bo25b2o$1046b2o$1011b2o48b2o$1011b2o48bo$1058b2obo$1057bo2bo$1058b2o$1043b2o$1043b2o$1014bo323b2o$1012b3o322bobo$1011bo319b2o4bo$1010bobo17b2o3bo293bo2bo2b2ob4o$1010bobo17bo3bobo292b2obobobobo2bo$1011bo19bo3bobo294bobobobo$1032bo3bobob2o290bobob2o$1023b2o5bob4o2bob2o291bo$1023bo6b2o3bobo$1024b3o6bobob2ob2o304b2o$995b2o29bo3b3obo3bobo296b2o7bo$995b2o33bo2bo4bobo10b2o284b2o5bobo$1031b2o6bo11b2o291b2o3$1015b2o$1015bobo$1017bo8bo$1008b2o7b2o7b3o$1008b2o19bo304b2o$1028b2o305bo$998bob2o330b3o$996b3ob2o330bo$995bo$996b3ob2o$998b2o2bo$1001bobo$998b3obobo16bo$997bo2bo2bo15b3o4b2o$996bobobo17bo7bobo$995bobo2b2o16b2o7b2o$995bobobo2bobo34bo$996b2ob2o2b2o32b3o$1036bo$1036b2o2$997b2o$998bo$998bobo$999b2o7$974b2o298b2o$974bo299bo$972bobo297bobo$972b2o10bo287b2o10bo$984b3o26b2o269b3o$987bo25b2o272bo$986b2o298b2o$951b2o48b2o248b2o48b2o$951b2o48bo249b2o48bo$998b2obo296b2obo$997bo2bo296bo2bo$998b2o298b2o$983b2o298b2o$983b2o298b2o$954bo299bo$952b3o297b3o$951bo299bo$950bobo17b2o3bo274bobo17b2o3bo$950bobo17bo3bobo273bobo17bo3bobo$951bo19bo3bobo273bo19bo3bobo$972bo3bobob2o290bo3bobob2o$963b2o5bob4o2bob2o281b2o5bob4o2bob2o$963bo6b2o3bobo285bo6b2o3bobo$964b3o6bobob2ob2o282b3o6bobob2ob2o$935b2o29bo3b3obo3bobo254b2o29bo3b3obo3bobo$935b2o33bo2bo4bobo10b2o242b2o33bo2bo4bobo10b2o$971b2o6bo11b2o278b2o6bo11b2o3$955b2o298b2o$955bobo297bobo$957bo8bo290bo8bo$948b2o7b2o7b3o279b2o7b2o7b3o$948b2o19bo278b2o19bo$968b2o298b2o$938bob2o296bob2o$936b3ob2o294b3ob2o$935bo299bo$936b3ob2o294b3ob2o$938b2o2bo295b2o2bo$941bobo297bobo$938b3obobo16bo276b3obobo16bo$937bo2bo2bo15b3o4b2o269bo2bo2bo15b3o4b2o$936bobobo17bo7bobo267bobobo17bo7bobo$935bobo2b2o16b2o7b2o266bobo2b2o16b2o7b2o$935bobobo2bobo34bo255bobobo2bobo34bo$936b2ob2o2b2o32b3o256b2ob2o2b2o32b3o$976bo299bo$976b2o298b2o2$937b2o298b2o$938bo299bo$938bobo297bobo$939b2o298b2o7$914b2o298b2o$914bo299bo$912bobo297bobo$912b2o10bo287b2o10bo$924b3o26b2o269b3o26b2o$927bo25b2o272bo25b2o$926b2o298b2o279b2o$891b2o48b2o248b2o48b2o264bo$891b2o48bo249b2o48bo267bo$938b2obo296b2obo247b2o14b5o$937bo2bo296bo2bo249bo13bo$938b2o298b2o250bobo12b3o$923b2o298b2o266b2o15bo$923b2o298b2o280b4o$894bo299bo305b2o3bo3b2o$892b3o297b3o305b2o4b3o2bo$891bo299bo316bob2o$890bobo17b2o3bo274bobo17b2o3bo292bo$890bobo17bo3bobo273bobo17bo3bobo290b2o$891bo19bo3bobo273bo19bo3bobo$912bo3bobob2o290bo3bobob2o$903b2o5bob4o2bob2o281b2o5bob4o2bob2o277b2o$903bo6b2o3bobo285bo6b2o3bobo281bo$904b3o6bobob2ob2o282b3o6bobob2ob2o278b3o$875b2o29bo3b3obo3bobo254b2o29bo3b3obo3bobo281bo$875b2o33bo2bo4bobo10b2o242b2o33bo2bo4bobo10b2o$911b2o6bo11b2o278b2o6bo11b2o3$895b2o298b2o$895bobo297bobo$897bo8bo290bo8bo$888b2o7b2o7b3o279b2o7b2o7b3o$888b2o19bo278b2o19bo$908b2o298b2o$878bob2o296bob2o$876b3ob2o294b3ob2o$875bo299bo$876b3ob2o294b3ob2o$878b2o2bo295b2o2bo$881bobo297bobo$878b3obobo16bo276b3obobo16bo$877bo2bo2bo15b3o4b2o269bo2bo2bo15b3o4b2o$876bobobo17bo7bobo267bobobo17bo7bobo$875bobo2b2o16b2o7b2o266bobo2b2o16b2o7b2o$875bobobo2bobo34bo255bobobo2bobo34bo$876b2ob2o2b2o32b3o256b2ob2o2b2o32b3o$916bo299bo$916b2o298b2o2$877b2o298b2o$878bo299bo$878bobo297bobo$879b2o298b2o7$854b2o298b2o$854bo299bo$852bobo297bobo$852b2o10bo287b2o10bo$864b3o26b2o269b3o26b2o$867bo25b2o272bo25b2o$866b2o298b2o339b2o$831b2o48b2o248b2o48b2o324bo$831b2o48bo249b2o48bo327bo$878b2obo296b2obo307b2o14b5o$877bo2bo296bo2bo309bo13bo$878b2o298b2o310bobo12b3o$863b2o298b2o326b2o15bo$863b2o298b2o340b4o$834bo299bo365b2o3bo3b2o$832b3o297b3o365b2o4b3o2bo$831bo299bo376bob2o$830bobo17b2o3bo274bobo17b2o3bo352bo$830bobo17bo3bobo273bobo17bo3bobo350b2o$831bo19bo3bobo273bo19bo3bobo$852bo3bobob2o290bo3bobob2o$843b2o5bob4o2bob2o281b2o5bob4o2bob2o337b2o$843bo6b2o3bobo285bo6b2o3bobo341bo$844b3o6bobob2ob2o282b3o6bobob2ob2o338b3o$815b2o29bo3b3obo3bobo254b2o29bo3b3obo3bobo341bo$815b2o33bo2bo4bobo10b2o242b2o33bo2bo4bobo10b2o$851b2o6bo11b2o278b2o6bo11b2o3$835b2o298b2o$835bobo297bobo$837bo8bo290bo8bo$828b2o7b2o7b3o279b2o7b2o7b3o$828b2o19bo278b2o19bo$848b2o298b2o$818bob2o296bob2o$816b3ob2o294b3ob2o$815bo299bo$816b3ob2o294b3ob2o$818b2o2bo295b2o2bo$821bobo297bobo$818b3obobo16bo276b3obobo16bo$817bo2bo2bo15b3o4b2o269bo2bo2bo15b3o4b2o$816bobobo17bo7bobo267bobobo17bo7bobo$815bobo2b2o16b2o7b2o266bobo2b2o16b2o7b2o$815bobobo2bobo34bo255bobobo2bobo34bo$816b2ob2o2b2o32b3o256b2ob2o2b2o32b3o$856bo299bo$856b2o298b2o2$817b2o298b2o$818bo299bo$818bobo297bobo$819b2o298b2o7$794b2o308bo$794bo309b3o$792bobo312bo$792b2o10bo301b2o$804b3o26b2o298b2o$807bo25b2o298b2o$806b2o290b2o$771b2o48b2o275bo$771b2o48bo273b2obo$818b2obo273bo2b3o4b2o$817bo2bo275b2o3bo3b2o$818b2o278b4o$803b2o293bo15b2o$803b2o294b3o12bobo$774bo327bo13bo$772b3o322b5o14b2o$771bo325bo$770bobo17b2o3bo303bo$770bobo17bo3bobo301b2o$771bo19bo3bobo$792bo3bobob2o$783b2o5bob4o2bob2o$783bo6b2o3bobo$784b3o6bobob2ob2o$755b2o29bo3b3obo3bobo$755b2o33bo2bo4bobo10b2o$791b2o6bo11b2o3$775b2o$775bobo$777bo8bo$768b2o7b2o7b3o$768b2o19bo$788b2o$758bob2o$756b3ob2o$755bo$756b3ob2o$758b2o2bo$761bobo$758b3obobo16bo$757bo2bo2bo15b3o4b2o$756bobobo17bo7bobo$755bobo2b2o16b2o7b2o$755bobobo2bobo34bo$756b2ob2o2b2o32b3o$796bo$796b2o2$757b2o400bo$758bo398b3o$758bobo395bo$759b2o395b2o3$1164b2o$1165bo$1165bob2o$1157b2o4b3o2bo$734b2o421b2o3bo3b2o$734bo427b4o$732bobo413b2o15bo$732b2o10bo402bobo12b3o$744b3o26b2o372bo13bo$747bo25b2o371b2o14b5o$746b2o418bo$711b2o48b2o401bo$711b2o48bo402b2o$758b2obo$757bo2bo$758b2o$743b2o$743b2o$714bo$712b3o$711bo$710bobo17b2o3bo$710bobo17bo3bobo$711bo19bo3bobo$732bo3bobob2o$723b2o5bob4o2bob2o$723bo6b2o3bobo$724b3o6bobob2ob2o$695b2o29bo3b3obo3bobo$695b2o33bo2bo4bobo10b2o$731b2o6bo11b2o355b2o$1108bo$1106bobo$715b2o389b2o10bo$715bobo400b3o26b2o$717bo8bo394bo25b2o$708b2o7b2o7b3o391b2o$708b2o19bo355b2o48b2o$728b2o355b2o48bo$698bob2o430b2obo$696b3ob2o429bo2bo$695bo436b2o$696b3ob2o415b2o$698b2o2bo414b2o$701bobo384bo$698b3obobo16bo364b3o$697bo2bo2bo15b3o4b2o357bo$696bobobo17bo7bobo355bobo17b2o3bo$695bobo2b2o16b2o7b2o355bobo17bo3bobo$695bobobo2bobo34bo345bo19bo3bobo$696b2ob2o2b2o32b3o366bo3bobob2o$736bo360b2o5bob4o2bob2o$736b2o359bo6b2o3bobo$1098b3o6bobob2ob2o$697b2o370b2o29bo3b3obo3bobo$698bo370b2o33bo2bo4bobo10b2o$698bobo404b2o6bo11b2o$699b2o2$1089b2o$1089bobo$1091bo8bo$1082b2o7b2o7b3o$1082b2o19bo$674b2o426b2o$674bo397bob2o$672bobo395b3ob2o$672b2o10bo384bo$684b3o26b2o355b3ob2o$687bo25b2o357b2o2bo$686b2o387bobo$651b2o48b2o369b3obobo16bo$651b2o48bo369bo2bo2bo15b3o4b2o$698b2obo368bobobo17bo7bobo$697bo2bo368bobo2b2o16b2o7b2o$698b2o369bobobo2bobo34bo$683b2o385b2ob2o2b2o32b3o$683b2o425bo$654bo455b2o$652b3o$651bo419b2o$650bobo17b2o3bo396bo$650bobo17bo3bobo395bobo$651bo19bo3bobo395b2o$672bo3bobob2o$663b2o5bob4o2bob2o$663bo6b2o3bobo$664b3o6bobob2ob2o$635b2o29bo3b3obo3bobo$635b2o33bo2bo4bobo10b2o$671b2o6bo11b2o365bo$1058b3o$1061bo$655b2o403b2o$655bobo429b2o$657bo8bo420b2o$648b2o7b2o7b3o383b2o$648b2o19bo382bo$668b2o379b2obo$638bob2o407bo2b3o4b2o$636b3ob2o408b2o3bo3b2o$635bo416b4o$636b3ob2o410bo15b2o$638b2o2bo410b3o12bobo$641bobo412bo13bo$638b3obobo16bo389b5o14b2o$637bo2bo2bo15b3o4b2o383bo$636bobobo17bo7bobo384bo$635bobo2b2o16b2o7b2o383b2o$635bobobo2bobo34bo$636b2ob2o2b2o32b3o$676bo$676b2o2$637b2o$638bo$638bobo$639b2o7$614b2o$614bo$612bobo$612b2o10bo$624b3o26b2o$627bo25b2o$626b2o$591b2o48b2o$591b2o48bo$638b2obo$637bo2bo$638b2o$623b2o$623b2o$594bo$592b3o$591bo521bo$590bobo17b2o3bo495b3o$590bobo17bo3bobo493bo$591bo19bo3bobo492b2o$612bo3bobob2o$603b2o5bob4o2bob2o$603bo6b2o3bobo500b2o$604b3o6bobob2ob2o497bo$575b2o29bo3b3obo3bobo498bob2o$575b2o33bo2bo4bobo10b2o478b2o4b3o2bo$611b2o6bo11b2o478b2o3bo3b2o$1116b4o$1102b2o15bo$595b2o504bobo12b3o$595bobo503bo13bo$597bo8bo493b2o14b5o$588b2o7b2o7b3o511bo$588b2o19bo508bo$608b2o508b2o$578bob2o$576b3ob2o$575bo$576b3ob2o$578b2o2bo$581bobo$578b3obobo16bo$577bo2bo2bo15b3o4b2o$576bobobo17bo7bobo$575bobo2b2o16b2o7b2o$575bobobo2bobo34bo$576b2ob2o2b2o32b3o$616bo$616b2o2$577b2o$578bo$578bobo481b2o$579b2o481bo$1060bobo$1060b2o10bo$1072b3o26b2o$1075bo25b2o$1074b2o$1039b2o48b2o$554b2o483b2o48bo$554bo531b2obo$552bobo530bo2bo$552b2o10bo521b2o$564b3o26b2o476b2o$567bo25b2o476b2o$566b2o474bo$531b2o48b2o457b3o$531b2o48bo457bo$578b2obo456bobo17b2o3bo$577bo2bo457bobo17bo3bobo$578b2o459bo19bo3bobo$563b2o495bo3bobob2o$563b2o486b2o5bob4o2bob2o$534bo516bo6b2o3bobo$532b3o517b3o6bobob2ob2o$531bo491b2o29bo3b3obo3bobo$530bobo17b2o3bo467b2o33bo2bo4bobo10b2o$530bobo17bo3bobo502b2o6bo11b2o$531bo19bo3bobo$552bo3bobob2o$543b2o5bob4o2bob2o481b2o$543bo6b2o3bobo485bobo$544b3o6bobob2ob2o483bo8bo$515b2o29bo3b3obo3bobo475b2o7b2o7b3o$515b2o33bo2bo4bobo10b2o463b2o19bo$551b2o6bo11b2o483b2o$1026bob2o$1024b3ob2o$535b2o486bo$535bobo486b3ob2o$537bo8bo479b2o2bo$528b2o7b2o7b3o480bobo$528b2o19bo476b3obobo16bo$548b2o475bo2bo2bo15b3o4b2o$518bob2o502bobobo17bo7bobo$516b3ob2o501bobo2b2o16b2o7b2o$515bo507bobobo2bobo34bo$516b3ob2o502b2ob2o2b2o32b3o$518b2o2bo541bo$521bobo540b2o$518b3obobo16bo$517bo2bo2bo15b3o4b2o477b2o$516bobobo17bo7bobo477bo$515bobo2b2o16b2o7b2o477bobo$515bobobo2bobo34bo467b2o$516b2ob2o2b2o32b3o$556bo$556b2o2$517b2o$518bo$518bobo481b2o$519b2o481bo$1000bobo$1000b2o10bo$1012b3o26b2o$1015bo25b2o$1014b2o$979b2o48b2o$494b2o483b2o48bo$494bo531b2obo$492bobo530bo2bo$492b2o10bo521b2o$504b3o26b2o476b2o$507bo25b2o476b2o$506b2o474bo$471b2o48b2o457b3o$471b2o48bo457bo$518b2obo456bobo17b2o3bo$517bo2bo457bobo17bo3bobo$518b2o459bo19bo3bobo$503b2o495bo3bobob2o$503b2o486b2o5bob4o2bob2o$474bo516bo6b2o3bobo$472b3o517b3o6bobob2ob2o$471bo491b2o29bo3b3obo3bobo$470bobo17b2o3bo467b2o33bo2bo4bobo10b2o$470bobo17bo3bobo502b2o6bo11b2o$471bo19bo3bobo$492bo3bobob2o$483b2o5bob4o2bob2o481b2o$483bo6b2o3bobo485bobo$484b3o6bobob2ob2o483bo8bo$455b2o29bo3b3obo3bobo475b2o7b2o7b3o$455b2o33bo2bo4bobo10b2o463b2o19bo$491b2o6bo11b2o483b2o$966bob2o$964b3ob2o$475b2o486bo$475bobo486b3ob2o$477bo8bo479b2o2bo$468b2o7b2o7b3o480bobo$468b2o19bo476b3obobo16bo$488b2o475bo2bo2bo15b3o4b2o$458bob2o502bobobo17bo7bobo$456b3ob2o501bobo2b2o16b2o7b2o$455bo507bobobo2bobo34bo$456b3ob2o502b2ob2o2b2o32b3o$458b2o2bo541bo$461bobo540b2o$458b3obobo16bo$457bo2bo2bo15b3o4b2o477b2o$456bobobo17bo7bobo477bo$455bobo2b2o16b2o7b2o477bobo$455bobobo2bobo34bo467b2o$456b2ob2o2b2o32b3o$496bo$496b2o2$457b2o$458bo$458bobo481b2o$459b2o481bo$940bobo$940b2o10bo$952b3o26b2o$955bo25b2o$954b2o$919b2o48b2o$434b2o483b2o48bo$434bo531b2obo$432bobo530bo2bo$432b2o10bo521b2o$444b3o26b2o476b2o$447bo25b2o476b2o$446b2o474bo$411b2o48b2o457b3o$411b2o48bo457bo$458b2obo456bobo17b2o3bo$457bo2bo457bobo17bo3bobo$458b2o459bo19bo3bobo$443b2o495bo3bobob2o$443b2o486b2o5bob4o2bob2o$414bo516bo6b2o3bobo$412b3o517b3o6bobob2ob2o$411bo491b2o29bo3b3obo3bobo$410bobo17b2o3bo467b2o33bo2bo4bobo10b2o$410bobo17bo3bobo502b2o6bo11b2o$411bo19bo3bobo$432bo3bobob2o$423b2o5bob4o2bob2o481b2o$423bo6b2o3bobo485bobo$424b3o6bobob2ob2o483bo8bo$395b2o29bo3b3obo3bobo475b2o7b2o7b3o$395b2o33bo2bo4bobo10b2o463b2o19bo$431b2o6bo11b2o483b2o$906bob2o$904b3ob2o$415b2o486bo$415bobo486b3ob2o$417bo8bo479b2o2bo$408b2o7b2o7b3o480bobo$408b2o19bo476b3obobo16bo$428b2o475bo2bo2bo15b3o4b2o$398bob2o502bobobo17bo7bobo$396b3ob2o501bobo2b2o16b2o7b2o$395bo507bobobo2bobo34bo$396b3ob2o502b2ob2o2b2o32b3o$398b2o2bo541bo$401bobo540b2o$398b3obobo16bo$397bo2bo2bo15b3o4b2o477b2o$396bobobo17bo7bobo477bo$395bobo2b2o16b2o7b2o477bobo$395bobobo2bobo34bo467b2o$396b2ob2o2b2o32b3o$436bo$436b2o2$397b2o$398bo$398bobo481b2o$399b2o481bo$880bobo$880b2o10bo$892b3o26b2o$895bo25b2o$894b2o$859b2o48b2o$374b2o483b2o48bo$374bo531b2obo$372bobo530bo2bo$372b2o10bo521b2o$384b3o26b2o476b2o$387bo25b2o476b2o$386b2o474bo$351b2o48b2o457b3o$351b2o48bo457bo$398b2obo456bobo17b2o3bo$397bo2bo457bobo17bo3bobo$398b2o459bo19bo3bobo$383b2o495bo3bobob2o$383b2o486b2o5bob4o2bob2o$354bo516bo6b2o3bobo$352b3o517b3o6bobob2ob2o$351bo491b2o29bo3b3obo3bobo$350bobo17b2o3bo467b2o33bo2bo4bobo10b2o$350bobo17bo3bobo502b2o6bo11b2o$351bo19bo3bobo$372bo3bobob2o$363b2o5bob4o2bob2o481b2o$363bo6b2o3bobo485bobo$364b3o6bobob2ob2o483bo8bo$335b2o29bo3b3obo3bobo475b2o7b2o7b3o$335b2o33bo2bo4bobo10b2o463b2o19bo$371b2o6bo11b2o483b2o$846bob2o$844b3ob2o$355b2o486bo$355bobo486b3ob2o$357bo8bo479b2o2bo$348b2o7b2o7b3o480bobo$348b2o19bo476b3obobo16bo$368b2o475bo2bo2bo15b3o4b2o$338bob2o502bobobo17bo7bobo$336b3ob2o501bobo2b2o16b2o7b2o$335bo507bobobo2bobo34bo$336b3ob2o502b2ob2o2b2o32b3o$338b2o2bo541bo$341bobo540b2o$338b3obobo16bo$337bo2bo2bo15b3o4b2o477b2o$336bobobo17bo7bobo477bo$335bobo2b2o16b2o7b2o477bobo$335bobobo2bobo34bo467b2o$336b2ob2o2b2o32b3o$376bo$376b2o2$337b2o$338bo$338bobo$339b2o3$861b2o$842b2o17b2o$843bo$840b3o$314b2o524bo$314bo$312bobo$312b2o10bo$324b3o26b2o$327bo25b2o$326b2o$291b2o48b2o$291b2o48bo$338b2obo$337bo2bo$338b2o$323b2o$323b2o$294bo$292b3o$291bo$290bobo17b2o3bo$290bobo17bo3bobo$291bo19bo3bobo$312bo3bobob2o$303b2o5bob4o2bob2o$303bo6b2o3bobo$304b3o6bobob2ob2o$275b2o29bo3b3obo3bobo$275b2o33bo2bo4bobo10b2o$311b2o6bo11b2o3$295b2o$295bobo$297bo8bo$288b2o7b2o7b3o$288b2o19bo$308b2o$278bob2o$276b3ob2o$275bo$276b3ob2o$278b2o2bo$281bobo$278b3obobo16bo$277bo2bo2bo15b3o4b2o$276bobobo17bo7bobo$275bobo2b2o16b2o7b2o$275bobobo2bobo34bo$276b2ob2o2b2o32b3o$316bo$316b2o2$277b2o$278bo$278bobo$279b2o7$264bo$264b3o$267bo$266b2o$293b2o$293b2o$258b2o$258bo$255b2obo$255bo2b3o4b2o$256b2o3bo3b2o$258b4o$258bo15b2o$259b3o12bobo$262bo13bo$257b5o14b2o$257bo$259bo$258b2o32$319bo$317b3o$316bo$316b2o3$324b2o$325bo$325bob2o$317b2o4b3o2bo$317b2o3bo3b2o$322b4o$308b2o15bo$307bobo12b3o$307bo13bo$306b2o14b5o$326bo$324bo$324b2o18$268b2o$268bo$266bobo$266b2o10bo$278b3o26b2o$281bo25b2o$280b2o$245b2o48b2o$245b2o48bo$292b2obo$291bo2bo$292b2o$277b2o$277b2o$248bo$246b3o$245bo$244bobo17b2o3bo$244bobo17bo3bobo$245bo19bo3bobo$266bo3bobob2o$257b2o5bob4o2bob2o$257bo6b2o3bobo$258b3o6bobob2ob2o$229b2o29bo3b3obo3bobo$229b2o33bo2bo4bobo10b2o$265b2o6bo11b2o3$249b2o$249bobo$251bo8bo$242b2o7b2o7b3o$242b2o19bo$262b2o$232bob2o$230b3ob2o$229bo$230b3ob2o$232b2o2bo$235bobo$232b3obobo16bo$231bo2bo2bo15b3o4b2o$230bobobo17bo7bobo$229bobo2b2o16b2o7b2o$229bobobo2bobo34bo$230b2ob2o2b2o32b3o$270bo$270b2o2$231b2o$232bo$232bobo$233b2o7$218bo$218b3o$221bo$220b2o$247b2o$247b2o$212b2o$212bo$209b2obo$209bo2b3o4b2o$210b2o3bo3b2o$212b4o$212bo15b2o$213b3o12bobo$216bo13bo$211b5o14b2o$211bo$213bo$212b2o32$273bo$271b3o$270bo$270b2o3$278b2o$279bo$279bob2o$271b2o4b3o2bo$271b2o3bo3b2o$276b4o$262b2o15bo$261bobo12b3o$261bo13bo$260b2o14b5o$280bo$278bo$278b2o18$222b2o$222bo$220bobo$220b2o10bo$232b3o26b2o$235bo25b2o$234b2o$199b2o48b2o$199b2o48bo$246b2obo$245bo2bo$246b2o$231b2o$231b2o$202bo$200b3o$199bo$198bobo17b2o3bo$198bobo17bo3bobo$199bo19bo3bobo$220bo3bobob2o$211b2o5bob4o2bob2o$211bo6b2o3bobo$212b3o6bobob2ob2o$183b2o29bo3b3obo3bobo$183b2o33bo2bo4bobo10b2o$219b2o6bo11b2o3$203b2o$203bobo$205bo8bo$196b2o7b2o7b3o$196b2o19bo$216b2o$186bob2o$184b3ob2o$183bo$184b3ob2o$186b2o2bo$189bobo$186b3obobo16bo$185bo2bo2bo15b3o4b2o$184bobobo17bo7bobo$183bobo2b2o16b2o7b2o$183bobobo2bobo34bo$184b2ob2o2b2o32b3o$224bo$224b2o2$185b2o$186bo$186bobo$187b2o7$162b2o$162bo$160bobo$160b2o10bo$172b3o26b2o$175bo25b2o$174b2o$139b2o48b2o$139b2o48bo$186b2obo$185bo2bo$186b2o$171b2o$171b2o$142bo$140b3o$139bo$138bobo17b2o3bo$138bobo17bo3bobo$139bo19bo3bobo$160bo3bobob2o$151b2o5bob4o2bob2o$151bo6b2o3bobo$152b3o6bobob2ob2o$123b2o29bo3b3obo3bobo$123b2o33bo2bo4bobo10b2o$159b2o6bo11b2o3$143b2o$143bobo$145bo8bo$136b2o7b2o7b3o$136b2o19bo$156b2o$126bob2o$124b3ob2o$123bo$124b3ob2o$126b2o2bo$129bobo$126b3obobo16bo$125bo2bo2bo15b3o4b2o$124bobobo17bo7bobo$123bobo2b2o16b2o7b2o$123bobobo2bobo34bo$124b2ob2o2b2o32b3o$164bo$164b2o2$125b2o$126bo$126bobo$127b2o7$102b2o$102bo$100bobo$100b2o10bo$112b3o26b2o$115bo25b2o$114b2o$79b2o48b2o$79b2o48bo$126b2obo$125bo2bo$126b2o$111b2o$111b2o$82bo$80b3o$79bo$78bobo17b2o3bo$78bobo17bo3bobo$79bo19bo3bobo$100bo3bobob2o$91b2o5bob4o2bob2o$91bo6b2o3bobo$92b3o6bobob2ob2o$63b2o29bo3b3obo3bobo$63b2o33bo2bo4bobo10b2o$99b2o6bo11b2o3$83b2o$83bobo$85bo8bo$76b2o7b2o7b3o$76b2o19bo$96b2o$66bob2o$64b3ob2o$63bo$64b3ob2o$66b2o2bo$69bobo$66b3obobo16bo$65bo2bo2bo15b3o4b2o$64bobobo17bo7bobo$63bobo2b2o16b2o7b2o$63bobobo2bobo34bo$64b2ob2o2b2o32b3o$104bo$104b2o2$65b2o$66bo$66bobo$67b2o7$42b2o$42bo$40bobo$40b2o10bo$52b3o26b2o$55bo25b2o$54b2o$19b2o48b2o$19b2o48bo$66b2obo$65bo2bo$66b2o$51b2o$51b2o$22bo$20b3o$19bo$18bobo17b2o3bo$18bobo17bo3bobo$19bo19bo3bobo$40bo3bobob2o$31b2o5bob4o2bob2o$31bo6b2o3bobo$32b3o6bobob2ob2o$3b2o29bo3b3obo3bobo$3b2o33bo2bo4bobo10b2o$39b2o6bo11b2o3$23b2o$23bobo$25bo8bo$16b2o7b2o7b3o$16b2o19bo$36b2o$6bob2o$4b3ob2o$3bo$4b3ob2o$6b2o2bo$9bobo$6b3obobo16bo$5bo2bo2bo15b3o4b2o$4bobobo17bo7bobo$3bobo2b2o16b2o7b2o$3bobobo2bobo34bo$4b2ob2o2b2o32b3o$44bo$44b2o2$5b2o$6bo$6bobo$7b2o11$21b2o$2b2o17b2o$3bo$3o$o!", -2523, -535)
ini_glider = g.parse("bo$2bo$3o!", -2222, 682)
movable_SL_creator_top = g.parse("10$218b2o$217bobo$211b2o4bo$209bo2bo2b2ob4o$209b2obobobobo2bo$212bobobobo$212bobob2o$213bo2$226b2o$217b2o7bo$199bo17b2o5bobo$199b3o22b2o$202bo$201b2o3$193b2o$193bo$148bo11b2o28b2obo20b2o$147bobo10b2o28bo2b3o4b2o13bo$139bo3b2o2bobo41b2o3bo3b2o10b3o$138bobo2bo2b2ob2o42b4o15bo$138bobo3bobo46bo15b2obo$125bo9bo3bob4o2bob2o43b3o12bobob2o$125b3o5b3o5bo3bobob2o46bo13bo2bo$128bo3bo7bo3bobo45b5o14b2o$127b2o3b2o5bo3bobo46bo$139b2o3bo49bo$193b2o$114b2o$114b2o$152b2o$152b2o$167b2o$166bo2bo$167b2obo$170bo$170b2o$155b2o$156bo$153b3o$141b2o10bo$121bo6b2o11bobo$119b3o6b2o13bo$100bobobobo11bo24b2o$99bob2ob2obo10b2o$99bo3bo3bo$100b2obo3b2o$102bo$102bobo$103b2o22$260bo$260b3o$263bo$262bobo$262bobo$263bo$102bo11b2o$101bobo10b2o$93bo3b2o2bobo$84b2o6bobo2bo2b2ob2o$84b2o6bobo3bobo177b2o$93bob4o2bob2o173b2o$95bo3bobob2o$94bo3bobo$93bo3bobo$93b2o3bo159b2o$257bobo$257bo62bo$256b2o7b2o53b3o$106b2o157b2o56bo$106b2o214b2o10bo$121b2o150b2obo56bobo$120bo2bo149b2ob3o54bobo$121b2obo154bo31bo20b2ob3o$74b2o48bo148b2ob3o32b3o24bo$74b2o48b2o146bo2b2o37bo17b2ob3o6bo$109b2o160bobo39b2o17b2obo6b3o$110bo142bo16bobob2obo63bo$107b3o143b3o15bo2bob2o63b2o11bo$95b2o10bo148bo17bo41b2o36b3o$95bobo141bo15b2o16b2o40bo2bo38bo$97bo139b3o30bobo2b2o39b2o38b2o$97b2o137bo33b2o2bo2bo93b2o$236b2o37b2o94bo$368b2obo$367bo2bo$248b2o118b2o$248b2o103b2o$328b2o23b2o$329bo$326b3o$268b2o56bo$225b2o41b2o70b2o3bo$225bobo112bo3bobo$226bo114bo3bobo$269b2o71bo3bobob2o$269bo70bob4o2bob2o$256b2o12b3o66bobo3bobo$257bo14bo66bobo2bo2b2ob2o$254b3o83bo3b2o2bobo$254bo93bobo10b2o$349bo11b2o7$243b2o$54bo11b2o161bo13bobo$53bobo10b2o160bobo14bo$45bo3b2o2bobo173b2o14b2o$44bobo2bo2b2ob2o$44bobo3bobo$31bo9bo3bob4o2bob2o172b2o$31b3o5b3o5bo3bobob2o173bo$34bo3bo7bo3bobo174b3o$33b2o3b2o5bo3bobo175bo$45b2o3bo2$20b2o$20b2o$58b2o$58b2o$73b2o$72bo2bo$73b2obo$76bo$76b2o$61b2o$62bo$59b3o$47b2o10bo$27bo6b2o11bobo$25b3o6b2o13bo$6bobobobo11bo24b2o87bo$5bob2ob2obo10b2o112b3o$5bo3bo3bo127bo$6b2obo3b2o125bobo$8bo131bobo$8bobo130bo$9b2o198bo$209b3o$212bo$211b2o10bo$156b2o64bobo$156b2o64bobo$200bo20b2ob3o$200b3o24bo$203bo17b2ob3o6bo$136b2o64b2o17b2obo6b3o$135bobo92bo$135bo94b2o11bo$134b2o7b2o60b2o36b3o$143b2o59bo2bo38bo$205b2o38b2o$151b2obo105b2o$151b2ob3o103bo$157bo99b2obo$151b2ob3o99bo2bo$150bo2b2o102b2o$149bobo90b2o$131bo16bobob2obo61b2o23b2o$131b3o15bo2bob2o62bo$134bo17bo62b3o$117bo15b2o16b2o62bo$115b3o30bobo2b2o74b2o3bo$114bo33b2o2bo2bo73bo3bobo$114b2o37b2o75bo3bobo$231bo3bobob2o$229bob4o2bob2o$126b2o100bobo3bobo$126b2o100bobo2bo2b2ob2o$229bo3b2o2bobo$237bobo10b2o$238bo11b2o$146b2o$103b2o41b2o$103bobo$104bo$147b2o$147bo$134b2o12b3o$135bo14bo$132b3o$132bo52b2o$186bo$183b3o$183bo5$121b2o$107bo13bobo$106bobo14bo$107b2o14b2o3$107b2o$108bo$105b3o$105bo!", 770, -1490)
movable_SL_creator_top_snarks = g.parse("6$14b2o$13bobo$7b2o4bo$5bo2bo2b2ob4o$5b2obobobobo2bo$8bobobobo$8bobob2o$9bo2$22b2o$13b2o7bo$13b2o5bobo$20b2o7$10b2o$11bo$8b3o$8bo90$123b2o$123bo$125bo$105b2o14b5o$106bo13bo$106bobo12b3o$107b2o15bo$121b4o$116b2o3bo3b2o$116b2o4b3o2bo$124bob2o$124bo$123b2o3$115b2o$115bo$116b3o$118bo!", 1180, -1450)
movable_arr_snark_delay = g.parse("$27bo$25b3o$24bo$24b2o3$32b2o$33bo$33bob2o$25b2o4b3o2bo$25b2o3bo3b2o$30b4o$16b2o15bo$15bobo12b3o$15bo13bo$14b2o14b5o$34bo$32bo$7bo24b2o$7b3o$10bo$9b2o7$19b2o$12b2o5bobo$12b2o7bo$21b2o2$8bo$7bobob2o$7bobobobo$4b2obobobobo2bo$4bo2bo2b2ob4o$6b2o4bo$12bobo$13b2o!", -110, 210)
movable_bottom_splitter = g.parse("4$8b2o$9bo$7bo$7b5o14b2o$12bo13bo$9b3o12bobo$8bo15b2o$8b4o$6b2o3bo3b2o$5bo2b3o4b2o$5b2obo$8bo$8b2o3$16b2o$17bo$14b3o$14bo332$384b2o$384bo$382bobo$382b2o$378bo$377bobo$377bobo$378bo2$390b2o$390bo$388bobo$388b2o3$367b2o$368bo$368bobo$369b2o3$382b2obo$382b2ob3o$388bo$382b2ob3o$383bobo$383bobo$384bo$360b2o$359bo2bo2b2o$360b2o2bobo13b2o$362b2o16bobo$362bo19bo$359b2obo2bo16b2o$359bob2obobo$363bobo$360b2o2bo$358b3ob2o$357bo$358b3ob2o$360bob2o2$370b2o$370b2o7b2o$379bo$377bobo$377b2o4$357b2o$357b2o5$373bo$372bobo$372bobo$373bo18bo$374b3o15b3o$376bo18bo$394b2o7$404b2o$397b2o5bobo$397b2o7bo$406b2o2$393bo$392bobob2o$392bobobobo$389b2obobobobo2bo$389bo2bo2b2ob4o$391b2o4bo$397bobo$398b2o!", -980, 130)
movable_push_pull = g.parse("124bo9bo$124b3o5b3o$127bo3bo$126b2o3b2o$121bo$121b3o$124bo$123b2o4$136b2o$136bobo$138bo$138b2o4$113b2o$112bo2bo2b2o$113b2o2bobo$115b2o16b2o$115bo17bo$112b2obo2bo15b3o$112bob2obobo16bo$116bobo$113b2o2bo$111b3ob2o$110bo$111b3ob2o$113bob2o2$123b2o$123b2o7b2o$132bo$130bobo$130b2o4$110b2o$110b2o5$126bo$125bobo$125bobo$126bo$14bo9bo102b3o$14b3o5b3o104bo$17bo3bo$16b2o3b2o$11bo$11b3o$14bo$13b2o4$26b2o$26bobo$28bo$28b2o4$3b2o$2bo2bo2b2o$3b2o2bobo$5b2o16b2o$5bo17bo$2b2obo2bo15b3o$2bob2obobo16bo$6bobo$3b2o2bo$b3ob2o$o$b3ob2o$3bob2o2$13b2o$13b2o7b2o$22bo$20bobo$20b2o4$2o$2o5$16bo$15bobo$15bobo$16bo$17b3o$19bo!", -1891, 773)
reflect_push_pull = g.parse("7$17b2o$10b2o5b2o$10b2o3$12b2o17b2o5bo$12b2o17bo6b3o$6b2o21bobo9bo$6b2o21b2o9b2o$55b2o$55bo$52b2obo$51bo2bo$52b2o$37b2o$37b2o4$24b2o3bo$3bo20bo3bobo$3b3o19bo3bobo$6bo19bo3bobob2o$5b2o17bob4o2bob2o$23bobo3bobo$23bobo2bo2b2ob2o$24bo3b2o2bobo$32bobo10b2o$33bo11b2o5$25b2o$25b2o9$10b2o$10b2o!", -660 - 600, 1870 - 600)
operation_block = g.parse("2o$2o!", -1692, -1541)
init_gliders = g.parse("22$100b3o$100bo$101bo305$69b2o$69bobo$69bo!", 70, 210)
d_reg = 100
d_app = 11
d_head = 40
d_Rule = 80
def place_delay_array(num_states, dist, delta_input_states, delta_output_states):
for i in range(num_states):
d = i * delta_input_states
d1 = i * delta_output_states
g.putcells(const_arr_delay, -dist - d, -dist + d)
g.putcells(movable_arr_snark_delay, -dist - d + d1, -dist + d + d1)
def place_interpreter(num_states, num_head, delta_top_unit, delta_top_delay, delta_bottom, operation_block_dist = 1000, dist = 0, delta_input_states = 80, delta_output_states = d_head):
dist += delta_output_states * num_states
g.show(str(dist))
delta_top_delay += d_head * (num_states - 2) + d_app * (num_head - 2)
#delta_bottom += 20 + d_head * (8 - num_states) - d_app * (8 - num_head)
delta_top_unit += num_states * delta_input_states + num_head * d_app - 357
delta_bottom += num_states * delta_input_states + num_head * d_app
place_delay_array(num_states, dist, delta_input_states, delta_output_states)
g.putcells(const_SL_delay_bottom, -dist, -dist)
g.putcells(const_SL_creator_top_snark, -dist, -dist)
g.putcells(const_SL_creator_top_snark, -dist, -dist)
g.putcells(const_bottom_SL, -dist, -dist)
g.putcells(const_operation_unit, -dist, -dist)
g.putcells(const_push_pull, -dist, -dist)
g.putcells(ini_glider, -dist, -dist)
g.putcells(movable_SL_creator_top, -dist + delta_top_unit, -dist - delta_top_unit)
g.putcells(movable_bottom_splitter, -dist - delta_bottom, -dist + delta_bottom)
g.putcells(movable_SL_creator_top_snarks, -dist + delta_top_unit + delta_top_delay, -dist - delta_top_unit - delta_top_delay)
g.putcells(operation_block, -dist -operation_block_dist, -dist - operation_block_dist)
return dist
def place_reg_array(num_regs):
g.putcells(res_snark)
for i in range(num_regs):
d = d_reg * i
g.putcells(reg, d, d)
g.putcells(res_dup, d, d)
def place_SL_rule_array(rule):
for i in range(len(rule)):
d = d_reg * i
g.putcells(res_dup, d - 82 - d_Rule * rule[i], d + 60 + d_Rule * rule[i])
def place_dup_array(num_head, num_tape):
d_init = d_app * num_head
dynamic_d = 0
for j in range(num_tape):
dy = d_head * j
#g.putcells(gld1, d_init + dy, -d_init - dy)
for i in range(num_head):
d = i * d_reg
if i == num_head - 1:
g.putcells(dup_eater, d - d_app * i + d_init + dynamic_d + dy, d + d_app * i - d_init + dynamic_d - dy)
else:
g.putcells(dup, d - d_app * i + d_init + dynamic_d + dy, d + d_app * i - d_init + dynamic_d - dy)
dynamic_d += num_head * d_reg
dy = d_head * (num_tape - 1)
#g.putcells(gld1, -3000 + d_init + dy, -3000 -d_init - dy)
d_init += d_head * num_tape + d_head * num_head + d_head
dynamic_d = 0
head_init = d_init
for i in range(num_tape):
for j in range(num_head):
dy = d_head * j
if j == 0:
g.putcells(gld1, d_init + dy, -d_init - dy)
if i == num_tape - 1:
g.putcells(dup_eater, - d_app * i + d_init + dynamic_d + dy, d_app * i - d_init + dynamic_d - dy)
else:
g.putcells(dup, - d_app * i + d_init + dynamic_d + dy, d_app * i - d_init + dynamic_d - dy)
dynamic_d += d_reg
d_init += d_head * num_head + d_head + d_app * num_tape * num_head
dynamic_d = 0
#g.putcells(gld1, -75 + d_init, -d_init)
g.putcells(res_ref, -75 + d_init - 10,-d_init - 10)
for i in range(num_head * num_tape):
if i == num_head * num_tape - 1:
g.putcells(dup_eater, -75 - d_app * i + d_init + dynamic_d, d_app * i - d_init + dynamic_d)
else:
g.putcells(dup, -75 - d_app * i + d_init + dynamic_d, d_app * i - d_init + dynamic_d)
dynamic_d += d_reg
return (d_init, head_init)
def place_state_rule_snarks(dx, head_h, num_head):
for i in range(num_head):
dy = i * d_Rule
d_snark = d_head * i
g.putcells(snark_head1, -dx - dy - d_snark - 80, dx + dy - d_snark + 25)
g.putcells(snark_head2, 2 * d_snark + head_h - num_head * d_head + 56 + 35, - head_h - 40 - 35 - num_head * d_head)
def place_head_rule(dx, rule):
num_regs = len(rule)
for i in range(num_regs):
d = d_reg * i
dy = rule[i] * d_Rule
g.putcells(res_dup, -dx + d - dy - 2 * d_app, dx - 2 * d_app + d + dy)
def place_rl_rule(dx, rule):
num_regs = len(rule)
for i in range(num_regs):
d = d_reg * i
dy = rule[i] * d_Rule
g.putcells(reflect_push_pull, -dx + d - dy, dx + d + dy)
def init_tape(dist, tape, delta, block_dist, ini_height, num_states):
ini_SL = g.parse("bo$obo$b2o!", -block_dist-1503+ini_height-142-40 * (num_states - 3), -block_dist-1724-ini_height+142+40 * (num_states - 3))
d = delta * 9
for i in range(len(tape)):
g.putcells(ini_SL, i * 9 -dist - d + tape[i] * d_head, i * 9 -dist - d - tape[i] * d_head)
def parse_turing_rule(rule_str):
lines = rule_str.split("\n")
dx = 50 - int(lines[1])
tape = [0 for i in range(100)]
init_tape = lines[0].split(" ")
for i in range(len(init_tape)):
try:
tape[dx + i] = int(init_tape[i])
except ValueError:
break
del lines[0]
del lines[0]
num_head = 1
num_states = 1
lines.sort()
while len(lines[0].split(" ")) < 5:
del lines[0]
for l in lines:
if len(l.split(" ")) < 5:
continue
state = int(l.split(" ")[0])
head = int(l.split(" ")[1])
if state + 1 > num_states:
num_states = state + 1
if head + 1 > num_head:
num_head = head + 1
if len(lines) < num_head * num_states:
g.exit("missing rule inputs")
rule_head = [0 for i in range(num_states*num_head)]
rule_state = [0 for i in range(num_states*num_head)]
rule_rl = [0 for i in range(num_states*num_head)]
for i in range(len(lines)):
l = lines[i].split(" ")
rule_state[i] = num_states - 1 -int(l[2])
rule_head[i] = num_head - 1 -int(l[3])
if "r" in l[4]:
rule_rl[i] = 0
else:
rule_rl[i] = 1
return (num_head, num_states, tape, rule_head, rule_state, rule_rl)
g.new("")
operation_block_dist = 1000
num_head, num_states, tape, rule_head, rule_state, rule_rl = parse_turing_rule(g.getclipstr())
#num_states = 18
#num_head = 7
#rule_head = [randint(0, num_head - 1) for i in range(num_states*num_head)]
#rule_state = [randint(0, num_states - 1) for i in range(num_states*num_head)]
#tape = [randint(0, num_states - 1) for i in range(100)]
#rule_rl = [randint(0, 1) for i in range(num_states*num_head)]
place_reg_array(num_states*num_head)
place_SL_rule_array(rule_state)
d, head_init = place_dup_array(num_head, num_states)
d1 = d_Rule * num_states + 200
if d1 > d:
d = d1
push_pull_d = d_Rule * num_head + d_Rule * num_states + d - 750
place_head_rule(d, rule_head)
place_state_rule_snarks(d, head_init, num_head)
place_rl_rule(push_pull_d, rule_rl)
dist = place_interpreter(num_states, num_head, 0, 0, 0, operation_block_dist, num_head * 50)
g.putcells(movable_push_pull, -dist - push_pull_d, -dist + push_pull_d)
delta = d_app * num_head + d_head * num_states
init_tape(dist, tape, 50, operation_block_dist, delta, num_states)
#g.putcells(init_gliders)
#g.putcells(reg)
#g.putcells(dup, 30, -30)
#g.putcells(dup, -75 + 150, -150)
#g.putcells(gld1, -75 + 150, -150)
#d = 100
#g.putcells(reg, d, d)
#g.putcells(dup, d - 11 + 30, d + 11 - 30)
#g.putcells(dup, d-75 + 150, d + 22 -150)
No Hult operation is introduced, as well as no "don't move" operation only left or right.