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.
la source
Réponses:
Gelée ,
1615 octetsEssayez-le en ligne! ou vérifier tous les cas de test .
Comment ça fonctionne
la source
JavaScript (ES7), 43 octets
Pas
reduce
aujourd'hui - 55 octets.la source
TSQL, 41 octets
Violon
la source
Java,
7776 octetsSolution O (1), aucune boucle impliquéela source
n-1
pow
fonction n'est pas à temps constantlong
.JavaScript (ES6) 47
Remarque: les valeurs sont correctes jusqu'à la précision de 53 bits des nombres javascript.
Tester
la source
MATL ,
1716 octetsEssayez-le en ligne!
Le dernier cas de test (entrée 9) n'est pas exact en raison de la précision numérique.
Explication
la source
Python 3, 36 octets
Une fonction anonyme qui prend l'entrée via un argument et renvoie la sortie.
Hourra pour la priorité des opérateurs!
Comment ça fonctionne
Essayez-le sur Ideone
la source
Pyth, 16 octets
Essayez-le ici!
Fonctionne de la même manière que ma réponse Pyke
la source
Facteur , 54 octets
Sortie de test (trop paresseux pour faire une suite de tests en ce moment)
À 100 car je peux:
la source
dc, 19 octets
Ceci est juste une différence de deux exponentielles,
53 × 63^(n-1) - 27 × 37^(n-1)
. Le cas particulier de zéro tombe naturellement, commedc
commence avec une précision de0
, ce qui signifie que x ^ -1 ==0
pour tout x positif .Comme d'habitude pour
dc
, l'entrée est prise du haut de la pile et la sortie est poussée vers le haut de la pile. Pour un programme complet, joindre entre?
etp
pour créer un filtre de pipeline.Sortie test
Les performances sont raisonnables pour les petits n , mais elles commencent à diminuer une fois qu'elles atteignent quelques centaines de milliers:
Ce dernier exemple produit un résultat de 1941435 chiffres, alors peut-être que ce n'est pas trop mal pour tout cela.
la source
dc
avait déjà été utilisée ... mais cela ne peut pas être battu!Pyke,
1715 octetsEssayez-le ici!
la source