Tom wird eine neue Programmiersprache seiner Erfindung implementieren. Bevor er jedoch anfängt, daran zu arbeiten, möchte er wissen, ob bei seiner Sprache die Groß- und Kleinschreibung beachtet werden muss oder nicht.
Einerseits scheint es ihm einfacher zu sein, die Unempfindlichkeit gegen Groß - und Kleinschreibung zu implementieren, aber er befürchtet, dass dadurch die Möglichkeiten zur Kombination von Zeichen, die eine Variable bilden, eingeschränkt werden könnten ein Beispiel, können Sie verwenden Hello
, HEllo
, heLLo
und ein paar andere Möglichkeiten , wenn die Sprache Groß- und Kleinschreibung, aber nur , HELLO
wenn nicht).
Aber Tom ist ein akribischer Mensch, deshalb reicht es ihm nicht, sich Sorgen zu machen. Er will die Zahlen wissen.
Die Herausforderung
Schreiben Sie eine Funktion (oder ein vollständiges Programm, wenn Ihre Sprache sie nicht unterstützt), die bei einer Ganzzahl n
als Eingabe den Unterschied in der Anzahl der möglichen Permutationen für eine Zeichenfolge n
mit und ohne Berücksichtigung der Groß- / Kleinschreibung ausgibt (oder zurückgibt) .
In Toms Sprache können Variablennamen alle Buchstaben, Unterstriche und ab dem zweiten Zeichen Ziffern enthalten.
Testfälle
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
Nicht konkurrierende C ++ - Referenzimplementierung
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;
}
Wertung
Tom mag Golf, also gewinnt das kürzeste Programm in Bytes.
Hinweis
Es ist in Ordnung, wenn die letzten beiden Testfälle aufgrund der numerischen Genauigkeit möglicherweise nicht richtig sind. Immerhin bin ich mir nicht sicher, ob mein Code Nummer 9 richtig gehandhabt hat.
quelle
Antworten:
Jelly ,
1615 BytesProbieren Sie es online! oder überprüfen Sie alle Testfälle .
Wie es funktioniert
quelle
JavaScript (ES7), 43 Byte
reduce
Heute kein Tag - 55 Bytes.quelle
TSQL, 41 Bytes
Geige
quelle
Java,
7776 BytesO (1) -Lösung, keine Schleife beteiligtquelle
n-1
pow
Funktion ist nicht konstantlong
.JavaScript (ES6) 47
Hinweis: Die Werte sind bis zu einer Genauigkeit von 53 Bit von Javascript-Zahlen korrekt.
Prüfung
quelle
MATL ,
1716 BytesProbieren Sie es online!
Der letzte Testfall (Eingabe 9) ist aufgrund der numerischen Genauigkeit nicht genau.
Erläuterung
quelle
Python 3, 36 Bytes
Eine anonyme Funktion, die Eingaben über Argumente entgegennimmt und die Ausgabe zurückgibt.
Ein Hoch auf den Operator-Vorrang!
Wie es funktioniert
Probieren Sie es auf Ideone
quelle
Pyth, 16 Bytes
Probieren Sie es hier aus!
Funktioniert genauso wie meine Pyke-Antwort
quelle
Faktor 54 Bytes
Testausgabe (zu faul, um gerade eine Testsuite zu erstellen)
Bis 100 weil ich kann:
quelle
Gleichstrom, 19 Bytes
Dies ist nur ein Unterschied von zwei Exponentialen
53 × 63^(n-1) - 27 × 37^(n-1)
. Der Sonderfall Null fällt natürlich heraus, da erdc
mit einer Genauigkeit von beginnt0
, was bedeutet, dass x ^ -1 ==0
für alle positiven x gilt .Normalerweise
dc
wird die Eingabe von der Stapelspitze übernommen und die Ausgabe auf die Stapelspitze verschoben. Fügen Sie für ein vollständiges Programm zwischen?
und einp
, um einen Pipeline-Filter zu erstellen.Ausgang testen
Die Leistung ist für kleine n angemessen , lässt jedoch nach, sobald sie einige hunderttausend erreicht:
Das letzte Beispiel liefert ein Ergebnis mit 1941435 Ziffern, also ist es vielleicht gar nicht so schlecht.
quelle
dc
es schon benutzt wurde ... aber das ist nicht zu übertreffen!Pyke,
1715 BytesProbieren Sie es hier aus!
quelle