1
1
package day12 ;
2
2
3
3
import java .util .ArrayList ;
4
- import java .util .HashMap ;
5
- import java .util .HashSet ;
4
+ import java .util .Arrays ;
6
5
7
6
import util .ReadInputHelper ;
8
7
9
8
public class Main {
10
9
public static void main (String [] args ) {
11
- ArrayList <String > lines = new ReadInputHelper (12 ).getLines ();
10
+ ArrayList <String > lines = new ReadInputHelper (13 ).getLines ();
12
11
13
- HashMap < Integer , ArrayList <Integer >> map = new HashMap <>();
12
+ ArrayList <Wall > walls = new ArrayList <>();
14
13
14
+ int max = 0 ;
15
15
for (int i = 0 ; i < lines .size (); i ++) {
16
- String [] parts = lines .get (i ).split (" <-> " );
17
- Integer id = Integer .parseInt (parts [0 ]);
18
- String [] fStrings = parts [1 ].split (", " );
19
- ArrayList <Integer > followers = new ArrayList <>();
16
+ String [] line = lines .get (i ).split (": " );
17
+ int name = Integer .parseInt (line [0 ]);
18
+ if (name > max )
19
+ max = name ;
20
+ walls .add (new Wall (Integer .parseInt (line [0 ]), i , Integer .parseInt (line [1 ])));
21
+ }
22
+
23
+ int sum = 0 ;
24
+ loop : while (true ) {
25
+ for (int i = 0 ; true ; i ++) {
26
+ int time = sum + i ;
27
+ int index = walls .indexOf (new Wall (i , 0 , -1 ));
28
+
29
+ if (index == -1 ) {
30
+ continue ;
31
+ }
20
32
21
- for (int j = 0 ; j < fStrings .length ; j ++) {
22
- followers .add (Integer .parseInt (fStrings [j ]));
33
+ Wall wall = walls .get (index );
34
+
35
+ if (wall .getSpos (time ) == 0 ) {
36
+ sum ++;
37
+ break ;
38
+ }
39
+
40
+ if (wall .name >= max ) {
41
+ break loop ;
42
+ }
23
43
}
24
- map . put ( i , followers );
44
+
25
45
}
26
- int counter = 0 ;
27
- ArrayList <HashSet <Integer >> groups = new ArrayList <>();
46
+ System .out .println (sum );
47
+ }
48
+ }
28
49
29
- for (int j = 0 ; j < map .size (); j ++) {
30
- ArrayList <Integer > stack = new ArrayList <>();
50
+ class Wall {
51
+ public int name , depth , size , spos = 0 ;
52
+ boolean reachedTop = false ;
53
+ int [] sps ;
54
+ int ceil ;
31
55
32
- stack .add (j );
33
- HashSet <Integer > used = new HashSet <>();
34
- while (!stack .isEmpty ()) {
56
+ public Wall (int name , int depth , int size ) {
57
+ this .name = name ;
58
+ this .depth = depth ;
59
+ this .size = size ;
35
60
36
- ArrayList <Integer > fs = map .get (stack .remove (0 ));
61
+ if (size != -1 ) {
62
+ sps = new int [size + size - 2 ];
63
+ initSPos ();
64
+ }
65
+ }
37
66
38
- if ( fs . size () > 0 && fs != null )
39
- for ( int i = 0 ; i < fs . size (); i ++) {
40
- if (! used . contains ( fs . get ( i ))) {
41
- stack . add ( fs . get ( i ));
42
- }
67
+ public void incScanner () {
68
+ if ( size - 1 == spos )
69
+ reachedTop = true ;
70
+ if ( spos == 0 )
71
+ reachedTop = false ;
43
72
44
- used .add (fs .get (i ));
45
- }
73
+ if (!reachedTop )
74
+ spos ++;
75
+ else
76
+ spos --;
46
77
47
- // if (stack.contains(0)) {
48
- // counter++;
49
- // break;
50
- // }
51
- }
78
+ }
52
79
53
- groups .add (used );
80
+ public boolean equals (Object o ) {
81
+ Wall other = (Wall ) o ;
82
+ return name == other .name ;
83
+ }
84
+
85
+ public void reset () {
86
+ spos = 0 ;
87
+ }
88
+
89
+ public void initSPos () {
90
+ int end1 = size -2 ;
91
+ int counter = size -2 ;
92
+ for (int i = 0 ; i < end1 ; i ++){
93
+ sps [i ] = counter --;
54
94
}
55
95
56
- groups .forEach (e -> {
57
- System .out .println (e .toString ());
58
- });
59
-
60
- System .out .println ();
61
- System .out .println ();
62
-
63
- ArrayList <HashSet <Integer >> rslt = new ArrayList <>();
64
-
65
- for (int i = 0 ; i < groups .size (); i ++) {
66
- HashSet <Integer > starter = groups .get (i );
67
- for (int j = 0 ; j < groups .size (); j ++) {
68
- if (groups .get (j ) != starter )
69
- if (groups .get (j ).containsAll (starter ))
70
- starter .clear ();
71
- }
72
- }
73
-
74
- for (int i = 0 ; i < groups .size (); i ++) {
75
- if (groups .get (i ).size () > 0 ){
76
- rslt .add (groups .get (i ));
77
- }
96
+ counter = 0 ;
97
+ for (int i = end1 ; i < sps .length ;i ++){
98
+ sps [i ] = counter ++;
78
99
}
79
100
80
- rslt .forEach (e -> {
81
- System .out .println (e .toString ());
82
- });
101
+ System .out .println (Arrays .toString (sps ));
102
+ }
83
103
84
- System .out .println (counter );
85
- System .out .println (rslt .size ());
104
+ public int getSpos (int index ) {
105
+ if (size == 2 )
106
+ return index % 2 ;
107
+ else
108
+ return Math .abs (sps [(index + size -2 ) % sps .length ]);
86
109
}
87
110
88
- }
111
+ }
0 commit comments