Задать вопрос
  • Как при сортировке массива строк сортировать без строк?

    Star_Lord
    @Star_Lord Автор вопроса
    Вот что я сделал

    private class VirtualStringBWT : IComparable<VirtualStringBWT>, IEnumerable<char>
            {
                char[] _sourse;
                int _shiftRight;
    
                public VirtualStringBWT(char[] sourse, int shift)
                {
                    if (shift >= sourse.Length)
                        throw new ArgumentOutOfRangeException("Нельзя сдвигать на число большее или равное количеству символов!");
    
                    _sourse = sourse;
                    _shiftRight = shift;
                }
    
                public int CompareTo(VirtualStringBWT other)
                {
                    if (other == null)
                        throw new NullReferenceException();
    
                    IEnumerator<char> thisEnumerator = this.GetEnumerator();
                    IEnumerator<char> otherEnumerator = other.GetEnumerator();
    
                    //строки одинаковой длины
                    while (thisEnumerator.MoveNext() && otherEnumerator.MoveNext())
                    {
                        if (thisEnumerator.Current > otherEnumerator.Current)
                            return 1;
                        else if (thisEnumerator.Current < otherEnumerator.Current)
                            return -1;
                    }
    
                    return 0;
                }
    
                public IEnumerator<char> GetEnumerator()
                {
                    int startI = _sourse.Length - _shiftRight;
                    int i = startI;
                    while (i < _sourse.Length)
                    {
                        yield return _sourse[i];
                        i++;
                    }
    
                    i = 0;
    
                    while (i < startI)
                    {
                        yield return _sourse[i];
                        i++;
                    }
                }
    
                IEnumerator IEnumerable.GetEnumerator()
                {
                    return GetEnumerator();
                }
            }
        }


    1) Из строки которую нужно закодировать я делаю массив символов, который будет один для всех VirtualString.
    2) Затем создаю n штук VirtualString куда передаю массив символов и сдвиг.
    for (int i = 0; i < _source.Length; i++)
           list.Add(new VirtualStringBWT(t, i));

    3) Когда обращаюсь к объекту VirtualString он начинает выдавать массив с определённой позиции.
    И я не создаю 200 строк.
    Ура)
    Ответ написан
    Комментировать
  • Как максимально быстро найти точку на верном пути прохождения лабиринта?

    Star_Lord
    @Star_Lord
    Думаю нужно создать граф где каждая клетка связана с другими на которые указывает и каким нибудь алгоритмом найти путь.

    Вот такими

    А может есть и лучше
    Ответ написан