Skip to content

Commit c815704

Browse files
author
Hank
committed
Refactor and clean up
1 parent 83c9eed commit c815704

File tree

1 file changed

+39
-27
lines changed

1 file changed

+39
-27
lines changed

2020/14/utils.js

Lines changed: 39 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -70,52 +70,64 @@ const write = (value, mask) => {
7070
return parseInt(or, 2);
7171
};
7272

73-
const parseRow = ({ row, memory, currentMask }) => {
73+
const readRow = (row) => {
7474
const [, mask] = row.match(/mask = ([X01]+)/) || [];
75-
const [, mem, value] = row.match(/mem\[(\d+)\] = (\d+)/) || [];
75+
const [, address, value] = row.match(/mem\[(\d+)\] = (\d+)/) || [];
76+
return { address, mask, value };
77+
};
78+
79+
const writeRow = ({ row, memory, currentMask }) => {
80+
const { address, mask, value } = readRow(row);
7681
if (mask !== undefined) {
7782
currentMask = mask;
7883
}
79-
if (mem !== undefined) {
80-
memory[mem] = write(value, currentMask);
84+
if (address !== undefined) {
85+
memory[address] = write(value, currentMask);
8186
}
8287

8388
return { memory, currentMask };
8489
};
8590

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+
86111
const util1 = (input) => {
87112
const result = input.reduce(
88113
(result, row) => {
89-
const { memory, currentMask } = parseRow({ row, ...result });
114+
const { memory, currentMask } = writeRow({ row, ...result });
90115
return { memory, currentMask };
91116
},
92117
{ currentMask: '', memory: {} },
93118
);
94-
return Object.values(result.memory).reduce((sum, value) => {
95-
sum += value;
96-
return sum;
97-
}, 0);
119+
return summarizeMemory(result);
98120
};
99121

100122
const util2 = (input) => {
101-
const result = input.reduce(({ memory, currentMask }, row) => {
102-
const [, mask] = row.match(/mask = ([X01]+)/) || [];
103-
const [, address, value] = row.match(/mem\[(\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);
119131
};
120132

121133
module.exports = { util1, util2, write, getAdresses };

0 commit comments

Comments
 (0)
pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy