Paste: AOC day 2 over-engineered
Author: | chunes |
Mode: | factor |
Date: | Wed, 2 Dec 2020 13:00:12 |
Plain Text |
USING: accessors classes.tuple combinators io.encodings.ascii
io.files kernel literals math math.order parser-combinators
parser-combinators.simple prettyprint sequences strings unicode ;
IN: aoc.2020.02
<<
ALIAS: int integer-parser
: range int "-" token <& int <&> ;
: char [ letter? ] satisfy ;
: password char <+> [ >string ] <@ ;
: `policy`
range " " token <& char <:&> ": " token <& password <:&> ;
TUPLE: policy low high char password ;
: <policy> `policy` parse-1 policy slots>tuple ;
>>
CONSTANT: input
$[
"resource:work/aoc/2020/02/input.txt" ascii file-lines
[ <policy> ] map
]
: valid1?
{
[ password>> ]
[ char>> [ = ] curry count ]
[ low>> ]
[ high>> between? ]
} cleave ;
: valid2?
{
[ low>> 1 - ]
[ password>> nth ]
[ char>> = ]
[ high>> 1 - ]
[ password>> nth ]
[ char>> = xor ]
} cleave ;
: part1 input [ valid1? ] count . ;
: part2 input [ valid2? ] count . ;
New Annotation