Primero, evalúa si el dígito es una letra. Si es así, evalúa si es minúscula o mayúscula. Si es minúscula se empezará a contar desde 1 y si es minúscula desde 27. Si no es una letra, el código será 10.
Hagamos alguna prueba:
Resultado de la ejecución:
Comprobemos:
Suma de códigos: 160
Código (java) [Seleccionar]
public class Digits {
private final static char LOWER_CASE_START_LETTER = 'a';
private final static int LOWER_CASE_START_CODE = 1;
private final static char UPPER_CASE_START_LETTER = 'A';
private final static int UPPER_CASE_START_CODE = 27;
public static Integer getCodeOf(char digit) {
Integer code = null;
if(Character.isLetter(digit)) {
char startLetter = (Character.isLowerCase(digit)) ? LOWER_CASE_START_LETTER : UPPER_CASE_START_LETTER;
if(Character.isLowerCase(startLetter))
code = getLetterCode(startLetter, digit, LOWER_CASE_START_CODE);
else
code = getLetterCode(startLetter, digit, UPPER_CASE_START_CODE);
} else { code = 10; }
return code;
}
private static int getLetterCode(char startLetter, char digit, final int START_CODE) {
Integer code = null;
if(startLetter == digit)
code = START_CODE;
else
code = START_CODE + getGapBetweenLetters(digit, startLetter);
return code;
}
private static int getGapBetweenLetters(char first, char second) {
return first - second;
}
}
Hagamos alguna prueba:
Código (java) [Seleccionar]
public class Test {
public static void main(String[] args) {
String word = "Hello world%".replaceAll(" ","");
System.out.println(word);
char[] wordLetters = word.toCharArray();
int sum = 0;
for(byte i=0; i<wordLetters.length; i++)
sum += Digits.getCodeOf(wordLetters[i]);
System.out.println("La suma es: "+sum);
}
}
Resultado de la ejecución:
Código [Seleccionar]
Helloworld%
La suma es: 160
Comprobemos:
Código [Seleccionar]
H = 34
e = 5
l = 12
l = 12
o = 15
w = 23
o = 15
r = 18
l = 12
d = 4
% = 10
Suma de códigos: 160