#1#3#5#7#9#b#d#f; init ;a8+y00p>:00gg' -v v +1_:20p:1+*1-00g\-30p00g1+v 1 1 ^ +1_10p>:00g1-g'|-^ vp06:+g01p05:+g01p04:< 2 2v ; build lists ; p0a0p09+1p08:+1p07:+g01< 3 3>01p11p>01g:20g/+11g:20g/+30g+g:' -!v 4123456789abcde4 > ^ _v#p10:%g01+1g101g:20g/+11g:20g/+30g+g' -v >21g60g01g+p2 1g40g01g20g/+11gv ^!-gg00g12< 8 0 v># _v ^ p+*g02/g02< >1p51p^ 0 > 60g01g+g51g40 g01g20g/+11g20v >a0g+v 6 v< ^ ^g15g+g11g05g15< g ^ $p0a< p ;^;^_#;< |p15:%g01+1g15pg09g15!`0**g+*g02/< 1>:11p ^ > > 51g90ggv 1< 7^%g01 +1g<|p15:%g01+1g15_1+^ v < z>01p#^_11^>:!v 11< > ; long ; 2+71g\`!| '^:%g01+1g10<$_ ; -> process symbol list ; :1-| > ; copy ; 078v ; ^ ; <- go to next point ;p1< > ; append ; $61g67 v > ; -> finished scan ; 61g!v >ga1g^ v1pg0g19\g11:+1pg0g19\g10:g1bp1bp1ap19< ^ _'z71p1 v 1> ;>+b1p#;51g90ggv1p1b+1g1b < ^-2g17p160< b|p15:%g01+1g15 _51gb1g91g0gp^ > ; backtrack ;a0g!#@_0#@}kp^ ^< >51g70gg91p51g1+70gga1v |!-z'g17 ; do long list <- ; _ ; -> do 1 list ; >51g61g-|vg1ag05p1b:gg07+2g15p< ^ ; <- scan again ; <>+pb1g60g91g+pb1g40g9v > ; recurse! ; >01g40g11g+g01g40g11g+01g50g11g+v v9gg00g1bp+*g02/g02g1a+/g02g1< v11g06g10g+g11g06g10+g11g05g10g< >1g:20g/+a1g:20g/+30g+p51g3+5v |>g+01g:20g/+11g:20g/+30g+g01g:2v^ p163 ;*HAX*; p0a-1g0ap1< | p11:%g01+1g11] p10:%g01+1g10+g03+/g02:g11+/g0< >080gg91p180gga1p71g1-80gg:b1p0\50ga1g+p0b1g60g91g+p0b1g40g91g20g/+a1g20g/20g*v v0ap0a-1:g0a17p17:-1g17p+g03+/g02:g1a+/g02:g19gg00g1bp+< >61g80gg61g80g61g1+:61p71g-v ^ ^ _10g:*4*71g+1+0{{2u$$2-u} ; stuff! ; 00 = symbol list y loc ; 10 = symbol list length ; 20 = grid size (i.e. sqrt(10g)) ; 30 = puzzle top y loc ; 40 = y start of grid symbol lists ; 50 = y start of row symbol lists ; 60 = y start of column symbol lists ; 70 = 1-length list Y ; 80 = short list Y ; 90 = temp list Y (just possible-symbol list, 10g long) ; a0 = blank count ; *1 = temp ; main loop: ; - iterate over cells, making a list for each one (x, y, symbol #'s) ; - remember shortest list, and build long list of 1-length's ; - etc. ; - 01=x, 11=y ; - 21=grid Y, 31=row Y, 41=column Y ; - 51=symbol index ; - 61=end x of 1-list, 71=end x of short list, 81=end x of cur list (unused!) ; - copy/append code: 91g0g=y of list to store in, a1g1=where to store end of list, b1=current list end ; - do-1-list-code: 91=x of current sym, a1=y of current sym, b1=current sym ; recursive wibble: ; - copy contents of puzzle onto stack, along with grid/row/column lists and short list up to last-but-one element (+length!), and number of spaces left. copy as triplets, so kp can be used to write back to fungespace ; - write last element of short list ; - do funky stackstack creation, perserving old relocation offset ; puzzle go here: 7 1|43 | 5 5| |8 9 | 5 | 7 ---+---+--- 1 | 9| |183| |6 | 4 ---+---+--- 5 | 9 | 3 2| |5 8 | 74|1 2 123456789