CompSci 101 Sec 1 Test 2 Spring 2016 Solution PROBLEM 1 PART 1A 0 X 1 A 2 G ['X', 'A', 'G', 'R'] ['X', 'A', 'B', 'G'] --------------------- set(['A', 'H', 'D']) ['A', 'D', 'H', 'P'] --------------------- set([1, 6]) set([1, 2, 3, 4, 6, 7]) set([2, 3]) --------------------- 5 ['B', 'F', 'J', 'K', 'S'] [3, 5, 6, 6, 12] PART 1B ['s', 'r', 'c', 'd'] [3, 1, 2, 1] 3 s PROBLEM 2 PART 2A: ['money', 'sassy', 'yes'] PART 2B: [('s', 'star'), ('s', 'yes'), ('sss', 'sassy')] PART 2C: temp = [w for w in words if len(w) > len(words[0])] PART 2D: temp = sorted([w for w in words if w[0] == 's']) + sorted([w for w in words if w[0] != 's']) ALT SOLN: temp = sorted([w for w in words if w[0] == 's']) second = sorted([w for w in words if w[0] != 's']) for w in second: temp.append(w) ALT SOLN temp = sorted([w for w in words if w[0] == 's']) second = sorted([w for w in words if w[0] != 's']) temp.extend(second) PART 2E: def modify(namelist): return [' '.join([w.split()[1], w.split()[0]]) for w in names if len(w.split()) == 2] ALT SOLN: def modify(namelist): answer = [] for w in names: words = w.split() if len(words) == 2: answer.append(" ".join([words[1], words[0]])) return answer PROBLEM 3: PART 3A def processData(filename): f = open(filename) answer = [] for line in f: alist = line.strip().split("/") answer.append(alist) f.close() return answer PART 3B def coursesWaitlisted(filename, name): datalist = processData(filename) clist = [] for items in datalist: course = items[0] last = items[1] limit = int(items[2]) pos = int(items[3]) if last == name and pos > limit: clist.append((pos-limit, course)) return clist ALT SOLN: def coursesWaitlisted2(filename, name): datalist = processData(filename) d = {} for key in datalist: num = int(key[3]) - int(key[2]) if num > 0: if key[1] not in d: d[key[1]] = [(num, key[0])] else: d[key[1]].append((num,key[0])) return d[name] PROBLEM 4 PART 4A # Unique names of people def UniqueNames(datalist): answer = set([]) for item in datalist: answer.add(item[1]) return sorted(list(answer)) ALT Soln def UniqueNames(datalist): answer = [] for item in datalist: if item[1] not in answer: answer.append(item[1]) return sorted(answer) PART 4B # unique states with someone age or older def UniqueStatesByAge(datalist, age): answer = set([]) for item in datalist: if int(item[2]) >= age: answer.add(item[0]) return sorted(list(answer)) PART 4C # given a list of states we advertised in. # which states did we advertise in and sold something? def StatesSoldIn(datalist, advertised): alllist = set([]) for item in datalist: alllist.add(item[0]) allad = set(advertised) return sorted(list(alllist & allad)) ALT SOLN: def StatesSoldIn(datalist, advertised): answer = [] for item in datalist: state = item[0] if state not in answer: if state in advertised: answer.append(state) return sorted(answer) PART 4D def MostCardsSoldInState(datalist): d = {} for item in datalist: key = item[0] count = int(item[3]) if key not in d: d[key] = count else: d[key] += count print d return max(d.values()) ALT SOLN: def MostCardsSoldInState(datalist): d = {} for item in datalist: key = item[0] count = int(item[3]) if key not in d: d[key] = count else: d[key] += count print d maxvalue = 0 for v in d.values(): if v > maxvalue: maxvalue = v return maxvalue PART 4E def StateWithMostAges(datalist): d = {} for item in datalist: state = item[0] if state not in d: d[state] = [item[2]] else: d[state].append(item[2]) maxnum = max([len(set(w)) for w in d.values()]) for (state,names) in d.items(): if len(set(names)) == maxnum: return state ALT SOLN def StateWithMostAges(datalist): d = {} for item in datalist: state = item[0] if state not in d: d[state] = set(item[2]) else: d[state].add(item[2]) maxnum = 0 maxstate = "" for (state,names) in d.items(): if len(names) > maxnum: maxnum = len(names) maxstate = state return state