Том збирається реалізувати нову мову програмування свого винаходу. Але перш ніж реально розпочати роботу над ним, він хоче знати, чи має його мова залежно від регістру чи ні.
З одного боку, нечутливість до випадків здається йому легше реалізувати, але він переживає, що це може спричинити відсутність можливостей комбінацій символів, що утворюють змінну, тобто більш довгі імена змінних повинні використовуватися, щоб уникнути називання сутичок (для приклад, ви можете використовувати Hello
, HEllo
, heLLo
і купа інших можливостей , якщо мова є чутливим до регістру, але тільки HELLO
якщо немає).
Але Том - прискіплива людина, тому просто турботи йому недостатньо. Він хоче знати цифри.
Змагання
Напишіть функцію (або повну програму, якщо ваша мова їх не підтримує), яка, враховуючи ціле число n
як вхід, видає (або повертає) різницю в кількості перестановок, можливих для рядка довжини n
з чутливістю до регістру і без.
У мові Тома змінні імена можуть включати всі літери алфавіту, підкреслення та, починаючи з другого символу, цифри.
Тестові шафи
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
Неконкурентна реалізація C ++
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;
}
Оцінка балів
Том любить гольф, тому виграє найкоротша програма в байтах.
Примітка
Добре, якщо, можливо, останні два тести не відповідають правильній чисельності. Зрештою, я навіть не впевнений, що мій код обробляв номер 9 правильно.