Вывод такой же длины, как и код

97

В этой задаче вы должны написать программу или функцию, которая не принимает ввод и печатает или возвращает строку с тем же числом байтов, что и сама программа. Есть несколько правил:

  • Вы можете выводить только байты в диапазоне ASCII для печати (от 0x20 до 0x7E включительно) или в новых строках (0x0A или 0x0D).
  • Ваш код не должен быть квинном, поэтому код и выходные данные должны отличаться как минимум одним байтом.
  • Ваш код должен быть длиной не менее одного байта.
  • Если ваш вывод содержит завершающие символы новой строки, они являются частью количества байтов.
  • Если вашему коду требуются нестандартные флаги командной строки, считайте их как обычно (т. Е. Добавляя разницу к стандартному вызову реализации вашего языка к количеству байтов), и длина вывода должна соответствовать баллу вашего решения. Например, если ваша программа abтребует нестандартного флага -n(мы предполагаем, что он не может быть объединен со стандартными флагами, так что это 3 байта), вы должны вывести всего 5 байтов.
  • Выходные данные не всегда должны быть одинаковыми, если вы можете показать, что каждый возможный выходной сигнал удовлетворяет вышеуказанным требованиям.
  • Обычные правила Куайн не применяются. Вы можете прочитать исходный код или его размер, но я сомневаюсь, что это будет короче, чем жесткое программирование в большинстве языков.

Вы можете написать программу или функцию и использовать любой из стандартных методов обеспечения вывода. Обратите внимание, что если вы печатаете результат, вы можете распечатать его либо на стандартный вывод, либо на стандартный поток ошибок, но учитывается только один из них.

Вы можете использовать любой язык программирования , но учтите, что эти лазейки по умолчанию запрещены.

Это , поэтому самый короткий действительный ответ - измеренный в байтах - выигрывает.

Leaderboard

Мартин Эндер
источник
2
Связанный. Связанный.
Мартин Эндер
18
«Ваш код не должен быть Куин» , но ... но ... это помечено Куайн
Okx
4
@Okx Потому что это обобщенная квинна, т.е. требуемый вывод зависит от исходного кода.
Мартин Эндер
4
@MartinEnder Вы, вероятно, должны запретить вывод по коду выхода, который используется по умолчанию. Если вы разрешите это, то будет разрешена почти каждая байтовая программа почти на каждом языке. Один пользователь уже сделал это
Wheat Wizard
2
Вывод @WheatWizard по коду выхода не является строкой, поэтому здесь он не применим.
Мартин Эндер

Ответы:

204

C (современный Linux), 19 байт

main(){puts('s');}

При компиляции и запуске это печатает:

Segmentation fault
MD XF
источник
20
Это великолепно: D
бета-распад
4
это больше похоже на «C + английский язык Unix / Posix OS;)»
Флориан Кастеллан
5
Я думаю, что было бы лучше написать «C, современный Linux», чем просто «C»: под Windows сообщение об ошибке отличается, и в старые времена программы Linux даже компилировались таким образом, чтобы адрес 0x73 ('s') был читаемым так что исключений не было.
Мартин Розенау
9
Я присоединился к сайту, чтобы поддержать этот ответ.
Nitish
7
Как бы впечатляюще это ни было, на самом деле выводит не программа C, а оболочка, в которой он работает.
Деннис
80

Excel, 11 байт

Версия на норвежском языке:

=SMÅ(13^9)

Английская версия (12 байт):

=LOWER(17^9)

Создает n-значное число и преобразует в текст путем преобразования в нижний регистр.

pajonk
источник
106
Это придает совершенно новый смысл «выбору правильного языка для работы».
Мартин Эндер
4
Это отличная идея. Это было бы короче, чтобы =9^7&""генерировать 7-значное число на любом языке и всего 7 байт.
OpiesDad
@OpiesDad Хорошее решение, я думаю, вы должны опубликовать его в качестве ответа, чтобы я мог проголосовать.
pajonk
4
@MartinEnder Меня забавляет, как ваша спекуляция / потенциальная шутка более опровергнута, чем этот ответ (хотя он близок).
HyperNeutrino
55

Лабиринт , 4 байта

!!>@

Попробуйте онлайн!

Печать 0000

объяснение

!   Print an implicit 0 from the stack.
!   Print an implicit 0 from the stack.
>   Rotate the source code right by one cell, so the code now becomes

    @!!>

    The IP is moved along, so it's now at the end of the line, which is 
    a dead end. So the IP turns around and starts moving left.
!   Print an implicit 0 from the stack.
!   Print an implicit 0 from the stack.
@   Terminate the program.
Мартин Эндер
источник
6
Это слишком умно. Есть +1, на дом!
Кэрд coinheringaahing
54

Bash (только для buildins), 8 байт

{e,,}cho

Принты cho choи перевод строки.

Андерс Касеорг
источник
40

Сетчатка , 2 байта

no

Попробуйте онлайн!

Отпечатки 0и перевод строки.

Есть много 2-байтовых решений, но я считаю, что это оптимально. Retina по умолчанию всегда печатает завершающий символ новой строки, и избавление от него занимает слишком много байтов. Таким образом, мы должны были бы найти 1-байтовую программу, которая оставит пустой ввод без изменений. Я считаю, что единственная программа, которая делает это, это программа, содержащая один перевод строки, который, следовательно, равен выходу и, следовательно, не разрешен вызовом.

Следующая простейшая вещь - жить с Retina, выводящим одну цифру (количество совпадений некоторого регулярного выражения с пустым вводом), и мы можем сделать это с большим количеством ошибочных (или совпадающих) 2-байтовых паттернов.

Мартин Эндер
источник
27
+1 За код, говорящий мне не запускать его: P
Кристофер
33

Mathematica, 2 байта

4!

факториал

24

J42161217
источник
1
Г! слишком умный
Tuskiomi
2
бей меня к этому! +1. ( Я думаю, вы должны упомянуть, что это в REPL-версии Mathematica.)
Грег Мартин
Если это разумный ответ, разве ответ «1» также не будет разумным ответом? (Помещение '1' в REPL Mathematica также вернет '1' ...)
Марк Сегал
3
@MarkSegal Это нарушило бы правило без кваи.
AlexR
6
Правила: ... «... код и выходные данные должны отличаться хотя бы одним байтом»
J42161217
29

C, 20 байтов

f(){printf("%20d");}

Выводит некоторое число, дополненное пробелами, до длины 20. (Какое число? Что будет дальше в памяти.)

Некоторые примеры запускаются в моей системе:

llama@llama:...code/c/ppcg121056samelen$ ./a.out 
           -666605944
llama@llama:...code/c/ppcg121056samelen$ ./a.out 
          -1391039592
llama@llama:...code/c/ppcg121056samelen$ ./a.out 
           1727404696
llama@llama:...code/c/ppcg121056samelen$ ./a.out 
             10717352
llama@llama:...code/c/ppcg121056samelen$ ./a.out 
           1485936232

Обидно, что выходные данные не могут быть произвольными байтами, потому что это позволило бы это 19-байтовое решение:

f(){write(1,f,19);}

который выводит 19 байтов мусора, начиная fс адреса.

Дверная ручка
источник
Я рад видеть ответ, который использует правило переменного вывода. :)
Мартин Эндер
Неужели это сегфо?
Даниил
Где ссылки TIO?
CalculatorFeline
@ Даниель Нет, напечатанное число будет взято из предыдущего содержимого %esiрегистра.
Дверная ручка
8
@ Doorknob, но это все еще неопределенное поведение, поэтому более садистский компилятор может сделать здесь что-то совершенно другое
Sarge Borsch
29

Bash на Linux, 6

uname

(сопровождается переводом строки)

Выходы Linuxсопровождаются переводом строки.

Цифровая травма
источник
2
Технически unameэто не встроенный bash - это отдельный исполняемый файл
Джейсон Масгроув,
@GammaFunction Где вы видите unameвстроенную Bash? Каждый дистрибутив, который я могу взять в руки прямо сейчас, это отдельный бинарный файл, включая TIO . И наоборот, как показывает ваш связанный ответ, umaskон встроен в большинство / все оболочки.
Цифровая травма
Я не вижу unameкак встроенный. Когда я сказал «-1, и фактически встроенный», я имел в виду «Этот ответ использует umaskдля -1 байтов, и umaskна самом деле является встроенным».
GammaFunction
@GammaFunction Извините - я неправильно понял значение «-1» в вашем комментарии - я привык к значению downvote и комментарию, объясняющему почему.
Цифровая травма
27

Javascript ES6, 9 байт

Использование строк шаблона

_=>`${_}`

f=

_=>`${_}`

console.log(f());
console.log(typeof f());

Weedoze
источник
Является ли undefinedсчитается строкой?
Лохматый
3
@ Шагги Смотрите редактирование. Я использую
строковую
Вау, это мой второй пост на PPCG и 14 голосов! Спасибо
Weedoze
1
Почему простая сыворотка может быть трудной? (_=>_+''),
0
1
@ GOTO0 О, ладно, держи скобку. Это еще один вариант. Я лично предпочитаю мой хе-хе
Weedoze
24

Схема пирамиды , 74 43 42 байта

Сохранено 31 байт благодаря Khuldraeseth na'Barya! Сохранено 1 байт благодаря обновленному решению JoKing!

  ^
 /^\
^---^
-^ ^-
 -^-
 /2\
/ 8 \
-----

Попробуйте онлайн! Выводит 41-значный номер 28^28 = 33145523113253374862572728253364605812736, за которым следует завершающий перевод строки.


Старая версия

  ^
 / \
/out\
-----^
    /^\
   ^---^
  /1\ /9\
 /606\---
/51015\
-------

Попробуйте онлайн!

Выходы 71277303925397560663333806233294794013421332605135474842607729452115234375= 160651015 ** 9или около 10 74 .

Конор О'Брайен
источник
6
Эй, ты пытаешься продать свой язык? Если это так, вы арестованы. - Менты
NoOneIsHere
2
@ NoOneIsHere простите?
Конор О'Брайен
3
Извините, это называется Пирамидальная Схема, которая также является названием типа мошенничества.
NoOneIsHere
1
ohhhhhhhhhhhh ROFL
Конор О'Брайен
1
Неявный вывод сокращает до 43 байт .
Хулдрасет на'Барья
23

Python 2 , 9 байт

print{+1}

Это печатает set([1])и перевод строки.

Попробуйте онлайн!

Деннис
источник
11
Из программ перебора, начиная с printболее ранних, нет более коротких решений, и единственными 9-байтовыми являются варианты этого и Луиса Мендо print 1e5 .
xnor
23

Python 2 , 9 байт

print 1e5

Отображаемый вывод содержит завершающий перевод строки.

Попробуйте онлайн!

Луис Мендо
источник
Конечные переводы строк считаются символом до выхода? Иначе, это печатает восемь байтов.
OldBunny2800
@ OldBunny2800 Да, задача говорит, что если ваши выходные данные содержат завершающие символы новой строки, они являются частью количества байтов . Во всяком случае, я
Луис Мендо
18

мозговой трах , 25 байтов

--[-->+<]+++++[->-.....<]

Попробуйте онлайн! Примечание. Требуется реализация с 8-разрядными неподписанными ячейками.

Выход:

~~~~~}}}}}|||||{{{{{zzzzz

объяснение

--[         254
 -->+<]      /2 = 127 into the second cell
+++++[      Five times
 ->-.....<]  Print the second cell - 1 five times
Зак С.
источник
4
Существует много вариаций BF, таких как бесконечная лента с 8-ю ячейками. или ограниченная лента и бесконечные ячейки. Я почти уверен, что у вас 8-битная модель без знака, но я думаю, что было бы хорошо, если бы вы включили это в свой ответ.
Роман Греф
@ RomanGräf Хороший вопрос! Я обычно включаю эту информацию, если требуется нестандартная реализация. Этот ответ должен работать в любой стандартной реализации (8-битные неподписанные ячейки, любая лента), но я добавлю примечание для пояснения.
Зак С.
Не могли бы вы иметь 1-байтовую программу, .которая печатает непечатаемый NULLсимвол?
Гравитон
@Graviton Это нарушило бы первое правило этого вызова. Тем не менее, это правильное решение для производной BF, которая по умолчанию принимает значение для печати (см .: мой ответ в мозговом буле )
Зак С.
24 байта
Джо Кинг
16

C (Ideone), 14 байтов

f(){warn(0);}

На Ideone , который называет свой исполняемый файл prog, это выводит следующее с завершающей строкой.

prog: Success

C (GCC), 15 байтов

f(){warn(00);}

Поскольку GCC записывает исполняемый файл с именем a.outпо умолчанию (при отсутствии дополнительных флагов, которые будут стоить байтов), это приводит к следующему с завершающим переводом строки.

a.out: Success
Андерс Касеорг
источник
7
@MDXF В спецификации указана программа или функция, поэтому отправка функции является абсолютно действительной. Поскольку имя пользователя здесь не выбрано (и у Ideone, и у gcc есть значения по умолчанию), я думаю, что это нормально (личное мнение).
Деннис
15

C (gcc) , 18 17 байт

f(){puts('@C');}

Обратите внимание, что есть байт 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, где он выводит следующий вывод.

inux-x86-64.so.2

Я ожидаю, что это приведет к одинаковому выводу со всеми версиями gcc, при условии, что он компилируется в исполняемый файл следующего типа.

ELF 64-bit LSB executable, x86-64, version 1 (SYSV), dynamically linked, interpreter /lib64/ld-linux-x86-64.so.2

Разным платформам потребуется разный адрес памяти и, возможно, другой порядок байтов в многосимвольной символьной константе.

Например, замена @\2Cна @\2\4печать exec/ld-elf.so.1и перевод строки во FreeBSD 11 на clang 3.8.0.

Проверка в автономном режиме

$ printf "%b\n" "f(){puts('@\2C');}main(){f();}" > quine.c
$ gcc -w -o quine quine.c
$ ./quine
inux-x86-64.so.2
$ ./quine | wc -c
17

Как это устроено

По умолчанию ld использует 0x400000 в качестве базового адреса текстового сегмента, что означает, что мы можем найти содержимое ELF, начиная с адреса памяти 0x400000 .

Первые 640 байтов ELF в значительной степени не зависят от фактического исходного кода. Например, если объявление о й следует main(){f();}и ничего, они выглядят следующим образом .

00000000: 7f 45 4c 46 02 01 01 00 00 00 00 00 00 00 00 00  .ELF............
00000010: 02 00 3e 00 01 00 00 00 00 04 40 00 00 00 00 00  ..>.......@.....
00000020: 40 00 00 00 00 00 00 00 e8 19 00 00 00 00 00 00  @...............
00000030: 00 00 00 00 40 00 38 00 09 00 40 00 1e 00 1b 00  ....@.8...@.....
00000040: 06 00 00 00 05 00 00 00 40 00 00 00 00 00 00 00  ........@.......
00000050: 40 00 40 00 00 00 00 00 40 00 40 00 00 00 00 00  @.@.....@.@.....
00000060: f8 01 00 00 00 00 00 00 f8 01 00 00 00 00 00 00  ................
00000070: 08 00 00 00 00 00 00 00 03 00 00 00 04 00 00 00  ................
00000080: 38 02 00 00 00 00 00 00 38 02 40 00 00 00 00 00  8.......8.@.....
00000090: 38 02 40 00 00 00 00 00 1c 00 00 00 00 00 00 00  8.@.............
000000a0: 1c 00 00 00 00 00 00 00 01 00 00 00 00 00 00 00  ................
000000b0: 01 00 00 00 05 00 00 00 00 00 00 00 00 00 00 00  ................
000000c0: 00 00 40 00 00 00 00 00 00 00 40 00 00 00 00 00  ..@.......@.....
000000d0: 04 07 00 00 00 00 00 00 04 07 00 00 00 00 00 00  ................
000000e0: 00 00 20 00 00 00 00 00 01 00 00 00 06 00 00 00  .. .............
000000f0: 08 0e 00 00 00 00 00 00 08 0e 60 00 00 00 00 00  ..........`.....
00000100: 08 0e 60 00 00 00 00 00 1c 02 00 00 00 00 00 00  ..`.............
00000110: 20 02 00 00 00 00 00 00 00 00 20 00 00 00 00 00   ......... .....
00000120: 02 00 00 00 06 00 00 00 20 0e 00 00 00 00 00 00  ........ .......
00000130: 20 0e 60 00 00 00 00 00 20 0e 60 00 00 00 00 00   .`..... .`.....
00000140: d0 01 00 00 00 00 00 00 d0 01 00 00 00 00 00 00  ................
00000150: 08 00 00 00 00 00 00 00 04 00 00 00 04 00 00 00  ................
00000160: 54 02 00 00 00 00 00 00 54 02 40 00 00 00 00 00  T.......T.@.....
00000170: 54 02 40 00 00 00 00 00 44 00 00 00 00 00 00 00  T.@.....D.......
00000180: 44 00 00 00 00 00 00 00 04 00 00 00 00 00 00 00  D...............
00000190: 50 e5 74 64 04 00 00 00 b0 05 00 00 00 00 00 00  P.td............
000001a0: b0 05 40 00 00 00 00 00 b0 05 40 00 00 00 00 00  ..@.......@.....
000001b0: 3c 00 00 00 00 00 00 00 3c 00 00 00 00 00 00 00  <.......<.......
000001c0: 04 00 00 00 00 00 00 00 51 e5 74 64 06 00 00 00  ........Q.td....
000001d0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  ................
000001e0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  ................
000001f0: 00 00 00 00 00 00 00 00 10 00 00 00 00 00 00 00  ................
00000200: 52 e5 74 64 04 00 00 00 08 0e 00 00 00 00 00 00  R.td............
00000210: 08 0e 60 00 00 00 00 00 08 0e 60 00 00 00 00 00  ..`.......`.....
00000220: f8 01 00 00 00 00 00 00 f8 01 00 00 00 00 00 00  ................
00000230: 01 00 00 00 00 00 00 00 2f 6c 69 62 36 34 2f 6c  ......../lib64/l
00000240: 64 2d 6c 69 6e 75 78 2d 78 38 36 2d 36 34 2e 73  d-linux-x86-64.s
00000250: 6f 2e 32 00 04 00 00 00 10 00 00 00 01 00 00 00  o.2.............
00000260: 47 4e 55 00 00 00 00 00 02 00 00 00 06 00 00 00  GNU.............
00000270: 20 00 00 00 04 00 00 00 14 00 00 00 03 00 00 00   ...............

Использование, например, 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 байтов вывода.

Деннис
источник
Это волшебство ... это предполагает порядок байтов скомпилированной сборки или что-то в этом роде?
Патрик Робертс
Вывод в моей системе (Linux с GCC 6.3.1): Uпри компиляции с -Df=main. Uпри компиляции с main(){f();}.
MD XF
@PatrickRoberts На данный момент, я не совсем уверен, каковы предположения. Так как он копается в собранном ELF-файле, он в значительной степени зависит от всего, что компилятор пишет перед фактическим кодом.
Деннис
@MDXF Найден более короткий способ получить подходящий адрес памяти. Он работает на моем Ubuntu 14.04 VPS, но ymmv.
Деннис
@ Денис теперь работает отлично (черт возьми). Щедрость ваша, если к концу недели никто не найдет более короткого решения.
MD XF
13

Самомодифицирующийся Brainfuck , 5 байтов

<[.<]

Попробуйте онлайн!

Выход:

]<.[<

Объяснение:

Действительно просто, печатает источник в обратном порядке. В SMBF содержимое программы хранится на ленте слева от начальной позиции указателя. Скольжение влево и печать выведут исходный код назад.

Поскольку чтение источника разрешено в этой задаче, это определенно должно соответствовать правилам.

Зак С.
источник
13

Базовый арифметический калькулятор , 2 байта

1=

отпечатки 1.или:

    |
    |
    |  .

на этих глупых семисегментных дисплеях.

Для воспроизведения возьмите любой случайный калькулятор; у всех них этот язык программирования установлен как-то.

OldBunny2800
источник
1
Это правда для всех калькуляторов? Я уверен, что они постоянно показывают десятичную точку
Beta Decay
Разве это не 1.вместо 1x? Также это квинна, которая запрещена правилами.
Эрик Outgolfer
Нет, 1=я все испортила. Я имел в виду, 1xчем неявные равные, но я забыл, что =это кнопка.
OldBunny2800
Он выводится только 1на мой TI-36 и TI-84 CE. Разве они не считаются «базовыми» калькуляторами?
Бенджамин Уркхарт
Нет, TI 84 - это не арифметический калькулятор, это графический калькулятор. Я не знаю о 36, но я уверен, что это научный калькулятор. Этот ответ для четырехфункциональных калькуляторов.
OldBunny2800
13

Фурье, 26 22 20 байт

5^(`na`&i)` Batman!`

Попробуйте это на FourIDE!

Выходы:

nananananana Batman!

Для правильной капитализации это 4 дополнительных байта:

`N`7^(`an`i^~i)`a Batman!`

Попробуйте это на FourIDE!

Nanananananananana Batman!

Покойся с миром Адам Вест

Бета распад
источник
1
Вам не нужно включать NC (только если вы сделали струнную печать для этого испытания (и это было бы глупо)
Кристофер
@ Кристофер Да, я этого не знал
бета-распад
12

Брахилог , 1 байт

w

Попробуйте онлайн!

объяснение

wэто встроенная «запись». Здесь будет записан ввод. Поскольку Input является свободной переменной, wперед печатью он будет помечен как целое число. Первое целое число, которое он пытается это 0.

Fatalize
источник
Here, it will write the Input.Является ли «Вход» самой программой? Разве это не считается чтением источника, который по умолчанию обманывает в квине?
MD XF
4
@MDXF «Обычные правила для квайнов не применяются»
Роб Уоттс
3
@MDXF Input - это специальная переменная Brachylog, которую вы можете установить при вызове программы Brachylog. Он входит во входную часть TryItOnline. Здесь мы ничего не устанавливаем для Input, поэтому он фактически является переменной. Это не программа.
Роковая
10

Java (OpenJDK 8) , 11 байт

o->1e8-1+""

Попробуйте онлайн!

Выход:

9.9999999E7

Просто немного сложнее, чем очевидный ответ ()->"".format("%23s",0).

Сохраняет

  • 18 -> 16 байт: более выгодное сочетание округления и мощности 10 благодаря PunPun1000
  • 16 -> 13 байт: лучшая формула благодаря JollyJoker
  • 13 -> 11 байт: улучшенная формула, благодаря Кевину Круйссену
Оливье Грегуар
источник
2
()->1E10-1+"", "9.999999999E9" (13)сохраняет еще три байта
JollyJoker
1
Вы можете сохранить 1 байт, изменив 1e10значение 1e9, или 2 байта, используя пустой вход вместо() этого: o->1e8-1+""(выходные данные 9.9999999E7; длина & счетчик байтов 11 ).
Кевин Круйссен,
9

05AB1E , 1 байт

õ

Выводит одну новую строку. õвыдвигает пустую строку, и она неявно выводится с новой строки.

Попробуйте онлайн!

Некоторые другие 2-байтовые решения для вашего удобства просмотра (выходные данные указаны в скобках, а весь вывод содержит завершающий перевод строки):

X, (1)
Y, (2)
¾, (0)
¼, (1)
¶, (newline)
ð, (space)
Î, (0)

Хотя есть и более 2-байтовые решения.

Okx
источник
«который является приемлемым методом вывода» только для функциональных решений, а не для полных программ.
Мартин Эндер
@MartinEnder Тогда эти решения будут считаться функциями? Не совсем уверен, так как здесь я не часто использую функции.
Okx
Я не знаю достаточно о 05AB1E, но они считаются функциями, только если они на самом деле являются выражениями, которые оценивают функциональный объект (что я сомневаюсь, что они делают, так как их использование немедленно приводит к выполнению команды).
Мартин Эндер
9

V / vim, 1 байт

o

Это печатает одну новую строку.

Попробуйте онлайн!

Есть несколько вариантов, которые тоже подойдут. Например,

O

в VIM, и

Ä
ä
ï
Ï

в В.

Есть также много много много трехбайтовых решений. Например:

3ii
i³i
¬ac

Это все специфично для V.

DJMcMayhem
источник
3ii не расширяется, пока вы не нажмете escape, так должно ли это быть три или четыре байта (или, скорее, нажатия клавиш)?
Algmyr
@algmyr В vim вы правы. Должно быть, 4ii<ESC>однако, V неявно заполняет escape в конце программы.
DJMcMayhem
8

Пакетный, 12 байтов

@echo %OS%

Счетчик байтов включает в себя завершающий символ новой строки как для сценария, так и для вывода, что

Windows_NT
Нил
источник
Кажется, что это 11 байтов, а не 12.
Эрик Outgolfer
@EriktheOutgolfer cmd.exe, конечно, будет отображать CRLF после Windows_NT, таким образом, 12 байтов.
Нил
Тогда ты должен уточнить?
Эрик Outgolfer
8

Гексагония , 3 байта

o!@

Попробуйте онлайн!

Печать 111.

Развернутая:

 o !
@ . .
 . .

Но код действительно выполняется в порядке o!@.

o   Set the memory edge to 111, the code point of 'o'.
!   Print this value as a decimal integer.
@   Terminate the program.
Мартин Эндер
источник
8

R, 7 байт

mode(T)

Отпечатки "логично"

Ivanneke
источник
Добро пожаловать в PPCG!
Мартин Эндер
7

MATL , 2 байта

H

Есть завершающий перевод строки.

Попробуйте онлайн!

объяснение

Буфер обмена H содержит номер 2по умолчанию. Hпомещает этот контент в стек, который неявно отображается с завершающим символом новой строки.

Луис Мендо
источник
7

Древесный уголь , 2 байта

→¹

Попробуйте онлайн!

Печатает горизонтальную линию длиной 1 -справа и новую строку .

ASCII-только
источник
Человек древесный уголь это действительно отличный язык, я должен научиться этому некоторое время
Skidsdev
7

Желе , 1 байт

V

Довольно много байтов Jelly one - это один - он оценивает левый аргумент, который, когда ничего не предоставляется в качестве входных данных, по умолчанию обнуляется, что, в свою очередь, приводит к нулю, и результат неявно печатается, a 0.

Попробуйте онлайн!

Фактически, из 256 байтов в кодовой странице есть только 95, которые в настоящее время не выдают другой однобайтовый вывод в указанном диапазоне при запуске в качестве полной программы; это (как символы кодовой страницы в порядке байтов):

¡¢£¦©½¿€ÇÑÞßçıȷñ÷þ"#&',-./0123456789:;?@IMRTVZ\`dmpstxyz{}~°³⁴⁵⁹ƓƈɠḶỌṬḊĖİĿṄȮṖṘẆẊṃọṣṭḃḟḣŀṁṗṡẋż’“

Примечания:

  • Большинство однобайтовых программ печатают a 0(no-ops / выдача списка с одним нулем в, который печатает a 0), большинство других печатают a 1( 0=0и т.п.)

  • это одна программа , которая делает выход другой байт, но тот , который находится вне диапазона согласно спецификации - она производит нуль-байт (бросает 0к характеру)

  • производит пробел (литерал)

  • производит перевод строки (литерал)

  • Некоторые байты, которые работают сейчас, могут не делать этого в будущем - есть довольно много байтов, зарезервированных (я полагаю) для niladic-значений, которые при назначении почти наверняка не будут производить однобайтовый вывод.

Джонатан Аллан
источник
1
Мертвая ссылка дляbyte
Weedoze