diff --git a/kadai3/yuuyamad/README.md b/kadai3/yuuyamad/README.md new file mode 100644 index 0000000..6fddf75 --- /dev/null +++ b/kadai3/yuuyamad/README.md @@ -0,0 +1,9 @@ +# typing game + +## Command Line Options + +### -t +typing game time + +## example +./yuuyamad typing_game_word_examplefile.txt -t 60s diff --git a/kadai3/yuuyamad/log.go b/kadai3/yuuyamad/log.go new file mode 100644 index 0000000..9053696 --- /dev/null +++ b/kadai3/yuuyamad/log.go @@ -0,0 +1,13 @@ +package main + +import ( + "log" + "os" +) + +func logError(err error){ + if err != nil{ + log.Fatal(err) + os.Exit(1) + } +} \ No newline at end of file diff --git a/kadai3/yuuyamad/main.go b/kadai3/yuuyamad/main.go new file mode 100644 index 0000000..9ab0554 --- /dev/null +++ b/kadai3/yuuyamad/main.go @@ -0,0 +1,90 @@ +package main + +import ( + "fmt" + "os" + "time" + "bufio" + "strconv" + "flag" +) + +func main() { + + var ( + seconds = flag.Duration("t", 10*time.Second, "timer set") + ) + flag.Parse() + args := flag.Args() + + //問題用のファイルを読み込み + word, err := readfile(args[0]) + if err != nil { + logError(err) + } + + fmt.Println("Typing GAME Start!!") + + ch := quiz(word) + ch2 := time.After(*seconds) + + j := 0 + + END: + for { + select { + case <-ch2: + break END + case _, ok := <-ch: + if ok { + j++ + }else{ + break END + } + } + } + s := strconv.Itoa(j) + fmt.Println("Correct Answer is " + s) + +} +func readfile(file string) ([]string, error) { + + var word []string + var fp *os.File + var err error + + fp, err = os.Open(file) + if err != nil { + return nil, err + } + defer fp.Close() + + var sc = bufio.NewScanner(fp); + sc.Split(bufio.ScanWords) + for sc.Scan(){ + word = append(word, sc.Text()) + } + return word, nil +} + +func quiz(quizes []string) <-chan struct{}{ + ch := make(chan struct{}) + + go func(){ + + for _, quiz := range quizes { + fmt.Print(quiz + ":") + s:= bufio.NewScanner(os.Stdin) + s.Scan() + scan := s.Text() + if quiz == scan{ + ch <- struct{}{} + } + + } + close(ch) + + }() + return ch +} + diff --git a/kadai3/yuuyamad/main_test.go b/kadai3/yuuyamad/main_test.go new file mode 100644 index 0000000..c6be9fa --- /dev/null +++ b/kadai3/yuuyamad/main_test.go @@ -0,0 +1,36 @@ +package main + +import ( + "testing" + "reflect" +) + +func TestReadfile(t *testing.T){ + + var tests = []struct { + filename string + word []string + }{ + {"testdata/hoge.txt", []string{"hoge", "moga", "hoge", "moga", "moga", "fuga"}}, + {"testdata/fuga.txt", []string{"hogehoge", "mogamoga", "fugafuga", "hogehoge"}}, + {"testdata/moga.txt", []string{"hoga", "hoge", "fuga"}}, + {"testdata/unknown", []string{}}, + + } + for _, test := range tests { + ret, err := readfile(test.filename) + if test.filename == "testdata/unknown" && err == nil { + t.Error(`readfile(testdata/unknown)`) + } + + if test.filename != "testdata/unknown" && !reflect.DeepEqual(test.word, ret){ + t.Error(`readfile(%q)`, test.filename) + } + + } + +} + +func Testquiz(t *testing.T){ + +} diff --git a/kadai3/yuuyamad/testdata/fuga.txt b/kadai3/yuuyamad/testdata/fuga.txt new file mode 100644 index 0000000..7cf0ad5 --- /dev/null +++ b/kadai3/yuuyamad/testdata/fuga.txt @@ -0,0 +1 @@ +hogehoge mogamoga fugafuga hogehoge diff --git a/kadai3/yuuyamad/testdata/hoge.txt b/kadai3/yuuyamad/testdata/hoge.txt new file mode 100644 index 0000000..bef6266 --- /dev/null +++ b/kadai3/yuuyamad/testdata/hoge.txt @@ -0,0 +1,3 @@ +hoge moga +hoge moga +moga fuga diff --git a/kadai3/yuuyamad/testdata/moga.txt b/kadai3/yuuyamad/testdata/moga.txt new file mode 100644 index 0000000..012ecd7 --- /dev/null +++ b/kadai3/yuuyamad/testdata/moga.txt @@ -0,0 +1,3 @@ +hoga +hoge +fuga diff --git a/kadai3/yuuyamad/typing_game_word_examplefile.txt b/kadai3/yuuyamad/typing_game_word_examplefile.txt new file mode 100644 index 0000000..bef6266 --- /dev/null +++ b/kadai3/yuuyamad/typing_game_word_examplefile.txt @@ -0,0 +1,3 @@ +hoge moga +hoge moga +moga fuga