USING: arrays combinators io.encodings.ascii io.files kernel literals math math.functions math.order math.ranges math.statistics prettyprint sequences sets ; IN: aoc.2020.05 CONSTANT: input $[ "resource:work/aoc/2020/05/input.txt" ascii file-lines ] : front ( low high -- low' high' ) 2dup + 2/ nip ; : back ( low high -- low' high' ) 2dup + 2 / ceiling spin drop ; : partition ( low high ch -- low' high' ) { { CHAR: F [ front ] } { CHAR: B [ back ] } { CHAR: L [ front ] } [ drop back ] } case ; : row ( bsp-str -- row ) 0 127 rot 3 head* [ partition ] each drop ; : col ( bsp-str -- col ) 0 7 rot 3 tail* [ partition ] each drop ; : seat ( bsp-str -- row col ) [ row ] [ col ] bi ; : id ( row col -- id ) [ 8 * ] [ + ] bi* ; : part1 ( -- ) input [ seat id ] [ max ] map-reduce . ; : part2 ( -- ) input [ seat id ] map dup minmax [a,b] swap diff first . ;