@@ -40,36 +40,27 @@ fn parse_data(input: &str) -> FastMap<usize, FastSet<usize>> {
40
40
pub fn part_one ( input : & str ) -> Option < u32 > {
41
41
let nodes = parse_data ( input) ;
42
42
43
- let keys = nodes. keys ( ) . copied ( ) . collect :: < Vec < _ > > ( ) ;
44
-
45
43
let mut result = 0 ;
46
44
47
45
let mut visited_t = FastSet :: new ( ) ;
48
46
49
- // TODO: poglej samo sosede
50
- // TODO: spremeni hashmap-e v arraye (hitrejsi dostop)
51
47
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) ;
57
50
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) {
65
53
continue ;
66
54
}
67
55
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
+ }
73
64
}
74
65
}
75
66
}
@@ -95,9 +86,9 @@ fn bors_kerbosch(
95
86
let pivot = p. union ( & x) . max_by_key ( |v| g[ v] . len ( ) ) . unwrap ( ) ;
96
87
97
88
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 ( ) ;
101
92
102
93
let result = bors_kerbosch ( next_r, next_p, next_x, g) ;
103
94
if result. len ( ) > max_result. len ( ) {
@@ -114,7 +105,7 @@ fn bors_kerbosch(
114
105
pub fn part_two ( input : & str ) -> Option < String > {
115
106
let nodes = parse_data ( input) ;
116
107
117
- let keys = nodes. keys ( ) . copied ( ) . collect :: < FastSet < _ > > ( ) ;
108
+ let keys = nodes. keys ( ) . copied ( ) . collect ( ) ;
118
109
let result = bors_kerbosch ( vec ! [ ] , keys, FastSet :: new ( ) , & nodes) ;
119
110
120
111
let mut result = result. into_iter ( ) . map ( Computer :: decode) . collect :: < Vec < _ > > ( ) ;
0 commit comments