Informatika gyűjtemény

NézetNyomtat

kb_zaszlo.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 zaszlo
{
    class Diff
    {
        public int line;
        public int start, end;
        public char ch;

        public Diff(int line, int start, int end, char ch)
        {
            this.line = line+1;
            this.start = start+1;
            this.end = end+1;
            this.ch = ch;
        }

        internal void print(StreamWriter outs)
        {
            outs.WriteLine("{0} {1} {2} {3}", line, start, end, ch);
        }
    }

    class zaszlo
    {
        private int n, m; // nekem felcserélve van a kettő, nem úgy ahogy a feladat szövege mondja
        private char[] last;
        private char[] last_;
        private List<Diff> list = new List<Diff>();
        public zaszlo()
        {
            StreamReader ins = new StreamReader("zaszlo.be");
            string[] line = ins.ReadLine().Split(' ');
            m = int.Parse(line[0]);
            n = int.Parse(line[1]);
            last = new char[n]; // itt tároljuk a különbségeket.
            last_ = new char[n];
            for( int i=0; i<n; i++ ) {
                last[i] = '0'; // számot tárolunk defaultban!
            }

            int diff_s = -1;
            char ch = 'A'; // amiben különbözik
            for (int j = 0; j < m; j++)
            {
                diff_s = -1;
                line = ins.ReadLine().Split(' '); // stringek, de tulajdonképpen karakterek!
                for( int i = 0; i<n; i++ )
                {
                    last_[i] = line[i][0];
                    if (last[i] != last_[i])
                    {
                        // olyan karakternél vagyunk, ami különbözik
                        if (diff_s == -1)
                        {
                            // először különbözik
                            diff_s = i;
                            ch = last_[i]; // megjegyezzük.
                        }
                        else
                        {
                            // még mindig különbözik
                            if (ch != last_[i]) // de másik karakterben
                            {
                                // előző karakterig volt különbség
                                list.Add(new Diff(j, diff_s, i-1, ch));
                                diff_s = i; // újból kezdjük
                                ch = last_[i]; // új karakterrel.
                            }
                        }
                    }
                    else if(diff_s != -1)
                    {
                        // egyezik, ekkor is befejezzük a különbséget
                        list.Add(new Diff(j, diff_s, i-1, ch));
                        diff_s = -1; // újból kezdjük
                    }
                }
                // sor végén járunk
                if (diff_s != -1)
                {
                    // elkezdtük de nem fejeztük be!
                    list.Add( new Diff( j, diff_s, n-1, ch ) );
                }
                // puffer átmásolása
                for (int i = 0; i < n; i++)
                {
                    last[i] = last_[i];
                }
            }

            printOut();            
        }

        private void printOut()
        {
            StreamWriter outs = new StreamWriter("zaszlo.ki");
            outs.WriteLine( "{0} {1}", m, n );
            for (int i = 0; i < list.Count; i++)
            {
                list[i].print( outs );
            }
            outs.Close();
        }

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