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 x , y = 0 ;
7
+ var maxx , maxy = 0 ;
8
+ var Matrix = [ ] ;
9
+ input . forEach ( element => {
10
+ if ( ! element . includes ( "fold" ) && element != '' ) {
11
+ var xy = element . split ( "," ) . map ( Number ) ;
12
+ x = x > xy [ 0 ] ? x : xy [ 0 ] ;
13
+ y = y > xy [ 1 ] ? y : xy [ 1 ] ;
14
+ }
15
+ } ) ;
16
+ maxx = x ;
17
+ maxy = y ;
18
+ var Matrix = new Array ( y + 1 ) ;
19
+ for ( var i = 0 ; i < y + 1 ; i ++ ) {
20
+ Matrix [ i ] = new Array ( x + 1 ) . fill ( 0 ) ;
21
+ }
22
+ var foldingTime = false ;
23
+ input . forEach ( element => {
24
+ foldingTime = ! foldingTime ? element == '' : foldingTime ;
25
+ if ( ! foldingTime ) {
26
+ var xy = element . split ( "," ) . map ( Number ) ;
27
+ Matrix [ xy [ 1 ] ] [ xy [ 0 ] ] = 1 ;
28
+ }
29
+ else if ( element != '' ) {
30
+ if ( element . startsWith ( "fold along y" ) ) {
31
+ var num = element . match ( / (?< = = ) \d + / ) ;
32
+ for ( let i = maxy ; i > num ; i -- ) {
33
+ const line = Matrix [ i ] ;
34
+ var Supposed = Matrix [ maxy - i ] ;
35
+ for ( let j = 0 ; j < line . length ; j ++ ) {
36
+ if ( line [ j ] == 1 ) {
37
+ Supposed [ j ] = 1 ;
38
+ }
39
+ }
40
+ }
41
+ maxy = num - 1 ;
42
+ }
43
+ else if ( element . startsWith ( "fold along x" ) ) {
44
+ var num = element . match ( / (?< = = ) \d + / ) ;
45
+ for ( let i = maxx ; i > num ; i -- ) {
46
+ Matrix . forEach ( line => {
47
+ if ( line [ i ] == 1 ) {
48
+ line [ maxx - i ] = 1 ;
49
+ }
50
+ } ) ;
51
+ }
52
+ maxx = num - 1 ;
53
+ }
54
+ LogMatrix ( Matrix , maxx , maxy ) ;
55
+ }
56
+ } ) ;
57
+ }
58
+ function LogMatrix ( Matrix , maxx , maxy ) {
59
+ var String = "" ;
60
+ var count = 0 ;
61
+ for ( let i = 0 ; i < maxy + 1 ; i ++ ) {
62
+ for ( let j = 0 ; j < maxx + 1 ; j ++ ) {
63
+ String += Matrix [ i ] [ j ] == 1 ? "#" : " " ;
64
+ count += Matrix [ i ] [ j ] == 1 ? 1 : 0 ;
65
+ }
66
+ String += "\n" ;
67
+ }
68
+ console . log ( String ) ;
69
+ console . log ( count ) ;
70
+ }
71
+ module . exports = Run ;
72
+ //Start timer
73
+ var startTime = new Date ( ) . getTime ( ) ;
74
+ Run ( ) ;
75
+ //End timer
76
+ var endTime = new Date ( ) . getTime ( ) ;
77
+ var timeTaken = endTime - startTime ;
78
+ console . log ( "Time taken: " + timeTaken + "ms" ) ;
0 commit comments