2024-03 in factor
This commit is contained in:
parent
798b759a9c
commit
e8941a3e0e
4 changed files with 103 additions and 2 deletions
|
@ -1,5 +1,5 @@
|
||||||
! Copyright (C) 2024 Julien (adyxax) Dessaux.
|
! Copyright (C) 2024 Julien (adyxax) Dessaux.
|
||||||
! See https://factorcode.org/license.txt for BSD license.
|
! See https://git.adyxax.org/adyxax/advent-of-code/tree/LICENSE for EUPL license.
|
||||||
USING: tools.test aoc.2024.02.private ;
|
USING: tools.test aoc.2024.02.private ;
|
||||||
IN: aoc.2024.02.tests
|
IN: aoc.2024.02.tests
|
||||||
|
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
! Copyright (C) 2024 Julien (adyxax) Dessaux.
|
! Copyright (C) 2024 Julien (adyxax) Dessaux.
|
||||||
! See https://factorcode.org/license.txt for BSD license.
|
! See https://git.adyxax.org/adyxax/advent-of-code/tree/LICENSE for EUPL license.
|
||||||
USING: combinators.short-circuit.smart grouping io io.encodings.utf8 io.files
|
USING: combinators.short-circuit.smart grouping io io.encodings.utf8 io.files
|
||||||
kernel math math.order math.parser prettyprint sequences splitting ;
|
kernel math math.order math.parser prettyprint sequences splitting ;
|
||||||
IN: aoc.2024.02
|
IN: aoc.2024.02
|
||||||
|
|
7
2024/03-Mull_It_Over/03-tests.factor
Normal file
7
2024/03-Mull_It_Over/03-tests.factor
Normal file
|
@ -0,0 +1,7 @@
|
||||||
|
! Copyright (C) 2024 Julien (adyxax) Dessaux.
|
||||||
|
! See https://git.adyxax.org/adyxax/advent-of-code/tree/LICENSE for EUPL license.
|
||||||
|
USING: tools.test aoc.2024.03.private ;
|
||||||
|
IN: aoc.2024.03.tests
|
||||||
|
|
||||||
|
{ 161 } [ "example" part1 ] unit-test
|
||||||
|
{ 48 } [ "example2" part2 ] unit-test
|
94
2024/03-Mull_It_Over/03.factor
Normal file
94
2024/03-Mull_It_Over/03.factor
Normal file
|
@ -0,0 +1,94 @@
|
||||||
|
! Copyright (C) 2024 Julien (adyxax) Dessaux.
|
||||||
|
! See https://git.adyxax.org/adyxax/advent-of-code/tree/LICENSE for EUPL license.
|
||||||
|
USING: accessors io.encodings.utf8 io.files kernel make math math.parser peg
|
||||||
|
peg.parsers prettyprint regexp sequences ;
|
||||||
|
IN: aoc.2024.03
|
||||||
|
|
||||||
|
<PRIVATE
|
||||||
|
|
||||||
|
: load_input ( filename -- string )
|
||||||
|
"~/git/adyxax/aoc/2024/03-Mull_It_Over/"
|
||||||
|
swap append utf8 file-contents ;
|
||||||
|
|
||||||
|
! ----- Let's do part1 with regexes --------------------------------------------
|
||||||
|
: get_muls ( string -- instructions )
|
||||||
|
R/ mul\(\d+,\d+\)/ all-matching-subseqs ;
|
||||||
|
|
||||||
|
: mul>result ( string -- n )
|
||||||
|
R/ \d+/ all-matching-subseqs
|
||||||
|
[ string>number ] map
|
||||||
|
product ;
|
||||||
|
|
||||||
|
: part1 ( filename -- n )
|
||||||
|
load_input
|
||||||
|
get_muls
|
||||||
|
[ mul>result ] map
|
||||||
|
sum ;
|
||||||
|
|
||||||
|
! ----- And part2 with a real parser -------------------------------------------
|
||||||
|
TUPLE: computer total multiplying? ;
|
||||||
|
|
||||||
|
GENERIC: compute ( computer item -- computer )
|
||||||
|
TUPLE: do ;
|
||||||
|
M: do compute
|
||||||
|
drop
|
||||||
|
t >>multiplying? ;
|
||||||
|
|
||||||
|
TUPLE: dont ;
|
||||||
|
M: dont compute
|
||||||
|
drop
|
||||||
|
f >>multiplying? ;
|
||||||
|
|
||||||
|
TUPLE: mul opX opY ;
|
||||||
|
M: mul compute
|
||||||
|
over multiplying?>>
|
||||||
|
[ [ opX>> ] [ opY>> ] bi *
|
||||||
|
over total>> + >>total ]
|
||||||
|
[ drop ]
|
||||||
|
if ;
|
||||||
|
|
||||||
|
TUPLE: nop ;
|
||||||
|
M: nop compute
|
||||||
|
drop ;
|
||||||
|
|
||||||
|
: parse_do ( -- parser )
|
||||||
|
"do()" token hide [ drop do boa ] action ;
|
||||||
|
|
||||||
|
: parse_dont ( -- parser )
|
||||||
|
"don't()" token hide [ drop dont boa ] action ;
|
||||||
|
|
||||||
|
: parse_mul ( -- parser )
|
||||||
|
[ "mul(" token hide ,
|
||||||
|
integer-parser ,
|
||||||
|
"," token hide ,
|
||||||
|
integer-parser ,
|
||||||
|
")" token hide ,
|
||||||
|
] seq*
|
||||||
|
[ first2 mul boa ] action ;
|
||||||
|
|
||||||
|
: parse_nop ( -- parser )
|
||||||
|
any-char hide [ drop nop boa ] action ;
|
||||||
|
|
||||||
|
PEG: parse_input ( string -- ast )
|
||||||
|
parse_do
|
||||||
|
parse_dont
|
||||||
|
parse_mul
|
||||||
|
parse_nop
|
||||||
|
4choice
|
||||||
|
repeat1 ;
|
||||||
|
|
||||||
|
: part2 ( filename -- n )
|
||||||
|
load_input
|
||||||
|
parse_input
|
||||||
|
0 t computer boa
|
||||||
|
swap
|
||||||
|
[ compute ] each
|
||||||
|
total>> ;
|
||||||
|
|
||||||
|
PRIVATE>
|
||||||
|
|
||||||
|
: aoc202403 ( -- )
|
||||||
|
"input" part1 .
|
||||||
|
"input" part2 . ;
|
||||||
|
|
||||||
|
MAIN: aoc202403
|
Loading…
Add table
Reference in a new issue