using System;
/*
We want to sort characters in this strict order:
1. lowercase letters (a–z)
2. uppercase letters (A–Z)
3. odd digits (1,3,5,7,9)
4. even digits (0,2,4,6,8)
Strategy:
---------
Assign each character a "category rank" and sort by:
(category rank, natural character order)
C# allows custom sorting using Array.Sort with a Comparison<char>.
*/
public class SortAlphaNumeric
{
/// Returns category rank for sorting.
/// Lower rank = comes earlier.
static int Category(char c)
{
if (c >= 'a' && c <= 'z') return 0; // lowercase
if (c >= 'A' && c <= 'Z') return 1; // uppercase
if (char.IsDigit(c)) {
int d = c - '0';
return (d % 2 == 1) ? 2 : 3; // odd digits → 2, even digits → 3
}
return 4; // fallback (should not happen for alphanumeric input)
}
/// Custom comparator for sorting characters
static int CompareChars(char a, char b)
{
int ca = Category(a);
int cb = Category(b);
if (ca != cb)
return ca - cb; // sort by category first
return a - b; // tie-breaker: natural order
}
public static void Main()
{
string s = "a2B3cD8f1Z0";
// Convert string to array of chars
char[] arr = s.ToCharArray();
// Sort using custom comparator
Array.Sort(arr, (a, b) => CompareChars(a, b));
// Build result string
string result = new string(arr);
Console.WriteLine("Sorted result: " + result);
}
}
/*
run:
Sorted result: acfBDZ13028
*/