11function parse ( input ) {
22 const disk = [ ] ;
3- let id = 0 ;
43 for ( let i = 0 ; i < input . length ; i ++ ) {
5- const count = + input [ i ] ;
6- if ( i % 2 === 0 ) disk . push ( { id : id ++ , count } ) ;
7- else disk . push ( { id : - 1 , count } ) ;
4+ if ( i % 2 === 0 ) disk . push ( { id : i / 2 , count : + input [ i ] } ) ;
5+ else disk . push ( { id : - 1 , count : + input [ i ] } ) ;
86 }
97 return disk ;
108}
@@ -22,8 +20,11 @@ function checksum(disk) {
2220}
2321
2422function split ( disk , i , count ) {
25- disk . splice ( i + 1 , 0 , { id : disk [ i ] . id , count : disk [ i ] . count - count } ) ;
26- disk [ i ] . count = count ;
23+ const add = [
24+ { id : disk [ i ] . id , count } ,
25+ { id : disk [ i ] . id , count : disk [ i ] . count - count } ,
26+ ] ;
27+ disk . splice ( i , 1 , ...add ) ;
2728}
2829
2930function move ( disk , from , to ) {
@@ -35,10 +36,9 @@ function move(disk, from, to) {
3536 split ( disk , from , disk [ from ] . count - disk [ to ] . count ) ;
3637 from ++ ;
3738 }
38- if ( disk [ to ] . count === disk [ from ] . count ) {
39- disk [ to ] . id = disk [ from ] . id ;
40- disk [ from ] . id = - 1 ;
41- }
39+ let tmp = disk [ to ] . id ;
40+ disk [ to ] . id = disk [ from ] . id ;
41+ disk [ from ] . id = tmp ;
4242 return from ;
4343}
4444
0 commit comments