Обновить
0
Антон@DedAnton

Программист

Отправить сообщение

А что если вот так попробовать?

int ConvertToArabic(string romanNumber, int? lastDigit = null)
{
    var (digit, tail) = romanNumber switch
    {
        [] => (0, ""),

        ['I', 'X', 'I', ..] => throw new Exception("Invalid subtractive sequence: IXI"),
        ['I', 'X', 'V', ..] => throw new Exception("Invalid subtractive sequence: IXV"),
        ['I', 'X', ..] => (9, romanNumber[2..]),

        ['I', 'V', 'I', ..] => throw new Exception("Invalid subtractive sequence: IVI"),
        ['I', 'V', ..] => (4, romanNumber[2..]),

        ['I', 'I', 'I', 'I', ..] => throw new Exception("Too many consecutive I"),
        ['I', 'I', 'I', ..] => (3, romanNumber[3..]),
        ['I', 'I', ..] => (2, romanNumber[2..]),
        ['I', ..] => (1, romanNumber[1..]),

        ['V', 'I', 'V', ..] => throw new Exception("Invalid sequence: VIV"),
        ['V', 'V', ..] => throw new Exception("Too many consecutive V"),
        ['V', ..] => (5, romanNumber[1..]),

        ['X', 'C', 'X', ..] => throw new Exception("Invalid subtractive sequence: XCX"),
        ['X', 'C', 'L', ..] => throw new Exception("Invalid subtractive sequence: XCL"),
        ['X', 'C', ..] => (90, romanNumber[2..]),

        ['X', 'L', 'X', ..] => throw new Exception("Invalid subtractive sequence: XLX"),
        ['X', 'L', ..] => (40, romanNumber[2..]),

        ['X', 'X', 'X', 'X', ..] => throw new Exception("Too many consecutive X"),
        ['X', 'X', 'X', ..] => (30, romanNumber[3..]),
        ['X', 'X', ..] => (20, romanNumber[2..]),
        ['X', ..] => (10, romanNumber[1..]),

        ['L', 'X', 'L', ..] => throw new Exception("Invalid sequence: LXL"),
        ['L', 'L', ..] => throw new Exception("Too many consecutive L"),
        ['L', ..] => (50, romanNumber[1..]),

        ['C', 'M', 'C', ..] => throw new Exception("Invalid sequence: CMC"),
        ['C', 'M', 'D', ..] => throw new Exception("Invalid sequence: CMD"),
        ['C', 'M', ..] => (900, romanNumber[2..]),

        ['C', 'D', 'C', ..] => throw new Exception("Invalid sequence: CDC"),
        ['C', 'D', ..] => (400, romanNumber[2..]),

        ['C', 'C', 'C', 'C', ..] => throw new Exception("Too many consecutive C"),
        ['C', 'C', 'C', ..] => (300, romanNumber[3..]),
        ['C', 'C', ..] => (200, romanNumber[2..]),
        ['C', ..] => (100, romanNumber[1..]),

        ['D', 'C', 'D', ..] => throw new Exception("Invalid sequence: DCD"),
        ['D', 'D', ..] => throw new Exception("Too many consecutive D"),
        ['D', ..] => (500, romanNumber[1..]),

        ['M', 'M', 'M', 'M', ..] => throw new Exception("Too many consecutive M"),
        ['M', 'M', 'M', ..] => (3000, romanNumber[3..]),
        ['M', 'M', ..] => (2000, romanNumber[2..]),
        ['M', ..] => (1000, romanNumber[1..]),

        _ => throw new Exception($"Invalid Roman number sequence starting with '{romanNumber[0]}'")
    };

    if (lastDigit != null && digit >= lastDigit)
    {
        throw new Exception($"Invalid order: {digit} after {lastDigit}");
    }

    if (digit == 0)
    {
        return 0;
    }

    return digit + ConvertToArabic(tail, digit);
}

А можно такой же счетчик манипуляций для популярных оппозиционных сми

Может стоило написать конвертер из вашего формата в OpenApi, а дальше уже использовать готовые инструменты?

Я зашел на ваш сайт, посмотрел туры, мне аж путешествовать захотелось. Крутая идея, обязательно воспользуюсь сервисом. Осталось только деньги накопить.

Информация

В рейтинге
Не участвует
Откуда
Санкт-Петербург, Санкт-Петербург и область, Россия
Зарегистрирован
Активность