USING: accessors assocs columns io.encodings.ascii io.files kernel literals math.parser prettyprint sequences sequences.extras sets sets.extras splitting strings ; IN: aoc.2020.20 << : ?>string ( obj -- obj/str ) dup sequence? [ >string ] when ; : prune ( seq -- first last ) [ first ] [ last ] bi [ ?>string ] bi@ ; : (edges) ( seq -- newseq ) [ [ prune ] [ prune ] bi ] [ 4sequence ] bi ; : edge>id ( seq -- n ) { { CHAR: . CHAR: 0 } { CHAR: # CHAR: 1 } } substitute bin> ; : edges ( seq -- newseq ) (edges) dup [ reverse ] map append [ edge>id ] map ; TUPLE: tile data id edges ; C: tile >> CONSTANT: input $[ "input2.txt" ascii file-lines { "" } split [ unclip "Tile: " without dec> over edges ] map ] : part1 ( -- ) input [ edges>> ] map-concat non-repeating input [ edges>> intersect length 4 = ] with filter [ id>> ] map-product . ;