//Метод работает с minMaxDistance, занося туда информацию о минимальном и максимальном расстоянии //Запоминаем позицию первого вхождение слова, и текущую позицию //При нахождении одного из заданных слов: // сравниваем позицию первого вхождения текущего слова и текущую позицию текущего слова // с позицией первого вхождения другого слова и последней позицией другого слова private void ProcessMinMaxDistance(ref MinMaxDistance minMaxDistance, MinMaxPosition wordPos, MinMaxPosition otherWordPos, int pos) { if (wordPos.Min == -1) { wordPos.Min = pos; } wordPos.Max = pos; var currentDistances = GetMinMaxDistance(wordPos, otherWordPos); if (currentDistances == null) { return; } if (minMaxDistance.Min == -1) { minMaxDistance.Min = currentDistances.Min; } else if (currentDistances.Min < minMaxDistance.Min) { minMaxDistance.Min = currentDistances.Min; } if (minMaxDistance.Max == -1) { minMaxDistance.Max = currentDistances.Max; } else if (currentDistances.Max > minMaxDistance.Max) { minMaxDistance.Max = currentDistances.Max; } }
public MinMaxDistance Get(string filename, string firstWord, string secondWord) { int pos = 0; MinMaxPosition firstWordPos = new MinMaxPosition(); MinMaxPosition secondWordPos = new MinMaxPosition(); MinMaxDistance minMaxDistance = new MinMaxDistance(); FileHelper fileHelper = new FileHelper(filename); firstWord = firstWord.ToLower(); secondWord = secondWord.ToLower(); while (!fileHelper.IsEnd()) { string[] words = fileHelper.GetNextWordsInLine(); foreach (var word in words) { pos++; if (word == firstWord) { ProcessMinMaxDistance(ref minMaxDistance, firstWordPos, secondWordPos, pos); } else if (word == secondWord) { ProcessMinMaxDistance(ref minMaxDistance, secondWordPos, firstWordPos, pos); } } } return(minMaxDistance); }
private MinMaxDistance GetMinMaxDistance(MinMaxPosition firstWordPos, MinMaxPosition secondWordPos) { MinMaxDistance minMaxDistance = new MinMaxDistance(); List <int> firstWordPosList = firstWordPos.getAllPos(); List <int> secondWordPosList = secondWordPos.getAllPos(); if (firstWordPosList.Count == 0 || secondWordPosList.Count == 0) { return(null); } minMaxDistance.Min = GetMinDistance(firstWordPosList, secondWordPosList); minMaxDistance.Max = GetMaxDistance(firstWordPosList, secondWordPosList); return(minMaxDistance); }
static void Main(string[] args) { const string filename = "input.txt"; const string firstWord = "я"; const string secondWord = "сказать"; MinMaxDistanceProcessor distanceProcessor = new MinMaxDistanceProcessor(); MinMaxDistance minMaxDistance = distanceProcessor.Get(filename, firstWord, secondWord); int minDistance = minMaxDistance.Min; int maxDistance = minMaxDistance.Max; string minDistanceString = minDistance == -1 ? "Не существует" : minDistance.ToString(); string maxDistanceString = maxDistance == -1 ? "Не существует" : maxDistance.ToString(); Console.WriteLine($"min distance: {minDistanceString}\n" + $"max distance: {maxDistanceString}"); }