2023-11-19 00:50:53 +00:00
|
|
|
package main
|
|
|
|
|
|
|
|
import (
|
|
|
|
"fmt"
|
2023-11-19 00:51:19 +00:00
|
|
|
"git.chromaticdragon.app/kistaro/auctionsim/auctionsim"
|
2023-11-19 00:50:53 +00:00
|
|
|
"log"
|
|
|
|
"os"
|
|
|
|
"strconv"
|
|
|
|
)
|
|
|
|
|
2023-11-19 01:27:50 +00:00
|
|
|
func deltaStr(delta float64) string {
|
|
|
|
if delta > 0 {
|
|
|
|
return fmt.Sprintf("gained ¤%f", delta)
|
|
|
|
}
|
|
|
|
if delta < 0 {
|
|
|
|
return fmt.Sprintf("lost ¤%f", -delta)
|
|
|
|
}
|
|
|
|
return "broken even"
|
|
|
|
}
|
|
|
|
|
2023-11-19 00:50:53 +00:00
|
|
|
func main() {
|
2023-11-19 00:52:22 +00:00
|
|
|
num := int64(1000)
|
2023-11-19 00:50:53 +00:00
|
|
|
if len(os.Args) > 1 {
|
|
|
|
n, err := strconv.ParseInt(os.Args[1], 0, 64)
|
|
|
|
if err != nil {
|
|
|
|
log.Fatalf("can't parse %q as a number of bidders: %v", os.Args[1], err)
|
|
|
|
}
|
|
|
|
num = n
|
|
|
|
}
|
|
|
|
if num <= 1 {
|
|
|
|
log.Fatalf("can't run an auction with %d bidders", num)
|
|
|
|
}
|
|
|
|
|
2023-11-19 02:19:41 +00:00
|
|
|
summary := auctionsim.Summarize(auctionsim.RunAuctionVerbosely(
|
2023-11-19 00:52:22 +00:00
|
|
|
&auctionsim.CappedBidderGenerator{
|
2023-11-19 00:51:19 +00:00
|
|
|
G: auctionsim.NormalestBidderGenerator(),
|
2023-11-19 00:50:53 +00:00
|
|
|
Lim: num,
|
|
|
|
},
|
2023-11-19 02:19:00 +00:00
|
|
|
))
|
|
|
|
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)
|
2023-11-19 01:27:50 +00:00
|
|
|
|
|
|
|
fmt.Println()
|
2023-11-19 02:19:00 +00:00
|
|
|
if summary.LosersWithRegrets < 1 {
|
|
|
|
fmt.Println("The item was not worth that to anybody.")
|
2023-11-19 01:27:50 +00:00
|
|
|
} else {
|
2023-11-19 02:19:00 +00:00
|
|
|
fmt.Printf("The item was worth that to %d bidders, who stopped bidding too soon.\n", summary.LosersWithRegrets)
|
2023-11-19 00:50:53 +00:00
|
|
|
}
|
|
|
|
|
2023-11-19 01:27:50 +00:00
|
|
|
fmt.Println()
|
2023-11-19 02:19:00 +00:00
|
|
|
if summary.HighestValueRank > summary.Bidders {
|
2023-11-19 01:27:50 +00:00
|
|
|
fmt.Println("Wow! It was infinitely beyond worthless to everybody.")
|
|
|
|
} else {
|
2023-11-19 02:19:00 +00:00
|
|
|
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)
|
2023-11-19 01:27:50 +00:00
|
|
|
}
|
2023-11-19 00:50:59 +00:00
|
|
|
}
|