Том собирается реализовать новый язык программирования своего изобретения. Но прежде чем приступить к работе над ним, он хочет знать, должен ли его язык быть чувствительным к регистру или нет.
С одной стороны, нечувствительность к регистру кажется ему легче реализовать, но он беспокоится, что это может привести к отсутствию возможностей комбинаций символов, образующих переменную, что означает, что затем следует использовать более длинные имена переменных, чтобы избежать столкновений имен пример, вы можете использовать Hello
, HEllo
, heLLo
и куча других возможностей , если язык является чувствительным к регистру, но только HELLO
если нет).
Но Том - дотошный человек, поэтому ему не достаточно просто беспокойства. Он хочет знать цифры.
Соревнование
Напишите функцию (или полную программу, если ваш язык их не поддерживает), которая, учитывая целое число n
в качестве входных данных, выводит (или возвращает) разницу в количестве возможных перестановок для строки длины n
с учетом регистра и без учета регистра.
На языке Тома имена переменных могут включать все буквы алфавита, подчеркивания и, начиная со второго символа, цифры.
Testcases
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.