/// <summary> /// Closes Sales and prints out a summary of the day's sales /// </summary> public void EndDay() { Open = false; Console.WriteLine("Today's Sales:"); Console.WriteLine("Total tickets purchased: {0}", Purchased); Sched.PrintResults(); }
/// <summary> /// Procedure to remove movies from the command line /// </summary> public void DeScheduleMovie() { //Do not allow schedule modifications while sales are open if (!Open) { //Read in screen number Sched.PrintSchedule(); Console.WriteLine("Please Enter A Screen Number:"); var screenA = Console.ReadLine(); //Check validity if (int.TryParse(screenA, out var screenNumA)) { //Check in range if (screenNumA < 1 || screenNumA > 5) { Console.WriteLine("Invalid numeral entered. Please enter a numeral in range 1-5"); return; } //Perform operation Sched.RemoveMovie(screenNumA); } else { Console.WriteLine("Invalid numeral entered. Please enter a numeral in range 1-5"); } } else { Console.WriteLine("Cannot modify schedule while sales are open"); } }
/// <summary> /// Procedure to swap movies from the command line /// </summary> public void SwapMovies() { //Do not allow schedule changes while sales are open if (!Open) { //Read in Screen number A Sched.PrintSchedule(); Console.WriteLine("Please Enter A Screen Number:"); var screenA = Console.ReadLine(); //Check Validity if (int.TryParse(screenA, out var screenNumA)) { //Check in range if (screenNumA < 1 || screenNumA > 5) { Console.WriteLine("Invalid numeral entered. Please enter a numeral in range 1-5"); return; } //Read in Screen number B Console.WriteLine("Please enter screen number to swap with screen {0}", screenNumA); var screenB = Console.ReadLine(); //Check validity if (int.TryParse(screenB, out var screenNumB)) { //Check in range if (screenNumB < 1 || screenNumB > 5) { Console.WriteLine("Invalid numeral entered. Please enter a numeral in range 1-5"); return; } //Perform Swap Sched.SwapMovies(screenNumA, screenNumB); } else { Console.WriteLine("Invalid numeral entered. Please enter a numeral in range 1-5"); } } else { Console.WriteLine("Invalid numeral entered. Please enter a numeral in range 1-5"); } } else { Console.WriteLine("Cannot modify schedule while sales are open"); } }
/// <summary> /// Procedure to add movies from the command line /// </summary> public void ScheduleMovie() { //Do not allow schedule modifications while sales are open if (!Open) { //Read in screen number Sched.PrintSchedule(); Console.WriteLine("Please Enter A Screen Number:"); var screenA = Console.ReadLine(); //Check validity if (int.TryParse(screenA, out var screenNumA)) { //Check in range if (screenNumA < 1 || screenNumA > 5) { Console.WriteLine("Invalid numeral entered. Please enter a numeral in range 1-5"); return; } //Read in title Console.WriteLine("Enter Film Title to show at screen {0}", screenNumA); var title = Console.ReadLine(); //Modify schedule Sched.AddMovie(title, screenNumA); } else { Console.WriteLine("Invalid numeral entered. Please enter a numeral in range 1-5"); } } else { Console.WriteLine("Cannot modify schedule while sales are open"); } }
internal void Run() { using (var sw = File.CreateText(@"..\..\B-large.out")) using (var sr = File.OpenText(@"C:\Users\sperumal\Downloads\B-large-practice (2).in")) { var T = int.Parse(sr.ReadLine()); for (int i = 1; i <= T; i++) { var Q = sr.ReadLine().Split(' ').Select(q => int.Parse(q)).ToArray(); var schedules = new List <Sched>(); for (int ac = 0; ac < Q[0]; ac++) { var c = sr.ReadLine().Split(' ').Select(q => int.Parse(q)).ToArray(); schedules.Add(new Sched { S = c[0], E = c[1], C = true }); } for (int aj = 0; aj < Q[1]; aj++) { var j = sr.ReadLine().Split(' ').Select(q => int.Parse(q)).ToArray(); schedules.Add(new Sched { S = j[0], E = j[1], C = false }); } schedules = schedules.OrderBy(s => s.S).ToList(); var start = schedules[0].S; var end = start + 24 * 60; schedules.Add(new Sched { C = schedules[0].C, S = end, E = end }); var carePeriods = new List <Sched>(); Sched current = null; foreach (var sched in schedules) { if (current != null && sched.C != current.C) { var gap = sched.S - current.E; current.LE = current.E = sched.E; if (gap > 0) { current.Gaps.Add(gap); } else if (gap < 0) { Debugger.Break(); } } else { if (current != null) { carePeriods.Add(current); current = new Sched { C = !sched.C, S = current.E, E = sched.E, FS = sched.S, LE = sched.E }; } else { current = new Sched { C = !sched.C, S = sched.S, E = sched.E, FS = sched.S, LE = sched.E } }; } } carePeriods.Add(current); var C = carePeriods.Last().C; int changes = 0; foreach (var cp in carePeriods) { if (C != cp.C) { changes++; C = cp.C; } } var ccp = carePeriods.Where(cp => cp.C); int sumC = ccp.Sum(cp => cp.D); var ccj = carePeriods.Where(cp => !cp.C); int sumJ = carePeriods.Where(cp => !cp.C).Sum(cp => cp.D); var sumCSlack = ccp.Sum(cp => cp.Slack); var sumJSlack = ccj.Sum(cp => cp.Slack); if (sumC + sumJ != 1440) { Debugger.Break(); } if (sumC > 720) { var excess = sumC - 720 - sumCSlack; if (excess > 0) { var gaps = ccp.SelectMany(cp => cp.Gaps).OrderByDescending(g => g).TakeWhile(g => (excess -= g) + g > 0); changes += gaps.Count() * 2; } } else if (sumJ > 720) { var excess = sumJ - 720 - sumJSlack; if (excess > 0) { var gaps = ccj.SelectMany(cp => cp.Gaps).OrderByDescending(g => g).TakeWhile(g => (excess -= g) + g > 0); changes += gaps.Count() * 2; } } sw.WriteLine("Case #{0}: {1}", i, changes); } } }
/// <summary> /// Used to print the theater's schedule from a separate class /// </summary> public void Print() { Sched.PrintSchedule(); }
/// <summary> /// Procedure to purchase tickets from the command line /// (Used by client) /// </summary> /// <param name="s"> The network stream connected to the client </param> public void PurchaseTickets(NetworkStream s) { //Do not allow purchases when sales are not open if (Open) { //Read in screen number SendMsg(s, "Please enter a screen number (1-5):"); var screenA = ReceiveMsg(s); //Check validity if (int.TryParse(screenA, out var screenNumberA)) { //Check in range if (screenNumberA < 1 || screenNumberA > 5) { SendMsg(s, "Invalid numeral entered. Please enter a numeral in range 1-5"); return; } //Check if there is a film playing if (Sched.IsNull(screenNumberA)) { SendMsg(s, "Currently no showings at given screen"); return; } //Get film info var screen = Sched.GetScreen(screenNumberA); var title = screen.Title; var remaining = screen.Tickets.ToString(); //Determine amount of purchase var msg = title + " currently has " + remaining + " ticket(s) available (>>)"; SendMsg(s, msg); SendMsg(s, "Please enter the number of tickets you would like to purchase:"); var tickets = ReceiveMsg(s); //Check validity if (int.TryParse(tickets, out var numTickets)) { //Check in range if (numTickets < 1 || numTickets > screen.Tickets) { msg = "Invalid numeral entered. Please enter a numeral in range 1-" + remaining; SendMsg(s, msg); return; } //Perform operation Purchased += screen.Purchase(numTickets); } else { msg = "Invalid numeral entered. Please enter a numeral in range 1-" + remaining; SendMsg(s, msg); } } else { SendMsg(s, "Invalid numeral entered. Please enter a numeral in range 1-5"); } } else { SendMsg(s, "Sales are not yet open, please try again later"); } }