1
+ /* eslint-disable */
1
2
const fs = require ( 'fs' ) ;
2
3
let path = require ( 'path' ) ;
3
4
@@ -35,7 +36,6 @@ const createGrid = (gridWidth, gridHeight) => {
35
36
return grid ;
36
37
} ;
37
38
38
-
39
39
const printGrid = ( grid ) => {
40
40
let string = '' ;
41
41
grid . forEach ( ( innerGrid ) => {
@@ -59,27 +59,36 @@ const plotStarsOnGrid = (stars) => {
59
59
}
60
60
} ;
61
61
62
- const calculateNextStarState = stars => stars . reduce ( ( res , [ x , y , dx , dy ] ) => {
63
- x += dx ;
64
- y += dy ;
65
- res . push ( [ x , y , dx , dy ] ) ;
66
- res . push ( [ x , y , dx , dy ] ) ;
67
- return res ;
68
- } , [ ] ) ;
69
-
62
+ const calculateNextStarState = ( stars ) =>
63
+ stars . reduce ( ( res , [ x , y , dx , dy ] ) => {
64
+ x += dx ;
65
+ y += dy ;
66
+ res . push ( [ x , y , dx , dy ] ) ;
67
+ res . push ( [ x , y , dx , dy ] ) ;
68
+ return res ;
69
+ } , [ ] ) ;
70
70
71
71
const findMessage = ( rows ) => {
72
72
let stars = rows . map ( ( row ) => {
73
73
/* eslint-disable-next-line max-len */
74
- const [ , x , y , dX , dY ] = row . match ( / p o s i t i o n = < \s ? ( - ? \d + ) , \s ? ( - ? \d + ) > v e l o c i t y = < \s ? ( - ? \d + ) , \s ? ( - ? \d + ) > / ) . map ( v => + v ) ;
74
+ const [ , x , y , dX , dY ] = row
75
+ . match (
76
+ / p o s i t i o n = < \s ? ( - ? \d + ) , \s ? ( - ? \d + ) > v e l o c i t y = < \s ? ( - ? \d + ) , \s ? ( - ? \d + ) > / ,
77
+ )
78
+ . map ( ( v ) => + v ) ;
75
79
return [ x , y , dX , dY ] ;
76
80
} ) ;
77
81
78
82
plotStarsOnGrid ( stars ) ;
79
83
80
84
let j = 0 ;
81
85
while ( j < maxSteps ) {
82
- let [ minPx , maxPx , minPy , maxPy ] = [ stars [ 0 ] [ 0 ] , stars [ 0 ] [ 0 ] , stars [ 0 ] [ 1 ] , stars [ 0 ] [ 1 ] ] ;
86
+ let [ minPx , maxPx , minPy , maxPy ] = [
87
+ stars [ 0 ] [ 0 ] ,
88
+ stars [ 0 ] [ 0 ] ,
89
+ stars [ 0 ] [ 1 ] ,
90
+ stars [ 0 ] [ 1 ] ,
91
+ ] ;
83
92
84
93
const drawn = new Set ( ) ;
85
94
stars . forEach ( ( [ x , y ] ) => {
@@ -103,81 +112,119 @@ const findMessage = (rows) => {
103
112
} ) ;
104
113
105
114
console . log ( minPx , maxPx , minPy , maxPy ) ;
106
- if ( ( maxPx - minPx < maxDistance ) && ( maxPy - minPy < maxDistance ) ) {
115
+ if ( maxPx - minPx < maxDistance && maxPy - minPy < maxDistance ) {
107
116
console . log ( j ) ;
108
117
plotStarsOnGrid ( stars ) ;
109
118
}
110
119
stars = calculateNextStarState ( stars ) ;
111
120
112
121
j += 1 ;
113
122
}
114
-
115
123
} ;
116
124
117
125
const findTheMessage = ( rows ) => {
118
126
const points = rows . map ( ( row ) => {
119
127
/* eslint-disable-next-line max-len */
120
- const [ , x , y , xVel , yVel ] = row . match ( / p o s i t i o n = < \s ? ( - ? \d + ) , \s ? ( - ? \d + ) > v e l o c i t y = < \s ? ( - ? \d + ) , \s ? ( - ? \d + ) > / ) . map ( v => + v ) ;
128
+ const [ , x , y , xVel , yVel ] = row
129
+ . match (
130
+ / p o s i t i o n = < \s ? ( - ? \d + ) , \s ? ( - ? \d + ) > v e l o c i t y = < \s ? ( - ? \d + ) , \s ? ( - ? \d + ) > / ,
131
+ )
132
+ . map ( ( v ) => + v ) ;
121
133
return { x, y, xVel, yVel } ;
122
134
} ) ;
123
135
124
136
let lastArea = Infinity ;
125
137
126
- let minX = Math . min . apply ( null , points . map ( p => p . x ) ) ;
127
- let maxX = Math . max . apply ( null , points . map ( p => p . x ) ) ;
128
- let minY = Math . min . apply ( null , points . map ( p => p . y ) ) ;
129
- let maxY = Math . max . apply ( null , points . map ( p => p . y ) ) ;
138
+ let minX = Math . min . apply (
139
+ null ,
140
+ points . map ( ( p ) => p . x ) ,
141
+ ) ;
142
+ let maxX = Math . max . apply (
143
+ null ,
144
+ points . map ( ( p ) => p . x ) ,
145
+ ) ;
146
+ let minY = Math . min . apply (
147
+ null ,
148
+ points . map ( ( p ) => p . y ) ,
149
+ ) ;
150
+ let maxY = Math . max . apply (
151
+ null ,
152
+ points . map ( ( p ) => p . y ) ,
153
+ ) ;
130
154
131
155
let currentArea = ( maxX - minX ) * ( maxY - minY ) ;
132
156
133
157
let time = - 1 ;
134
- while ( currentArea < lastArea ) {
158
+ while ( currentArea < lastArea ) {
135
159
lastArea = currentArea ;
136
160
137
161
time += 1 ;
138
- for ( let point of points ) {
162
+ for ( let point of points ) {
139
163
point . x += point . xVel ;
140
164
point . y += point . yVel ;
141
165
}
142
166
143
- minX = Math . min . apply ( null , points . map ( p => p . x ) ) ;
144
- maxX = Math . max . apply ( null , points . map ( p => p . x ) ) ;
145
- minY = Math . min . apply ( null , points . map ( p => p . y ) ) ;
146
- maxY = Math . max . apply ( null , points . map ( p => p . y ) ) ;
167
+ minX = Math . min . apply (
168
+ null ,
169
+ points . map ( ( p ) => p . x ) ,
170
+ ) ;
171
+ maxX = Math . max . apply (
172
+ null ,
173
+ points . map ( ( p ) => p . x ) ,
174
+ ) ;
175
+ minY = Math . min . apply (
176
+ null ,
177
+ points . map ( ( p ) => p . y ) ,
178
+ ) ;
179
+ maxY = Math . max . apply (
180
+ null ,
181
+ points . map ( ( p ) => p . y ) ,
182
+ ) ;
147
183
148
184
currentArea = ( maxX - minX ) * ( maxY - minY ) ;
149
185
}
150
186
151
- for ( let i = 0 ; i < 1 ; i ++ ) {
152
- for ( let point of points ) {
187
+ for ( let i = 0 ; i < 1 ; i ++ ) {
188
+ for ( let point of points ) {
153
189
point . x -= point . xVel ;
154
190
point . y -= point . yVel ;
155
191
}
156
192
}
157
193
158
- minX = Math . min . apply ( null , points . map ( p => p . x ) ) ;
159
- maxX = Math . max . apply ( null , points . map ( p => p . x ) ) ;
160
- minY = Math . min . apply ( null , points . map ( p => p . y ) ) ;
161
- maxY = Math . max . apply ( null , points . map ( p => p . y ) ) ;
194
+ minX = Math . min . apply (
195
+ null ,
196
+ points . map ( ( p ) => p . x ) ,
197
+ ) ;
198
+ maxX = Math . max . apply (
199
+ null ,
200
+ points . map ( ( p ) => p . x ) ,
201
+ ) ;
202
+ minY = Math . min . apply (
203
+ null ,
204
+ points . map ( ( p ) => p . y ) ,
205
+ ) ;
206
+ maxY = Math . max . apply (
207
+ null ,
208
+ points . map ( ( p ) => p . y ) ,
209
+ ) ;
162
210
163
211
let grid = [ ] ;
164
- for ( let x = 0 ; x <= maxX - minX ; x ++ ) {
212
+ for ( let x = 0 ; x <= maxX - minX ; x ++ ) {
165
213
grid . push ( [ ] ) ;
166
214
}
167
215
168
-
169
- for ( let point of points ) {
216
+ for ( let point of points ) {
170
217
grid [ point . x - minX ] [ point . y - minY ] = true ;
171
218
}
172
219
173
220
let letterMaps = [ ] ;
174
221
175
- for ( let i = 0 ; i < maxX - minX ; i += 8 ) {
222
+ for ( let i = 0 ; i < maxX - minX ; i += 8 ) {
176
223
let letterMap = [ ] ;
177
224
178
- for ( let y = 0 ; y <= maxY - minY ; y ++ ) {
225
+ for ( let y = 0 ; y <= maxY - minY ; y ++ ) {
179
226
letterMap . push ( [ ] ) ;
180
- for ( let x = 0 ; x < 6 ; x ++ ) {
227
+ for ( let x = 0 ; x < 6 ; x ++ ) {
181
228
letterMap [ y ] . push ( ! ! grid [ x + i ] [ y ] ) ;
182
229
}
183
230
}
@@ -189,10 +236,10 @@ const findTheMessage = (rows) => {
189
236
let letterLines = file . trim ( ) . split ( '\n' ) ;
190
237
191
238
let letterData = { } ;
192
- while ( letterLines . length ) {
239
+ while ( letterLines . length ) {
193
240
let char = letterLines . shift ( ) ;
194
241
let d = [ ] ;
195
- for ( let y = 0 ; y < 10 ; y ++ ) {
242
+ for ( let y = 0 ; y < 10 ; y ++ ) {
196
243
let line = letterLines . shift ( ) ;
197
244
d . push ( [ ] . map . call ( line , ( c ) => c === '#' ) ) ;
198
245
}
@@ -201,11 +248,11 @@ const findTheMessage = (rows) => {
201
248
202
249
let result = '' ;
203
250
204
- letterLoop: for ( let letter of letterMaps ) {
205
- charLoop: for ( let char in letterData ) {
206
- for ( let x = 0 ; x < letterData [ char ] . length ; x ++ ) {
207
- for ( let y = 0 ; y < letterData [ char ] [ x ] . length ; y ++ ) {
208
- if ( letter [ x ] [ y ] !== letterData [ char ] [ x ] [ y ] ) {
251
+ letterLoop: for ( let letter of letterMaps ) {
252
+ charLoop: for ( let char in letterData ) {
253
+ for ( let x = 0 ; x < letterData [ char ] . length ; x ++ ) {
254
+ for ( let y = 0 ; y < letterData [ char ] [ x ] . length ; y ++ ) {
255
+ if ( letter [ x ] [ y ] !== letterData [ char ] [ x ] [ y ] ) {
209
256
continue charLoop;
210
257
}
211
258
}
0 commit comments