-
Notifications
You must be signed in to change notification settings - Fork 0
/
quiz-parte-1.go
85 lines (72 loc) · 1.79 KB
/
quiz-parte-1.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
package main
import (
"bufio"
"encoding/csv"
"flag"
"fmt"
"os"
"strings"
)
const (
QUIZ_FILE_NOT_FOUND int = 1
ERROR_READING_QUIZ_CSV_FILE int = 2
ERROR_NO_ENTIENDO_RESPUESTA int = 3
)
type pregunta struct {
enunciado string
respuesta string
}
func parselines(lines [][]string) []pregunta {
var res []pregunta
res = make([]pregunta, len(lines))
for i, problema := range lines {
res[i] = pregunta{
enunciado: problema[0],
respuesta: strings.Trim(problema[1], " "),
}
}
return res
}
func openFile(fileName string) *os.File {
file, err := os.Open(fileName)
if err != nil {
exit("Error al abrir el fichero.\n[ERROR] %s\n", err, QUIZ_FILE_NOT_FOUND)
}
return file
}
func readFile(f *csv.Reader) [][]string {
var lineas [][]string
lineas, err := f.ReadAll()
if err != nil {
exit("Error al leer el archivo.\n[ERROR] %s\n", err, ERROR_READING_QUIZ_CSV_FILE)
}
return lineas
}
func getUserAnswer() string {
r := bufio.NewReader(os.Stdin)
respuestaUsuario, err := r.ReadString('\n')
if err != nil {
exit("Error al leer la respuesta.\n[ERROR] %s\n", err, ERROR_NO_ENTIENDO_RESPUESTA)
}
return strings.Trim(respuestaUsuario, "\n ")
}
func exit(msg string, err error, exitcode int) {
fmt.Printf(msg, err.Error())
os.Exit(exitcode)
}
func main() {
csvFile := flag.String("csv", "problems.csv", "Fichero de problemas en formato 'enunciado,respuesta' (CSV)")
flag.Parse()
r := csv.NewReader(openFile(*csvFile))
var lineas [][]string
lineas = readFile(r)
problemas := parselines(lineas)
var puntuacion int = 0
for i := range problemas {
fmt.Printf("Pregunta %d:\t %s =\n", i+1, problemas[i].enunciado)
if problemas[i].respuesta == getUserAnswer() {
puntuacion++
}
}
fmt.Printf("Ha respondido %d respuestas correctas de %d preguntas.\n", puntuacion, len(problemas))
}