Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- using System;
- using System.Collections.Generic;
- using System.Text.RegularExpressions;
- /*
- 13.30 update: dabar reikia sutvarkyti regexo patterna, kad matchintu tai, ko mums reikia
- ([A-Z])\w+ - sis patternas reiskia, kad iesko zodziu is didziuju raidziu, btw
- ([a-z])\w+ - jei butu taip, ieskotu zodziu, kurie prasideda is mazosios raides
- */
- namespace Program
- {
- public class Program
- {
- // Apsirasom visas balses, kad galetume checkinti regexe
- private static string vowelLetters = "aąeęėiįyouųū";
- // apsirasom visus galimus skyriklius, nes uzduoty pasakyta, kad skyrikliu aibe zinoma
- // cia yra ne char, o Char del to, kad to reikalauja Split() funkcija, watch this
- private static Char[] separators = new Char[] { ' ', ',', '.', '!', '?', '(', ')', ':', ';', '\t', '\n' };
- // duomenu failo pavadinimas
- private static string dataFile = @"./Knyga.txt";
- // susikuriam Lista su savo apsirasyta WordMatch klase, kuria saugosim rezultatus pirmai uzduociai
- private static List<WordMatch> resultingVowelWords = new List<WordMatch>();
- public static void Main()
- {
- // Readinam is failo, sita funkcija daro ir biski daugiau nei tik readina is failo, realiai joje ivyksta visas uzduoties
- // sprendimas
- ReadFromFile(dataFile);
- IComparer<WordMatch> comparer = new WordMatchSorter();
- resultingVowelWords.Sort(comparer);
- PrintVowelWords();
- }
- public static void ReadFromFile(string file)
- {
- // kadangi kaip sakiau tas online emulatorius neturi IO, tai apsirasiau failo turiny masyve
- string[] lines = new string[] {
- "Naktį pasnigo, miškas nubalo. Nendrės, juosiančios ežerėlį, buvo tarytum paslaptingi hieroglifai,",
- "kaligrafo ąsa įrėžti į tylą, neperskaitomi, todėl nebylūs. Tik du didžiuliai krankliai vartėsi,",
- "žaidė ore vis sugrumėdami toli girdimais balsais. Miškas stovėjo tarytum rikiuotė baltų ir",
- "juodų pėstininkų ąsa. Ežero vanduo buvo juodas ir slėpė bedugnę. Lygaus paviršiaus nežeidė",
- "net menkiausias vėjelis, tik tamsiajame veidrody atsispindėjo pakibęs (tiesiai pačiame paveikslo viduryje)",
- "plaštakos formos debesis. ežerėlį ore ore Ore įrėžti yla ola ėjo eina atsibodę įvyko atvyko"
- };
- foreach(string line in lines)
- {
- // pagrindinis musu metodas, kuris issprendzia pirmos uzduoties problema
- WordVowelMatchInLine(line);
- }
- }
- public static void WordVowelMatchInLine(string line)
- {
- // apsirasom Regex patterna
- string pattern = String.Format(@"\b[{0}].*[{0}]\b", vowelLetters);
- // sukuriam regexa jam priskirdami apsirasyta patterna
- Regex regex = new Regex(pattern);
- // pasplitinam eilute i zodzius su apsirasytais skyrikliais
- string[] lineWords = line.Split(separators);
- // loopinam per visus zodzius
- foreach(string word in lineWords)
- {
- // tikrinam ar zodis matchina regexo patterna
- if (regex.IsMatch(word.ToLower()))
- {
- // jei matchina pridedam i lista
- // cia yra mandresnis objekto sukurimas, kokio turbut nesi mates
- // taip yra del to, nes mes neturim apsirase klases konstruktoriaus, todel sukuriam fake objekta,
- // neissaugodami jo atminty
- // struktura panasi kaip ir bet kokio kito tipo kurimas ir reiksmiu priskyrimas, watch this
- AddWordToResultList(word);
- }
- }
- }
- public static void AddWordToResultList(string word)
- {
- int id = -1;
- for (int i = 0; i < resultingVowelWords.Count; i++)
- {
- if (String.Compare(resultingVowelWords[i].Word, word.ToLower()) == 0)
- {
- id = i;
- break;
- }
- }
- if (id != -1)
- {
- resultingVowelWords[id].Count += 1;
- }
- else
- {
- resultingVowelWords.Add(new WordMatch { Word = word.ToLower(), Count = 1 });
- }
- }
- public static void PrintVowelWords()
- {
- Console.WriteLine("Žodžių kiekis, kurie prasideda ir pasibaige balse yra {0}", GetVowelWordsCount());
- for(int i = 0; i < 10; i++)
- {
- Console.WriteLine("Žodis {0} pasikartoja {1} kartą(-us)", resultingVowelWords[i].Word, resultingVowelWords[i].Count);
- }
- }
- public static int GetVowelWordsCount()
- {
- int result = 0;
- foreach (var word in resultingVowelWords)
- {
- result += word.Count;
- }
- return result;
- }
- }
- // apsirasyta klase pirmai uzduociai
- public class WordMatch
- {
- // Uzduotis praso atspausdinti zodi pagal jo pasikartojimu kieki, todel jei liste tokio zodzio dar nera ji idedam
- public string Word { get; set; }
- // o jei yra, incrementinam Counta
- public int Count { get; set; }
- }
- public class WordMatchSorter : IComparer<WordMatch>
- {
- public int Compare(WordMatch a, WordMatch b)
- {
- if (a.Count == b.Count)
- {
- return a.Word.CompareTo(b.Word);
- }
- return b.Count.CompareTo(a.Count);
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement