From 5d6b493e75ea064df3c1abe33d45bb44cb33a9ec Mon Sep 17 00:00:00 2001 From: Inanc Gumus Date: Sun, 18 Aug 2019 15:08:32 +0300 Subject: [PATCH] refactor: slice exercises 19-21 --- .../20-observe-the-cap-growth/main.go | 14 ++++---- .../solution/main.go | 7 ++++ .../exercises/21-correct-the-lyric/main.go | 33 +++++++++++-------- .../21-correct-the-lyric/solution/main.go | 3 +- 4 files changed, 34 insertions(+), 23 deletions(-) diff --git a/16-slices/exercises/20-observe-the-cap-growth/main.go b/16-slices/exercises/20-observe-the-cap-growth/main.go index 3a5ecfb..b3c2f68 100644 --- a/16-slices/exercises/20-observe-the-cap-growth/main.go +++ b/16-slices/exercises/20-observe-the-cap-growth/main.go @@ -3,8 +3,9 @@ package main // --------------------------------------------------------- // EXERCISE: Observe the capacity growth // -// Write a program that loops 10 million times to append an element -// to a slice, on each step of the loop. Observe the capacity. +// Write a program that appends elements to a slice +// 10 million times in a loop. Observe how the capacity of +// the slice changes. // // // STEPS @@ -13,13 +14,12 @@ package main // // 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 -// the capacity changes. +// 4. Print the length and capacity of the slice "only" +// when its capacity changes. // -// 5. Print also the growth rate by calculating the previous and -// the current capacity. +// BONUS: Print also the growth rate of the capacity. // // // EXPECTED OUTPUT diff --git a/16-slices/exercises/20-observe-the-cap-growth/solution/main.go b/16-slices/exercises/20-observe-the-cap-growth/solution/main.go index 9a5aca4..8247da5 100644 --- a/16-slices/exercises/20-observe-the-cap-growth/solution/main.go +++ b/16-slices/exercises/20-observe-the-cap-growth/solution/main.go @@ -15,15 +15,22 @@ func main() { oldCap float64 ) + // loop 10 million times for len(nums) < 10e6 { + // get the capacity c := float64(cap(nums)) + // only print when the capacity changes if c == 0 || c != oldCap { + // print also the growth ratio: c/oldCap fmt.Printf("len:%-15d cap:%-15g growth:%-15.2f\n", len(nums), c, c/oldCap) } + + // keep track of the previous capacity oldCap = c + // append an arbitrary element to the slice nums = append(nums, 1) } } diff --git a/16-slices/exercises/21-correct-the-lyric/main.go b/16-slices/exercises/21-correct-the-lyric/main.go index 2521ebd..0f95fd9 100644 --- a/16-slices/exercises/21-correct-the-lyric/main.go +++ b/16-slices/exercises/21-correct-the-lyric/main.go @@ -8,30 +8,35 @@ import ( // --------------------------------------------------------- // EXERCISE: Correct the lyric // -// You have a slice of lyrics data of Beatles' awesome -// song: Yesterday. Your goal is putting the words into -// correct positions. +// You have a slice that contains the words of Beatles' +// legendary song: Yesterday. However, the order of the +// words are incorrect. // +// CURRENT OUTPUT // -// STEPS -// -// 1. Prepend "yesterday" to the `lyric` slice. -// -// 2. Put the words to the correct position in the `lyric` slice. -// -// 3. Print the `lyric` slice. -// +// [all my troubles seemed so far away oh i believe in yesterday now it looks as though they are here to stay] // // 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] // // +// 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 // -// . 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. +// + Think about when does the append allocates a new backing array. +// +// + Check whether your conclusions are correct. // // --------------------------------------------------------- diff --git a/16-slices/exercises/21-correct-the-lyric/solution/main.go b/16-slices/exercises/21-correct-the-lyric/solution/main.go index 81dc924..f6231cd 100644 --- a/16-slices/exercises/21-correct-the-lyric/solution/main.go +++ b/16-slices/exercises/21-correct-the-lyric/solution/main.go @@ -17,7 +17,6 @@ func main() { // yesterday all my troubles seemed so far away // now it looks as though they are here to stay // 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`) // ------------------------------------------------------------------------ @@ -36,7 +35,7 @@ func main() { 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. // ------------------------------------------------------------------------ //