Files

74 lines
1.3 KiB
Go
Raw Permalink Normal View History

2025-05-31 13:14:20 -04:00
package main
import (
"bufio"
"encoding/csv"
"flag"
"fmt"
"io"
"log"
"os"
"strconv"
"time"
)
type Line struct {
Question string
Answer string
}
var (
csvName = flag.String("csv", "problems.csv", "path to csv file with quiz(question,answer)")
limit = flag.Int("limit", 30, "the time limit for the quiz in seconds")
)
func main() {
flag.Parse()
csvFile, err := os.Open(*csvName)
if err != nil {
fmt.Println(err)
return
}
defer csvFile.Close()
csvReader := csv.NewReader(bufio.NewReader(csvFile))
var lines []Line
for {
line, error := csvReader.Read()
if error == io.EOF {
break
} else if error != nil {
log.Fatal(error)
}
lines = append(lines, Line{
Question: line[0],
Answer: line[1],
})
}
reader := bufio.NewReader(os.Stdin)
count := 0
T := time.Duration(*limit)
timer := time.NewTimer(T * time.Second)
go func() {
<-timer.C
fmt.Println()
fmt.Println("You scored " + strconv.Itoa(count) + " out of " + strconv.Itoa(len(lines)))
os.Exit(0)
}()
for idx, line := range lines {
fmt.Print("Question №" + strconv.Itoa(idx+1) + ": " + line.Question + " = ")
ans, _ := reader.ReadString('\n')
if ans == line.Answer+"\n" {
count++
}
}
stop := timer.Stop()
if stop {
fmt.Println("You scored " + strconv.Itoa(count) + " out of " + strconv.Itoa(len(lines)))
}
}