トムは、彼の発明の新しいプログラミング言語を実装する予定です。しかし、実際に作業を開始する前に、彼は自分の言語で大文字と小文字を区別するかどうかを知りたいと思っています。
一方で、大文字小文字の区別は実装しやすいようですが、変数を形成する文字の組み合わせの可能性が不足する可能性があることを心配しています。つまり、名前の衝突を避けるために長い変数名を使用する必要があることを意味しますたとえば、あなたが使用することができHello
、HEllo
、heLLo
および他の可能性の束言語は大文字と小文字が区別されますが、場合にのみ、HELLO
そうでない場合)。
しかし、トムは細心の注意を払っているので、心配するだけでは十分ではありません。彼は数字を知りたい。
チャレンジ
n
入力として整数を指定し、n
大文字と小文字を区別して、または区別せずに長さの文字列で可能な置換数の差を出力する(または返す)関数(または、言語がサポートしない場合は完全なプログラム)を記述します。
トムの言語では、変数名にはすべてのアルファベット文字、アンダースコア、および2番目の文字から始まる数字を含めることができます。
テストケース
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;
}
得点
トムはゴルフが好きなので、バイト単位の最短プログラムが勝ちです。
注意
数値の精度のために、最後の2つのテストケースが正しくない場合でも大丈夫です。結局、私もわからない私のコードが正しく番号9を取り扱います。