Tom akan menerapkan bahasa pemrograman baru dari penemuannya. Tetapi sebelum benar-benar mulai mengerjakannya, ia ingin tahu apakah bahasanya harus peka terhadap huruf besar atau kecil.
Di satu sisi, ketidaksensitifan kasus tampaknya lebih mudah diterapkan kepadanya, tetapi ia khawatir hal itu dapat menyebabkan kurangnya kemungkinan kombinasi karakter yang membentuk suatu variabel, yang berarti bahwa nama variabel yang lebih panjang harus digunakan untuk menghindari bentrokan penamaan (untuk contoh, Anda dapat menggunakan Hello
, HEllo
, heLLo
dan sekelompok kemungkinan lain jika bahasa adalah kasus sensitif, tetapi hanya HELLO
jika tidak).
Tetapi Tom adalah orang yang sangat teliti, jadi khawatir saja tidak cukup baginya. Dia ingin tahu angkanya.
Tantangan
Tulis fungsi (atau program lengkap jika bahasa Anda tidak mendukungnya) yang, diberikan bilangan bulat n
sebagai input, menghasilkan (atau mengembalikan) perbedaan dalam jumlah permutasi yang mungkin untuk string panjang n
dengan sensitivitas case dan tanpa.
Dalam bahasa Tom, nama variabel dapat mencakup semua huruf alfabet, garis bawah dan, mulai dari karakter kedua, digit.
Testcases
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
Implementasi referensi C ++ yang tidak bersaing
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;
}
Mencetak gol
Tom suka golf, jadi program terpendek dalam byte menang.
Catatan
Tidak apa-apa jika mungkin dua testcases terakhir tidak tepat karena ketepatan angka. Lagi pula, saya bahkan tidak yakin kode saya menangani nomor 9 dengan benar.
sumber
Jawaban:
Jelly ,
1615 byteCobalah online! atau verifikasi semua kasus uji .
Bagaimana itu bekerja
sumber
JavaScript (ES7), 43 byte
Bukan
reduce
hari ini - 55 byte.sumber
TSQL, 41 byte
Biola
sumber
Java,
7776 BytesO (1) solusi, tidak ada loop yang terlibatsumber
n-1
pow
fungsi tidak waktu yang konstanlong
.JavaScript (ES6) 47
Catatan: nilainya benar hingga 53 bit presisi angka javascript.
Uji
sumber
MATL ,
1716 byteCobalah online!
Kasing uji terakhir (input 9) tidak tepat karena presisi numerik.
Penjelasan
sumber
Python 3, 36 byte
Fungsi anonim yang mengambil input melalui argumen dan mengembalikan output.
Hore untuk prioritas operator!
Bagaimana itu bekerja
Cobalah di Ideone
sumber
Pyth, 16 byte
Coba di sini!
Bekerja sama dengan jawaban Pyke saya
sumber
Faktor , 54 byte
Uji keluaran (terlalu malas untuk membuat test suite sekarang)
Ke 100 karena saya bisa:
sumber
dc, 19 byte
Ini hanya perbedaan dua eksponensial
53 × 63^(n-1) - 27 × 37^(n-1)
,. Kasus khusus nol jatuh secara alami, seperti yangdc
dimulai dengan ketepatan0
, yang berarti bahwa x ^ -1 ==0
untuk semua x positif .Seperti biasa untuk
dc
, input diambil dari atas tumpukan, dan output didorong ke atas tumpukan. Untuk program lengkap, lampirkan di antara?
danp
untuk membuat filter pipa.Uji keluaran
Kinerja masuk akal untuk n kecil , tetapi mulai berbelok begitu mencapai beberapa ratus ribu atau lebih:
Contoh terakhir itu memang menghasilkan hasil 1941435 digit, jadi mungkin tidak terlalu buruk untuk semua itu.
sumber
dc
sudah digunakan ... tapi ini tidak dapat dikalahkan!Pyke,
1715 byteCoba di sini!
sumber