[[{}]]sx256?^dd3^8d^1-/8092541**r255/BF*+d0=xP
Попробуйте онлайн!
Вход на стандартный вывод, вывод на стандартный вывод.
Это работает путем вычисления формулы для желаемого выхода в виде числа 256. Затем команда P в dc используется для вывода числа base-256 в виде строки.
Дальнейшее объяснение:
Пусть n будет входом n. Программа dc вычисляет сумму
A = floor (256 ^ n / 255) * 125 (BF интерпретируется dc как 11 * 10 + 15 = 125)
и
B = этаж ((256 ^ n) ^ 3 / (8 ^ 8-1)) * 8092541 * (256 ^ n).
Для:
Заметьте, что 1 + 256 + 256 ^ 2 + ... + 256 ^ (n-1) равно (256 ^ n-1) / 255 по формуле геометрической прогрессии, и это равно полу (256 ^ n / 255 ). Так что это число, состоящее из n 1 в базе 256.
Когда вы умножаете его на 125, чтобы получить A, результатом является число, состоящее из n 125 в базе 256 (конечно, 125 - это одна цифра в базе 256). Вероятно, лучше записать цифры в базе 256 в виде шестнадцатеричных чисел; 125 - это шестнадцатеричное 7D, поэтому A - это число 256, состоящее из n 7D в ряду.
B похож:
На этот раз обратите внимание, что 1 + 16777216 + 16777216 ^ 2 + ... + 16777216 ^ (n-1) равно (16777216 ^ n - 1) / 16777215, и это равно полу (16777216 ^ n / 16777215).
Теперь 256 ^ 3 = 16777216 и 8 ^ 8-1 = 16777215, так что это то, что мы вычисляем как пол ((256 ^ n) ^ 3 / (8 ^ 8-1)).
Из представления геометрической серии это число в базе 256 равно 100100100 ... 1001, где n цифр равно 1, а остальные цифры равны 0.
Это умножается на 8092541, то есть 7B7B7D в шестнадцатеричном формате. В базе 256 это трехзначное число, состоящее из цифр 7B, 7B и 7D (для удобства записи эти цифры в шестнадцатеричном формате).
Отсюда следует, что произведение, записанное в базе 256, представляет собой 3-значное число, состоящее из 3 цифр 7B, 7B, 7D, повторенных n раз.
Это умножается на 256 ^ n, в результате получается 4-значное число с 256-значным числом, состоящее из 3 цифр 7B 7B 7D, повторенных n раз, за которыми следуют n 0. Это Б.
Добавление A + B теперь приводит к получению 4-значного числа Base-256, состоящего из 3 цифр 7B 7B 7D, повторенных n раз, за которыми следуют n 7D. Поскольку 7B и 7D являются кодами ASCII для {
и }
, соответственно, это строка, состоящая из n копий, за {{}
которыми следуют n копий }
, что в точности соответствует тому, что мы хотим при n> 0. Команда P в dc печатает число base-256 как строка, так же, как нам нужно.
К сожалению, n = 0 следует рассматривать как особый случай. Вышеприведенные вычисления дают результат 0 при n = 0; в этом случае я просто жестко запрограммировал печать строки {}
.