mirror of
https://github.com/AmanTahiliani/gophercises.git
synced 2026-08-08 04:06:16 -04:00
Different solution for Gophercise 1
This commit is contained in:
71
1. Quiz Game Sol2/students/vancelongwill/main.go
Normal file
71
1. Quiz Game Sol2/students/vancelongwill/main.go
Normal file
@@ -0,0 +1,71 @@
|
||||
package main
|
||||
|
||||
import (
|
||||
"bufio"
|
||||
"encoding/csv"
|
||||
"flag"
|
||||
"fmt"
|
||||
"math/rand"
|
||||
"os"
|
||||
"strings"
|
||||
"time"
|
||||
)
|
||||
|
||||
func main() {
|
||||
csvFilename := flag.String("f", "problems.csv", "csv file with 2 columns, question & answer")
|
||||
timeLimit := flag.Int("t", 30, "the time limit for the quiz in seconds")
|
||||
hasShuffle := flag.Bool("s", false, "randomize question order")
|
||||
flag.Parse()
|
||||
|
||||
correctCount := 0
|
||||
reader := bufio.NewReader(os.Stdin)
|
||||
|
||||
fmt.Println("Press enter to start the quiz")
|
||||
reader.ReadBytes('\n')
|
||||
|
||||
b, fileErr := os.Open(*csvFilename)
|
||||
if fileErr != nil {
|
||||
fmt.Print(fileErr, "\nFailed to read the CSV file provided")
|
||||
os.Exit(1)
|
||||
}
|
||||
|
||||
r := csv.NewReader(b)
|
||||
records, csvErr := r.ReadAll()
|
||||
|
||||
if csvErr != nil {
|
||||
fmt.Print(csvErr, "\nFailed to parse the CSV file provided")
|
||||
os.Exit(1)
|
||||
}
|
||||
|
||||
timeout := time.NewTimer(time.Duration(*timeLimit) * time.Second)
|
||||
|
||||
ansCh := make(chan string)
|
||||
getUserInput := func() {
|
||||
userAns, _ := reader.ReadString('\n')
|
||||
ansCh <- strings.TrimSpace(strings.ToLower(userAns))
|
||||
}
|
||||
|
||||
if *hasShuffle {
|
||||
rand.Shuffle(len(records), func(i, j int) {
|
||||
records[i], records[j] = records[j], records[i]
|
||||
})
|
||||
}
|
||||
|
||||
qLoop:
|
||||
for i, record := range records {
|
||||
fmt.Printf("Question %d:\t%s\t", i+1, record[0])
|
||||
go getUserInput()
|
||||
|
||||
select {
|
||||
case <-timeout.C:
|
||||
fmt.Println("\nToo slow!")
|
||||
break qLoop
|
||||
case ans := <-ansCh:
|
||||
if ans == record[1] {
|
||||
correctCount++
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
fmt.Printf("You scored %d out of %d!\n", correctCount, len(records))
|
||||
}
|
||||
Reference in New Issue
Block a user