: neighbours ( pos -- neighbours ) 3 -1 1 [a,b] [ [ zero? ] all? ] reject [ v+ ] with map ; : step ( new pos old -- ) dupd [ [ neighbours ] dip [ in? ] curry count ] [ in? ] 2bi [ 2 3 between? [ 2drop ] [ swap delete ] if ] [ 3 = [ swap adjoin ] [ 2drop ] if ] if ; "/home/harperjon/Téléchargements/input17" ascii file-lines HS{ } clone [ [ [ [ rot ] dip swap CHAR: # = [ [ 0 3array ] dip adjoin ] [ 3drop ] if ] curry curry each-index ] curry each-index ] keep 6 [ dup members length . dup members dup [ neighbours ] map concat append members over [ clone [ step ] curry with each ] keep ] times members length . : neighbours2 ( pos -- neighbours ) 4 -1 1 [a,b] [ [ zero? ] all? ] reject [ v+ ] with map ; : step2 ( new pos old -- ) dupd [ [ neighbours2 ] dip [ in? ] curry count ] [ in? ] 2bi [ 2 3 between? [ 2drop ] [ swap delete ] if ] [ 3 = [ swap adjoin ] [ 2drop ] if ] if ; "/home/harperjon/Téléchargements/input17" ascii file-lines HS{ } clone [ [ [ [ rot ] dip swap CHAR: # = [ [ 0 0 4array ] dip adjoin ] [ 3drop ] if ] curry curry each-index ] curry each-index ] keep 6 [ dup members length . dup members dup [ neighbours2 ] map concat append members over [ clone [ step2 ] curry with each ] keep ] times members length .