public PerformanceResult solve() {
        String line;
        HashSet<Card> cardHashSet = new HashSet<>();
        try {
            //read in the first answer
            line = reader.readLine();
            int firstQuestionAnswer = parseAnswer(line);
            readAndSetCards();
            //find possible cards the first answer could be & store in hashset
            for (Card card: findPossibleCards(cardList, firstQuestionAnswer)) {
                cardHashSet.add(card);
            }
            //read in the second answer
            line = reader.readLine();
            int secondQuestionAnswer = parseAnswer(line);
            //read in 2nd set of cards
            readAndSetCards();
            //find possible cards the second answer could be
            List<Card> secondAnswerCards = findPossibleCards(cardList, secondQuestionAnswer);
            //check if there are duplicates, an exact match, or no matches
            List<Card> cardsFoundAtEnd = new ArrayList<>();
            for (Card card: secondAnswerCards) {
                if(cardHashSet.contains(card)) {
                    //store found card
                    cardsFoundAtEnd.add(card);
                }
            }
            //0 duplicates: volunteer cheated
            //1 duplicate: worked fine, show number of the card
            //2+ duplicates: bad magician
            switch(cardsFoundAtEnd.size()) {
                case 0:
                    //volunteer cheated since no card was consistent
                    return new PerformanceResult(MagicianJobPerformance.CHEATED, cardsFoundAtEnd);
                case 1:
                    //worked fine, good performance
                    return new PerformanceResult(MagicianJobPerformance.GOOD, cardsFoundAtEnd);
                default:
                    //bad magician
                    return new PerformanceResult(MagicianJobPerformance.BAD, cardsFoundAtEnd);
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
        //should never happen without exceptions
        return new PerformanceResult(MagicianJobPerformance.UNKNOWN, null);
    }