public class HexDigitCalculator
public static string CompareOddEvenHexDigits(string hexNumber)
if (string.IsNullOrEmpty(hexNumber))
return "Invalid input: Null or empty hexadecimal number.";
hexNumber = hexNumber.ToUpper();
if (hexNumber.StartsWith("0X"))
hexNumber = hexNumber.Substring(2);
if (!IsValidHexadecimal(hexNumber))
return "Invalid input: Not a valid hexadecimal number.";
for (int i = 0; i < hexNumber.Length; i++)
int digitValue = GetDigitValue(hexNumber[i]);
sumOfEvenDigits += digitValue;
sumOfOddDigits += digitValue;
if (sumOfOddDigits > sumOfEvenDigits)
else if (sumOfOddDigits < sumOfEvenDigits)
return "same odds and evens";
private static bool IsValidHexadecimal(string hexNumber)
return hexNumber.All(c => (c >= '0' && c <= '9') || (c >= 'A' && c <= 'F'));
private static int GetDigitValue(char hexChar)
if (hexChar >= '0' && hexChar <= '9')
else if (hexChar >= 'A' && hexChar <= 'F')
return hexChar - 'A' + 10;
throw new ArgumentException("Invalid hexadecimal character.");
public static int Main(string[] args)
return new AutoRun().Execute(args);
public class HexDigitCalculatorTests
public void CompareOddEvenHexDigits_GreaterOdds()
Assert.That(HexDigitCalculator.CompareOddEvenHexDigits("3A2F5B"), Is.EqualTo("greater odds"));
public void CompareOddEvenHexDigits_LesserOdds()
Assert.That(HexDigitCalculator.CompareOddEvenHexDigits("13A24"), Is.EqualTo("lesser odds"));
public void CompareOddEvenHexDigits_SameOddsAndEvens()
Assert.That(HexDigitCalculator.CompareOddEvenHexDigits("3A4B"), Is.EqualTo("same odds and evens"));
public void CompareOddEvenHexDigits_EdgeCaseAllOdds()
Assert.That(HexDigitCalculator.CompareOddEvenHexDigits("13579F"), Is.EqualTo("greater odds"));
public void CompareOddEvenHexDigits_EdgeCaseAllEvens()
Assert.That(HexDigitCalculator.CompareOddEvenHexDigits("02468A"), Is.EqualTo("lesser odds"));
public void CompareOddEvenHexDigits_EdgeCaseMixedLargeHex()
Assert.That(HexDigitCalculator.CompareOddEvenHexDigits("ABCDEF0123456789"), Is.EqualTo("same odds and evens"));
public void CompareOddEvenHexDigits_InvalidInputNonHexCharacters()
Assert.That(HexDigitCalculator.CompareOddEvenHexDigits("123G"), Is.EqualTo("Invalid input: Not a valid hexadecimal number."));
public void CompareOddEvenHexDigits_NullInput()
Assert.That(HexDigitCalculator.CompareOddEvenHexDigits(null), Is.EqualTo("Invalid input: Null or empty hexadecimal number."));
public void CompareOddEvenHexDigits_EmptyInput()
Assert.That(HexDigitCalculator.CompareOddEvenHexDigits(""), Is.EqualTo("Invalid input: Null or empty hexadecimal number."));
public void CompareOddEvenHexDigits_HexWithPrefixLower()
Assert.That(HexDigitCalculator.CompareOddEvenHexDigits("0x3A2F5B"), Is.EqualTo("greater odds"));
public void CompareOddEvenHexDigits_HexWithPrefixUpper()
Assert.That(HexDigitCalculator.CompareOddEvenHexDigits("0X3A2F5B"), Is.EqualTo("greater odds"));
public void CompareOddEvenHexDigits_SingleDigitOdd()
Assert.That(HexDigitCalculator.CompareOddEvenHexDigits("1"), Is.EqualTo("greater odds"));
public void CompareOddEvenHexDigits_SingleDigitEven()
Assert.That(HexDigitCalculator.CompareOddEvenHexDigits("2"), Is.EqualTo("lesser odds"));