CompSci 101 Sec 2 Test 2 Spring 2016 Solution PROBLEM 1 PART 1A 0 A 1 N 2 V ['A', 'N', 'V', 'R'] ['A', 'N', 'B', 'V'] --------------------- set(['S', 'U', 'D']) ['D', 'P', 'S', 'U'] --------------------- set([8, 1, 4]) set([1, 2, 4, 8, 9]) set([2]) --------------------- 3 ['B', 'F', 'K', 'M', 'Y'] [3, 7, 9, 9, 10] PART 1B ['c', 'r', 'd'] [2, 4, 1] 4 r 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 peopleWaitlisted(filename, coursename): data = processData(filename) clist = [] for items in data: course = items[0] last = items[1] limit = int(items[2]) pos = int(items[3]) if course == coursename and pos > limit: clist.append(((pos-limit), last)) return clist ALT SOLN def peopleWaitlisted(filename, coursename): data = processData(filename) d = {} for key in datalist: num = int(key[3]) - int(key[2]) if num > 0: if key[0] not in d: d[key[0]] = [(num, key[1])] else: d[key[0]].append((num,key[1])) return d[coursename] PROBLEM 4 PART A # unique states with someone age or older def UniqueStates(datalist): answer = set([]) for item in datalist: answer.add(item[0]) return sorted(list(answer)) ALT SOLN: def UniqueStates(datalist): answer = [] for item in datalist: if item[0] not in answer: answer.append(item[0]) return sorted(answer) PART 4B # Unique names of players from a state def UniqueNamesByState(datalist, state): answer = set([]) for item in datalist: if item[0] == state: answer.add(item[1]) return sorted(list(answer)) PART 4C # given a list of targeted people, which people did we # sell to that were not targetted? def PeopleNotTargeted(datalist, targets): alllist = set([]) for item in datalist: alllist.add(item[1]) alltargets = set(targets) return sorted(list(alllist - alltargets)) PROBLEM 4D def MostCardsByOnePerson(datalist): d = {} for item in datalist: key = item[1] count = int(item[3]) if key not in d: d[key] = count else: d[key] += count return max(d.values()) PROBLEM 4E def StateWithMostPeople(datalist): d = {} for item in datalist: state = item[0] if state not in d: d[state] = [item[1]] else: d[state].append(item[1]) 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 StateWithMostPeople(datalist): d = {} for item in datalist: state = item[0] if state not in d: d[state] = [item[1]] else: d[state].append(item[1]) maxnum = 0 maxstate = "" for (state,names) in d.items(): if len(set(names)) > maxnum: maxnum = len(set(names)) maxstate = state return maxstate ALT SOLN def StateWithMostPeople(datalist): d = {} for item in datalist: state = item[0] name = item[1] if state not in d: d[state] = [name] else: if name not in d[state]: d[state].append(name) ans = [(len(value),key) for (key,value) in d.iteritems()] return sorted(ans)[-1][1]