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 (+ деякі інші ефекти, які нас не цікавлять)
Іншими словами, ми починаємо з створення двох розділів простору даних; у нас є два літерали, кожен з яких висуває туди послідовність команд. Другий розділ (вони висуваються в стилі стека, так що перший push = останній поп) - це досить довільна послідовність команд, але висувається за допомогою послідовності команд 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'
(У наборі символів "цифри та загальні символи" немає "вибору набору символів: малі літери" - спочатку потрібно перейти через інший набір символів - тому мені потрібно було використовувати великі регістри для гольфу, щоб це було досить коротко, щоб підходити під ефективні 10 -бійт обмеження.)