7 , 23 символа, 9 байтов
54340045141332401057403
Попробуйте онлайн!
Это довольно сложная задача для языка, который полностью состоит из цифр, но мне это удалось ...
Это всего 9 байтов в кодировке 7. (Строго говоря, это 8⅜ байтов (23 × ⅜ - ¼, потому что последние два завершающих 1 бита могут быть опущены), но впервые требование PPCG округлить до целого числа байтов фактически является преимуществом, потому что это означает, что дополнительные завершающие биты 1 необходимы и поэтому не запрещены вопросом.) Обратимый шестнадцатеричный дамп:
00000000: b1c0 2530 b6a0 22f8 1f ..%0.."..
Основная проблема написания этой программы в 7 заключалась в том, чтобы записать в нее менее 10 байтов (то есть писать 7 без использования 0
или 1
это довольно сложно). В ней используется та же структура, что и в стандартной программе «Hello world»:
5434004514133240105 7 403
5434004514133240105 команды 0-5 добавляют литералы к пространству данных
7 начать новый раздел пространства данных
403 другой литерал, добавленный к пространству данных
{неявный: оцените последний раздел как команды}
4 поменяйте местами 1-й и 2-й разделы с пустым разделом между
6, воссоздайте команды, которые будут создавать выходные данные 1-го раздела
3 (+ некоторые другие эффекты, которые нас не интересуют)
Другими словами, мы начинаем с создания двух разделов пространства данных; у нас есть два литерала, каждый из которых добавляет туда последовательность команд. Второй раздел (они помещаются в стиле стека, поэтому first push = last pop) - это довольно произвольная последовательность команд, но она проталкивается с использованием последовательности команд 5434004514133240105
(таким образом, создавая последовательность данных 5434664574733246765
; при обсуждении 7 в тексте я обычно использую обычный шрифт для команды, которая выдвигает литерал и выделяется жирным шрифтом для соответствующего результирующего литерала). Первый раздел проталкивается с помощью последовательности команд 403
, производя 463
. Затем первый раздел копируется обратно в программу (неявное поведение 7).
463
Теперь состоит из (жирным шрифтом) команды , которые делают что - то немедленно, а не (не жирный) команды , которые просто нажмите литералов. 4
переставляет разделы, чтобы получить наш "строковый литерал" в первом разделе. Затем 0
выполняется операция, для которой 7 наиболее известна: взятие части пространства данных и восстановление последовательности команд, которая, скорее всего, создала ее. В том случае , когда исходная последовательность команд была все 0
- 5
это 100% точными ( что неудивительно, так как эти команды просто передавать данные и , таким образом , оставить очевидные доказательства того , что они делали), и таким образом мы получаем нашу исходную последовательность 5434004514133240105
обратно. Наконец, 3
печатает это.
Итак, остальное, на что нужно обратить внимание - это кодировка строки. Это имеет свой собственный предметно-ориентированный язык:
5434004514133240105
5 change encoding: 6 bits per character
43 select character set: digits and common symbols
40 '9'
04 space
51 select character set: uppercase letters
4133240105 'B' 'Y' 'T' 'E' 'S'
(В наборе символов «цифры и общие символы» отсутствует «выбор набора символов: строчные буквы» - сначала нужно пройти другой набор символов), поэтому мне нужно было использовать верхний регистр, чтобы играть в гольф достаточно коротко, чтобы поместиться под эффективными символами. -байт лимит.)