public static void Main()
Test("Hello World", "Hello world");
Test("0000000000000", "1");
Test("aa123qwe000", "aa123qwe000");
Test("Hello World0010", "Hello World9");
Test("0000000000000", "000");
public static int Step = 0;
public static void Test(string left, string right)
var c = Compare(left, right);
Console.WriteLine($"#{Step} '{left}' {r} '{right}'");
public static int Compare(string left, string right)
while (li < left.Length && ri < right.Length)
if (left[li] >= '0' && left[li] <= '9' && right[ri] >= '0' && right[ri] <= '9')
if (left[li] == '0') ++li;
if (right[ri] == '0') ++ri;
while (li < left.Length && left[li] == '0') ++li;
while (ri < right.Length && right[ri] == '0') ++ri;
while (li < left.Length && left[li] >= '0' && left[li] <= '9') ++li;
while (ri < right.Length && right[ri] >= '0' && right[ri] <= '9') ++ri;
if (left[ld] < right[rd]) return -1;
if (left[ld] > right[rd]) return 1;
if (left[li] < right[ri]) return -1;
if (left[li] > right[ri]) return 1;
if (left.Length < right.Length) return -1;
if (left.Length > right.Length) return 1;