Tom zamierza wdrożyć nowy język programowania swojego wynalazku. Ale zanim zacznie nad tym pracować, chce wiedzieć, czy w jego języku rozróżniana jest wielkość liter, czy nie.
Z jednej strony, rozpoznawanie wielkości liter wydaje się łatwiejsze do wdrożenia, ale martwi się, że może to spowodować brak możliwości kombinacji znaków tworzących zmienną, co oznacza, że należy unikać dłuższych nazw zmiennych, aby uniknąć kolizji nazw (dla przykład, można użyć Hello
, HEllo
, heLLo
i kilka innych możliwości, jeśli język jest wielkość liter, ale tylko HELLO
jeśli nie).
Ale Tom jest skrupulatną osobą, więc samo zmartwienie nie wystarczy. On chce poznać liczby.
Wyzwanie
Napisz funkcję (lub pełny program, jeśli Twój język ich nie obsługuje), która, biorąc pod uwagę liczbę całkowitą n
jako dane wejściowe, wyprowadza (lub zwraca) różnicę liczby możliwych kombinacji dla ciągu długości n
z rozróżnianiem wielkości liter i bez.
W języku Toma nazwy zmiennych mogą zawierać wszystkie litery alfabetu, znaki podkreślenia i, począwszy od drugiego znaku, cyfry.
Przypadki testowe
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
Niekonkurencyjna implementacja referencyjna 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;
}
Punktacja
Tom lubi golfa, więc wygrywa najkrótszy program w bajtach.
Uwaga
Jest w porządku, jeśli być może ostatnie dwa przypadki testowe są nieprawidłowe ze względu na dokładność liczbową. W końcu nie jestem nawet pewien, czy mój kod poprawnie obsługuje numer 9.
źródło
Odpowiedzi:
Galaretka ,
1615 bajtówWypróbuj online! lub zweryfikuj wszystkie przypadki testowe .
Jak to działa
źródło
JavaScript (ES7), 43 bajty
reduce
Dzisiaj nie jest dzień - 55 bajtów.źródło
TSQL, 41 bajtów
Skrzypce
źródło
Java,
7776 bajtówRozwiązanie O (1), brak pętliźródło
n-1
pow
funkcja nie jest stała czasowalong
.JavaScript (ES6) 47
Uwaga: wartości są poprawne do 53 bitów dokładności liczb javascript.
Test
źródło
MATL ,
1716 bajtówWypróbuj online!
Ostatni przypadek testowy (wejście 9) nie jest dokładny ze względu na dokładność numeryczną.
Wyjaśnienie
źródło
Python 3, 36 bajtów
Anonimowa funkcja, która pobiera dane wejściowe za pomocą argumentu i zwraca dane wyjściowe.
Brawo dla pierwszeństwa operatorów!
Jak to działa
Wypróbuj na Ideone
źródło
Pyth, 16 bajtów
Wypróbuj tutaj!
Działa tak samo jak moja odpowiedź Pyke
źródło
Współczynnik , 54 bajty
Wyjście testowe (zbyt leniwe, aby utworzyć teraz zestaw testów)
Do 100, ponieważ mogę:
źródło
dc, 19 bajtów
Jest to po prostu różnica dwóch wykładniczych,
53 × 63^(n-1) - 27 × 37^(n-1)
. Specjalny przypadek zera wypada naturalnie, jakdc
zaczyna się od precyzji0
, co oznacza, że x ^ -1 ==0
dla wszystkich dodatnich x .Jak zwykle
dc
, dane wejściowe są pobierane z góry stosu, a dane wyjściowe są wypychane na górę stosu. Aby uzyskać pełny program, dołącz do niego?
ip
utwórz filtr potokowy.Wyjście testowe
Wydajność jest rozsądna dla małego n , ale zaczyna się kończyć, gdy osiągnie kilkaset tysięcy:
Ten ostatni przykład daje wynik 1941435 cyfr, więc może nie jest tak źle.
źródło
dc
został już wykorzystany ... ale tego nie da się pokonać!Pyke,
1715 bajtówWypróbuj tutaj!
źródło