Программист
А что если вот так попробовать?
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, а дальше уже использовать готовые инструменты?
А что если вот так попробовать?
А можно такой же счетчик манипуляций для популярных оппозиционных сми
Может стоило написать конвертер из вашего формата в OpenApi, а дальше уже использовать готовые инструменты?