Пытаясь сыграть несколько моих ответов в гольфе, мне нужно было написать большие целые числа, используя как можно меньше символов.
Теперь я знаю лучший способ сделать это: я заставлю тебя писать эту программу.
Соревнование
- Напишите программу, которая при получении положительного целого числа выводит программу, которая печатает ее в стандартный вывод или эквивалентный.
- Выходные программы не обязательно должны быть на том же языке, что и создатель.
- Выход должен быть не более 128 байтов.
- Вы можете принять ввод от стандартного ввода или эквивалентный (не ввод функции)
- Вы можете вывести результирующую программу на стандартный вывод или аналогичный.
- Числовое значение должно быть в десятичном виде (основание 10)
счет
Ваша оценка равна наименьшему положительному целому числу, которое ваша программа не может закодировать.
Запись с наибольшим счетом выигрывает.
Ответы:
Python 3 → CJam, (163 122 - 1) · 255/162 + 1 ≈ 1,213 · 10 270
Оказывается, что каждое целое число от 1023 до (163 122 - 1) · 255/162 может быть представлено по меньшей мере одним способом с помощью преобразования b ≤ 163 из строки длиной не более 122 символов с кодами от 93 до b + 92, вместо обычных от 0 до b - 1. Это позволяет избежать проблемных символов 34 (двойная кавычка) и 92 (обратная косая черта) без какого-либо дополнительного выходного кода.
источник
Пиф, 252 111 ≈ 3.593 × 10 266
Пришлось использовать немного синтаксиса Python, потому что Pyth не
print
может печатать вiso-8859-1
.Число кодируется в базе 252 и представляет каждую цифру в этой базе как символ ISO-8859-1. Символы
\
и"
должны были бы убежать, и поэтому не используются. Символ`
не используется, потому что игра в гольф ... И кроме того, нулевой байт также не используется, компилятор Pyth запрещает это.Вывод - это программа с объемом служебной информации 17 байтов:
Вот пример использования с наибольшим возможным числом:
объяснение
выходной программы.
источник
12
, потому что Pyth, к сожалению, читает CR как LF .CJam, 254 109 ≈ 1,34 x 10 262
Я кодирую число в базе 254 и представляю каждую цифру в этой базе как символ ISO 8859-1, пропуская
"
и\
. Выходные данные имеют служебную нагрузку 19 байтов""{_'[>-_'!>-}%254b
, поэтому я могу представить все, что меньше 254 128-19 , или явноВ качестве примера,
6153501
будет закодирован какВот тестовая программа, которая печатает закодированное целое число, а затем печатает его длину, а затем сразу выполняет его, чтобы показать его достоверность (это позволяет избежать необходимости копировать непечатаемые символы в новую программу, что не всегда работает с онлайн переводчиком).
источник
Perl, 10 216
Также базовая кодировка 100, немного более элегантная. Выход для
12345678
будет:Делиметры
{
и}
соответствуют шестнадцатеричным значениямb7
иd7
соответственно, которые не могут появиться во входных данных, и, следовательно, не должны быть экранированы.Имеется 20 байтов служебных данных, оставляя 108 для кодирования, достигая максимального значения 10 216 -1.
Perl, 10 206
Простая базовая кодировка 100. Вывод для
12345678
будет выглядеть так:Имеется 25 байтов служебных данных, оставляя 103 для кодирования, достигая максимального значения 10 206 -1.
источник
Common Lisp, 36 114 - 1 ~ 2,62 × 10 117
Наибольшее число:
2621109035105672045109358354048170185329363187071886946329003212335230440027818091139599929524823562064749950789402494298276879873503833622348138409040138018400021944463278473215
Просто используйте базу 36. Для самого большого ввода 128-байтовый длинный вывод:
источник
CJam, 233 114 ≈ 7.561⋅10 269
Программа вывода
"…"{iKms*}%233b
декодирует 8-битные символы строки в базовые 233 цифры с n ↦ ⌊ n ⋅ sin 20⌋ = ⌊ n ⋅ 0,913⌋. Это преобразование оказывается сюръективным, не требуя ввода критических кодовых точек 34 (двойная кавычка) и 92 (обратная косая черта).источник