Tom implementerà un nuovo linguaggio di programmazione della sua invenzione. Ma prima di iniziare davvero a lavorarci su, vuole sapere se la sua lingua dovrebbe essere sensibile al maiuscolo / minuscolo.
Da un lato, l'insensibilità alle maiuscole sembra più facile da implementare per lui, ma teme che possa causare una mancanza nelle possibilità di combinazioni di caratteri che formano una variabile, il che significa che nomi di variabili più lunghi dovrebbero quindi essere utilizzati per evitare scontri di denominazione (per Ad esempio, è possibile utilizzare Hello
, HEllo
, heLLo
e un mucchio di altre possibilità se la lingua è case sensitive, ma solo HELLO
se non).
Ma Tom è una persona meticolosa, quindi non basta una preoccupazione per lui. Vuole conoscere i numeri.
La sfida
Scrivi una funzione (o un programma completo se la tua lingua non li supporta) che, dato un numero intero n
come input, genera (o restituisce) la differenza nel numero di permutazioni possibili per una stringa di lunghezza n
con maiuscole e minuscole e senza.
Nella lingua di Tom, i nomi delle variabili possono includere tutte le lettere dell'alfabeto, i caratteri di sottolineatura e, a partire dal secondo carattere, le cifre.
Casi 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
Implementazione di riferimento C ++ non 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;
}
punteggio
A Tom piace il golf, quindi vince il programma più breve in byte.
Nota
Va bene se forse le ultime due prove non sono corrette a causa della precisione numerica. Dopotutto, non sono nemmeno sicuro che il mio codice abbia gestito correttamente il numero 9.