dc , 46 byte
[[{}]]sx256?^dd3^8d^1-/8092541**r255/BF*+d0=xP
Cobalah online!
Input pada stdin, output pada stdout.
Ini bekerja dengan menghitung formula untuk output yang diinginkan sebagai nomor basis-256. Perintah P di dc kemudian digunakan untuk mencetak nomor basis-256 sebagai string.
Penjelasan lebih lanjut:
Biarkan n menjadi input n. Program dc menghitung jumlah
A = lantai (256 ^ n / 255) * 125 (BF ditafsirkan oleh dc sebagai 11 * 10 + 15 = 125)
dan
B = lantai ((256 ^ n) ^ 3 / (8 ^ 8-1)) * 8092541 * (256 ^ n).
Untuk sebuah:
Perhatikan bahwa 1 + 256 + 256 ^ 2 + ... + 256 ^ (n-1) sama dengan (256 ^ n-1) / 255, dengan rumus untuk perkembangan geometrik, dan ini sama dengan lantai (256 ^ n / 255 ). Jadi ini adalah angka yang terdiri dari n 1 dalam basis 256.
Ketika Anda mengalikannya dengan 125 untuk mendapatkan A, hasilnya adalah angka yang terdiri dari n 125 dalam basis 256 (tentu saja 125 adalah satu digit dalam basis 256). Mungkin lebih baik menulis digit pada basis 256 sebagai angka hex; 125 adalah hex 7D, jadi A adalah angka dasar-256 yang terdiri dari n 7D berturut-turut.
B serupa:
Kali ini amati bahwa 1 + 16777216 + 16777216 ^ 2 + ... + 16777216 ^ (n-1) sama dengan (16777216 ^ n - 1) / 16777215, dan ini sama dengan lantai (16777216 ^ n / 16777215).
Sekarang, 256 ^ 3 = 16777216, dan 8 ^ 8-1 = 16777215, jadi inilah yang kami hitung sebagai lantai ((256 ^ n) ^ 3 / (8 ^ 8-1)).
Dari representasi deret geometri, angka dalam basis 256 ini adalah 100100100 ... 1001 dengan n dari angka 1 dan sisanya dari angka 0.
Ini dikalikan dengan 8092541, yaitu 7B7B7D dalam heksadesimal. Dalam basis 256, ini adalah angka tiga digit yang terdiri dari angka 7B, 7B, dan 7D (menulis angka-angka itu dalam hex untuk kenyamanan).
Oleh karena itu produk yang ditulis dalam basis 256 adalah angka 3n-digit yang terdiri dari 3 digit 7B 7B 7D yang diulang n kali.
Ini dikalikan dengan 256 ^ n, menghasilkan nomor basis-256 4n-digit, terdiri dari 3 digit 7B 7B 7D yang diulang n kali, diikuti oleh n 0's. Itu B.
Menambahkan A + B sekarang menghasilkan basis-digit 4n-digit 256 yang terdiri dari 3 digit 7B 7B 7D yang diulang n kali, diikuti oleh n 7D. Karena 7B dan 7D adalah kode ASCII untuk {
dan }
, masing-masing, ini adalah string yang terdiri dari n salinan {{}
diikuti oleh n salinan }
, yang persis seperti yang kita inginkan untuk n> 0. Perintah P di dc mencetak angka dasar-256 sebagai string, seperti yang kita butuhkan.
Sayangnya, n = 0 harus diperlakukan sebagai kasus khusus. Perhitungan di atas terjadi untuk menghasilkan hasil 0 untuk n = 0; dalam hal ini, saya baru saja mencetak kode hard-string {}
.