refactor: slice exercises 19-21

This commit is contained in:
Inanc Gumus
2019-08-18 15:08:32 +03:00
parent 2dab6c53c9
commit 5d6b493e75
4 changed files with 34 additions and 23 deletions

View File

@ -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

View File

@ -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)
} }
} }

View File

@ -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.
// //
// --------------------------------------------------------- // ---------------------------------------------------------

View File

@ -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.
// ------------------------------------------------------------------------ // ------------------------------------------------------------------------
// //