1
+ const fs = require ( 'fs' )
2
+
3
+ var Rawinput = fs . readFileSync ( "input.txt" ) . toString ( 'utf-8' )
4
+ input = Rawinput . split ( "\r\n" ) ;
5
+ function Run ( ) {
6
+ var Area = input [ 0 ] . match ( / (?< = x = | y = ) .* ?(? = , | $ ) / g)
7
+ Area = { x : Area [ 0 ] . split ( ".." ) . map ( Number ) , y : Area [ 1 ] . split ( ".." ) . map ( Number ) }
8
+ var Start = { x : 0 , y : 0 }
9
+ var Highest = - Infinity
10
+ var Amount = 0 ;
11
+ for ( let x = - 500 ; x < 700 ; x ++ ) {
12
+ for ( let y = - 500 ; y < 700 ; y ++ ) {
13
+ var Pos = Move ( Start , { x : x , y : y } , Area )
14
+ if ( Pos != undefined ) {
15
+ Amount ++ ;
16
+ if ( Pos > Highest ) {
17
+ Highest = Pos
18
+ }
19
+ }
20
+ }
21
+
22
+ }
23
+ console . log ( Amount )
24
+ }
25
+
26
+ function Move ( Point , velocity , Area ) {
27
+ var HighestY = - Infinity
28
+ var NewPoint = { x : Point . x , y : Point . y }
29
+ var CheckSize = 4000
30
+ var Step = 0 ;
31
+ while ( Step < CheckSize ) {
32
+ NewPoint = { x : NewPoint . x + velocity . x , y : NewPoint . y + velocity . y }
33
+ if ( HighestY < NewPoint . y ) {
34
+ HighestY = NewPoint . y
35
+ }
36
+ if ( velocity . x != 0 ) {
37
+ velocity . x = velocity . x < 0 ? velocity . x + 1 : velocity . x - 1
38
+ }
39
+ velocity . y = velocity . y - 1
40
+ if ( NewPoint . x >= Area . x [ 0 ] && NewPoint . x <= Area . x [ 1 ] && NewPoint . y >= Area . y [ 0 ] && NewPoint . y <= Area . y [ 1 ] ) {
41
+ return HighestY
42
+ }
43
+ Step ++ ;
44
+ }
45
+ }
46
+
47
+
48
+ module . exports = Run ;
49
+ //Start timer
50
+ var startTime = new Date ( ) . getTime ( ) ;
51
+ Run ( ) ;
52
+ //End timer
53
+ var endTime = new Date ( ) . getTime ( ) ;
54
+ var timeTaken = endTime - startTime ;
55
+ console . log ( "Time taken: " + timeTaken + "ms" ) ;
0 commit comments