refactor: slice exercises 19-21
This commit is contained in:
		@@ -3,8 +3,9 @@ package main
 | 
				
			|||||||
// ---------------------------------------------------------
 | 
					// ---------------------------------------------------------
 | 
				
			||||||
// EXERCISE: Observe the capacity growth
 | 
					// EXERCISE: Observe the capacity growth
 | 
				
			||||||
//
 | 
					//
 | 
				
			||||||
//  Write a program that loops 10 million times to append an element
 | 
					//  Write a program that appends elements to a slice
 | 
				
			||||||
//  to a slice, on each step of the loop. Observe the capacity.
 | 
					//  10 million times in a loop. Observe how the capacity of
 | 
				
			||||||
 | 
					//  the slice changes.
 | 
				
			||||||
//
 | 
					//
 | 
				
			||||||
//
 | 
					//
 | 
				
			||||||
// STEPS
 | 
					// STEPS
 | 
				
			||||||
@@ -13,13 +14,12 @@ package main
 | 
				
			|||||||
//
 | 
					//
 | 
				
			||||||
//  2. Loop 10e6 times
 | 
					//  2. Loop 10e6 times
 | 
				
			||||||
//
 | 
					//
 | 
				
			||||||
//  3. On each loop step: Append an element to the slice
 | 
					//  3. On each iteration: Append an element to the slice
 | 
				
			||||||
//
 | 
					//
 | 
				
			||||||
//  4. Only print the length and capacity of the slice everytime
 | 
					//  4. Print the length and capacity of the slice "only"
 | 
				
			||||||
//     the capacity changes.
 | 
					//     when its capacity changes.
 | 
				
			||||||
//
 | 
					//
 | 
				
			||||||
//  5. Print also the growth rate by calculating the previous and
 | 
					//  BONUS: Print also the growth rate of the capacity.
 | 
				
			||||||
//     the current capacity.
 | 
					 | 
				
			||||||
//
 | 
					//
 | 
				
			||||||
//
 | 
					//
 | 
				
			||||||
// EXPECTED OUTPUT
 | 
					// EXPECTED OUTPUT
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -15,15 +15,22 @@ func main() {
 | 
				
			|||||||
		oldCap float64
 | 
							oldCap float64
 | 
				
			||||||
	)
 | 
						)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						// loop 10 million times
 | 
				
			||||||
	for len(nums) < 10e6 {
 | 
						for len(nums) < 10e6 {
 | 
				
			||||||
 | 
							// get the capacity
 | 
				
			||||||
		c := float64(cap(nums))
 | 
							c := float64(cap(nums))
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							// only print when the capacity changes
 | 
				
			||||||
		if c == 0 || c != oldCap {
 | 
							if c == 0 || c != oldCap {
 | 
				
			||||||
 | 
								// print also the growth ratio: c/oldCap
 | 
				
			||||||
			fmt.Printf("len:%-15d cap:%-15g growth:%-15.2f\n",
 | 
								fmt.Printf("len:%-15d cap:%-15g growth:%-15.2f\n",
 | 
				
			||||||
				len(nums), c, c/oldCap)
 | 
									len(nums), c, c/oldCap)
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							// keep track of the previous capacity
 | 
				
			||||||
		oldCap = c
 | 
							oldCap = c
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							// append an arbitrary element to the slice
 | 
				
			||||||
		nums = append(nums, 1)
 | 
							nums = append(nums, 1)
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -8,30 +8,35 @@ import (
 | 
				
			|||||||
// ---------------------------------------------------------
 | 
					// ---------------------------------------------------------
 | 
				
			||||||
// EXERCISE: Correct the lyric
 | 
					// EXERCISE: Correct the lyric
 | 
				
			||||||
//
 | 
					//
 | 
				
			||||||
//  You have a slice of lyrics data of Beatles' awesome
 | 
					//  You have a slice that contains the words of Beatles'
 | 
				
			||||||
//  song: Yesterday. Your goal is putting the words into
 | 
					//  legendary song: Yesterday. However, the order of the
 | 
				
			||||||
//  correct positions.
 | 
					//  words are incorrect.
 | 
				
			||||||
//
 | 
					//
 | 
				
			||||||
 | 
					// CURRENT OUTPUT
 | 
				
			||||||
//
 | 
					//
 | 
				
			||||||
// STEPS
 | 
					//  [all my troubles seemed so far away oh i believe in yesterday now it looks as though they are here to stay]
 | 
				
			||||||
//
 | 
					 | 
				
			||||||
//  1. Prepend "yesterday" to the `lyric` slice.
 | 
					 | 
				
			||||||
//
 | 
					 | 
				
			||||||
//  2. Put the words to the correct position in the `lyric` slice.
 | 
					 | 
				
			||||||
//
 | 
					 | 
				
			||||||
//  3. Print the `lyric` slice.
 | 
					 | 
				
			||||||
//
 | 
					 | 
				
			||||||
//
 | 
					//
 | 
				
			||||||
// EXPECTED OUTPUT
 | 
					// EXPECTED OUTPUT
 | 
				
			||||||
//
 | 
					//
 | 
				
			||||||
//  [yesterday all my troubles seemed so far away now it looks as though they are here to stay oh i believe in yesterday]
 | 
					//  [yesterday all my troubles seemed so far away now it looks as though they are here to stay oh i believe in yesterday]
 | 
				
			||||||
//
 | 
					//
 | 
				
			||||||
//
 | 
					//
 | 
				
			||||||
 | 
					// STEPS
 | 
				
			||||||
 | 
					//
 | 
				
			||||||
 | 
					//  1. Prepend "yesterday" to the `lyric` slice.
 | 
				
			||||||
 | 
					//
 | 
				
			||||||
 | 
					//  2. Put the words to the correct positions in the `lyric` slice.
 | 
				
			||||||
 | 
					//
 | 
				
			||||||
 | 
					//  3. Print the `lyric` slice.
 | 
				
			||||||
 | 
					//
 | 
				
			||||||
 | 
					//     HINT: You don't need use the "yesterday" word from the `lyric` slice.
 | 
				
			||||||
 | 
					//
 | 
				
			||||||
 | 
					//
 | 
				
			||||||
// BONUS
 | 
					// BONUS
 | 
				
			||||||
//
 | 
					//
 | 
				
			||||||
//   . Think about when does the append allocates a new backing array.
 | 
					//   + Think about when does the append allocates a new backing array.
 | 
				
			||||||
//   . Then check whether your conclusions are true or not.
 | 
					//
 | 
				
			||||||
//   . You can use the prettyslice package to check the backing array.
 | 
					//   + Check whether your conclusions are correct.
 | 
				
			||||||
//
 | 
					//
 | 
				
			||||||
// ---------------------------------------------------------
 | 
					// ---------------------------------------------------------
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -17,7 +17,6 @@ func main() {
 | 
				
			|||||||
	// yesterday all my troubles seemed so far away
 | 
						// yesterday all my troubles seemed so far away
 | 
				
			||||||
	// now it looks as though they are here to stay
 | 
						// now it looks as though they are here to stay
 | 
				
			||||||
	// oh i believe in yesterday
 | 
						// oh i believe in yesterday
 | 
				
			||||||
 | 
					 | 
				
			||||||
	lyric := strings.Fields(`all my troubles seemed so far away oh i believe in yesterday now it looks as though they are here to stay`)
 | 
						lyric := strings.Fields(`all my troubles seemed so far away oh i believe in yesterday now it looks as though they are here to stay`)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	// ------------------------------------------------------------------------
 | 
						// ------------------------------------------------------------------------
 | 
				
			||||||
@@ -36,7 +35,7 @@ func main() {
 | 
				
			|||||||
	lyric = append([]string{"yesterday"}, lyric...)
 | 
						lyric = append([]string{"yesterday"}, lyric...)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	// ------------------------------------------------------------------------
 | 
						// ------------------------------------------------------------------------
 | 
				
			||||||
	// #2: Put the words to the correct position in the `lyric` slice.
 | 
						// #2: Put the words to the correct positions in the `lyric` slice.
 | 
				
			||||||
	// ------------------------------------------------------------------------
 | 
						// ------------------------------------------------------------------------
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	//
 | 
						//
 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user