Tom vai implementar uma nova linguagem de programação de sua invenção. Mas antes de realmente começar a trabalhar nele, ele quer saber se seu idioma deve diferenciar maiúsculas de minúsculas ou não.
Por um lado, a diferenciação entre maiúsculas e minúsculas parece mais fácil de implementar para ele, mas ele se preocupa que isso possa causar uma falta nas possibilidades de combinações de caracteres que formam uma variável, o que significa que nomes de variáveis mais longos devem ser usados para evitar conflitos de nomeação (por por exemplo, você pode usar Hello
, HEllo
, heLLo
e um monte de outras possibilidades se o idioma é sensível a maiúsculas, mas apenas HELLO
se não).
Mas Tom é uma pessoa meticulosa, então apenas uma preocupação não é suficiente para ele. Ele quer saber os números.
O desafio
Escreva uma função (ou um programa completo se o seu idioma não os suportar) que, dado um número inteiro n
como entrada, produza (ou retorne) a diferença no número de permutações possíveis para uma sequência de comprimento n
com e sem distinção entre maiúsculas e minúsculas.
No idioma de Tom, os nomes de variáveis podem incluir todas as letras do alfabeto, sublinhados e, a partir do segundo caractere, dígitos.
Casos de teste
Input (length of the variable) -> Output (difference between the possibilities with case sensitivity and the possibilities with case insensitivity)
0 -> 0
1 -> 26
2 -> 2340
5 -> 784304586
8 -> 206202813193260
9 -> 13057419408922746
Implementação de referência C ++ não concorrente
void diff(int n) {
long long total[2] = {0, 0}; //array holding the result for case insensivity ([0]) and case sensitivity ([1])
for (int c = 1; c <= 2; c ++) //1 = insensitivity, 2 = sensitivity
for (int l = 1; l <= n; l ++) //each character of the name
if (l == 1)
total[c - 1] = 26 * c + 1; //first character can't be a number
else
total[c - 1] *= 26 * c + 1 + 10; //starting from the second character, characters can include numbers
std::cout << total[1] - total[0] << std::endl;
}
Pontuação
Tom gosta de golfe, então o programa mais curto em bytes vence.
Nota
Tudo bem se talvez os dois últimos casos de teste não estejam corretos por causa da precisão numérica. Afinal, nem tenho certeza se meu código manipulou o número 9 corretamente.