diff --git a/03-10-answer9/averages.go b/03-02-answer1/averages.go similarity index 100% rename from 03-10-answer9/averages.go rename to 03-02-answer1/averages.go diff --git a/03-05-answer4/averages_test.go b/03-02-answer1/averages_test.go similarity index 100% rename from 03-05-answer4/averages_test.go rename to 03-02-answer1/averages_test.go diff --git a/03-03-answer2/blood_type.go b/03-02-answer1/blood_type.go similarity index 100% rename from 03-03-answer2/blood_type.go rename to 03-02-answer1/blood_type.go diff --git a/03-08-answer7/ints.go b/03-02-answer1/ints.go similarity index 100% rename from 03-08-answer7/ints.go rename to 03-02-answer1/ints.go diff --git a/03-08-answer7/ints_test.go b/03-02-answer1/ints_test.go similarity index 100% rename from 03-08-answer7/ints_test.go rename to 03-02-answer1/ints_test.go diff --git a/03-05-answer4/main.go b/03-02-answer1/main.go similarity index 100% rename from 03-05-answer4/main.go rename to 03-02-answer1/main.go diff --git a/03-09-answer8/people.go b/03-02-answer1/people.go similarity index 100% rename from 03-09-answer8/people.go rename to 03-02-answer1/people.go diff --git a/03-09-answer8/people_test.go b/03-02-answer1/people_test.go similarity index 100% rename from 03-09-answer8/people_test.go rename to 03-02-answer1/people_test.go diff --git a/03-02-answer1/person.go b/03-02-answer1/person.go index 9ef1b63..25ece9d 100644 --- a/03-02-answer1/person.go +++ b/03-02-answer1/person.go @@ -1,19 +1,9 @@ package main import ( - "fmt" "time" ) -type BloodType int - -const ( - O BloodType = 0 - A BloodType = 1 - B BloodType = 2 - AB BloodType = 3 -) - type Person struct { FirstName string LastName string @@ -21,50 +11,11 @@ type Person struct { Birthday string } -var people = []*Person{ - {"山田", "太郎", 0, "1960-01-02"}, // 60 - {"鈴木", "一郎", A, "1970-03-04"}, // 50 - {"佐藤", "真一", A, "1980-05-06"}, // 40 - {"加藤", "一茶", B, "1990-07-08"}, // 30 - {"伊藤", "浩史", AB, "2000-09-10"}, // 20 -} - -func main() { +func (x *Person) Age() int { now := time.Now() - ages := make([]int, len(people)) - agesMap := map[BloodType][]int{ - O: []int{}, - A: []int{}, - B: []int{}, - AB: []int{}, - } - for idx, person := range people { - d, err := time.Parse("2006-01-02", person.Birthday) - if err != nil { - panic(err) - } - age := now.Year() - d.Year() - ages[idx] = age - agesMap[person.BloodType] = append(agesMap[person.BloodType], age) + d, err := time.Parse("2006-01-02", x.Birthday) + if err != nil { + panic(err) } - - sum := 0 - for _, age := range ages { - sum += age - } - - sumMap := map[BloodType]int{} - for bloodType, ages := range agesMap { - s := 0 - for _, age := range ages { - s += age - } - sumMap[bloodType] = s - } - - fmt.Printf("全体平均年齢: %.02f 歳\n", float32(sum)/float32(len(people))) - fmt.Printf("O型平均年齢: %.02f 歳\n", float32(sumMap[O])/float32(len(agesMap[O]))) - fmt.Printf("A型平均年齢: %.02f 歳\n", float32(sumMap[A])/float32(len(agesMap[A]))) - fmt.Printf("B型平均年齢: %.02f 歳\n", float32(sumMap[B])/float32(len(agesMap[B]))) - fmt.Printf("AB型平均年齢: %.02f 歳\n", float32(sumMap[AB])/float32(len(agesMap[AB]))) + return now.Year() - d.Year() } diff --git a/03-06-answer5/person_test.go b/03-02-answer1/person_test.go similarity index 100% rename from 03-06-answer5/person_test.go rename to 03-02-answer1/person_test.go diff --git a/03-03-answer2/go.mod b/03-03-answer2/go.mod deleted file mode 100644 index 98d9f66..0000000 --- a/03-03-answer2/go.mod +++ /dev/null @@ -1,3 +0,0 @@ -module main - -go 1.13 diff --git a/03-03-answer2/main.go b/03-03-answer2/main.go deleted file mode 100644 index c7fc967..0000000 --- a/03-03-answer2/main.go +++ /dev/null @@ -1,46 +0,0 @@ -package main - -import ( - "fmt" - "time" -) - -func main() { - now := time.Now() - ages := make([]int, len(people)) - agesMap := map[BloodType][]int{ - O: []int{}, - A: []int{}, - B: []int{}, - AB: []int{}, - } - for idx, person := range people { - d, err := time.Parse("2006-01-02", person.Birthday) - if err != nil { - panic(err) - } - age := now.Year() - d.Year() - ages[idx] = age - agesMap[person.BloodType] = append(agesMap[person.BloodType], age) - } - - sum := 0 - for _, age := range ages { - sum += age - } - - sumMap := map[BloodType]int{} - for bloodType, ages := range agesMap { - s := 0 - for _, age := range ages { - s += age - } - sumMap[bloodType] = s - } - - fmt.Printf("全体平均年齢: %.02f 歳\n", float32(sum)/float32(len(people))) - fmt.Printf("O型平均年齢: %.02f 歳\n", float32(sumMap[O])/float32(len(agesMap[O]))) - fmt.Printf("A型平均年齢: %.02f 歳\n", float32(sumMap[A])/float32(len(agesMap[A]))) - fmt.Printf("B型平均年齢: %.02f 歳\n", float32(sumMap[B])/float32(len(agesMap[B]))) - fmt.Printf("AB型平均年齢: %.02f 歳\n", float32(sumMap[AB])/float32(len(agesMap[AB]))) -} diff --git a/03-03-answer2/person.go b/03-03-answer2/person.go deleted file mode 100644 index 86580f6..0000000 --- a/03-03-answer2/person.go +++ /dev/null @@ -1,16 +0,0 @@ -package main - -type Person struct { - FirstName string - LastName string - BloodType BloodType - Birthday string -} - -var people = []*Person{ - {"山田", "太郎", 0, "1960-01-02"}, // 60 - {"鈴木", "一郎", A, "1970-03-04"}, // 50 - {"佐藤", "真一", A, "1980-05-06"}, // 40 - {"加藤", "一茶", B, "1990-07-08"}, // 30 - {"伊藤", "浩史", AB, "2000-09-10"}, // 20 -} diff --git a/03-04-answer3/averages.go b/03-04-answer3/averages.go deleted file mode 100644 index d9b48f5..0000000 --- a/03-04-answer3/averages.go +++ /dev/null @@ -1,48 +0,0 @@ -package main - -import ( - "time" -) - -func averages(people []*Person) (float32, map[BloodType]float32) { - now := time.Now() - ages := make([]int, len(people)) - agesMap := map[BloodType][]int{ - O: []int{}, - A: []int{}, - B: []int{}, - AB: []int{}, - } - for idx, person := range people { - d, err := time.Parse("2006-01-02", person.Birthday) - if err != nil { - panic(err) - } - age := now.Year() - d.Year() - ages[idx] = age - agesMap[person.BloodType] = append(agesMap[person.BloodType], age) - } - - sum := 0 - for _, age := range ages { - sum += age - } - - sumMap := map[BloodType]int{} - for bloodType, ages := range agesMap { - s := 0 - for _, age := range ages { - s += age - } - sumMap[bloodType] = s - } - - avgMap := map[BloodType]float32{ - O: float32(sumMap[O]) / float32(len(agesMap[O])), - A: float32(sumMap[A]) / float32(len(agesMap[A])), - B: float32(sumMap[B]) / float32(len(agesMap[B])), - AB: float32(sumMap[AB]) / float32(len(agesMap[AB])), - } - - return float32(sum) / float32(len(people)), avgMap -} diff --git a/03-04-answer3/blood_type.go b/03-04-answer3/blood_type.go deleted file mode 100644 index 338593d..0000000 --- a/03-04-answer3/blood_type.go +++ /dev/null @@ -1,10 +0,0 @@ -package main - -type BloodType int - -const ( - O BloodType = 0 - A BloodType = 1 - B BloodType = 2 - AB BloodType = 3 -) diff --git a/03-04-answer3/go.mod b/03-04-answer3/go.mod deleted file mode 100644 index 98d9f66..0000000 --- a/03-04-answer3/go.mod +++ /dev/null @@ -1,3 +0,0 @@ -module main - -go 1.13 diff --git a/03-04-answer3/main.go b/03-04-answer3/main.go deleted file mode 100644 index 90728db..0000000 --- a/03-04-answer3/main.go +++ /dev/null @@ -1,23 +0,0 @@ -package main - -import ( - "fmt" -) - -func main() { - var people = []*Person{ - {"山田", "太郎", O, "1960-01-02"}, // 60 - {"鈴木", "一郎", A, "1970-03-04"}, // 50 - {"佐藤", "真一", A, "1980-05-06"}, // 40 - {"加藤", "一茶", B, "1990-07-08"}, // 30 - {"伊藤", "浩史", AB, "2000-09-10"}, // 20 - } - - allAvg, avgMap := averages(people) - - fmt.Printf("全体平均年齢: %.02f 歳\n", allAvg) - fmt.Printf("O型平均年齢: %.02f 歳\n", avgMap[O]) - fmt.Printf("A型平均年齢: %.02f 歳\n", avgMap[A]) - fmt.Printf("B型平均年齢: %.02f 歳\n", avgMap[B]) - fmt.Printf("AB型平均年齢: %.02f 歳\n", avgMap[AB]) -} diff --git a/03-04-answer3/person.go b/03-04-answer3/person.go deleted file mode 100644 index 0cec202..0000000 --- a/03-04-answer3/person.go +++ /dev/null @@ -1,8 +0,0 @@ -package main - -type Person struct { - FirstName string - LastName string - BloodType BloodType - Birthday string -} diff --git a/03-05-answer4/averages.go b/03-05-answer4/averages.go deleted file mode 100644 index d9b48f5..0000000 --- a/03-05-answer4/averages.go +++ /dev/null @@ -1,48 +0,0 @@ -package main - -import ( - "time" -) - -func averages(people []*Person) (float32, map[BloodType]float32) { - now := time.Now() - ages := make([]int, len(people)) - agesMap := map[BloodType][]int{ - O: []int{}, - A: []int{}, - B: []int{}, - AB: []int{}, - } - for idx, person := range people { - d, err := time.Parse("2006-01-02", person.Birthday) - if err != nil { - panic(err) - } - age := now.Year() - d.Year() - ages[idx] = age - agesMap[person.BloodType] = append(agesMap[person.BloodType], age) - } - - sum := 0 - for _, age := range ages { - sum += age - } - - sumMap := map[BloodType]int{} - for bloodType, ages := range agesMap { - s := 0 - for _, age := range ages { - s += age - } - sumMap[bloodType] = s - } - - avgMap := map[BloodType]float32{ - O: float32(sumMap[O]) / float32(len(agesMap[O])), - A: float32(sumMap[A]) / float32(len(agesMap[A])), - B: float32(sumMap[B]) / float32(len(agesMap[B])), - AB: float32(sumMap[AB]) / float32(len(agesMap[AB])), - } - - return float32(sum) / float32(len(people)), avgMap -} diff --git a/03-05-answer4/blood_type.go b/03-05-answer4/blood_type.go deleted file mode 100644 index 338593d..0000000 --- a/03-05-answer4/blood_type.go +++ /dev/null @@ -1,10 +0,0 @@ -package main - -type BloodType int - -const ( - O BloodType = 0 - A BloodType = 1 - B BloodType = 2 - AB BloodType = 3 -) diff --git a/03-05-answer4/go.mod b/03-05-answer4/go.mod deleted file mode 100644 index 98d9f66..0000000 --- a/03-05-answer4/go.mod +++ /dev/null @@ -1,3 +0,0 @@ -module main - -go 1.13 diff --git a/03-05-answer4/person.go b/03-05-answer4/person.go deleted file mode 100644 index 0cec202..0000000 --- a/03-05-answer4/person.go +++ /dev/null @@ -1,8 +0,0 @@ -package main - -type Person struct { - FirstName string - LastName string - BloodType BloodType - Birthday string -} diff --git a/03-06-answer5/averages.go b/03-06-answer5/averages.go deleted file mode 100644 index d9b48f5..0000000 --- a/03-06-answer5/averages.go +++ /dev/null @@ -1,48 +0,0 @@ -package main - -import ( - "time" -) - -func averages(people []*Person) (float32, map[BloodType]float32) { - now := time.Now() - ages := make([]int, len(people)) - agesMap := map[BloodType][]int{ - O: []int{}, - A: []int{}, - B: []int{}, - AB: []int{}, - } - for idx, person := range people { - d, err := time.Parse("2006-01-02", person.Birthday) - if err != nil { - panic(err) - } - age := now.Year() - d.Year() - ages[idx] = age - agesMap[person.BloodType] = append(agesMap[person.BloodType], age) - } - - sum := 0 - for _, age := range ages { - sum += age - } - - sumMap := map[BloodType]int{} - for bloodType, ages := range agesMap { - s := 0 - for _, age := range ages { - s += age - } - sumMap[bloodType] = s - } - - avgMap := map[BloodType]float32{ - O: float32(sumMap[O]) / float32(len(agesMap[O])), - A: float32(sumMap[A]) / float32(len(agesMap[A])), - B: float32(sumMap[B]) / float32(len(agesMap[B])), - AB: float32(sumMap[AB]) / float32(len(agesMap[AB])), - } - - return float32(sum) / float32(len(people)), avgMap -} diff --git a/03-06-answer5/averages_test.go b/03-06-answer5/averages_test.go deleted file mode 100644 index c04c990..0000000 --- a/03-06-answer5/averages_test.go +++ /dev/null @@ -1,33 +0,0 @@ -package main - -import ( - "testing" -) - -func TestAverages(t *testing.T) { - { - allAvg, avgMap := averages([]*Person{ - {"山本", "磯六", B, "1950-01-02"}, // 70 - {"山田", "太郎", O, "1960-01-02"}, // 60 - {"鈴木", "一郎", A, "1970-03-04"}, // 50 - {"佐藤", "真一", A, "1980-05-06"}, // 40 - {"加藤", "一茶", B, "1990-07-08"}, // 30 - {"伊藤", "浩史", AB, "2000-09-10"}, // 20 - }) - if 45 != allAvg { - t.Fatalf("allAvg must be 45 but was %f", allAvg) - } - expectedMap := map[BloodType]float32{ - O: 60.0, - A: 45.0, - B: 50.0, - AB: 20.0, - } - for bloodType, expected := range expectedMap { - if expected != avgMap[bloodType] { - t.Fatalf("allAvg must be %f but was %f", expected, avgMap[bloodType]) - } - } - } - -} diff --git a/03-06-answer5/blood_type.go b/03-06-answer5/blood_type.go deleted file mode 100644 index 338593d..0000000 --- a/03-06-answer5/blood_type.go +++ /dev/null @@ -1,10 +0,0 @@ -package main - -type BloodType int - -const ( - O BloodType = 0 - A BloodType = 1 - B BloodType = 2 - AB BloodType = 3 -) diff --git a/03-06-answer5/go.mod b/03-06-answer5/go.mod deleted file mode 100644 index 98d9f66..0000000 --- a/03-06-answer5/go.mod +++ /dev/null @@ -1,3 +0,0 @@ -module main - -go 1.13 diff --git a/03-06-answer5/main.go b/03-06-answer5/main.go deleted file mode 100644 index ae50864..0000000 --- a/03-06-answer5/main.go +++ /dev/null @@ -1,23 +0,0 @@ -package main - -import ( - "fmt" -) - -func main() { - var people = []*Person{ - {"山田", "太郎", 0, "1960-01-02"}, // 60 - {"鈴木", "一郎", A, "1970-03-04"}, // 50 - {"佐藤", "真一", A, "1980-05-06"}, // 40 - {"加藤", "一茶", B, "1990-07-08"}, // 30 - {"伊藤", "浩史", AB, "2000-09-10"}, // 20 - } - - allAvg, avgMap := averages(people) - - fmt.Printf("全体平均年齢: %.02f 歳\n", allAvg) - fmt.Printf("O型平均年齢: %.02f 歳\n", avgMap[O]) - fmt.Printf("A型平均年齢: %.02f 歳\n", avgMap[A]) - fmt.Printf("B型平均年齢: %.02f 歳\n", avgMap[B]) - fmt.Printf("AB型平均年齢: %.02f 歳\n", avgMap[AB]) -} diff --git a/03-06-answer5/person.go b/03-06-answer5/person.go deleted file mode 100644 index 25ece9d..0000000 --- a/03-06-answer5/person.go +++ /dev/null @@ -1,21 +0,0 @@ -package main - -import ( - "time" -) - -type Person struct { - FirstName string - LastName string - BloodType BloodType - Birthday string -} - -func (x *Person) Age() int { - now := time.Now() - d, err := time.Parse("2006-01-02", x.Birthday) - if err != nil { - panic(err) - } - return now.Year() - d.Year() -} diff --git a/03-07-answer6/averages.go b/03-07-answer6/averages.go deleted file mode 100644 index d9b48f5..0000000 --- a/03-07-answer6/averages.go +++ /dev/null @@ -1,48 +0,0 @@ -package main - -import ( - "time" -) - -func averages(people []*Person) (float32, map[BloodType]float32) { - now := time.Now() - ages := make([]int, len(people)) - agesMap := map[BloodType][]int{ - O: []int{}, - A: []int{}, - B: []int{}, - AB: []int{}, - } - for idx, person := range people { - d, err := time.Parse("2006-01-02", person.Birthday) - if err != nil { - panic(err) - } - age := now.Year() - d.Year() - ages[idx] = age - agesMap[person.BloodType] = append(agesMap[person.BloodType], age) - } - - sum := 0 - for _, age := range ages { - sum += age - } - - sumMap := map[BloodType]int{} - for bloodType, ages := range agesMap { - s := 0 - for _, age := range ages { - s += age - } - sumMap[bloodType] = s - } - - avgMap := map[BloodType]float32{ - O: float32(sumMap[O]) / float32(len(agesMap[O])), - A: float32(sumMap[A]) / float32(len(agesMap[A])), - B: float32(sumMap[B]) / float32(len(agesMap[B])), - AB: float32(sumMap[AB]) / float32(len(agesMap[AB])), - } - - return float32(sum) / float32(len(people)), avgMap -} diff --git a/03-07-answer6/averages_test.go b/03-07-answer6/averages_test.go deleted file mode 100644 index c04c990..0000000 --- a/03-07-answer6/averages_test.go +++ /dev/null @@ -1,33 +0,0 @@ -package main - -import ( - "testing" -) - -func TestAverages(t *testing.T) { - { - allAvg, avgMap := averages([]*Person{ - {"山本", "磯六", B, "1950-01-02"}, // 70 - {"山田", "太郎", O, "1960-01-02"}, // 60 - {"鈴木", "一郎", A, "1970-03-04"}, // 50 - {"佐藤", "真一", A, "1980-05-06"}, // 40 - {"加藤", "一茶", B, "1990-07-08"}, // 30 - {"伊藤", "浩史", AB, "2000-09-10"}, // 20 - }) - if 45 != allAvg { - t.Fatalf("allAvg must be 45 but was %f", allAvg) - } - expectedMap := map[BloodType]float32{ - O: 60.0, - A: 45.0, - B: 50.0, - AB: 20.0, - } - for bloodType, expected := range expectedMap { - if expected != avgMap[bloodType] { - t.Fatalf("allAvg must be %f but was %f", expected, avgMap[bloodType]) - } - } - } - -} diff --git a/03-07-answer6/blood_type.go b/03-07-answer6/blood_type.go deleted file mode 100644 index 338593d..0000000 --- a/03-07-answer6/blood_type.go +++ /dev/null @@ -1,10 +0,0 @@ -package main - -type BloodType int - -const ( - O BloodType = 0 - A BloodType = 1 - B BloodType = 2 - AB BloodType = 3 -) diff --git a/03-07-answer6/go.mod b/03-07-answer6/go.mod deleted file mode 100644 index 98d9f66..0000000 --- a/03-07-answer6/go.mod +++ /dev/null @@ -1,3 +0,0 @@ -module main - -go 1.13 diff --git a/03-07-answer6/main.go b/03-07-answer6/main.go deleted file mode 100644 index ae50864..0000000 --- a/03-07-answer6/main.go +++ /dev/null @@ -1,23 +0,0 @@ -package main - -import ( - "fmt" -) - -func main() { - var people = []*Person{ - {"山田", "太郎", 0, "1960-01-02"}, // 60 - {"鈴木", "一郎", A, "1970-03-04"}, // 50 - {"佐藤", "真一", A, "1980-05-06"}, // 40 - {"加藤", "一茶", B, "1990-07-08"}, // 30 - {"伊藤", "浩史", AB, "2000-09-10"}, // 20 - } - - allAvg, avgMap := averages(people) - - fmt.Printf("全体平均年齢: %.02f 歳\n", allAvg) - fmt.Printf("O型平均年齢: %.02f 歳\n", avgMap[O]) - fmt.Printf("A型平均年齢: %.02f 歳\n", avgMap[A]) - fmt.Printf("B型平均年齢: %.02f 歳\n", avgMap[B]) - fmt.Printf("AB型平均年齢: %.02f 歳\n", avgMap[AB]) -} diff --git a/03-07-answer6/people.go b/03-07-answer6/people.go deleted file mode 100644 index e1ae117..0000000 --- a/03-07-answer6/people.go +++ /dev/null @@ -1,11 +0,0 @@ -package main - -type People []*Person - -func (s People) Ages() []int { - r := make([]int, len(s)) - for idx, i := range s { - r[idx] = i.Age() - } - return r -} diff --git a/03-07-answer6/people_test.go b/03-07-answer6/people_test.go deleted file mode 100644 index 8c8fb10..0000000 --- a/03-07-answer6/people_test.go +++ /dev/null @@ -1,29 +0,0 @@ -package main - -import ( - "testing" -) - -func TestPeopleAges(t *testing.T) { - people := People{ - {"山本", "磯六", B, "1950-01-02"}, - {"山田", "太郎", O, "1960-01-02"}, - {"鈴木", "一郎", A, "1970-03-04"}, - {"佐藤", "真一", A, "1980-05-06"}, - {"加藤", "一茶", B, "1990-07-08"}, - {"伊藤", "浩史", AB, "2000-09-10"}, - } - - expectedAges := []int{70, 60, 50, 40, 30, 20} - actualAges := people.Ages() - - if len(expectedAges) != len(actualAges) { - t.Fatalf("The length of ages must be %d but was %d", len(expectedAges), len(actualAges)) - } - - for idx, expectedAge := range expectedAges { - if expectedAge != actualAges[idx] { - t.Fatalf("The ages[%d] must be %d but was %d", idx, expectedAge, actualAges[idx]) - } - } -} diff --git a/03-07-answer6/person.go b/03-07-answer6/person.go deleted file mode 100644 index 25ece9d..0000000 --- a/03-07-answer6/person.go +++ /dev/null @@ -1,21 +0,0 @@ -package main - -import ( - "time" -) - -type Person struct { - FirstName string - LastName string - BloodType BloodType - Birthday string -} - -func (x *Person) Age() int { - now := time.Now() - d, err := time.Parse("2006-01-02", x.Birthday) - if err != nil { - panic(err) - } - return now.Year() - d.Year() -} diff --git a/03-07-answer6/person_test.go b/03-07-answer6/person_test.go deleted file mode 100644 index 4987aa0..0000000 --- a/03-07-answer6/person_test.go +++ /dev/null @@ -1,25 +0,0 @@ -package main - -import ( - "testing" -) - -func TestPersonAge(t *testing.T) { - patterns := []struct { - person *Person - age int - }{ - {&Person{"山本", "磯六", B, "1950-01-02"}, 70}, - {&Person{"山田", "太郎", O, "1960-01-02"}, 60}, - {&Person{"鈴木", "一郎", A, "1970-03-04"}, 50}, - {&Person{"佐藤", "真一", A, "1980-05-06"}, 40}, - {&Person{"加藤", "一茶", B, "1990-07-08"}, 30}, - {&Person{"伊藤", "浩史", AB, "2000-09-10"}, 20}, - } - - for _, ptn := range patterns { - if ptn.age != ptn.person.Age() { - t.Fatalf("The age of %v must be %d but was %d", *ptn.person, ptn.age, ptn.person.Age()) - } - } -} diff --git a/03-08-answer7/averages.go b/03-08-answer7/averages.go deleted file mode 100644 index d9b48f5..0000000 --- a/03-08-answer7/averages.go +++ /dev/null @@ -1,48 +0,0 @@ -package main - -import ( - "time" -) - -func averages(people []*Person) (float32, map[BloodType]float32) { - now := time.Now() - ages := make([]int, len(people)) - agesMap := map[BloodType][]int{ - O: []int{}, - A: []int{}, - B: []int{}, - AB: []int{}, - } - for idx, person := range people { - d, err := time.Parse("2006-01-02", person.Birthday) - if err != nil { - panic(err) - } - age := now.Year() - d.Year() - ages[idx] = age - agesMap[person.BloodType] = append(agesMap[person.BloodType], age) - } - - sum := 0 - for _, age := range ages { - sum += age - } - - sumMap := map[BloodType]int{} - for bloodType, ages := range agesMap { - s := 0 - for _, age := range ages { - s += age - } - sumMap[bloodType] = s - } - - avgMap := map[BloodType]float32{ - O: float32(sumMap[O]) / float32(len(agesMap[O])), - A: float32(sumMap[A]) / float32(len(agesMap[A])), - B: float32(sumMap[B]) / float32(len(agesMap[B])), - AB: float32(sumMap[AB]) / float32(len(agesMap[AB])), - } - - return float32(sum) / float32(len(people)), avgMap -} diff --git a/03-08-answer7/averages_test.go b/03-08-answer7/averages_test.go deleted file mode 100644 index c04c990..0000000 --- a/03-08-answer7/averages_test.go +++ /dev/null @@ -1,33 +0,0 @@ -package main - -import ( - "testing" -) - -func TestAverages(t *testing.T) { - { - allAvg, avgMap := averages([]*Person{ - {"山本", "磯六", B, "1950-01-02"}, // 70 - {"山田", "太郎", O, "1960-01-02"}, // 60 - {"鈴木", "一郎", A, "1970-03-04"}, // 50 - {"佐藤", "真一", A, "1980-05-06"}, // 40 - {"加藤", "一茶", B, "1990-07-08"}, // 30 - {"伊藤", "浩史", AB, "2000-09-10"}, // 20 - }) - if 45 != allAvg { - t.Fatalf("allAvg must be 45 but was %f", allAvg) - } - expectedMap := map[BloodType]float32{ - O: 60.0, - A: 45.0, - B: 50.0, - AB: 20.0, - } - for bloodType, expected := range expectedMap { - if expected != avgMap[bloodType] { - t.Fatalf("allAvg must be %f but was %f", expected, avgMap[bloodType]) - } - } - } - -} diff --git a/03-08-answer7/blood_type.go b/03-08-answer7/blood_type.go deleted file mode 100644 index 338593d..0000000 --- a/03-08-answer7/blood_type.go +++ /dev/null @@ -1,10 +0,0 @@ -package main - -type BloodType int - -const ( - O BloodType = 0 - A BloodType = 1 - B BloodType = 2 - AB BloodType = 3 -) diff --git a/03-08-answer7/go.mod b/03-08-answer7/go.mod deleted file mode 100644 index 98d9f66..0000000 --- a/03-08-answer7/go.mod +++ /dev/null @@ -1,3 +0,0 @@ -module main - -go 1.13 diff --git a/03-08-answer7/main.go b/03-08-answer7/main.go deleted file mode 100644 index ae50864..0000000 --- a/03-08-answer7/main.go +++ /dev/null @@ -1,23 +0,0 @@ -package main - -import ( - "fmt" -) - -func main() { - var people = []*Person{ - {"山田", "太郎", 0, "1960-01-02"}, // 60 - {"鈴木", "一郎", A, "1970-03-04"}, // 50 - {"佐藤", "真一", A, "1980-05-06"}, // 40 - {"加藤", "一茶", B, "1990-07-08"}, // 30 - {"伊藤", "浩史", AB, "2000-09-10"}, // 20 - } - - allAvg, avgMap := averages(people) - - fmt.Printf("全体平均年齢: %.02f 歳\n", allAvg) - fmt.Printf("O型平均年齢: %.02f 歳\n", avgMap[O]) - fmt.Printf("A型平均年齢: %.02f 歳\n", avgMap[A]) - fmt.Printf("B型平均年齢: %.02f 歳\n", avgMap[B]) - fmt.Printf("AB型平均年齢: %.02f 歳\n", avgMap[AB]) -} diff --git a/03-08-answer7/people.go b/03-08-answer7/people.go deleted file mode 100644 index adaf937..0000000 --- a/03-08-answer7/people.go +++ /dev/null @@ -1,11 +0,0 @@ -package main - -type People []*Person - -func (s People) Ages() Ints { - r := make(Ints, len(s)) - for idx, i := range s { - r[idx] = i.Age() - } - return r -} diff --git a/03-08-answer7/people_test.go b/03-08-answer7/people_test.go deleted file mode 100644 index 8c8fb10..0000000 --- a/03-08-answer7/people_test.go +++ /dev/null @@ -1,29 +0,0 @@ -package main - -import ( - "testing" -) - -func TestPeopleAges(t *testing.T) { - people := People{ - {"山本", "磯六", B, "1950-01-02"}, - {"山田", "太郎", O, "1960-01-02"}, - {"鈴木", "一郎", A, "1970-03-04"}, - {"佐藤", "真一", A, "1980-05-06"}, - {"加藤", "一茶", B, "1990-07-08"}, - {"伊藤", "浩史", AB, "2000-09-10"}, - } - - expectedAges := []int{70, 60, 50, 40, 30, 20} - actualAges := people.Ages() - - if len(expectedAges) != len(actualAges) { - t.Fatalf("The length of ages must be %d but was %d", len(expectedAges), len(actualAges)) - } - - for idx, expectedAge := range expectedAges { - if expectedAge != actualAges[idx] { - t.Fatalf("The ages[%d] must be %d but was %d", idx, expectedAge, actualAges[idx]) - } - } -} diff --git a/03-08-answer7/person.go b/03-08-answer7/person.go deleted file mode 100644 index 25ece9d..0000000 --- a/03-08-answer7/person.go +++ /dev/null @@ -1,21 +0,0 @@ -package main - -import ( - "time" -) - -type Person struct { - FirstName string - LastName string - BloodType BloodType - Birthday string -} - -func (x *Person) Age() int { - now := time.Now() - d, err := time.Parse("2006-01-02", x.Birthday) - if err != nil { - panic(err) - } - return now.Year() - d.Year() -} diff --git a/03-08-answer7/person_test.go b/03-08-answer7/person_test.go deleted file mode 100644 index 4987aa0..0000000 --- a/03-08-answer7/person_test.go +++ /dev/null @@ -1,25 +0,0 @@ -package main - -import ( - "testing" -) - -func TestPersonAge(t *testing.T) { - patterns := []struct { - person *Person - age int - }{ - {&Person{"山本", "磯六", B, "1950-01-02"}, 70}, - {&Person{"山田", "太郎", O, "1960-01-02"}, 60}, - {&Person{"鈴木", "一郎", A, "1970-03-04"}, 50}, - {&Person{"佐藤", "真一", A, "1980-05-06"}, 40}, - {&Person{"加藤", "一茶", B, "1990-07-08"}, 30}, - {&Person{"伊藤", "浩史", AB, "2000-09-10"}, 20}, - } - - for _, ptn := range patterns { - if ptn.age != ptn.person.Age() { - t.Fatalf("The age of %v must be %d but was %d", *ptn.person, ptn.age, ptn.person.Age()) - } - } -} diff --git a/03-09-answer8/averages.go b/03-09-answer8/averages.go deleted file mode 100644 index d9b48f5..0000000 --- a/03-09-answer8/averages.go +++ /dev/null @@ -1,48 +0,0 @@ -package main - -import ( - "time" -) - -func averages(people []*Person) (float32, map[BloodType]float32) { - now := time.Now() - ages := make([]int, len(people)) - agesMap := map[BloodType][]int{ - O: []int{}, - A: []int{}, - B: []int{}, - AB: []int{}, - } - for idx, person := range people { - d, err := time.Parse("2006-01-02", person.Birthday) - if err != nil { - panic(err) - } - age := now.Year() - d.Year() - ages[idx] = age - agesMap[person.BloodType] = append(agesMap[person.BloodType], age) - } - - sum := 0 - for _, age := range ages { - sum += age - } - - sumMap := map[BloodType]int{} - for bloodType, ages := range agesMap { - s := 0 - for _, age := range ages { - s += age - } - sumMap[bloodType] = s - } - - avgMap := map[BloodType]float32{ - O: float32(sumMap[O]) / float32(len(agesMap[O])), - A: float32(sumMap[A]) / float32(len(agesMap[A])), - B: float32(sumMap[B]) / float32(len(agesMap[B])), - AB: float32(sumMap[AB]) / float32(len(agesMap[AB])), - } - - return float32(sum) / float32(len(people)), avgMap -} diff --git a/03-09-answer8/averages_test.go b/03-09-answer8/averages_test.go deleted file mode 100644 index c04c990..0000000 --- a/03-09-answer8/averages_test.go +++ /dev/null @@ -1,33 +0,0 @@ -package main - -import ( - "testing" -) - -func TestAverages(t *testing.T) { - { - allAvg, avgMap := averages([]*Person{ - {"山本", "磯六", B, "1950-01-02"}, // 70 - {"山田", "太郎", O, "1960-01-02"}, // 60 - {"鈴木", "一郎", A, "1970-03-04"}, // 50 - {"佐藤", "真一", A, "1980-05-06"}, // 40 - {"加藤", "一茶", B, "1990-07-08"}, // 30 - {"伊藤", "浩史", AB, "2000-09-10"}, // 20 - }) - if 45 != allAvg { - t.Fatalf("allAvg must be 45 but was %f", allAvg) - } - expectedMap := map[BloodType]float32{ - O: 60.0, - A: 45.0, - B: 50.0, - AB: 20.0, - } - for bloodType, expected := range expectedMap { - if expected != avgMap[bloodType] { - t.Fatalf("allAvg must be %f but was %f", expected, avgMap[bloodType]) - } - } - } - -} diff --git a/03-09-answer8/blood_type.go b/03-09-answer8/blood_type.go deleted file mode 100644 index 338593d..0000000 --- a/03-09-answer8/blood_type.go +++ /dev/null @@ -1,10 +0,0 @@ -package main - -type BloodType int - -const ( - O BloodType = 0 - A BloodType = 1 - B BloodType = 2 - AB BloodType = 3 -) diff --git a/03-09-answer8/go.mod b/03-09-answer8/go.mod deleted file mode 100644 index 98d9f66..0000000 --- a/03-09-answer8/go.mod +++ /dev/null @@ -1,3 +0,0 @@ -module main - -go 1.13 diff --git a/03-09-answer8/ints.go b/03-09-answer8/ints.go deleted file mode 100644 index 9e79459..0000000 --- a/03-09-answer8/ints.go +++ /dev/null @@ -1,15 +0,0 @@ -package main - -type Ints []int - -func (s Ints) Sum() int { - r := 0 - for _, i := range s { - r += i - } - return r -} - -func (s Ints) Average() float32 { - return float32(s.Sum()) / float32(len(s)) -} diff --git a/03-09-answer8/ints_test.go b/03-09-answer8/ints_test.go deleted file mode 100644 index beffb78..0000000 --- a/03-09-answer8/ints_test.go +++ /dev/null @@ -1,22 +0,0 @@ -package main - -import ( - "testing" -) - -func TestIntsAverage(t *testing.T) { - patterns := []struct { - ints Ints - val float32 - }{ - {Ints{1, 2, 3}, 2}, - {Ints{4, 5, 6}, 5}, - {Ints{1, 2, 3, 4, 5, 6, 7, 8, 9, 10}, 5.5}, - } - - for _, ptn := range patterns { - if ptn.val != ptn.ints.Average() { - t.Fatalf("The average of %v must be %f but was %f", ptn.ints, ptn.val, ptn.ints.Average()) - } - } -} diff --git a/03-09-answer8/main.go b/03-09-answer8/main.go deleted file mode 100644 index ae50864..0000000 --- a/03-09-answer8/main.go +++ /dev/null @@ -1,23 +0,0 @@ -package main - -import ( - "fmt" -) - -func main() { - var people = []*Person{ - {"山田", "太郎", 0, "1960-01-02"}, // 60 - {"鈴木", "一郎", A, "1970-03-04"}, // 50 - {"佐藤", "真一", A, "1980-05-06"}, // 40 - {"加藤", "一茶", B, "1990-07-08"}, // 30 - {"伊藤", "浩史", AB, "2000-09-10"}, // 20 - } - - allAvg, avgMap := averages(people) - - fmt.Printf("全体平均年齢: %.02f 歳\n", allAvg) - fmt.Printf("O型平均年齢: %.02f 歳\n", avgMap[O]) - fmt.Printf("A型平均年齢: %.02f 歳\n", avgMap[A]) - fmt.Printf("B型平均年齢: %.02f 歳\n", avgMap[B]) - fmt.Printf("AB型平均年齢: %.02f 歳\n", avgMap[AB]) -} diff --git a/03-09-answer8/person.go b/03-09-answer8/person.go deleted file mode 100644 index 25ece9d..0000000 --- a/03-09-answer8/person.go +++ /dev/null @@ -1,21 +0,0 @@ -package main - -import ( - "time" -) - -type Person struct { - FirstName string - LastName string - BloodType BloodType - Birthday string -} - -func (x *Person) Age() int { - now := time.Now() - d, err := time.Parse("2006-01-02", x.Birthday) - if err != nil { - panic(err) - } - return now.Year() - d.Year() -} diff --git a/03-09-answer8/person_test.go b/03-09-answer8/person_test.go deleted file mode 100644 index 4987aa0..0000000 --- a/03-09-answer8/person_test.go +++ /dev/null @@ -1,25 +0,0 @@ -package main - -import ( - "testing" -) - -func TestPersonAge(t *testing.T) { - patterns := []struct { - person *Person - age int - }{ - {&Person{"山本", "磯六", B, "1950-01-02"}, 70}, - {&Person{"山田", "太郎", O, "1960-01-02"}, 60}, - {&Person{"鈴木", "一郎", A, "1970-03-04"}, 50}, - {&Person{"佐藤", "真一", A, "1980-05-06"}, 40}, - {&Person{"加藤", "一茶", B, "1990-07-08"}, 30}, - {&Person{"伊藤", "浩史", AB, "2000-09-10"}, 20}, - } - - for _, ptn := range patterns { - if ptn.age != ptn.person.Age() { - t.Fatalf("The age of %v must be %d but was %d", *ptn.person, ptn.age, ptn.person.Age()) - } - } -} diff --git a/03-10-answer9/averages_test.go b/03-10-answer9/averages_test.go deleted file mode 100644 index c04c990..0000000 --- a/03-10-answer9/averages_test.go +++ /dev/null @@ -1,33 +0,0 @@ -package main - -import ( - "testing" -) - -func TestAverages(t *testing.T) { - { - allAvg, avgMap := averages([]*Person{ - {"山本", "磯六", B, "1950-01-02"}, // 70 - {"山田", "太郎", O, "1960-01-02"}, // 60 - {"鈴木", "一郎", A, "1970-03-04"}, // 50 - {"佐藤", "真一", A, "1980-05-06"}, // 40 - {"加藤", "一茶", B, "1990-07-08"}, // 30 - {"伊藤", "浩史", AB, "2000-09-10"}, // 20 - }) - if 45 != allAvg { - t.Fatalf("allAvg must be 45 but was %f", allAvg) - } - expectedMap := map[BloodType]float32{ - O: 60.0, - A: 45.0, - B: 50.0, - AB: 20.0, - } - for bloodType, expected := range expectedMap { - if expected != avgMap[bloodType] { - t.Fatalf("allAvg must be %f but was %f", expected, avgMap[bloodType]) - } - } - } - -} diff --git a/03-10-answer9/blood_type.go b/03-10-answer9/blood_type.go deleted file mode 100644 index 338593d..0000000 --- a/03-10-answer9/blood_type.go +++ /dev/null @@ -1,10 +0,0 @@ -package main - -type BloodType int - -const ( - O BloodType = 0 - A BloodType = 1 - B BloodType = 2 - AB BloodType = 3 -) diff --git a/03-10-answer9/go.mod b/03-10-answer9/go.mod deleted file mode 100644 index 98d9f66..0000000 --- a/03-10-answer9/go.mod +++ /dev/null @@ -1,3 +0,0 @@ -module main - -go 1.13 diff --git a/03-10-answer9/ints.go b/03-10-answer9/ints.go deleted file mode 100644 index 9e79459..0000000 --- a/03-10-answer9/ints.go +++ /dev/null @@ -1,15 +0,0 @@ -package main - -type Ints []int - -func (s Ints) Sum() int { - r := 0 - for _, i := range s { - r += i - } - return r -} - -func (s Ints) Average() float32 { - return float32(s.Sum()) / float32(len(s)) -} diff --git a/03-10-answer9/ints_test.go b/03-10-answer9/ints_test.go deleted file mode 100644 index beffb78..0000000 --- a/03-10-answer9/ints_test.go +++ /dev/null @@ -1,22 +0,0 @@ -package main - -import ( - "testing" -) - -func TestIntsAverage(t *testing.T) { - patterns := []struct { - ints Ints - val float32 - }{ - {Ints{1, 2, 3}, 2}, - {Ints{4, 5, 6}, 5}, - {Ints{1, 2, 3, 4, 5, 6, 7, 8, 9, 10}, 5.5}, - } - - for _, ptn := range patterns { - if ptn.val != ptn.ints.Average() { - t.Fatalf("The average of %v must be %f but was %f", ptn.ints, ptn.val, ptn.ints.Average()) - } - } -} diff --git a/03-10-answer9/main.go b/03-10-answer9/main.go deleted file mode 100644 index ae50864..0000000 --- a/03-10-answer9/main.go +++ /dev/null @@ -1,23 +0,0 @@ -package main - -import ( - "fmt" -) - -func main() { - var people = []*Person{ - {"山田", "太郎", 0, "1960-01-02"}, // 60 - {"鈴木", "一郎", A, "1970-03-04"}, // 50 - {"佐藤", "真一", A, "1980-05-06"}, // 40 - {"加藤", "一茶", B, "1990-07-08"}, // 30 - {"伊藤", "浩史", AB, "2000-09-10"}, // 20 - } - - allAvg, avgMap := averages(people) - - fmt.Printf("全体平均年齢: %.02f 歳\n", allAvg) - fmt.Printf("O型平均年齢: %.02f 歳\n", avgMap[O]) - fmt.Printf("A型平均年齢: %.02f 歳\n", avgMap[A]) - fmt.Printf("B型平均年齢: %.02f 歳\n", avgMap[B]) - fmt.Printf("AB型平均年齢: %.02f 歳\n", avgMap[AB]) -} diff --git a/03-10-answer9/people.go b/03-10-answer9/people.go deleted file mode 100644 index 0c9ba48..0000000 --- a/03-10-answer9/people.go +++ /dev/null @@ -1,27 +0,0 @@ -package main - -type People []*Person - -func (s People) Ages() Ints { - r := make(Ints, len(s)) - for idx, i := range s { - r[idx] = i.Age() - } - return r -} - -func (s People) Select(f func(*Person) bool) People { - r := People{} - for _, i := range s { - if f(i) { - r = append(r, i) - } - } - return r -} - -func (s People) SelectByBloodType(t BloodType) People { - return s.Select(func(i *Person) bool { - return i.BloodType == t - }) -} diff --git a/03-10-answer9/people_test.go b/03-10-answer9/people_test.go deleted file mode 100644 index 5e7e992..0000000 --- a/03-10-answer9/people_test.go +++ /dev/null @@ -1,67 +0,0 @@ -package main - -import ( - "testing" -) - -func TestPeopleAges(t *testing.T) { - people := People{ - {"山本", "磯六", B, "1950-01-02"}, - {"山田", "太郎", O, "1960-01-02"}, - {"鈴木", "一郎", A, "1970-03-04"}, - {"佐藤", "真一", A, "1980-05-06"}, - {"加藤", "一茶", B, "1990-07-08"}, - {"伊藤", "浩史", AB, "2000-09-10"}, - } - - expectedAges := []int{70, 60, 50, 40, 30, 20} - actualAges := people.Ages() - - if len(expectedAges) != len(actualAges) { - t.Fatalf("The length of ages must be %d but was %d", len(expectedAges), len(actualAges)) - } - - for idx, expectedAge := range expectedAges { - if expectedAge != actualAges[idx] { - t.Fatalf("The ages[%d] must be %d but was %d", idx, expectedAge, actualAges[idx]) - } - } -} - -func TestPeopleSelectByBoodType(t *testing.T) { - people := People{ - {"山本", "磯六", B, "1950-01-02"}, - {"山田", "太郎", O, "1960-01-02"}, - {"鈴木", "一郎", A, "1970-03-04"}, - {"佐藤", "真一", A, "1980-05-06"}, - {"加藤", "一茶", B, "1990-07-08"}, - {"伊藤", "浩史", AB, "2000-09-10"}, - } - - patterns := map[BloodType][]string{ - O: []string{"山田"}, - A: []string{"鈴木", "佐藤"}, - B: []string{"山本", "加藤"}, - AB: []string{"伊藤"}, - } - - for bloodType, expectedNames := range patterns { - selected := people.SelectByBloodType(bloodType) - actualNames := make([]string, len(selected)) - for idx, person := range selected { - actualNames[idx] = person.FirstName - } - - if len(expectedNames) != len(actualNames) { - t.Fatalf("The length of names must be %d but was %d", len(expectedNames), len(actualNames)) - } - - for idx, expectedName := range expectedNames { - if expectedName != actualNames[idx] { - t.Fatalf("The ages[%d] must be %s but was %s", idx, expectedName, actualNames[idx]) - } - } - - } - -} diff --git a/03-10-answer9/person.go b/03-10-answer9/person.go deleted file mode 100644 index 25ece9d..0000000 --- a/03-10-answer9/person.go +++ /dev/null @@ -1,21 +0,0 @@ -package main - -import ( - "time" -) - -type Person struct { - FirstName string - LastName string - BloodType BloodType - Birthday string -} - -func (x *Person) Age() int { - now := time.Now() - d, err := time.Parse("2006-01-02", x.Birthday) - if err != nil { - panic(err) - } - return now.Year() - d.Year() -} diff --git a/03-10-answer9/person_test.go b/03-10-answer9/person_test.go deleted file mode 100644 index 4987aa0..0000000 --- a/03-10-answer9/person_test.go +++ /dev/null @@ -1,25 +0,0 @@ -package main - -import ( - "testing" -) - -func TestPersonAge(t *testing.T) { - patterns := []struct { - person *Person - age int - }{ - {&Person{"山本", "磯六", B, "1950-01-02"}, 70}, - {&Person{"山田", "太郎", O, "1960-01-02"}, 60}, - {&Person{"鈴木", "一郎", A, "1970-03-04"}, 50}, - {&Person{"佐藤", "真一", A, "1980-05-06"}, 40}, - {&Person{"加藤", "一茶", B, "1990-07-08"}, 30}, - {&Person{"伊藤", "浩史", AB, "2000-09-10"}, 20}, - } - - for _, ptn := range patterns { - if ptn.age != ptn.person.Age() { - t.Fatalf("The age of %v must be %d but was %d", *ptn.person, ptn.age, ptn.person.Age()) - } - } -}