public IActionResult GetProfits() { DateTime now = DateTime.Now; var listOrderHeader = _db.OrderHeader.ToList(); List <ProfitData> chartData = new List <ProfitData>(); for (int i = 0; i < 5; i++) { TimeSpan aInterval = new System.TimeSpan(i, 0, 0, 0); var considerDate = now.Subtract(aInterval); var totalProfitInDay = listOrderHeader.Where(a => a.OrderDate.Day == considerDate.Day).Sum(a => a.OrderTotal); ProfitData profitData = new ProfitData() { Date = considerDate.ToString(), Profit = totalProfitInDay }; chartData.Add(profitData); } var json = chartData.ToGoogleDataTable() .NewColumn(new Column(ColumnType.String, "Date"), x => x.Date) .NewColumn(new Column(ColumnType.Number, "Quantity"), x => x.Profit) .Build() .GetJson(); return(Content(json)); }
private ResolvedProfit <T> FindMostProfitableItem <T>(RoundData data, IProfitResolver <T> resovler) { IList <T> items = resovler.ResolveAccessibleItems(data); if (items.Count == 0) { return(null); } T bestItem = items.First(); ProfitData bestProfit = resovler.CalculateProfit(data, bestItem); for (int i = 1; i < items.Count; i++) { // TODO multiple best items T item = items[i]; ProfitData profit = resovler.CalculateProfit(data, item); if (profit.CompareTo(bestProfit) > 0) { bestItem = item; bestProfit = profit; } } return(new ResolvedProfit <T>(bestItem, bestProfit)); }
public RobotCommand ProcessStep(RoundData data, EnergyStation station, ProfitData profit) { if (DistanceUtils.DistanceFromStation(data.MyPosition, station.Position) <= Constants.CollectingRadius) { FileLogger.Log("Collecting energy from stations nearby"); return(new CollectEnergyCommand()); } else { FileLogger.Log($"Moving to station {station.Format()} at position {profit.MovePosition}"); return(new MoveCommand() { NewPosition = profit.MovePosition }); } }
public RobotCommand ProcessStep(RoundData data, Robot robot, ProfitData profit) { if (data.MyPosition == robot.Position) { FileLogger.Log($"Attacking robot: {robot.Format()} at position {profit.MovePosition}"); } else { FileLogger.Log($"Moving to robot {robot} at position {profit.MovePosition}"); } return(new MoveCommand() { NewPosition = profit.MovePosition }); }
private void PerPlanting(string cmd, string[] args) { string season = ""; if (args.Length >= 1) { season = args[0]; } Log.Info((season == "") ? "Doing for all seasons" : $"Doing for season {season}"); Log.Info("NOTE: This takes into account your farming level"); var profits = new List <ProfitData>(); var objectInfo = Game1.content.Load <Dictionary <int, string> >("Data\\ObjectInformation"); var cropInfo = Game1.content.Load <Dictionary <int, string> >("Data\\Crops"); foreach (var crop in cropInfo) { string[] seedObjData = objectInfo[crop.Key].Split('/'); string[] cropData = crop.Value.Split('/'); string[] productObjData = objectInfo[int.Parse(cropData[3])].Split('/'); string name = productObjData[0]; int cost = int.Parse(seedObjData[1]); int value = int.Parse(productObjData[1]); //Monitor.Log("Doing for " + name); if (season != "" && !cropData[1].Split(' ').Contains(season)) { continue; } var phases = cropData[0].Split(' ').Select <string, int>(int.Parse); int total = phases.Sum(); int regrowth = int.Parse(cropData[4]); int profit = (value - cost) * (28 / total); if (regrowth != -1) { int days = 28; int harvests = 0; days -= total + 1; ++harvests; harvests += days / regrowth; //Monitor.Log("harvests for " + name + " " + harvests + " w/ " + total + " " + regrowth); int avgPerHarvest = 1; if (cropData[6].StartsWith("true ")) { string[] multiStrs = cropData[6].Split(' '); int min = int.Parse(multiStrs[1]); int max = int.Parse(multiStrs[2]); // TODO: Integrate chance? /* * int bonus = int.Parse(multiStrs[3]); * double chance = double.Parse(multiStrs[4]); * * int farmLevel = 0; * if (Game1.player != null) * farmLevel = Game1.player.FarmingLevel; * * int newMax = Math.Min(min + 1, max + 1 + farmLevel / (bonus == 0 ? 1 : bonus)); * * while (random.NextDouble() < Math.Min(0.9, (double)((NetFieldBase<double, NetDouble>)this.chanceForExtraCrops))) ++num1; */ avgPerHarvest = (min + max) / 2; } //Monitor.Log($"{name} {value} {harvests} {avgPerHarvest} {cost}"); profit = (value * harvests * avgPerHarvest) - cost; } var data = new ProfitData { Profit = profit, Crop = name }; profits.Add(data); } profits.Sort(Comparer <ProfitData> .Create((p1, p2) => p2.Profit - p1.Profit)); for (int i = 0; i < profits.Count; ++i) { var p = profits[i]; Log.Info($"{i + 1}. {p.Crop,-20}{p.Profit,10}g"); } }
public ResolvedProfit(T item, ProfitData profit) { Item = item; Profit = profit; }