@@ -40,36 +40,27 @@ fn parse_data(input: &str) -> FastMap<usize, FastSet<usize>> {
4040pub fn part_one ( input : & str ) -> Option < u32 > {
4141 let nodes = parse_data ( input) ;
4242
43- let keys = nodes. keys ( ) . copied ( ) . collect :: < Vec < _ > > ( ) ;
44-
4543 let mut result = 0 ;
4644
4745 let mut visited_t = FastSet :: new ( ) ;
4846
49- // TODO: poglej samo sosede
50- // TODO: spremeni hashmap-e v arraye (hitrejsi dostop)
5147 for computer_i in Computer :: encode ( "ta" ) ..=Computer :: encode ( "tz" ) {
52- if !nodes. contains_key ( & computer_i) {
53- continue ;
54- }
55-
56- visited_t. insert ( computer_i) ;
48+ if let Some ( computer_i_connections) = nodes. get ( & computer_i) {
49+ visited_t. insert ( computer_i) ;
5750
58- for ( j, computer_j) in keys. iter ( ) . enumerate ( ) {
59- if visited_t. contains ( computer_j) {
60- continue ;
61- }
62-
63- for computer_k in keys. iter ( ) . skip ( j + 1 ) {
64- if visited_t. contains ( computer_k) {
51+ for ( j, computer_j) in computer_i_connections. iter ( ) . enumerate ( ) {
52+ if visited_t. contains ( computer_j) {
6553 continue ;
6654 }
6755
68- if nodes[ & computer_i] . contains ( computer_j)
69- && nodes[ & computer_i] . contains ( computer_k)
70- && nodes[ computer_j] . contains ( computer_k)
71- {
72- result += 1 ;
56+ for computer_k in computer_i_connections. iter ( ) . skip ( j) {
57+ if visited_t. contains ( computer_k) {
58+ continue ;
59+ }
60+
61+ if nodes[ computer_j] . contains ( computer_k) {
62+ result += 1 ;
63+ }
7364 }
7465 }
7566 }
@@ -95,9 +86,9 @@ fn bors_kerbosch(
9586 let pivot = p. union ( & x) . max_by_key ( |v| g[ v] . len ( ) ) . unwrap ( ) ;
9687
9788 for v in p. difference ( & g[ pivot] ) . copied ( ) . collect :: < Vec < _ > > ( ) {
98- let next_r = r. iter ( ) . chain ( once ( & v) ) . copied ( ) . collect :: < Vec < _ > > ( ) ;
99- let next_p = p. intersection ( & g[ & v] ) . copied ( ) . collect :: < FastSet < _ > > ( ) ;
100- let next_x = x. intersection ( & g[ & v] ) . copied ( ) . collect :: < FastSet < _ > > ( ) ;
89+ let next_r = r. iter ( ) . chain ( once ( & v) ) . copied ( ) . collect ( ) ;
90+ let next_p = p. intersection ( & g[ & v] ) . copied ( ) . collect ( ) ;
91+ let next_x = x. intersection ( & g[ & v] ) . copied ( ) . collect ( ) ;
10192
10293 let result = bors_kerbosch ( next_r, next_p, next_x, g) ;
10394 if result. len ( ) > max_result. len ( ) {
@@ -114,7 +105,7 @@ fn bors_kerbosch(
114105pub fn part_two ( input : & str ) -> Option < String > {
115106 let nodes = parse_data ( input) ;
116107
117- let keys = nodes. keys ( ) . copied ( ) . collect :: < FastSet < _ > > ( ) ;
108+ let keys = nodes. keys ( ) . copied ( ) . collect ( ) ;
118109 let result = bors_kerbosch ( vec ! [ ] , keys, FastSet :: new ( ) , & nodes) ;
119110
120111 let mut result = result. into_iter ( ) . map ( Computer :: decode) . collect :: < Vec < _ > > ( ) ;
0 commit comments