@@ -110,8 +110,8 @@ unsafe fn inner_part1(s: &[u8]) -> u64 {
110110
111111 let mut states1_start = true ;
112112 let mut states2_start;
113- let mut states1_other_states = & mut heapless:: Vec :: < u16 , NFA_SIZE > :: new ( ) ;
114- let mut states2_other_states = & mut heapless:: Vec :: < u16 , NFA_SIZE > :: new ( ) ;
113+ let mut states1_other_states = heapless:: Vec :: < u16 , NFA_SIZE > :: new ( ) ;
114+ let mut states2_other_states = heapless:: Vec :: < u16 , NFA_SIZE > :: new ( ) ;
115115
116116 while i < s. len ( ) {
117117 if * s. get_unchecked ( i) == b'\n' {
@@ -144,10 +144,51 @@ unsafe fn inner_part1(s: &[u8]) -> u64 {
144144 states2_other_states. push_unchecked ( next. get_next ( ) ) ;
145145 }
146146 }
147- std:: mem:: swap ( & mut states2_other_states, & mut states1_other_states) ;
148- std:: mem:: swap ( & mut states2_start, & mut states1_start) ;
149147
150- if states1_start == false && states1_other_states. is_empty ( ) {
148+ if states2_start == false && states2_other_states. is_empty ( ) {
149+ while i < s. len ( ) && * s. get_unchecked ( i) != b'\n' {
150+ i += 1 ;
151+ }
152+ } else {
153+ i += 1 ;
154+ }
155+
156+ if i >= s. len ( ) {
157+ break ;
158+ }
159+
160+ if * s. get_unchecked ( i) == b'\n' {
161+ if states2_start {
162+ sum += 1 ;
163+ }
164+ states1_other_states. clear ( ) ;
165+ states1_start = true ;
166+ i += 1 ;
167+ continue ;
168+ }
169+ let color = to_idx ( * s. get_unchecked ( i) ) ;
170+
171+ states1_other_states. clear ( ) ;
172+ states1_start = false ;
173+
174+ if states2_start {
175+ let next = nfa. get_unchecked ( 0 ) . get_unchecked ( color) ;
176+
177+ states1_start |= next. has_start ( ) ;
178+ if next. get_next ( ) != 0 {
179+ states1_other_states. push_unchecked ( next. get_next ( ) ) ;
180+ }
181+ }
182+ for s in states2_other_states. iter ( ) {
183+ let next = nfa. get_unchecked ( * s as usize ) . get_unchecked ( color) ;
184+
185+ states1_start |= next. has_start ( ) ;
186+ if next. get_next ( ) != 0 {
187+ states1_other_states. push_unchecked ( next. get_next ( ) ) ;
188+ }
189+ }
190+
191+ if states2_start == false && states2_other_states. is_empty ( ) {
151192 while i < s. len ( ) && * s. get_unchecked ( i) != b'\n' {
152193 i += 1 ;
153194 }
0 commit comments