Paste: AoC day 13
Author: | Garklein |
Mode: | factor |
Date: | Tue, 13 Dec 2022 23:51:43 |
Plain Text |
USING: arrays classes combinators generalizations
io.encodings.utf8 io.files json.reader kernel math math.order
math.unicode prettyprint sequences sequences.extras sorting
splitting ;
IN: aoc.13
: input ( -- lines ) "~/factor/aoc/13/13.in" utf8 file-lines ;
: I ( -- pairs ) input { "" } split [ [ json> ] map ] map ;
: imp ( x y -- z ) [ [ +eq+ ≠ ] keep ] dip ? ;
: arrayify ( x -- x ) dup class-of fixnum = [ 1array ] when ;
: cmp ( x y -- z ) 2dup [ class-of ] bi@ 2array {
{ { fixnum fixnum } [ <=> ] }
{ { array array } [
[ 2dup min-length '[ _ head ] bi@ [ cmp ] 2map +eq+ [ imp ] reduce ]
[ [ length ] bi@ <=> ]
2bi imp ] }
[ drop [ arrayify ] bi@ cmp ]
} case ;
: part1 ( -- n ) I [ first2 cmp ] map +lt+ swap indices [ 1 + ] map-sum ;
CONSTANT: dividers { { { 2 } } { { 6 } } }
: part2 ( -- n ) I concat dividers append [ cmp ] sort '[ _ index ] dividers swap map [ 1 + ] map-product ;
: solve ( -- ) part1 . part2 . ;
Author: | Garklein |
Mode: | factor |
Date: | Wed, 14 Dec 2022 22:40:19 |
Plain Text |
USING: arrays classes combinators generalizations
io.encodings.utf8 io.files json.reader kernel math math.order
math.unicode prettyprint sequences sequences.extras sorting
splitting ;
IN: aoc.13
: input ( -- lines ) "~/factor/aoc/13/13.in" utf8 file-lines ;
: I ( -- pairs ) input { "" } split [ [ json> ] map ] map ;
: imp ( ord ord -- ord ) [ [ +eq+ ≠ ] keep ] dip ? ;
: arrayify ( x -- x ) dup number? [ 1array ] when ;
: cmp ( x y -- z ) 2dup [ class-of ] bi@ 2array {
{ { fixnum fixnum } [ <=> ] }
{ { array array } [
[ [ cmp ] 2map +eq+ [ imp ] reduce ]
[ [ length ] bi@ <=> ]
2bi imp ] }
[ drop [ arrayify ] bi@ cmp ]
} case ;
: part1 ( -- n ) I [ first2 cmp ] map +lt+ swap indices [ 1 + ] map-sum ;
CONSTANT: dividers { { { 2 } } { { 6 } } }
: part2 ( -- n ) I concat dividers append [ cmp ] sort '[ _ index ] dividers swap map [ 1 + ] map-product ;
: solve ( -- ) part1 . part2 . ;
New Annotation