Tom implementará un nuevo lenguaje de programación de su invención. Pero antes de comenzar a trabajar en él, quiere saber si su lenguaje debe ser sensible a mayúsculas o no.
Por un lado, la insensibilidad a mayúsculas y minúsculas parece más fácil de implementar para él, pero le preocupa que pueda causar una falta en las posibilidades de combinaciones de caracteres que forman una variable, lo que significa que los nombres de variables más largos deberían usarse para evitar conflictos de nombres (para Por ejemplo, se puede utilizar Hello
, HEllo
, heLLo
y un montón de otras posibilidades si el idioma es entre mayúsculas y minúsculas, pero sóloHELLO
si no).
Pero Tom es una persona meticulosa, por lo que una preocupación no es suficiente para él. Él quiere saber los números.
El reto
Escriba una función (o un programa completo si su idioma no los admite) que, dado un entero n
como entrada, genera (o devuelve) la diferencia en el número de permutaciones posibles para una cadena de longitudn
con mayúsculas y minúsculas.
En el lenguaje de Tom, los nombres de las variables pueden incluir todas las letras del alfabeto, guiones bajos y, a partir del segundo carácter, dígitos.
Casos de prueba
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
Implementación de referencia de C ++ no competitiva
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;
}
Puntuación
A Tom le gusta el golf, por lo que gana el programa más corto en bytes.
Nota
Está bien si tal vez las dos últimas pruebas no son correctas debido a la precisión numérica. Después de todo, ni siquiera estoy seguro de que mi código haya manejado el número 9 correctamente.
fuente
Respuestas:
Jalea ,
1615 bytesPruébalo en línea! o verificar todos los casos de prueba .
Cómo funciona
fuente
JavaScript (ES7), 43 bytes
reduce
Hoy no es el día - 55 bytes.fuente
TSQL, 41 bytes
Violín
fuente
Java,
7776 bytesO (1) solución, sin bucle involucradofuente
n-1
pow
función no es tiempo constantelong
.JavaScript (ES6) 47
Nota: los valores son correctos hasta los 53 bits de precisión de los números de JavaScript.
Prueba
fuente
MATL ,
1716 bytesPruébalo en línea!
El último caso de prueba (entrada 9) no es exacto debido a la precisión numérica.
Explicación
fuente
Python 3, 36 bytes
Una función anónima que toma la entrada a través del argumento y devuelve la salida.
¡Hurra por la precedencia del operador!
Cómo funciona
Pruébalo en Ideone
fuente
Pyth, 16 bytes
Pruébalo aquí!
Funciona igual que mi respuesta Pyke
fuente
Factor , 54 bytes
Salida de prueba (demasiado flojo para hacer un conjunto de pruebas en este momento)
A 100 porque puedo:
fuente
dc, 19 bytes
Esto es sólo una diferencia de dos exponenciales,
53 × 63^(n-1) - 27 × 37^(n-1)
. El caso especial de cero cae naturalmente, ya quedc
comienza con una precisión de0
, lo que significa que x ^ -1 ==0
para todos los x positivos .Como de costumbre
dc
, la entrada se toma desde la parte superior de la pila y la salida se empuja hacia la parte superior de la pila. Para un programa completo, encierre entre?
yp
para hacer un filtro de tubería.Prueba de salida
El rendimiento es razonable para n pequeña , pero comienza a disminuir una vez que alcanza unos cientos de miles más o menos:
Ese último ejemplo produce un resultado de 1941435 dígitos, por lo que tal vez no sea tan malo para todo eso.
fuente
dc
ya se había usado ... ¡pero esto no tiene parangón!Pyke,
1715 bytesPruébalo aquí!
fuente