diff --git a/chapter_05/activity_5.02/main.go b/chapter_05/activity_5.02/main.go new file mode 100644 index 0000000..db141ec --- /dev/null +++ b/chapter_05/activity_5.02/main.go @@ -0,0 +1,116 @@ +package main + +import "fmt" + +type Employee struct { + Id int + FirstName string + LastName string +} + +type Developer struct { + Individual Employee + HourlyRate int + WorkWeek [7]int +} + +type Weekday int + +const ( + Sunday Weekday = iota + Monday + Tuesday + Wednesday + Thursday + Friday + Saturday +) + +func main() { + + d := Developer{Individual: Employee{Id: 1, FirstName: "Tony", LastName: "Stark"}, HourlyRate: 10} + + x := nonLoggedHours() + + fmt.Println("Tracking hours worked so far today:", x(2)) + fmt.Println("Tracking hours worked so far today:", x(3)) + fmt.Println("Tracking hours worked so far today:", x(5)) + + d.LogHours(Monday, 8) + d.LogHours(Tuesday, 10) + d.LogHours(Wednesday, 10) + d.LogHours(Thursday, 10) + d.LogHours(Friday, 6) + d.LogHours(Saturday, 8) + + d.PayDetails() + +} + +func (d *Developer) LogHours(day Weekday, hours int) { + + d.WorkWeek[day] = hours + +} + +func (d *Developer) HoursWorked() int { + + total := 0 + for _, v := range d.WorkWeek { + total += v + } + return total + +} + +func (d *Developer) PayDay() (int, bool) { + + if d.HoursWorked() > 40 { + hoursOver := d.HoursWorked() - 40 + overTime := hoursOver * 2 * d.HourlyRate + regularPay := 40 * d.HourlyRate + return regularPay + overTime, true + } + + return d.HoursWorked() * d.HourlyRate, false + +} + +func nonLoggedHours() func(int) int { + + total := 0 + + return func(i int) int { + total += i + return total + } + +} + +func (d *Developer) PayDetails() { + + for i, v := range d.WorkWeek { + switch i { + case 0: + fmt.Println("Sunday hours:", v) + case 1: + fmt.Println("Monday hours:", v) + case 2: + fmt.Println("Tuesday hours:", v) + case 3: + fmt.Println("Wednesday hours:", v) + case 4: + fmt.Println("Thursday hours:", v) + case 5: + fmt.Println("Friday hours:", v) + case 6: + fmt.Println("Saturday hours:", v) + } + } + + fmt.Println("Hours worked this week:", d.HoursWorked()) + pay, over := d.PayDay() + fmt.Println("Pay for the week:", pay) + fmt.Println("Is this overtime pay:", over) + +} diff --git a/chapter_05/exercise_5.04/main.go b/chapter_05/exercise_5.04/main.go new file mode 100644 index 0000000..a6a2bcd --- /dev/null +++ b/chapter_05/exercise_5.04/main.go @@ -0,0 +1,40 @@ +package main + +import ( + "fmt" + "strings" +) + +func main() { + + hdr := []string{"empid", "employee", "address", "hours worked", + "hourly rate", "manager"} + result := csvHdrCol(hdr) + fmt.Println("Result:") + fmt.Println(result) + fmt.Println() + + hdr2 := []string{"employee", "empid", "hours worked", "address", + "manager", "hourly rate"} + result2 := csvHdrCol(hdr2) + fmt.Println("Result2:") + fmt.Println(result2) + fmt.Println() + +} + +func csvHdrCol(hdr []string) map[int]string { + + csvIdxToCol := make(map[int]string) + + for i, v := range hdr { + v = strings.TrimSpace(v) + switch strings.ToLower(v) { + case "employee", "hours worked", "hourly rate": + csvIdxToCol[i] = v + } + } + + return csvIdxToCol + +} diff --git a/chapter_05/exercise_5.05/main.go b/chapter_05/exercise_5.05/main.go new file mode 100644 index 0000000..328c9fd --- /dev/null +++ b/chapter_05/exercise_5.05/main.go @@ -0,0 +1,23 @@ +package main + +import "fmt" + +func main() { + + i := []int{5, 10, 15} + fmt.Println(sum(5, 4)) + fmt.Println(sum(i...)) + +} + +func sum(nums ...int) int { + + total := 0 + + for _, num := range nums { + total += num + } + + return total + +} diff --git a/chapter_05/exercise_5.06/main.go b/chapter_05/exercise_5.06/main.go new file mode 100644 index 0000000..651bc72 --- /dev/null +++ b/chapter_05/exercise_5.06/main.go @@ -0,0 +1,16 @@ +package main + +import "fmt" + +func main() { + + j := 9 + + x := func(i int) int { + return i * i + } + + fmt.Printf("The square of %d is %d\n", j, x(j)) + fmt.Printf("The square of %d is %d\n", j, func(i int) int { return i * i }(j)) + +} diff --git a/chapter_05/exercise_5.07/main.go b/chapter_05/exercise_5.07/main.go new file mode 100644 index 0000000..b781065 --- /dev/null +++ b/chapter_05/exercise_5.07/main.go @@ -0,0 +1,26 @@ +package main + +import "fmt" + +func main() { + + counter := 4 + + x := decrement(counter) + fmt.Println(x()) + fmt.Println(x()) + fmt.Println(x()) + fmt.Println(x()) + + fmt.Println("counter:", counter) + +} + +func decrement(i int) func() int { + + return func() int { + i-- + return i + } + +} diff --git a/chapter_05/exercise_5.08/main.go b/chapter_05/exercise_5.08/main.go new file mode 100644 index 0000000..ba59ddc --- /dev/null +++ b/chapter_05/exercise_5.08/main.go @@ -0,0 +1,32 @@ +package main + +import "fmt" + +func main() { + + devSalary := salary(50, 2080, developerSalary) + bossSalary := salary(150000, 25000, managerSalary) + + fmt.Printf("Boss salary: %d\n", bossSalary) + fmt.Printf("Developer salary: %d\n", devSalary) + +} + +func salary(x, y int, f func(int, int) int) int { + + pay := f(x, y) + return pay + +} + +func developerSalary(hourlyRate, hoursWorked int) int { + + return hourlyRate * hoursWorked + +} + +func managerSalary(baseSalary, bonus int) int { + + return baseSalary + bonus + +}