### code from previous lecture ###

import csv

def readFile(filename):
    f = open(filename, "r")
    reader = csv.reader(f)
    data = [ ]
    for row in reader:
        data.append(row)
    f.close()
    return data

def getIceCreamCounts(data):
    d = { }
    for i in range(1, len(data)): # skip header
        for rank in range(len(data[i])):
            flavor = data[i][rank]
            if flavor not in d:
                d[flavor] = { 1: 0, 2: 0, 3: 0}
            d[flavor][rank+1] += 1
    return d

iceCream = readFile("icecream-f20.csv")
d = getIceCreamCounts(iceCream)

### data reformatting ###

flavors = []
firstFav = []
secondFav = []

for flavor in d:
    if d[flavor][1] + d[flavor][2] + d[flavor][3] >= 10:
        flavors.append(flavor)
        firstFav.append(d[flavor][1])
        secondFav.append(d[flavor][2])
print(flavors, firstFav, secondFav)

### chart making ###

import numpy as np
import matplotlib.pyplot as plt

fig, ax = plt.subplots()

ax.set_xlabel("First Favorite")
ax.set_ylabel("Second Favorite")
ax.set_xlim(0, 20)
ax.set_ylim(0, 20)
ax.set_title("Comparison of First vs Second Favorite Flavors")

plt.scatter(firstFav, secondFav)

for i in range(len(flavors)):
    x = firstFav[i]
    y = secondFav[i]
    flavor = flavors[i]
    ax.annotate(flavor, [x,y])
plt.show()


### Monte Carlo ###

import random

def generateDeck():
    deck = []
    for suit in ["Club", "Diamond", "Heart", "Spade"]:
        for value in range(2, 15): # 2 to Ace (14)
            deck.append([suit, value])
    return deck

def getOdds(trials):
    deck = generateDeck()
    count = 0
    for trial in range(trials):
        random.shuffle(deck)
        hand = deck[:5]
        if isFlush(hand):
            count += 1
    return count / trials

def isFlush(hand):
    firstSuit = hand[0][0]
    for card in hand:
        if card[0] != firstSuit:
            return False
    return True
