using System; using System.Collections.Generic; using System.IO; using System.Linq; using System.Text; using System.Threading.Tasks; namespace Program { class Program { static void Main(string[] args) { //Feladat1(); //Feladat2(); Feladat3(); } static void Feladat3() { Dictionary lookUpTable = new Dictionary(); //csökkentett értékek, mert programozásban ugye nem egytől számolunk lookUpTable.Add('A', 0); lookUpTable.Add('E', 1); lookUpTable.Add('I', 2); lookUpTable.Add('O', 3); lookUpTable.Add('U', 4); char[,] tablazat = CreateAlphabetMatrix(); PrintMatrix(tablazat); string path = @"..\..\..\Sources\szoveg.txt"; var data = File.ReadAllLines(path); List secretWords = new List(); foreach (var line in data) { var currentWords = line.Split(' '); foreach (var item in currentWords) { secretWords.Add(item); } } List solvedWords = new List(); bool coordsShouldSwitch = false; foreach (var secret in secretWords) { List solvedChars = new List(); for (int i = 0; i < secret.Length; i+=2) { if (coordsShouldSwitch) { int row = lookUpTable[secret[i + 1]]; int col = lookUpTable[secret[i]]; solvedChars.Add(tablazat[row, col]); } else { int row = lookUpTable[secret[i]]; int col = lookUpTable[secret[i + 1]]; solvedChars.Add(tablazat[row, col]); } coordsShouldSwitch = !coordsShouldSwitch; } solvedWords.Add(new string(solvedChars.ToArray())); } // a feladat foreach (var solved in solvedWords) { Console.WriteLine(solved); } int indexOfFirstWordWithQInIt = solvedWords.IndexOf(solvedWords.First(x => x.Contains('Q'))); int indexOfLastWordWithQInIt = solvedWords.IndexOf(solvedWords.Last(x => x.Contains('Q'))); //Console.WriteLine(solvedWords[indexOfFirstWordWithQInIt]); //Console.WriteLine(solvedWords[indexOfLastWordWithQInIt]); Console.WriteLine($"A szövegben lévő Q karakteres szavak közötti max távolság: {indexOfLastWordWithQInIt - indexOfFirstWordWithQInIt - 1}"); // b feladat string pathToSzoveg2 = @"..\..\..\Sources\szoveg2.txt"; var szoveg2Data = File.ReadAllText(pathToSzoveg2); char[] vowelsLookUp = { 'A', 'E', 'I', 'O', 'U' }; List vowels = new List(); foreach (char c in szoveg2Data) { if (vowelsLookUp.Contains(c)) { vowels.Add(c); } } string feladatBString = new string(vowels.ToArray()); List solvedCharsForFeladatB = new List(); for (int i = 0; i < feladatBString.Length; i += 2) { int row = lookUpTable[feladatBString[i]]; int col = lookUpTable[feladatBString[i + 1]]; solvedCharsForFeladatB.Add(tablazat[row, col]); } Console.WriteLine(new string(solvedCharsForFeladatB.ToArray())); } static char[,] CreateAlphabetMatrix() { char[,] matrix = new char[5, 5]; List alphabet = new List(); // Add letters A-Z except for 'W' for (char c = 'A'; c <= 'Z'; c++) { if (c != 'W') { alphabet.Add(c); } } // Fill the matrix with the alphabet int index = 0; for (int i = 0; i < 5; i++) { for (int j = 0; j < 5; j++) { matrix[i, j] = alphabet[index]; index++; } } return matrix; } static void PrintMatrix(char[,] matrix) { for (int i = 0; i < matrix.GetLength(0); i++) { for (int j = 0; j < matrix.GetLength(1); j++) { Console.Write(matrix[i, j] + " "); } Console.WriteLine(); } } static void Feladat2() { string path = @"..\..\..\Sources\dobasok.txt"; string path2 = @"..\..\..\Sources\dontesek.txt"; var dobasok = new List(); var dontesek = new List(); //d feladathoz int pokermaxNum = 0; //dobasok var data = File.ReadAllText(path).Trim(); foreach (char c in data) { dobasok.Add(Convert.ToInt32($"{c}")); } //dontesek var data2 = File.ReadAllText(path2).Trim(); foreach (char c in data2) { dontesek.Add(Convert.ToInt32($"{c}")); } Jatekos alfa = new Jatekos(); alfa.Nev = "Alfa"; Jatekos beta = new Jatekos(); beta.Nev = "Beta"; Jatekos gamma = new Jatekos(); gamma.Nev = "Gamma"; List jatekosok = new List(); jatekosok.Add(alfa); jatekosok.Add(beta); jatekosok.Add(gamma); List korok = new List(); List dobasokSmallerScope = new List(); int jatekosCounter = 0; List dobasokFull = new List(); List dontesekFull = new List(); for (int i = 0; i < dobasok.Count; i++) { int dobas = dobasok[i]; int dontes = dontesek[i]; dobasokFull.Add(dobas); dontesekFull.Add(dontes); if (dontes == 1) { dobasokSmallerScope.Add(dobas); if (dobasokSmallerScope.Count == 5) { Kor kor = new Kor(); kor.dobasok = dobasokSmallerScope.ToArray(); kor.jatekos = jatekosok[jatekosCounter]; kor.dobasokFull = dobasokFull.ToArray(); kor.dontesekFull = dontesekFull.ToArray(); dobasokFull.Clear(); dontesekFull.Clear(); korok.Add(kor); dobasokSmallerScope.Clear(); if (jatekosCounter == 2) { jatekosCounter = 0; } else { jatekosCounter++; } continue; } } } // a feladat Console.WriteLine($"Teljes körök száma: {korok.Count / 3}"); // b feladat foreach (var kor in korok) { foreach (var jatekos in jatekosok) { if (jatekos.Nev == kor.jatekos.Nev) { int[] dobasokAKorben = kor.dobasok; bool sorCondition = dobasokAKorben.Distinct().Count() == 5; //nagysor if (sorCondition && dobasokAKorben.Contains(6)) { jatekos.Minta.Nagysor = true; continue; } //kissor if (sorCondition && dobasokAKorben.Contains(1)) { jatekos.Minta.Kissor = true; continue; } //poker var pokerGroup = dobasokAKorben.GroupBy(x => x).FirstOrDefault(g => g.Count() == 4); if (pokerGroup != null) { int pokerValue = pokerGroup.Key; if (pokerValue > pokermaxNum) { pokermaxNum = pokerValue; } jatekos.Minta.Poker = true; continue; } //full if (dobasokAKorben.Count(x => x == 3) == 1 && dobasokAKorben.Count(x => x == 2) == 1) { jatekos.Minta.Full = true; continue; } //terc if (dobasokAKorben.Count(x => x == 3) == 1) { jatekos.Minta.Terc = true; continue; } //ketpar if (dobasokAKorben.Count(x => x == 2) == 2) { jatekos.Minta.KetPar = true; continue; } //egypar if (dobasokAKorben.Count(x => x == 2) == 1) { jatekos.Minta.EgyPar = true; continue; } } } } foreach (var jatekos in jatekosok) { if (jatekos.Minta.AllTrue()) { Console.WriteLine($"{jatekos.Nev} nyerte meg a játékot"); } } // c feladat int counter = 0; foreach (var kor in korok) { if (kor.jatekos.Nev == "Gamma") { int[] dobasokAKorben = kor.dobasok; counter++; if (dobasokAKorben.Count(x => x == 3) == 1 && dobasokAKorben.Count(x => x == 2) == 1) { break; } } } Console.WriteLine($"Gamma ebbe a körbe dobott full-t: {counter + 1}"); // d feladat Console.WriteLine($"A legnagyobb poker értéke: {pokermaxNum}"); // e feladat foreach (var kor in korok) { List asztalok = new List(); List currentAsztal = new List(); List currentDontesek = new List(); int iter = 0; while (iter < kor.dobasokFull.Length) { while (currentAsztal.Count != 5) { currentAsztal.Add(kor.dobasokFull[iter]); currentDontesek.Add(kor.dontesekFull[iter]); iter++; } if (currentAsztal.Count == 5) { asztalok.Add(currentAsztal.ToArray()); List tempAsztal = new List(currentAsztal); List tempDontesek = new List(currentDontesek); currentAsztal.Clear(); currentDontesek.Clear(); for (int i = 0; i < tempAsztal.Count; i++) { if (tempDontesek[i] == 1) { currentAsztal.Add((int)tempAsztal[i]); currentDontesek.Add(1); } } } } kor.asztalok = asztalok; } int pairs = 0; foreach (var kor in korok) { foreach (var asztal in kor.asztalok) { foreach (var item in asztal) { Console.Write($"{item} "); } Console.WriteLine(); pairs += CountPairs(asztal); } Console.WriteLine("-----"); } Console.WriteLine($"Párok száma: {pairs}"); } static void PopulateAsztal(Kor kor) { List asztalok = new List(); List currentAsztal = new List(); List currentDontesek = new List(); int iter = 0; while (iter != kor.dobasokFull.Length - 1) { while (currentAsztal.Count != 5) { currentAsztal.Add(kor.dobasokFull[iter]); currentDontesek.Add(kor.dontesekFull[iter]); iter++; } if (currentAsztal.Count == 5) { asztalok.Add(currentAsztal.ToArray()); List tempAsztal = currentAsztal; List tempDontesek = currentDontesek; currentAsztal.Clear(); currentDontesek.Clear(); for (int i = 0; i < tempAsztal.Count; i++) { if (tempDontesek[i] == 1) { currentAsztal.Add((int)tempAsztal[i]); currentDontesek.Add(1); } } } } } static int CountPairs(int[] dobasok) { int pairs = 0; //terc if (dobasok.Count(x => x == 3) == 1) { return 0; } var pokerGroup = dobasok.GroupBy(x => x).FirstOrDefault(g => g.Count() == 4); if (pokerGroup != null) { return 0; } for (int i = 0; i < dobasok.Length; i++) { for (int j = i + 1; j < dobasok.Length; j++) { if (dobasok[i] == dobasok[j]) { pairs++; } } } return pairs; } static void IntArrKiir(int[] arr) { foreach (var item in arr) { Console.Write(item + " "); } Console.WriteLine(); } static void Feladat1() { string path = @"..\..\..\Sources\idopontok.txt"; var idopontok = new List(); var data = File.ReadAllLines(path); foreach (var line in data) { var parts = line.Split(' '); Idopont idopont = new Idopont(int.Parse(parts[0]), int.Parse(parts[1])); idopontok.Add(idopont); } foreach (var idopont in idopontok) { Console.WriteLine($"{idopont.Name}, {idopont.ClockAngle()}°"); } Console.WriteLine($"Legnagyobb szögű időpont: {idopontok.OrderByDescending(x => x.Angle).First().Name}"); // nem biztos, hogy jó List angleDifferences = new List(); for (int i = 0; i < idopontok.Count - 1; i++) { angleDifferences.Add(Math.Abs(idopontok[i].Angle - idopontok[i + 1].Angle)); } Console.WriteLine($"Legkisebb változás: {angleDifferences.Min()}°"); var idopontok2 = new List(); int napok = 5; for (int i = 0; i < napok; i++) { for (int orak = 0; orak < 24; orak++) { for (int percek = 0; percek < 60; percek++) { Idopont idopont = new Idopont(orak, percek); idopont.ClockAngle(); idopontok2.Add(idopont); } } } string path2 = @"..\..\..\Sources\szogek.txt"; var data2 = File.ReadAllText(path2).Split(' '); List anglesToLookFor = new List(); foreach (var item in data2) { string formattedItem = item.Replace('.', ','); anglesToLookFor.Add(Double.Parse(formattedItem)); } int counter = 0; int iterations = 0; int napokCounter = 1; foreach (var item in idopontok2) { if (item.Angle == anglesToLookFor[counter]) { counter++; } if (counter == anglesToLookFor.Count) { break; } iterations++; if (iterations == 1440) { napokCounter++; iterations = 0; } } Console.WriteLine($"{napokCounter}|{idopontok2[iterations].Name}"); } } }