Informatika gyűjtemény

NézetNyomtat

kb_gazda.cs (Vissza)
Az alábbi letöltési lehetőségek közül választhatsz: (segítség)
Karakterkódolás:
Sortörés:
Típus: text/plain
Tartalmaz szöveget
Karakterkódolás: utf-8
Méret: 3 KB
using System;
using System.Collections.Generic;
using System.Text;
using System.IO;

namespace gazda
{
    class Interval
    {
        private int x1,y1, x2,y2;

        public Interval( int _x1, int _y1, int _x2, int _y2 )
        {
            x1 = _x1;
            y1 = _y1;
            x2 = _x2;
            y2 = _y2;
        }

        public void printLine( StreamWriter outs )
        {
            outs.WriteLine("{0} {1} {2} {3}", x1, y1, x2, y2);
        }
    }

    class gazda
    {
        private int year;
        private int k, l;
        private int[,] days = new int[13, 31];
        private List<Interval> listSafe = new List<Interval>();
        private List<Interval> listDangerous = new List<Interval>();

        public bool isLeapYear()
        {
            return year % 4 == 0 && (year % 100 != 0 || year % 400 == 0);
        }

        public void nextDay(ref int m, ref int d)
        {
            // 31,28/29,31,30,31,30,31,31,30,31,30,31
            if (
                ((== 1 || m == 3 || m == 5 || m == 7 || m == 8 || m == 10 || m == 12) && (== 31)) ||
                ((== 4 || m == 6 || m == 9 || m == 11) && (== 30)) ||
                (== 2 && ((== 29 && isLeapYear()) || (== 28 && !isLeapYear())))               
               )
            {
                d = 0;
                m++;                
            }
            
            d++;
        }

        public gazda()
        {
            StreamReader ins = new StreamReader("gazda.be");

            for (int i = 0; i < 12; i++)
                for (int j = 0; j < 31; j++)
                {
                    days[i, j] = 0;
                }
            days[12, 0] = -1; // végén a ciklus miatt!

            year = int.Parse(ins.ReadLine());
            k = int.Parse(ins.ReadLine());
            for (int i = 0; i < k; i++)
            {
                readData(ins);
            }
            l = int.Parse(ins.ReadLine());
            for (int i = 0; i < l; i++)
            {
                readData(ins);
            }

            // mostmásrcsak végig kell mennünk az egész tömbön és kigyűjteni az izgalmas részeket!
            int m = 1, d = 1;
            int startM = 1, startD = 1;
            int prevM = 1, prevD = 1;
            int prevType = -1;
            while (!= 13 || d != 2)
            {
                if ( prevType != days[- 1, d - 1])
                {
                    // új különbség.
                    if (prevType == 0)
                    {
                        // volt egy biztonságos szakasz
                        listSafe.Add(new Interval(startM, startD, prevM, prevD));
                    }
                    else if (prevType == 2)
                    {
                        // volt egy veszélyes szakasz
                        listDangerous.Add(new Interval(startM, startD, prevM, prevD));
                    }
                    prevType = days[- 1, d - 1];
                    startM = m; startD = d;
                }
                prevM = m; prevD = d;
                nextDay(ref m, ref d);
            }

            StreamWriter outs = new StreamWriter("gazda.ki");
            outs.WriteLine( listSafe.Count );
            foreach (Interval iv in listSafe) iv.printLine(outs);
            outs.WriteLine(listDangerous.Count);
            foreach (Interval iv in listDangerous) iv.printLine(outs);
            outs.Close();
        }

        private void readData( StreamReader ins )
        {
            string[] line = ins.ReadLine().Split(' ');
            int sm = int.Parse(line[0]);
            int sd = int.Parse(line[1]);
            int em = int.Parse(line[2]);
            int ed = int.Parse(line[3]);

            int m = sm;
            int d = sd;
            days[- 1, d - 1]++;
            while (!(== em && d == ed))
            {
                nextDay(ref m, ref d);
                days[- 1, d - 1]++;
            }
        }

        static void Main(string[] args)
        {
            new gazda();
        }

    }
}
(Vissza)