В этой задаче вы должны написать программу или функцию, которая не принимает ввод и печатает или возвращает строку с тем же числом байтов, что и сама программа. Есть несколько правил:
- Вы можете выводить только байты в диапазоне ASCII для печати (от 0x20 до 0x7E включительно) или в новых строках (0x0A или 0x0D).
- Ваш код не должен быть квинном, поэтому код и выходные данные должны отличаться как минимум одним байтом.
- Ваш код должен быть длиной не менее одного байта.
- Если ваш вывод содержит завершающие символы новой строки, они являются частью количества байтов.
- Если вашему коду требуются нестандартные флаги командной строки, считайте их как обычно (т. Е. Добавляя разницу к стандартному вызову реализации вашего языка к количеству байтов), и длина вывода должна соответствовать баллу вашего решения. Например, если ваша программа
ab
требует нестандартного флага-n
(мы предполагаем, что он не может быть объединен со стандартными флагами, так что это 3 байта), вы должны вывести всего 5 байтов. - Выходные данные не всегда должны быть одинаковыми, если вы можете показать, что каждый возможный выходной сигнал удовлетворяет вышеуказанным требованиям.
- Обычные правила Куайн не применяются. Вы можете прочитать исходный код или его размер, но я сомневаюсь, что это будет короче, чем жесткое программирование в большинстве языков.
Вы можете написать программу или функцию и использовать любой из стандартных методов обеспечения вывода. Обратите внимание, что если вы печатаете результат, вы можете распечатать его либо на стандартный вывод, либо на стандартный поток ошибок, но учитывается только один из них.
Вы можете использовать любой язык программирования , но учтите, что эти лазейки по умолчанию запрещены.
Это код-гольф , поэтому самый короткий действительный ответ - измеренный в байтах - выигрывает.
Leaderboard
code-golf
self-referential
Мартин Эндер
источник
источник
Ответы:
C (современный Linux), 19 байт
При компиляции и запуске это печатает:
источник
Excel, 11 байт
Версия на норвежском языке:
Английская версия (12 байт):
Создает n-значное число и преобразует в текст путем преобразования в нижний регистр.
источник
=9^7&""
генерировать 7-значное число на любом языке и всего 7 байт.Лабиринт , 4 байта
Попробуйте онлайн!
Печать
0000
объяснение
источник
Bash (только для buildins), 8 байт
Принты
cho cho
и перевод строки.источник
Сетчатка , 2 байта
Попробуйте онлайн!
Отпечатки
0
и перевод строки.Есть много 2-байтовых решений, но я считаю, что это оптимально. Retina по умолчанию всегда печатает завершающий символ новой строки, и избавление от него занимает слишком много байтов. Таким образом, мы должны были бы найти 1-байтовую программу, которая оставит пустой ввод без изменений. Я считаю, что единственная программа, которая делает это, это программа, содержащая один перевод строки, который, следовательно, равен выходу и, следовательно, не разрешен вызовом.
Следующая простейшая вещь - жить с Retina, выводящим одну цифру (количество совпадений некоторого регулярного выражения с пустым вводом), и мы можем сделать это с большим количеством ошибочных (или совпадающих) 2-байтовых паттернов.
источник
Mathematica, 2 байта
факториал
источник
C, 20 байтов
Выводит некоторое число, дополненное пробелами, до длины 20. (Какое число? Что будет дальше в памяти.)
Некоторые примеры запускаются в моей системе:
Обидно, что выходные данные не могут быть произвольными байтами, потому что это позволило бы это 19-байтовое решение:
который выводит 19 байтов мусора, начиная
f
с адреса.источник
%esi
регистра.Bash на Linux, 6
(сопровождается переводом строки)
Выходы
Linux
сопровождаются переводом строки.источник
uname
это не встроенный bash - это отдельный исполняемый файлuname
встроенную Bash? Каждый дистрибутив, который я могу взять в руки прямо сейчас, это отдельный бинарный файл, включая TIO . И наоборот, как показывает ваш связанный ответ,umask
он встроен в большинство / все оболочки.uname
как встроенный. Когда я сказал «-1, и фактически встроенный», я имел в виду «Этот ответ используетumask
для -1 байтов, иumask
на самом деле является встроенным».Javascript ES6, 9 байт
Использование строк шаблона
источник
undefined
считается строкой?(_=>_+'')
,Схема пирамиды ,
744342 байтаСохранено 31 байт благодаря Khuldraeseth na'Barya! Сохранено 1 байт благодаря обновленному решению JoKing!
Попробуйте онлайн! Выводит 41-значный номер
28^28 = 33145523113253374862572728253364605812736
, за которым следует завершающий перевод строки.Старая версия
Попробуйте онлайн!
Выходы
71277303925397560663333806233294794013421332605135474842607729452115234375
=160651015 ** 9
или около 10 74 .источник
Python 2 , 9 байт
Это печатает
set([1])
и перевод строки.Попробуйте онлайн!
источник
print
более ранних, нет более коротких решений, и единственными 9-байтовыми являются варианты этого и Луиса Мендоprint 1e5
.Python 2 , 9 байт
Отображаемый вывод содержит завершающий перевод строки.
Попробуйте онлайн!
источник
мозговой трах , 25 байтов
Попробуйте онлайн! Примечание. Требуется реализация с 8-разрядными неподписанными ячейками.
Выход:
объяснение
источник
.
которая печатает непечатаемыйNULL
символ?C (Ideone), 14 байтов
На Ideone , который называет свой исполняемый файл
prog
, это выводит следующее с завершающей строкой.C (GCC), 15 байтов
Поскольку GCC записывает исполняемый файл с именем
a.out
по умолчанию (при отсутствии дополнительных флагов, которые будут стоить байтов), это приводит к следующему с завершающим переводом строки.источник
C (gcc) ,
1817 байтОбратите внимание, что есть байт STX ( 0x02 ) между
@
иC
.Попробуйте онлайн!
портативность
Это было протестировано с gcc 6.3.1 и clang 3.9.1 на Fedora 25, gcc 4.8.4 на Ubuntu 14.04.4 и gcc 4.8.3 на openSUSE 13.2, где он выводит следующий вывод.
Я ожидаю, что это приведет к одинаковому выводу со всеми версиями gcc, при условии, что он компилируется в исполняемый файл следующего типа.
Разным платформам потребуется разный адрес памяти и, возможно, другой порядок байтов в многосимвольной символьной константе.
Например, замена
@\2C
на@\2\4
печатьexec/ld-elf.so.1
и перевод строки во FreeBSD 11 на clang 3.8.0.Проверка в автономном режиме
Как это устроено
По умолчанию ld использует 0x400000 в качестве базового адреса текстового сегмента, что означает, что мы можем найти содержимое ELF, начиная с адреса памяти 0x400000 .
Первые 640 байтов ELF в значительной степени не зависят от фактического исходного кода. Например, если объявление о й следует
main(){f();}
и ничего, они выглядят следующим образом .Использование, например,
main(int c, char**v){f();}
вместо этого изменяет несколько байтов, но не смещение строки/lib64/ld-linux-x86-64.so.2
, которое мы будем использовать для вывода.Смещение указанной строки составляет 0x238 и его длина составляет 27 байтов. Мы хотим вывести только 17 байтов (и последний будет новой строкой , если мы будем использовать
puts
), поэтому мы добавляем 11 к смещению, чтобы получить смещение 0x243inux-x86-64.so.2
. Добавление 0x400000 и 0x243 дает 0x400243 , место в памятиinux-x86-64.so.2
.Чтобы получить этот адрес памяти, мы можем использовать многосимвольные символьные константы, которые демонстрируют поведение, определяемое реализацией. 0x400243 - это (64) (2) (67) в базе 256, а многосимвольные константы символов в gcc используют порядок байтов с прямым порядком байтов, поэтому
'@\2C'
выдает адрес памяти нужной строки.Наконец,
puts
печатает строку с нулевым символом в этой ячейке памяти и завершающий символ новой строки, создавая 17 байтов вывода.источник
U
при компиляции с-Df=main
.U
при компиляции сmain(){f();}
.Самомодифицирующийся Brainfuck , 5 байтов
Попробуйте онлайн!
Выход:
Объяснение:
Действительно просто, печатает источник в обратном порядке. В SMBF содержимое программы хранится на ленте слева от начальной позиции указателя. Скольжение влево и печать выведут исходный код назад.
Поскольку чтение источника разрешено в этой задаче, это определенно должно соответствовать правилам.
источник
Базовый арифметический калькулятор , 2 байта
1=
отпечатки
1.
или:на этих глупых семисегментных дисплеях.
Для воспроизведения возьмите любой случайный калькулятор; у всех них этот язык программирования установлен как-то.
источник
1.
вместо1x
? Также это квинна, которая запрещена правилами.1=
я все испортила. Я имел в виду,1x
чем неявные равные, но я забыл, что=
это кнопка.1
на мой TI-36 и TI-84 CE. Разве они не считаются «базовыми» калькуляторами?Фурье,
262220 байтПопробуйте это на FourIDE!
Выходы:
Для правильной капитализации это 4 дополнительных байта:
Попробуйте это на FourIDE!
Покойся с миром Адам Вест
источник
Брахилог , 1 байт
Попробуйте онлайн!
объяснение
w
это встроенная «запись». Здесь будет записан ввод. Поскольку Input является свободной переменной,w
перед печатью он будет помечен как целое число. Первое целое число, которое он пытается это0
.источник
Here, it will write the Input.
Является ли «Вход» самой программой? Разве это не считается чтением источника, который по умолчанию обманывает в квине?Java (OpenJDK 8) , 11 байт
Попробуйте онлайн!
Выход:
Просто немного сложнее, чем очевидный ответ
()->"".format("%23s",0)
.Сохраняет
источник
()->1E10-1+""
,"9.999999999E9" (13)
сохраняет еще три байта1e10
значение1e9
, или 2 байта, используя пустой вход вместо()
этого:o->1e8-1+""
(выходные данные9.9999999E7
; длина & счетчик байтов 11 ).05AB1E , 1 байт
Выводит одну новую строку.
õ
выдвигает пустую строку, и она неявно выводится с новой строки.Попробуйте онлайн!
Некоторые другие 2-байтовые решения для вашего удобства просмотра (выходные данные указаны в скобках, а весь вывод содержит завершающий перевод строки):
Хотя есть и более 2-байтовые решения.
источник
V / vim, 1 байт
Это печатает одну новую строку.
Попробуйте онлайн!
Есть несколько вариантов, которые тоже подойдут. Например,
в VIM, и
в В.
Есть также много много много трехбайтовых решений. Например:
Это все специфично для V.
источник
4ii<ESC>
однако, V неявно заполняет escape в конце программы.Пакетный, 12 байтов
Счетчик байтов включает в себя завершающий символ новой строки как для сценария, так и для вывода, что
источник
cmd.exe
, конечно, будет отображать CRLF послеWindows_NT
, таким образом, 12 байтов.Гексагония , 3 байта
Попробуйте онлайн!
Печать
111
.Развернутая:
Но код действительно выполняется в порядке
o!@
.источник
/// , 12 байт
Попробуйте онлайн!
Это печатает
bcdbcdbcdbcd
, и поскольку это 12 байтов, я добавил безвредный/
конец кода, чтобы дополнить его.источник
R, 7 байт
Отпечатки "логично"
источник
MATL , 2 байта
Есть завершающий перевод строки.
Попробуйте онлайн!
объяснение
Буфер обмена H содержит номер
2
по умолчанию.H
помещает этот контент в стек, который неявно отображается с завершающим символом новой строки.источник
Древесный уголь , 2 байта
Попробуйте онлайн!
Печатает горизонтальную линию длиной 1
-
справа и новую строку .источник
Желе , 1 байт
Довольно много байтов Jelly one - это один - он оценивает левый аргумент, который, когда ничего не предоставляется в качестве входных данных, по умолчанию обнуляется, что, в свою очередь, приводит к нулю, и результат неявно печатается, a
0
.Попробуйте онлайн!
Фактически, из 256 байтов в кодовой странице есть только 95, которые в настоящее время не выдают другой однобайтовый вывод в указанном диапазоне при запуске в качестве полной программы; это (как символы кодовой страницы в порядке байтов):
Примечания:
Большинство однобайтовых программ печатают a
0
(no-ops / выдача списка с одним нулем в, который печатает a0
), большинство других печатают a1
(0=0
и т.п.)Ọ
это одна программа , которая делает выход другой байт, но тот , который находится вне диапазона согласно спецификации - она производит нуль-байт (бросает0
к характеру)⁶
производит пробел (литерал)⁷
производит перевод строки (литерал)Некоторые байты, которые работают сейчас, могут не делать этого в будущем - есть довольно много байтов, зарезервированных (я полагаю) для niladic-значений, которые при назначении почти наверняка не будут производить однобайтовый вывод.
источник
byte
Befunge , 2 байта
Попробуйте онлайн!
Печатает
0
с пробелом. Также работает в Befunge 98.источник