: delete-all-matching ( deque node -- dequeu node' ) dup next>> dup [ 2dup [ node-value ] bi@ [ max ] [ min ] 2bi 32 + = [ pick pick prev>> dup [ drop over next>> ] unless [ [ swap delete-node ] bi-curry@ bi ] 2dip delete-all-matching ] [ nip delete-all-matching ] if ] [ nip ] if ; : polymer-length ( str -- length ) [ push-all-back ] keep dup front>> delete-all-matching drop 0 swap [ drop 1 + ] slurp-deque ; : day5-1 ( -- count ) "/tmp/input" ascii file-lines first polymer-length ; : reject-polymer ( str n -- str' ) CHAR: A + dup 32 + [ [ = ] bi-curry@ bi or ] 2curry reject ; : day5-2 ( -- count ) "/tmp/input" ascii file-lines first 0 26 [a,b) [ reject-polymer polymer-length ] with map infimum ; day5-1 . day5-2 .