@@ -70,52 +70,64 @@ const write = (value, mask) => {
70
70
return parseInt ( or , 2 ) ;
71
71
} ;
72
72
73
- const parseRow = ( { row, memory , currentMask } ) => {
73
+ const readRow = ( row ) => {
74
74
const [ , mask ] = row . match ( / m a s k = ( [ X 0 1 ] + ) / ) || [ ] ;
75
- const [ , mem , value ] = row . match ( / m e m \[ ( \d + ) \] = ( \d + ) / ) || [ ] ;
75
+ const [ , address , value ] = row . match ( / m e m \[ ( \d + ) \] = ( \d + ) / ) || [ ] ;
76
+ return { address, mask, value } ;
77
+ } ;
78
+
79
+ const writeRow = ( { row, memory, currentMask } ) => {
80
+ const { address, mask, value } = readRow ( row ) ;
76
81
if ( mask !== undefined ) {
77
82
currentMask = mask ;
78
83
}
79
- if ( mem !== undefined ) {
80
- memory [ mem ] = write ( value , currentMask ) ;
84
+ if ( address !== undefined ) {
85
+ memory [ address ] = write ( value , currentMask ) ;
81
86
}
82
87
83
88
return { memory, currentMask } ;
84
89
} ;
85
90
91
+ const writeAddresses = ( { row, memory, currentMask } ) => {
92
+ const { address, mask, value } = readRow ( row ) ;
93
+ if ( mask !== undefined ) {
94
+ currentMask = mask ;
95
+ }
96
+ if ( address ) {
97
+ const addresses = getAdresses ( address , currentMask ) ;
98
+ addresses . forEach ( ( address ) => {
99
+ memory [ address ] = value ;
100
+ } ) ;
101
+ }
102
+ return { memory, currentMask } ;
103
+ } ;
104
+
105
+ const summarizeMemory = ( { memory } ) =>
106
+ Object . values ( memory ) . reduce ( ( sum , value ) => {
107
+ sum += Number ( value ) ;
108
+ return sum ;
109
+ } , 0 ) ;
110
+
86
111
const util1 = ( input ) => {
87
112
const result = input . reduce (
88
113
( result , row ) => {
89
- const { memory, currentMask } = parseRow ( { row, ...result } ) ;
114
+ const { memory, currentMask } = writeRow ( { row, ...result } ) ;
90
115
return { memory, currentMask } ;
91
116
} ,
92
117
{ currentMask : '' , memory : { } } ,
93
118
) ;
94
- return Object . values ( result . memory ) . reduce ( ( sum , value ) => {
95
- sum += value ;
96
- return sum ;
97
- } , 0 ) ;
119
+ return summarizeMemory ( result ) ;
98
120
} ;
99
121
100
122
const util2 = ( input ) => {
101
- const result = input . reduce ( ( { memory, currentMask } , row ) => {
102
- const [ , mask ] = row . match ( / m a s k = ( [ X 0 1 ] + ) / ) || [ ] ;
103
- const [ , address , value ] = row . match ( / m e m \[ ( \d + ) \] = ( \d + ) / ) || [ ] ;
104
- if ( mask !== undefined ) {
105
- currentMask = mask ;
106
- }
107
- if ( address ) {
108
- const addresses = getAdresses ( address , currentMask ) ;
109
- addresses . forEach ( ( address ) => {
110
- memory [ address ] = value ;
111
- } ) ;
112
- }
113
- return { memory, currentMask } ;
114
- } , { memory : { } , currentMask : '' } ) ;
115
- return Object . values ( result . memory ) . reduce ( ( sum , value ) => {
116
- sum += Number ( value ) ;
117
- return sum ;
118
- } , 0 ) ;
123
+ const result = input . reduce (
124
+ ( result , row ) => {
125
+ const { memory, currentMask } = writeAddresses ( { row, ...result } ) ;
126
+ return { memory, currentMask } ;
127
+ } ,
128
+ { memory : { } , currentMask : '' } ,
129
+ ) ;
130
+ return summarizeMemory ( result ) ;
119
131
} ;
120
132
121
133
module . exports = { util1, util2, write, getAdresses } ;
0 commit comments