diff --git a/15-arrays-project-clock/01-printing-the-digits/README.md b/15-arrays-project-clock/01-printing-the-digits/README.md new file mode 100644 index 0000000..99cae0d --- /dev/null +++ b/15-arrays-project-clock/01-printing-the-digits/README.md @@ -0,0 +1,43 @@ +# GOAL 1: Printing the Digits + +## Challenge Steps + +1. Define a new placeholder type + +2. Create the digits from "zero" to "nine" + + You can use these characters for the clock: + + ``` + Digit character : █ + Separator character : ░ + ``` + +1. Put them into the "digits" array + +2. Print the digits side-by-side + + 1. Loop for all the lines in a digit + + 2. Print each digit line by line + + 3. Don't forget printing a space after each digit + + 4. Don't forget printing a newline after each line + + EXAMPLE: Let's say you want to print 10. + +``` + ██ ███ <--- Print a new line after printing a single line from + █ █ █ all the digits. + █ █ █ + █ █ █ + ███ ███ + ^^ + || + ++----> Add space between the digits +``` + +## Solution + +You can find the solution in the solution folder. diff --git a/15-arrays-project-clock/01-printing-the-digits/main.go b/15-arrays-project-clock/01-printing-the-digits/main.go index 5f79504..b5e729e 100644 --- a/15-arrays-project-clock/01-printing-the-digits/main.go +++ b/15-arrays-project-clock/01-printing-the-digits/main.go @@ -7,41 +7,5 @@ package main -// ★★★★★★★★★★★★★★★★★★★★★★★★★★★ -// ★ GOAL 1 : Printing the Digits -// ★★★★★★★★★★★★★★★★★★★★★★★★★★★ -// -// 1. Define a new placeholder type -// -// 2. Create the digits from "zero" to "nine" -// -// You can use these characters for the clock: -// -// Digit character : "█" -// Separator character : "░" -// -// 3. Put them into the "digits" array -// -// 4. Print the digits side-by-side -// -// 1. Loop for all the lines in a digit -// -// 2. Print each digit line by line -// -// 3. Don't forget printing a space after each digit -// -// 4. Don't forget printing a newline after each line -// -// EXAMPLE: Let's say you want to print 10. -// -// ██ ███ <--- Print a new line after printing a single line from -// █ █ █ all the digits. -// █ █ █ -// █ █ █ -// ███ ███ -// ^^ -// || -// ++----> Add space between the digits - func main() { } diff --git a/15-arrays-project-clock/02-printing-the-clock/README.md b/15-arrays-project-clock/02-printing-the-clock/README.md new file mode 100644 index 0000000..bbe3274 --- /dev/null +++ b/15-arrays-project-clock/02-printing-the-clock/README.md @@ -0,0 +1,20 @@ +# GOAL 2: Printing the Clock + +## Notes + +* Note main.go file contains the solution of the previous step. +* "solution" folder contains the solution for this step. + +## Challenge Steps + +1. Get the current time + +2. Get the current hour, minute and second from the current time + +3. Create the clock array by getting the digits from the digits array + +4. Print the clock by using the clock array + +5. Create a separator array (it's also a placeholder type) + +6. Add the separators into the correct positions of the clock array \ No newline at end of file diff --git a/15-arrays-project-clock/02-printing-the-clock/main.go b/15-arrays-project-clock/02-printing-the-clock/main.go index 61675ac..f63c356 100644 --- a/15-arrays-project-clock/02-printing-the-clock/main.go +++ b/15-arrays-project-clock/02-printing-the-clock/main.go @@ -5,22 +5,6 @@ // License: https://creativecommons.org/licenses/by-nc-sa/4.0/ // -// ★★★★★★★★★★★★★★★★★★★★★★★★★★★ -// ★ GOAL 2 : Printing the Clock -// ★★★★★★★★★★★★★★★★★★★★★★★★★★★ -// -// 1. Get the current time -// -// 2. Get the current hour, minute and second from the current time -// -// 3. Create the clock array by getting the digits from the digits array -// -// 4. Print the clock by using the clock array -// -// 5. Create a separator array (it's also a placeholder type) -// -// 6. Add the separators into the correct positions of the clock array - package main import ( diff --git a/15-arrays-project-clock/03-animating-the-clock/README.md b/15-arrays-project-clock/03-animating-the-clock/README.md new file mode 100644 index 0000000..5f56a9b --- /dev/null +++ b/15-arrays-project-clock/03-animating-the-clock/README.md @@ -0,0 +1,56 @@ +# GOAL 3: Animate the Clock + +## Notes + +* Note main.go file contains the solution of the previous step. +* "solution" folder contains the solution for this step. + +## Challenge Steps + +1. Create an infinite loop to update the clock + +2. Update the clock every second + + [time.Sleep(time.Second)](https://golang.org/pkg/time/#Sleep) will stop the world for 1 second + +3. Clear the screen before the infinite loop + + 1. Get my library for clearing the screen: + + `go get -u github.com/inancgumus/screen` + + 2. Then, import it and call it in your code like this: + + `screen.Clear()` + + 3. If you're using Go Playground instead, do this: + + `fmt.Println("\f")` + + 4. Move the cursor to the top-left corner of the screen, before each step + of the infinite loop + + * Call this in your code like this: + + `screen.MoveTopLeft()` + + * If you're using Go Playground instead, do this again: + + `fmt.Println("\f")` + +--- + +## SIDE NOTE FOR THE CURIOUS + +If you're curious about how my screen clearing package works, read on. + +**On bash**, it uses special commands, if you open the code, you can see that. + +* `\033` is a special control code: +* `[2J` clears the screen and the cursor +* `[H` moves the cursor to 0, 0 screen position +* [See for more information](https://bluesock.org/~willkg/dev/ansi.html). + +**On Windows**, I'm directly calling the Windows API functions. This is way advanced at this stage of the course, however, I'll probably explain it afterward. + +So, my package automatically adjusts itself depending on where it is compiled. On Windows, it uses the special Windows API calls; On other operating systems, it uses the bash special commands that I've explained above. diff --git a/15-arrays-project-clock/03-animating-the-clock/main.go b/15-arrays-project-clock/03-animating-the-clock/main.go index 3b96914..c0e44af 100644 --- a/15-arrays-project-clock/03-animating-the-clock/main.go +++ b/15-arrays-project-clock/03-animating-the-clock/main.go @@ -5,71 +5,6 @@ // License: https://creativecommons.org/licenses/by-nc-sa/4.0/ // -// ★★★★★★★★★★★★★★★★★★★★★★★★★★★ -// ★ GOAL 3 : Animate the Clock -// ★★★★★★★★★★★★★★★★★★★★★★★★★★★ - -// 1. Create an infinite loop to update the clock -// -// -// 2. Update the clock every second -// -// time.Sleep(time.Second) will stop the world for 1 second -// -// See this for more info: -// https://golang.org/pkg/time/#Sleep -// -// -// 3. Clear the screen before the infinite loop -// -// 1. Get my library for clearing the screen: -// -// go get -u github.com/inancgumus/screen -// -// 2. Then, import it and call it in your code like this: -// -// screen.Clear() -// -// 3. If you're using Go Playground instead, do this: -// -// fmt.Println("\f") -// -// -// 1. Move the cursor to the top-left corner of the screen, before each step -// of the infinite loop -// -// + Call this in your code like this: -// -// screen.MoveTopLeft() -// -// + If you're using Go Playground instead, do this again: -// -// fmt.Println("\f") -// -// -// ----------------------------------------------------------------------------- -// SIDE NOTE FOR THE CURIOUS -// ----------------------------------------------------------------------------- -// -// If you're curious about how my screen clearing package works, read on. -// -// On bash, it uses special commands, if you open the code, you can see that. -// -// \033 is a special control code: -// [2J clears the screen and the cursor -// [H moves the cursor to 0, 0 screen position -// -// See for more info: -// https://bluesock.org/~willkg/dev/ansi.html -// -// On Windows, I'm directly calling the Windows API functions. This is way -// advanced at this stage of the course, however, I'll explain it afterward. -// -// My package automatically adjusts itself depending on where it is compiled. -// On Windows, it uses the special Windows API calls; -// On other operating systems, it uses the bash special commands -// that I've explained above. - package main import ( diff --git a/15-arrays-project-clock/04-blinking-the-separators/README.md b/15-arrays-project-clock/04-blinking-the-separators/README.md new file mode 100644 index 0000000..b9a1b55 --- /dev/null +++ b/15-arrays-project-clock/04-blinking-the-separators/README.md @@ -0,0 +1,25 @@ +# GOAL 4: Blinking the Separators + +## Notes + +* Note main.go file contains the solution of the previous step. +* "solution" folder contains the solution for this step. + +## Challenge Steps + +Separators should be visible once in every two seconds. + +### Example: + +* 1st second: They're invisible +* 2nd second: visible +* 3rd second: invisible +* 4th second: visible + +### HINT + +There are two ways to do this: + +1. Manipulating the clock array directly (by adding/removing the separators) + +2. Or: Deciding what placeholders to print when printing the clock \ No newline at end of file diff --git a/15-arrays-project-clock/04-blinking-the-separators/main.go b/15-arrays-project-clock/04-blinking-the-separators/main.go index 7db9b08..f5ffa58 100644 --- a/15-arrays-project-clock/04-blinking-the-separators/main.go +++ b/15-arrays-project-clock/04-blinking-the-separators/main.go @@ -5,34 +5,13 @@ // License: https://creativecommons.org/licenses/by-nc-sa/4.0/ // -// ★★★★★★★★★★★★★★★★★★★★★★★★★★★ -// ★ GOAL 4: Blinking the Separators -// ★★★★★★★★★★★★★★★★★★★★★★★★★★★ - -// They should be visible per two seconds. -// -// Example: 1st second invisible -// 2nd second visible -// 3rd second invisible -// 4th second visible -// -// HINT: There are two ways to do this. -// -// A- Manipulating the clock array directly -// (by adding/removing the separators) -// -// B- Deciding what placeholders to print when printing the clock - package main import ( "fmt" "time" -) -const ( - screenClear = "\033[2J" - cursorMoveTop = "\033[H" + "github.com/inancgumus/screen" ) func main() { @@ -130,10 +109,10 @@ func main() { zero, one, two, three, four, five, six, seven, eight, nine, } - fmt.Print(screenClear) + screen.Clear() for { - fmt.Print(cursorMoveTop) + screen.MoveTopLeft() now := time.Now() hour, min, sec := now.Hour(), now.Minute(), now.Second()