Том собирается реализовать новый язык программирования своего изобретения. Но прежде чем приступить к работе над ним, он хочет знать, должен ли его язык быть чувствительным к регистру или нет.
С одной стороны, нечувствительность к регистру кажется ему легче реализовать, но он беспокоится, что это может привести к отсутствию возможностей комбинаций символов, образующих переменную, что означает, что затем следует использовать более длинные имена переменных, чтобы избежать столкновений имен пример, вы можете использовать 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.
источник
Ответы:
Желе ,
1615 байтПопробуйте онлайн! или проверьте все контрольные примеры .
Как это устроено
источник
JavaScript (ES7), 43 байта
Не
reduce
день сегодня - 55 байтов.источник
TSQL, 41 байт
скрипка
источник
Джава,
7776 байтO (1) решение без петлиисточник
n-1
pow
функция не постоянное времяlong
.JavaScript (ES6) 47
Примечание: значения верны с точностью до 53 битов чисел JavaScript.
Тестовое задание
источник
MATL ,
1716 байтПопробуйте онлайн!
Последний тестовый пример (вход 9) не является точным из-за числовой точности.
объяснение
источник
Python 3, 36 байт
Анонимная функция, которая принимает входные данные через аргумент и возвращает выходные данные.
Ура за операторский приоритет!
Как это устроено
Попробуйте это на Ideone
источник
Pyth, 16 байт
Попробуй это здесь!
Работает так же, как мой ответ Пайк
источник
Фактор , 54 байта
Тестовый вывод (слишком ленив, чтобы сделать тестовый набор прямо сейчас)
До 100, потому что я могу:
источник
постоянный ток, 19 байт
Это просто разница двух экспонент
53 × 63^(n-1) - 27 × 37^(n-1)
. Частный случай нуля выпадает естественным образом, посколькуdc
начинается с точностью0
, означающей, что x ^ -1 ==0
для всех положительных x .Как обычно
dc
, вход берется из верхней части стека, а вывод помещается в верхнюю часть стека. Для полной программы, заключите между?
иp
сделать фильтр конвейера.Тестовый вывод
Производительность приемлема для малого n , но начинает уменьшаться, когда достигает нескольких сотен тысяч или около того:
Этот последний пример дает результат из 1941435 цифр, так что, может быть, это не так уж плохо для всего этого.
источник
dc
он еще ... но это не может быть побеждено!Пайк,
1715 байтПопробуй это здесь!
источник