Rewrite main to use summary statistics
This commit is contained in:
parent
0f0349810f
commit
a63608bac5
@ -48,7 +48,9 @@ type ResultSummary struct {
|
|||||||
ValueDelta float64
|
ValueDelta float64
|
||||||
/**
|
/**
|
||||||
* The rank of the bidder who actually had the highest value of the item.
|
* The rank of the bidder who actually had the highest value of the item.
|
||||||
* The winner of the auction has rank 1.
|
* The winner of the auction has rank 1. If all bidders had a true value of
|
||||||
|
* negative infinity for the item, this will be greater than the number of
|
||||||
|
* bidders.
|
||||||
*/
|
*/
|
||||||
HighestValueRank int
|
HighestValueRank int
|
||||||
}
|
}
|
||||||
@ -73,7 +75,7 @@ func Summarize(price float64, allBidders []Bidder) *ResultSummary {
|
|||||||
}
|
}
|
||||||
|
|
||||||
winner := allBidders[len(allBidders)-1]
|
winner := allBidders[len(allBidders)-1]
|
||||||
rube := Bidder{}
|
rube := Bidder{Value: math.Inf(-1)}
|
||||||
if maxIdx >= 0 {
|
if maxIdx >= 0 {
|
||||||
rube = allBidders[maxIdx]
|
rube = allBidders[maxIdx]
|
||||||
}
|
}
|
||||||
|
50
main/main.go
50
main/main.go
@ -32,54 +32,30 @@ func main() {
|
|||||||
log.Fatalf("can't run an auction with %d bidders", num)
|
log.Fatalf("can't run an auction with %d bidders", num)
|
||||||
}
|
}
|
||||||
|
|
||||||
price, allBidders := auctionsim.RunAuctionVerbosely(
|
result := auctionSim.Summarize(auctionsim.RunAuctionVerbosely(
|
||||||
&auctionsim.CappedBidderGenerator{
|
&auctionsim.CappedBidderGenerator{
|
||||||
G: auctionsim.NormalestBidderGenerator(),
|
G: auctionsim.NormalestBidderGenerator(),
|
||||||
Lim: num,
|
Lim: num,
|
||||||
},
|
},
|
||||||
)
|
))
|
||||||
bidder := allBidders[len(allBidders)-1]
|
fmt.Printf("The auction winner paid ¤%f. They have %s.\n", summary.Price, deltaStr(summary.WinnerProfit))
|
||||||
|
fmt.Printf("The item was worth ¤%f to them.\n", summary.WinnerValue)
|
||||||
fmt.Printf("The auction winner paid ¤%f. They have %s.\n", price, deltaStr(bidder.Value-price))
|
fmt.Printf("They would have paid up to ¤%f for it.\n", summary.WinnerMaxBid)
|
||||||
fmt.Printf("The item was worth ¤%f to them.\n", bidder.Value)
|
|
||||||
fmt.Printf("They would have paid up to ¤%f for it.\n", bidder.BidCeiling())
|
|
||||||
|
|
||||||
fmt.Println()
|
fmt.Println()
|
||||||
i := len(allBidders) - 2
|
if summary.LosersWithRegrets < 1 {
|
||||||
for i >= 0 && allBidders[i].Value < price {
|
fmt.Println("The item was not worth that to anybody.")
|
||||||
i--
|
|
||||||
}
|
|
||||||
|
|
||||||
if i < 0 {
|
|
||||||
fmt.Printf("The item was not worth that to anybody.\n")
|
|
||||||
} else {
|
} else {
|
||||||
rube := allBidders[i]
|
fmt.Printf("The item was worth that to %d bidders, who stopped bidding too soon.\n", summary.LosersWithRegrets)
|
||||||
fmt.Printf("The highest bidder who would have made a profit at that price stopped bidding at ¤%f.\n", rube.BidCeiling())
|
|
||||||
fmt.Printf("They should have kept bidding until ¤%f.\n", rube.Value)
|
|
||||||
if rankDelta := len(allBidders) - i - 1; rankDelta == 1 {
|
|
||||||
fmt.Println("They were outbid by 1 bidder.")
|
|
||||||
} else {
|
|
||||||
fmt.Printf("They were outbid by %d bidders.\n", rankDelta)
|
|
||||||
}
|
|
||||||
fmt.Printf("If they had paid the amount of the winning bid, they would have %s.\n", deltaStr(rube.Value-price))
|
|
||||||
}
|
}
|
||||||
|
|
||||||
fmt.Println()
|
fmt.Println()
|
||||||
maxValue := math.Inf(-1)
|
if summary.HighestValueRank > summary.Bidders {
|
||||||
maxIdx := -1
|
|
||||||
for i, b := range allBidders {
|
|
||||||
if b.Value > maxValue {
|
|
||||||
maxValue = b.Value
|
|
||||||
maxIdx = i
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if maxIdx == -1 {
|
|
||||||
fmt.Println("Wow! It was infinitely beyond worthless to everybody.")
|
fmt.Println("Wow! It was infinitely beyond worthless to everybody.")
|
||||||
} else {
|
} else {
|
||||||
fmt.Printf("The bidder who would have gotten the most value was outbid by %d bidders.\n", len(allBidders)-maxIdx-1)
|
fmt.Printf("The bidder who would have gotten the most value was outbid by %d bidders.\n", summary.HighestValueRank-1)
|
||||||
rube := allBidders[maxIdx]
|
fmt.Printf("The item was worth at most ¤%f to them. Their maximum bid was ¤%f.\n", summary.HighestValue, summary.HighestValuatorBid)
|
||||||
fmt.Printf("The item was worth at most ¤%f to them. Their maximum bid was ¤%f.\n", rube.Value, rube.BidCeiling())
|
fmt.Printf("If they had paid the winning bid, they would have %s.\n", deltaStr(summary.MissedProfit))
|
||||||
fmt.Printf("If they had paid the winning bid, they would have %s.\n", deltaStr(rube.Value-price))
|
fmt.Printf("They valued it ¤%f more than the winning bidder.\n", summary.ValueDelta)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user