@@ -34,16 +34,16 @@ impl Tile {
34
34
adj. swap ( 0 , 2 ) ;
35
35
}
36
36
adj. rotate_right ( self . rotation ) ;
37
- adj[ side] . get ( 0 ) . and_then ( |x| Some ( x. id ) )
37
+ adj[ side] . get ( 0 ) . map ( |x|x. id )
38
38
}
39
39
40
40
/// applies flips and rotation until side side == id
41
41
fn set_transform ( & mut self , side : usize , id : usize , side2 : usize , id2 : usize ) {
42
42
let mut adj = self . adjacency . to_vec ( ) ;
43
43
for i in 0 ..4 {
44
- if ( ( id == 0 && adj[ side] . len ( ) == 0 ) || ( adj[ side] . len ( ) > 0 && adj[ side] [ 0 ] . id == id) )
45
- && ( ( id2 == 0 && adj[ side2] . len ( ) == 0 )
46
- || ( adj[ side2] . len ( ) > 0 && adj[ side2] [ 0 ] . id == id2) )
44
+ if ( ( id == 0 && adj[ side] . is_empty ( ) ) || ( ! adj[ side] . is_empty ( ) && adj[ side] [ 0 ] . id == id) )
45
+ && ( ( id2 == 0 && adj[ side2] . is_empty ( ) )
46
+ || ( ! adj[ side2] . is_empty ( ) && adj[ side2] [ 0 ] . id == id2) )
47
47
{
48
48
self . rotation = i;
49
49
return ;
@@ -53,9 +53,9 @@ impl Tile {
53
53
adj. swap ( 0 , 2 ) ;
54
54
self . flip = true ;
55
55
for i in 0 ..4 {
56
- if ( ( id == 0 && adj[ side] . len ( ) == 0 ) || ( adj[ side] . len ( ) > 0 && adj[ side] [ 0 ] . id == id) )
57
- && ( ( id2 == 0 && adj[ side2] . len ( ) == 0 )
58
- || ( adj[ side2] . len ( ) > 0 && adj[ side2] [ 0 ] . id == id2) )
56
+ if ( ( id == 0 && adj[ side] . is_empty ( ) ) || ( ! adj[ side] . is_empty ( ) && adj[ side] [ 0 ] . id == id) )
57
+ && ( ( id2 == 0 && adj[ side2] . is_empty ( ) )
58
+ || ( ! adj[ side2] . is_empty ( ) && adj[ side2] [ 0 ] . id == id2) )
59
59
{
60
60
self . rotation = i;
61
61
return ;
@@ -201,8 +201,7 @@ pub fn solve(timer: &mut Timer, input: &str) -> Result<AocResult> {
201
201
// first cell
202
202
image[ 0 ] [ 0 ] = adjacency_sums
203
203
. iter ( )
204
- . filter ( |( _, v) | * v == 2 )
205
- . next ( )
204
+ . find ( |( _, v) | * v == 2 )
206
205
. unwrap ( )
207
206
. 0 ;
208
207
input[ & image[ 0 ] [ 0 ] ] . borrow_mut ( ) . set_transform ( 0 , 0 , 3 , 0 ) ;
@@ -242,9 +241,9 @@ pub fn solve(timer: &mut Timer, input: &str) -> Result<AocResult> {
242
241
243
242
for _ in 0 ..tile. rotation {
244
243
let mut new = vec ! [ vec![ ] ; 8 ] ;
245
- for col in 0 .. 8 {
244
+ for ( col, n ) in new . iter_mut ( ) . enumerate ( ) {
246
245
for row in ( 0 ..8 ) . rev ( ) {
247
- new [ col ] . push ( tile. data [ row] [ col] ) ;
246
+ n . push ( tile. data [ row] [ col] ) ;
248
247
}
249
248
}
250
249
tile. data = new;
@@ -306,16 +305,16 @@ pub fn solve(timer: &mut Timer, input: &str) -> Result<AocResult> {
306
305
count
307
306
}
308
307
309
- ' out: loop {
308
+ ' out: {
310
309
for _ in 0 ..4 {
311
310
if check_monster ( & i, true , & mut HashSet :: new ( ) ) > 0 {
312
311
break ' out;
313
312
}
314
313
315
314
let mut new = vec ! [ vec![ ] ; i. len( ) ] ;
316
- for col in 0 ..i . len ( ) {
315
+ for ( col, n ) in new . iter_mut ( ) . enumerate ( ) {
317
316
for row in ( 0 ..i. len ( ) ) . rev ( ) {
318
- new [ col ] . push ( i[ row] [ col] ) ;
317
+ n . push ( i[ row] [ col] ) ;
319
318
}
320
319
}
321
320
i = new;
@@ -327,9 +326,9 @@ pub fn solve(timer: &mut Timer, input: &str) -> Result<AocResult> {
327
326
}
328
327
329
328
let mut new = vec ! [ vec![ ] ; i. len( ) ] ;
330
- for col in 0 ..i . len ( ) {
329
+ for ( col, n ) in new . iter_mut ( ) . enumerate ( ) {
331
330
for row in ( 0 ..i. len ( ) ) . rev ( ) {
332
- new [ col ] . push ( i[ row] [ col] ) ;
331
+ n . push ( i[ row] [ col] ) ;
333
332
}
334
333
}
335
334
i = new;
0 commit comments