コード例 #1
0
 /// <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();
 }
コード例 #2
0
        /// <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");
            }
        }
コード例 #3
0
        /// <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");
            }
        }
コード例 #4
0
        /// <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");
            }
        }
コード例 #5
0
        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);
                    }
                }
        }
コード例 #6
0
 /// <summary>
 /// Used to print the theater's schedule from a separate class
 /// </summary>
 public void Print()
 {
     Sched.PrintSchedule();
 }
コード例 #7
0
        /// <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");
            }
        }