-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathProblemSet.py
executable file
·113 lines (102 loc) · 4.51 KB
/
ProblemSet.py
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
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
# DO NOT MODIFY THIS FILE.
#
# Any modifications to this file will not be used when grading your project.
# If you have any questions, please contact the TAs.
#
#
import random
import re
import os
from RavensFigure import RavensFigure
from RavensObject import RavensObject
from RavensProblem import RavensProblem
# A list of RavensProblems within one set.
#
# Your agent does not need to use this class explicitly.
class ProblemSet:
# Initializes a new ProblemSet with the given name, an empty set of
# problems, and a new random number generator.
#
# Your agent does not need to use this method.
#
# @param name The name of the problem set.
def __init__(self,name):
# The name of the problem set.
self.name=name
# A list of the problems in the problem set.
self.problems=[]
self.loadProblemSet()
# Loads the problem set from the folder whose name matches that of this
# problem set.
#
# Your agent does not need to use this method.
def loadProblemSet(self):
r = open("Problems" + os.sep + self.name + os.sep + "ProblemList.txt")
line = self.getNextLine(r)
while not line=="":
self.loadProblem(line)
line=self.getNextLine(r)
def loadProblem(self, problemName):
r = open("Problems" + os.sep + self.name + os.sep + problemName + os.sep + "ProblemData.txt")
problemType=self.getNextLine(r)
correctAnswer=int(self.getNextLine(r))
hasVisual=self.getNextLine(r)=="true"
hasVerbal=self.getNextLine(r)=="true"
newProblem=RavensProblem(problemName, problemType, correctAnswer, hasVisual, hasVerbal)
if newProblem.hasVerbal:
figures=[]
currentFigure=None
currentObject=None
line = self.getNextLine(r)
while not line=="":
if not line.startswith("\t"):
newFigure=RavensFigure(line, problemName, self.name)
figures.append(newFigure)
currentFigure=newFigure
elif not line.startswith("\t\t"):
line=line.replace("\t","")
newObject=RavensObject(line)
currentFigure.objects[line]=newObject
currentObject=newObject
elif line.startswith("\t\t"):
line=line.replace("\t","")
split=re.split(":",line)
currentObject.attributes[split[0]]=split[1]
line=self.getNextLine(r)
for figure in figures:
newProblem.figures[figure.name]=figure
else:
newProblem.figures["A"]=RavensFigure("A", problemName, self.name)
newProblem.figures["B"]=RavensFigure("B", problemName, self.name)
newProblem.figures["C"]=RavensFigure("C", problemName, self.name)
newProblem.figures["1"]=RavensFigure("1", problemName, self.name)
newProblem.figures["2"]=RavensFigure("2", problemName, self.name)
newProblem.figures["3"]=RavensFigure("3", problemName, self.name)
newProblem.figures["4"]=RavensFigure("4", problemName, self.name)
newProblem.figures["5"]=RavensFigure("5", problemName, self.name)
newProblem.figures["6"]=RavensFigure("6", problemName, self.name)
if newProblem.problemType=="3x3":
newProblem.figures["D"]=RavensFigure("D", problemName, self.name)
newProblem.figures["E"]=RavensFigure("E", problemName, self.name)
newProblem.figures["F"]=RavensFigure("F", problemName, self.name)
newProblem.figures["G"]=RavensFigure("G", problemName, self.name)
newProblem.figures["H"]=RavensFigure("H", problemName, self.name)
newProblem.figures["7"]=RavensFigure("7", problemName, self.name)
newProblem.figures["8"]=RavensFigure("8", problemName, self.name)
self.problems.append(newProblem)
# Returns the total number of problems answered in this set in a certain
# type.
def getTotal(self,result):
count=0;
for problem in self.problems:
if problem.getCorrect()==result:
count+=1
return count
def tryParseInt(self, i):
try:
int(i)
return True
except:
return False
def getNextLine(self, r):
return r.readline().rstrip()