Tom va implémenter un nouveau langage de programmation de son invention. Mais avant de commencer à travailler dessus, il veut savoir si sa langue doit être sensible à la casse ou non.
D'une part, l'insensibilité à la casse lui semble plus facile à mettre en œuvre, mais il craint que cela ne cause un manque dans les possibilités de combinaisons de caractères qui forment une variable, ce qui signifie que des noms de variable plus longs devraient alors être utilisés pour éviter les conflits de noms (pour par exemple, vous pouvez utiliser Hello
, HEllo
, heLLo
et un tas d'autres possibilités si la langue est sensible à la casse, mais seulement le HELLO
cas contraire).
Mais Tom est une personne méticuleuse, donc juste une inquiétude ne lui suffit pas. Il veut connaître les chiffres.
Le défi
Écrivez une fonction (ou un programme complet si votre langue ne les prend pas en charge) qui, étant donné un entier n
en entrée, génère (ou renvoie) la différence dans le nombre de permutations possibles pour une chaîne de longueur n
avec et sans respect de la casse.
Dans la langue de Tom, les noms de variables peuvent inclure toutes les lettres de l'alphabet, les traits de soulignement et, à partir du deuxième caractère, les chiffres.
Cas de test
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
Implémentation de référence C ++ non concurrente
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;
}
Notation
Tom aime le golf, donc le programme le plus court en octets gagne.
Remarque
Ce n'est pas grave si les deux derniers cas de test ne sont pas corrects à cause de la précision numérique. Après tout, je ne suis même pas sûr que mon code ait traité correctement le numéro 9.