: newrecipes ( seq -- recipes ) sum number>string [ digit> ] { } map-as ; : add-recipes ( recipes pos -- recipes' pos' ) 2dup swap [ nth ] curry map [ newrecipes swap [ append! ] dip ] [ { 1 1 } v+ v+ over length [ mod ] curry map ] bi ; :: aoc14-1 ( n -- tail ) V{ 3 7 } clone { 0 1 } [ over length n 10 + >= ] [ add-recipes ] until drop 10 tail* [ >digit ] "" map-as ; :: aoc14-2 ( str -- n ) str [ digit> ] { } map-as :> scores V{ 3 7 } clone { 0 1 } [ over [ scores tail? ] [ but-last-slice scores tail? ] bi or ] [ add-recipes ] until drop dup but-last-slice scores tail? [ but-last ] when length scores length - ;