Paste: AOC day 3
Author: | chunes |
Mode: | factor |
Date: | Fri, 3 Dec 2021 07:06:15 |
Plain Text |
USING: io.encodings.ascii io.files kernel literals math
math.matrices math.parser math.statistics prettyprint sequences ;
CONSTANT: input $[ "input.txt" ascii file-lines ]
: 1|0 ( ? -- n ) CHAR: 1 CHAR: 0 ? ;
: part1 ( -- )
input flip [ mode ] map dup [ CHAR: 0 = 1|0 ] map
[ bin> ] bi@ * . ;
: s ( seq n -- count ) [ = ] curry count ;
: counts ( seq -- 1s 0s ) [ CHAR: 1 s ] [ CHAR: 0 s ] bi ;
: oxygen ( seq -- n ) counts >= 1|0 ;
: co2 ( seq -- n ) counts < 1|0 ;
: pare ( ... n seq quot: ( ... seq -- ... mode ) -- ... newseq )
[ 2dup col ] dip call swapd '[ _ swap nth _ = ] filter ;
inline
: rating ( ... seq quot: ( ... seq -- ... mode ) -- ... n )
0 -rot [ [ dup length 1 > ] ] dip
'[ dupd _ pare [ 1 + ] dip ] while nip first bin> ; inline
: part2 ( -- )
input [ oxygen ] rating input [ co2 ] rating * . ;
part1 part2
New Annotation