using System.Collections.Generic;
public static void Main()
var input = "x = ABZZT - AC050, AB055, AB060-AB099";
var valuePart = input.Split('=')[1];
var ranges = valuePart.Split(',')
return RangeLong(BaseToLong(range[0]), BaseToLong(range[1]) - BaseToLong(range[0]) + 1);
return RangeLong(BaseToLong(range[0]), 1);
var result = ranges.SelectMany(x => x.Select(y=> LongToBase(y))).ToList();
static IEnumerable<long> RangeLong(long start, long count)
for (int i = 0; i < count; i++) yield return start + i;
private static readonly char[] BaseChars =
"0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ".ToCharArray();
private static readonly Dictionary<char, int> CharValues = BaseChars
.Select((c, i) => new { Char = c, Index = i })
.ToDictionary(c => c.Char, c => c.Index);
public static string LongToBase(long value)
long targetBase = BaseChars.Length;
char[] buffer = new char[Math.Max(
(int)Math.Ceiling(Math.Log(value + 1, targetBase)), 1)];
buffer[--i] = BaseChars[value % targetBase];
value = value / targetBase;
return new string(buffer, i, buffer.Length - i);
public static long BaseToLong(string number)
char[] chrs = number.ToCharArray();
int n = BaseChars.Length, x;
for (int i = 0; i < chrs.Length; i++)
result += x * (long)Math.Pow(n, m--);