Rewrite main to use summary statistics
This commit is contained in:
		@@ -48,7 +48,9 @@ type ResultSummary struct {
 | 
			
		||||
	ValueDelta float64
 | 
			
		||||
	/**
 | 
			
		||||
	 * 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
 | 
			
		||||
}
 | 
			
		||||
@@ -73,7 +75,7 @@ func Summarize(price float64, allBidders []Bidder) *ResultSummary {
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	winner := allBidders[len(allBidders)-1]
 | 
			
		||||
	rube := Bidder{}
 | 
			
		||||
	rube := Bidder{Value: math.Inf(-1)}
 | 
			
		||||
	if maxIdx >= 0 {
 | 
			
		||||
		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)
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	price, allBidders := auctionsim.RunAuctionVerbosely(
 | 
			
		||||
	result := auctionSim.Summarize(auctionsim.RunAuctionVerbosely(
 | 
			
		||||
		&auctionsim.CappedBidderGenerator{
 | 
			
		||||
			G:   auctionsim.NormalestBidderGenerator(),
 | 
			
		||||
			Lim: num,
 | 
			
		||||
		},
 | 
			
		||||
	)
 | 
			
		||||
	bidder := allBidders[len(allBidders)-1]
 | 
			
		||||
 | 
			
		||||
	fmt.Printf("The auction winner paid ¤%f. They have %s.\n", price, deltaStr(bidder.Value-price))
 | 
			
		||||
	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.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("They would have paid up to ¤%f for it.\n", summary.WinnerMaxBid)
 | 
			
		||||
 | 
			
		||||
	fmt.Println()
 | 
			
		||||
	i := len(allBidders) - 2
 | 
			
		||||
	for i >= 0 && allBidders[i].Value < price {
 | 
			
		||||
		i--
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	if i < 0 {
 | 
			
		||||
		fmt.Printf("The item was not worth that to anybody.\n")
 | 
			
		||||
	if summary.LosersWithRegrets < 1 {
 | 
			
		||||
		fmt.Println("The item was not worth that to anybody.")
 | 
			
		||||
	} else {
 | 
			
		||||
		rube := allBidders[i]
 | 
			
		||||
		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.Printf("The item was worth that to %d bidders, who stopped bidding too soon.\n", summary.LosersWithRegrets)
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	fmt.Println()
 | 
			
		||||
	maxValue := math.Inf(-1)
 | 
			
		||||
	maxIdx := -1
 | 
			
		||||
	for i, b := range allBidders {
 | 
			
		||||
		if b.Value > maxValue {
 | 
			
		||||
			maxValue = b.Value
 | 
			
		||||
			maxIdx = i
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	if maxIdx == -1 {
 | 
			
		||||
	if summary.HighestValueRank > summary.Bidders {
 | 
			
		||||
		fmt.Println("Wow! It was infinitely beyond worthless to everybody.")
 | 
			
		||||
	} else {
 | 
			
		||||
		fmt.Printf("The bidder who would have gotten the most value was outbid by %d bidders.\n", len(allBidders)-maxIdx-1)
 | 
			
		||||
		rube := allBidders[maxIdx]
 | 
			
		||||
		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(rube.Value-price))
 | 
			
		||||
		fmt.Printf("The bidder who would have gotten the most value was outbid by %d bidders.\n", summary.HighestValueRank-1)
 | 
			
		||||
		fmt.Printf("The item was worth at most ¤%f to them. Their maximum bid was ¤%f.\n", summary.HighestValue, summary.HighestValuatorBid)
 | 
			
		||||
		fmt.Printf("If they had paid the winning bid, they would have %s.\n", deltaStr(summary.MissedProfit))
 | 
			
		||||
		fmt.Printf("They valued it ¤%f more than the winning bidder.\n", summary.ValueDelta)
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user