319 lines
8.9 KiB
C#
319 lines
8.9 KiB
C#
using System;
|
|
using System.Collections.Generic;
|
|
using System.Linq;
|
|
using System.Text;
|
|
using System.IO;
|
|
using System.Text.RegularExpressions;
|
|
|
|
public static class Karakterek
|
|
{
|
|
public static List<char> KarakterekList = new List<char>();
|
|
public static void ReadDataFromFile(string path)
|
|
{
|
|
KarakterekList = File.ReadAllText(path).ToCharArray().ToList();
|
|
}
|
|
|
|
public static List<char> LongestStringWithTwoCharactersOnly()
|
|
{
|
|
if (KarakterekList.Count < 2)
|
|
return new List<char>();
|
|
|
|
List<char> currentBestCharacterSequence = new List<char>();
|
|
List<char> currentCharacterSequence = new List<char>();
|
|
|
|
char firstChar = KarakterekList[0];
|
|
char secondChar = KarakterekList[1];
|
|
|
|
currentCharacterSequence.Add(firstChar);
|
|
currentCharacterSequence.Add(secondChar);
|
|
|
|
for (int i = 2; i < KarakterekList.Count; i++)
|
|
{
|
|
char item = KarakterekList[i];
|
|
|
|
if (item == firstChar || item == secondChar)
|
|
{
|
|
currentCharacterSequence.Add(item);
|
|
}
|
|
else
|
|
{
|
|
if (currentCharacterSequence.Count > currentBestCharacterSequence.Count)
|
|
{
|
|
currentBestCharacterSequence = new List<char>(currentCharacterSequence);
|
|
}
|
|
|
|
firstChar = currentCharacterSequence[currentCharacterSequence.Count - 1];
|
|
secondChar = item;
|
|
|
|
currentCharacterSequence.Clear();
|
|
currentCharacterSequence.Add(firstChar);
|
|
currentCharacterSequence.Add(secondChar);
|
|
}
|
|
}
|
|
|
|
if (currentCharacterSequence.Count > currentBestCharacterSequence.Count)
|
|
{
|
|
currentBestCharacterSequence = currentCharacterSequence;
|
|
}
|
|
|
|
return currentBestCharacterSequence;
|
|
}
|
|
|
|
public static int CountABCSequences(string input)
|
|
{
|
|
int count = 0;
|
|
for (int i = 0; i < input.Length; i++)
|
|
{
|
|
if (input[i] == 'a')
|
|
{
|
|
for (int j = i + 1; j < input.Length; j++)
|
|
{
|
|
if (input[j] == 'b')
|
|
{
|
|
for (int k = j + 1; k < input.Length; k++)
|
|
{
|
|
if (input[k] == 'c')
|
|
{
|
|
count++;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
return count;
|
|
}
|
|
|
|
public static int TotalDistanceTraveled(string input)
|
|
{
|
|
int x = 0;
|
|
int y = 0;
|
|
|
|
for (int i = 0; i < input.Length; i++)
|
|
{
|
|
if (input[i] == 'b')
|
|
{
|
|
x++;
|
|
}
|
|
else if (input[i] == 'd')
|
|
{
|
|
x--;
|
|
}
|
|
else if (input[i] == 'a')
|
|
{
|
|
y++;
|
|
}
|
|
else if (input[i] == 'c')
|
|
{
|
|
y--;
|
|
}
|
|
}
|
|
return (int)Math.Sqrt(Math.Pow(x, 2) + Math.Pow(y, 2));
|
|
}
|
|
}
|
|
|
|
public static class Szoveg
|
|
{
|
|
public static List<string> fullTextInListOfString = new List<string>();
|
|
public static List<string> wordsWithUniqeCharactersOnly = new List<string>();
|
|
|
|
|
|
public static void ReadDataFromFile(string path)
|
|
{
|
|
var lines = File.ReadAllText(path).Split(new string[] { Environment.NewLine }, StringSplitOptions.None).ToList();
|
|
|
|
foreach (var line in lines)
|
|
{
|
|
var allStringsInLine = line.Split(' ');
|
|
foreach (var str in allStringsInLine)
|
|
{
|
|
fullTextInListOfString.Add(str);
|
|
}
|
|
}
|
|
}
|
|
|
|
public static List<string> WordsWithUniqeCharactersOnly()
|
|
{
|
|
foreach (var word in fullTextInListOfString)
|
|
{
|
|
if (word.Distinct().Count() == word.Length)
|
|
{
|
|
wordsWithUniqeCharactersOnly.Add(word);
|
|
}
|
|
}
|
|
|
|
return wordsWithUniqeCharactersOnly;
|
|
}
|
|
|
|
public static string LongestStringWithUniqueCharacters()
|
|
{
|
|
return wordsWithUniqeCharactersOnly.OrderByDescending(s => s.Length).First();
|
|
}
|
|
|
|
public static int GreatestDistanceBetweenWords(string input)
|
|
{
|
|
int maxDistance = 0;
|
|
|
|
int firstEndIndex = 0;
|
|
|
|
int secondStartIndex = 0;
|
|
int secondEndIndex = 0;
|
|
|
|
for (int i = 1; i < input.Length - 2; i++)
|
|
{
|
|
// új névelő megtalálva
|
|
if (input[i] == 'A' && input[i - 1] == ' ' && input[i + 1] == ' ')
|
|
{
|
|
if (firstEndIndex == 0)
|
|
{
|
|
firstEndIndex = i;
|
|
continue;
|
|
}
|
|
|
|
if (secondEndIndex == 0 && firstEndIndex != 0)
|
|
{
|
|
secondStartIndex = i;
|
|
secondEndIndex = i;
|
|
}
|
|
|
|
// kettő közötti távolság
|
|
int distance = Convert.ToInt32(secondStartIndex - firstEndIndex - 1);
|
|
if (distance > maxDistance)
|
|
{
|
|
maxDistance = distance;
|
|
}
|
|
|
|
|
|
firstEndIndex = secondEndIndex;
|
|
|
|
secondStartIndex = i;
|
|
secondEndIndex = i;
|
|
|
|
continue;
|
|
}
|
|
|
|
if (input[i] == 'A' && input[i + 1] == 'Z' && input[i - 1] == ' ' && input[i + 2] == ' ')
|
|
{
|
|
if (firstEndIndex == 0)
|
|
{
|
|
firstEndIndex = i;
|
|
continue;
|
|
}
|
|
|
|
if (secondEndIndex == 0 && firstEndIndex != 0)
|
|
{
|
|
secondStartIndex = i;
|
|
secondEndIndex = i + 1;
|
|
}
|
|
|
|
// kettő közötti távolság
|
|
int distance = Convert.ToInt32(secondStartIndex - firstEndIndex - 1);
|
|
if (distance > maxDistance)
|
|
{
|
|
maxDistance = distance;
|
|
}
|
|
|
|
firstEndIndex = secondEndIndex;
|
|
|
|
secondStartIndex = i;
|
|
secondEndIndex = i + 1;
|
|
}
|
|
}
|
|
|
|
return maxDistance;
|
|
}
|
|
|
|
public static int MaxDistanceBetweenArticles(string text)
|
|
{
|
|
List<int> distances = new List<int>();
|
|
Regex regex = new Regex(@"\b(AZ|A)\b", RegexOptions.IgnoreCase);
|
|
|
|
foreach (Match match in regex.Matches(text))
|
|
{
|
|
int startPosition = match.Index;
|
|
int endPosition = match.Index + match.Length - 1;
|
|
|
|
var asd = match.NextMatch();
|
|
var nextStart = asd.Index;
|
|
var nextEnd = asd.Index + asd.Length - 1;
|
|
|
|
distances.Add(nextStart - endPosition - 1);
|
|
}
|
|
|
|
|
|
return distances.Max(); // Max distance
|
|
}
|
|
|
|
public static int UniquePalindromes()
|
|
{
|
|
List<string> palindromes = new List<string>();
|
|
|
|
foreach (var word in fullTextInListOfString)
|
|
{
|
|
if (word.Length < 2)
|
|
{
|
|
continue;
|
|
}
|
|
|
|
if (word == new string(word.Reverse().ToArray()))
|
|
{
|
|
if (!palindromes.Contains(word))
|
|
{
|
|
palindromes.Add(word);
|
|
}
|
|
}
|
|
}
|
|
return palindromes.Count;
|
|
}
|
|
}
|
|
|
|
public class Program
|
|
{
|
|
public static void Main(string[] args)
|
|
{
|
|
Karakterek.ReadDataFromFile(@"..\karsor.txt");
|
|
|
|
//System.Console.WriteLine($"{Karakterek.KarakterekList.Count}");
|
|
|
|
// feladat 1 a
|
|
/*
|
|
var longestStringWithTwoCharactersOnly = Karakterek.LongestStringWithTwoCharactersOnly();
|
|
var karakterek = longestStringWithTwoCharactersOnly.Distinct().OrderBy(c => c).ToArray();
|
|
int longestStringWithTwoCharactersOnlyLength = longestStringWithTwoCharactersOnly.Count;
|
|
|
|
System.Console.WriteLine($"{karakterek[0]}{karakterek[1]}{longestStringWithTwoCharactersOnlyLength}");
|
|
*/
|
|
|
|
// feladat 1 b
|
|
|
|
// ez az input változó volt használva a b és a c részben is
|
|
//string input = new string(Karakterek.KarakterekList.ToArray());
|
|
|
|
//System.Console.WriteLine($"{Karakterek.CountABCSequences(input)}");
|
|
|
|
// feladat 1 c
|
|
//System.Console.WriteLine($"{Karakterek.TotalDistanceTraveled(input)}");
|
|
|
|
// feladat 2 a
|
|
|
|
Szoveg.ReadDataFromFile(@"..\szoveg.txt");
|
|
|
|
/*
|
|
Szoveg.wordsWithUniqeCharactersOnly = Szoveg.WordsWithUniqeCharactersOnly();
|
|
|
|
System.Console.WriteLine($"{Szoveg.LongestStringWithUniqueCharacters()}");
|
|
*/
|
|
|
|
// feladat 2 b
|
|
string fullTextInSingleString = string.Join(" ", Szoveg.fullTextInListOfString);
|
|
|
|
//int value = Szoveg.GreatestDistanceBetweenWords(fullTextInSingleString);
|
|
|
|
int value = Szoveg.MaxDistanceBetweenArticles(fullTextInSingleString);
|
|
|
|
System.Console.WriteLine($"{value}");
|
|
|
|
System.Console.WriteLine($"{Szoveg.UniquePalindromes()}");
|
|
|
|
}
|
|
} |