get state by state sampling done

This commit is contained in:
NunoSempere 2024-04-13 15:26:18 -04:00
parent 18cb3710d9
commit d1dc3a5e75

54
main.go
View File

@ -3,17 +3,30 @@ package main
import (
"encoding/csv"
"fmt"
rand "math/rand/v2"
"os"
"strconv"
"strings"
// "strings"
)
/* Structs */
type State struct {
Name string
Votes int
VictoriousPartyPerElection map[string]string
}
type VotesForEachParty struct {
Democrats int
Republicans int
}
type src = *rand.Rand
/* Globals */
var r = rand.New(rand.NewPCG(uint64(1), uint64(2)))
/* Load data from csvs */
func readStates() ([]State, error) {
var states map[string]State = make(map[string]State)
@ -81,11 +94,6 @@ func readStates() ([]State, error) {
return states_slice, nil
}
type VotesForEachParty struct {
Democrats int
Republicans int
}
func sampleFromState(state State) VotesForEachParty {
switch state.Name {
case "Nebraska":
@ -93,7 +101,20 @@ func sampleFromState(state State) VotesForEachParty {
case "Maine":
return VotesForEachParty{Democrats: 1, Republicans: 0}
default:
return VotesForEachParty{Democrats: 1, Republicans: 0}
{
p_republican := 0.0
for _, party := range state.VictoriousPartyPerElection {
if party == "R" {
p_republican++
}
}
p_republican = p_republican / float64(len(state.VictoriousPartyPerElection))
if r.Float64() < p_republican {
return VotesForEachParty{Democrats: 0, Republicans: state.Votes}
} else {
return VotesForEachParty{Democrats: state.Votes, Republicans: 0}
}
}
}
}
@ -104,20 +125,15 @@ func main() {
return
}
// Example states to query
example_state_names := []string{"California", "Texas", "Florida"}
for _, state := range states {
for _, example_state_name := range example_state_names {
if strings.EqualFold(state.Name, example_state_name) {
fmt.Printf("%s: Votes: %d, Winners: ", state.Name, state.Votes)
for year, party := range state.VictoriousPartyPerElection {
fmt.Printf("[%s: %s] ", year, party)
}
fmt.Println()
break
}
fmt.Printf("%s: Votes: %d,\n\tWinners: ", state.Name, state.Votes)
for year, party := range state.VictoriousPartyPerElection {
fmt.Printf("[%s: %s] ", year, party)
}
election_sample := sampleFromState(state)
fmt.Printf("\n\tSample: Democrat seats: %d, Republican seats: %d", election_sample.Democrats, election_sample.Republicans)
fmt.Println()
}
}