11import { powerSet } from "combinatorial-generators" ;
22
3- function parse ( input ) {
4- return input . split ( "\n" ) . map ( line => {
5- let parts = line . replaceAll ( / [ [ \] ( ) { } ] / g, "" ) . split ( " " ) ;
6- let indicator = parts [ 0 ] . replace ( / ./ g, c => ( c === "#" ? 1 : 0 ) ) ;
7- let buttons = parts . slice ( 1 ) . map ( x => x . split ( "," ) . map ( Number ) ) ;
8- let jolts = parts . at ( - 1 ) . split ( "," ) . map ( Number ) ;
9- return { indicator, buttons, jolts } ;
10- } ) ;
11- }
12-
133function producePatterns ( buttons , length ) {
144 let patterns = { } ;
155 for ( let pressed of powerSet ( buttons ) ) {
@@ -21,14 +11,15 @@ function producePatterns(buttons, length) {
2111 return patterns ;
2212}
2313
24- export function part1 ( input ) {
25- let machines = parse ( input ) ;
26- let result = 0 ;
27- for ( let { indicator, buttons } of machines ) {
14+ function parse ( input ) {
15+ return input . split ( "\n" ) . map ( line => {
16+ let parts = line . replaceAll ( / [ [ \] ( ) { } ] / g, "" ) . split ( " " ) ;
17+ let indicator = parts [ 0 ] . replace ( / ./ g, c => ( c === "#" ? 1 : 0 ) ) ;
18+ let buttons = parts . slice ( 1 ) . map ( x => x . split ( "," ) . map ( Number ) ) ;
19+ let jolts = parts . at ( - 1 ) . split ( "," ) . map ( Number ) ;
2820 let patterns = producePatterns ( buttons , indicator . length ) ;
29- result += Math . min ( ...patterns [ indicator ] . map ( x => x . length ) ) ;
30- }
31- return result ;
21+ return { indicator, buttons, jolts, patterns } ;
22+ } ) ;
3223}
3324
3425function minimumPresses ( target , patterns ) {
@@ -47,12 +38,14 @@ function minimumPresses(target, patterns) {
4738 return Math . min ( ...totals ) ;
4839}
4940
41+ export function part1 ( input ) {
42+ return parse ( input ) . reduce ( ( sum , { indicator, patterns } ) => {
43+ return sum + Math . min ( ...patterns [ indicator ] . map ( x => x . length ) ) ;
44+ } , 0 ) ;
45+ }
46+
5047export function part2 ( input ) {
51- let machines = parse ( input ) ;
52- let result = 0 ;
53- for ( let { buttons, jolts } of machines ) {
54- let patterns = producePatterns ( buttons , jolts . length ) ;
55- result += minimumPresses ( jolts , patterns ) ;
56- }
57- return result ;
48+ return parse ( input ) . reduce ( ( sum , { jolts, patterns } ) => {
49+ return sum + minimumPresses ( jolts , patterns ) ;
50+ } , 0 ) ;
5851}
0 commit comments