Выведите свой счет!

54

Вызов:

Концепция достаточно проста: напишите полную программу для вывода собственного кода оценки гольфа!

Выходными данными должны быть только количество байтов вашей программы и трейлинг bytes.

НО ПОДОЖДИТЕ ..... есть одно ограничение:

  • Ваш исходный код не может содержать какие-либо цифры из вашего числа байтов
  • Так что, если ваш счет 186 bytes, ваша программа не может содержать символы 1, 6или8

Пример вывода:

315 bytes
27 Bytes
49 BYTES

Дополнительные правила:

  • Ненужные символы, пробелы и новые строки запрещены в исходном коде, однако конечные пробелы и новые строки вполне допустимы в выходных данных.
  • Между числом и bytesна выходе должен быть один пробел
  • Буквы нечувствительны к регистру
  • Нет самостоятельной проверки или чтения исходного кода
  • стандартные лазейки запрещены

  • это , так

Самый короткий код в байтах побеждает!

X1M4L
источник
6
Нужен ли для этого тег quine или может ли самопроверка кода выполняться?
Адам
3
@Dat, учитывая форматирование слова, которое bytesя подозреваю, предполагается, что в число должно быть включено количество байтов, необходимых для печати текста:bytes
Джефф Шаллер,
2
Допустимы ли пробелы в выводе?
rafa11111
3
Если мой код длиной 1 байт, я должен вывести 1 bytesили 1 byte? (имейте в виду, что уже есть 41 ответ, хотя я не думаю, что они были затронуты)
Эрик Outgolfer
1
@ Хорошо, я не рассматривал регистр в правилах, но если каким-то образом использование заглавных букв сделает ваш счет ниже, то я бы с удовольствием посмотрел, что вы придумали. Я говорю пойти на это!
X1M4L

Ответы:

41

JavaScript, 19 байт

Octal был изобретен для двух целей:

  • установка прав доступа к файлам в Linux
  • отвечая на этот вызов

alert(023+' bytes')

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

Arnauld
источник
Это считается полной программой?
ericw31415
1
@ ericw31415 Это программа браузера , как определено в этом мета-ответе .
Арно
5
+1 потому что, наконец, проясняю, почему восьмеричное не совсем бесполезно!
sergiol
34

Perl 5 , 16 байт

Есть много других способов получить, 16но этот мой

say afpbytes^PPP

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

Тон Хоспел
источник
1
Как это работает?
Caird Coneheringaahing
9
@cairdcoinheringaahing В Perl вы можете опустить кавычки в строках, если они выглядят как литералы и не конфликтуют с ключевым словом (и очень не рекомендуется, но нас это не волнует в гольфе), бинарные операторы, & | ^а ~также могут применяться к строки и работать с ними, как в списке значений ASCII (если и только если обе стороны являются строками). Для |и ^это работает так, как если бы сокращенная строка была расширена \0. После этого выполняется простое упражнение по поиску комбинаций букв, которые приводят к желаемому результату,
Тон Хоспел
26

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'

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

оборота ais523
источник
15

Холст , 8 байт

8 bytes+

Попробуй это здесь!

Более интересное 20-байтовое решение:

bytecount.innerText#

Попробуй это здесь!

dzaima
источник
3
Хорошо, что это очень умный.
Адам
Обратите внимание, что одним из ограничений является «Ваш исходный код не может содержать ни одной цифры из числа ваших байтов», поэтому первое решение в этом случае
недопустимо
1
@Cyclonecode То, что "8" там нет обычного ASCII 8, хотя - это 8 символов полной ширины в этой версии кода в юникоде, хотя на самом деле это байт 0xD5, который совершенно не связан с любыми 8
dzaima
11

PHP, 14 байт

<?=7*2?> bytes
Cyclonecode
источник
8
Как насчет размещения bytesчасти вне ?>? Попробуйте онлайн!
Джо Кинг
@JoKing здорово на 3 байта меньше :)
Cyclonecode
1
Просто, к вашему сведению, лучше всего разделить ваш ответ на несколько ответов, если вы используете более одного языка.
Конор О'Брайен
@ ConorO'Brien - Оки сделает
Cyclonecode
8

PHP старше 7,2 , 13 байт

Принимает настройки по умолчанию (предупреждения E_NOTICE отключены) и версию PHP старше 7.2.

Необходимо расшифровать xxd -r

00000000: 3c3f 3d7e cecc df9d 868b 9a8c 3b         <?=~........;

Или, если вы предпочитаете Base64

PD89fs7M352Gi5qMOw==

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

Конрад Боровски
источник
6

Stax , 5 байт

╗↑╞ô╝

Запустите и отладьте его

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

5p     print 5 with no line break
`5l@   print the compressed string " bytes"

Если вы не хотите использовать режим упакованного исходного кода, 6^p`5l@работает на 7 байт.

рекурсивный
источник
1
Я отклонил этот ответ, потому что я думаю, что использование упакованного режима, в то время как умный способ сохранения байтов, похоже на обман (а это не так) в худшем случае и не творческий в лучшем случае. Вместо того, чтобы понижать голосование всех ответов Stax с ограниченными источниками , я оставлю это понижающее голосование, чтобы охватить все подобные ответы.
caird coinheringaahing
1
Я, конечно, согласен, что это не креативно. Но я думаю, что вина лежит в концепции restricted-source, а не в языке. На самом деле это самый прямой способ производства "5 bytes"с использованием Stax.
рекурсивный
Я согласен с тем, что есть проблема с вызовом (поэтому я и отклонил его ), но мне все равно не нравится этот ответ. Пожалуйста, не удаляйте его (только предупреждающее предупреждение), в этом нет ничего плохого .
caird coinheringaahing
6

R , 16 байт

cat(4*4,"bytes")

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

Giuseppe
источник
Разве это не 17 из-за вашего недостающего места?
PmanAce
@PmanAce "Вывод должен содержать только количество байтов вашей программы и трейлинг bytes". Программа составляет 16 байт.
Джузеппе
catпо умолчанию добавляет пробел между его входами.
Джузеппе
object.sizeвыводит в правильном формате (с bytesвключенным по умолчанию). Досадно, самый короткий я смог найти 17: object.size(0)-39. TIO
Робин Райдер
1
По- видимому, в версии Хэдли, вектор 1 длины имеет длину 48, поэтому должна существовать версия R , в котором работает этот 16-байт - код: object.size(0)/3.
Робин Райдер
5

Python 3 , 25 24 18 байт

print(6*3,'bytes')

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

NieDzejkob
источник
1
Но «4» в «24». Может быть "33-9"?
рекурсивный
@ рекурсивный все 3*8должно быть хорошо
Кевин Круйссен
@ recursive whoops, исправил это: P
NieDzejkob
5

05AB1E , 6 байтов

₂¤“ÿ¡Ï

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


₂      # [26]        | Pushes 26 (many other alternatives).
 ¤     # [2, 6]      | Split out tail.
  “ÿ¡Ï # ['6 bytes'] | ÿ = "Interpolate top of stack.", ¡Ï = "bytes" (compressed)

Альтернативы ₂¤включают в себя: 5>, ₁¤,

Урна волшебного осьминога
источник
5
Жаль, что это не работает.
Волшебная Осьминог Урна
5

Баш, 21 байт

«Прочитайте свой собственный исходный код» здесь явно не победитель, но никто другой не представил его, так что, черт возьми.

echo `wc -c<$0` bytes

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

thegreatemu
источник
5

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


 bytes
*>w`..+

Эта программа подсчитывает количество подстрок, по крайней мере, с двумя символами в строке «байты», а затем печатает этот счетчик и саму строку.

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

Лео
источник
5

PHP + HTML, 16 байт

&#49;&#54; bytes

Да, это очень близко к злоупотреблению лазейкой, но я чувствовал, что это необходимо опубликовать. А использование PHP означает , что этот ответ технически это написано в Тьюринг-полный язык программирования. Конечно, любой другой подобный язык шаблонов HTML будет работать так же хорошо.

Живая демоверсия (без PHP):

&#49;&#54; bytes

Илмари Каронен
источник
Обыграй меня! И то; обычно может быть опущено!
wedstrom
Ааа , но тогда это будет 14/15 байт
wedstrom
4

dc , 14 11 байтов

[ bytes]Bnn

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

-3 байта @Cows quack

NieDzejkob
источник
[ bytes]Bnnбреет несколько байтов
Kritixi Lithos
@ Cowsquack спасибо!
NieDzejkob
@cowsquack duckies идут MOO, я бы предположил: P?
Волшебный осьминог Урна
@MagicOctopusUrn Утки, что такое утки? : P
Kritixi Lithos
4

MATL , 13 байт

'57$f}xiw'4-c

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

Это выдвигает строку '57 $ f} xiw 'и вычитает 4, чтобы получить 13 bytes. Это преобразуется в символы с помощью c.

Стьюи Гриффин
источник
6EV' bytes'hэто 12 (я только собирался опубликовать это)
Джузеппе
1
хотя это тот же скучный подход: P
Джузеппе
4

Октава , 23 байта

printf('%i bytes',9+14)

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

И это:

disp(['','67$f}xiw'-4])

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

Стьюи Гриффин
источник
Первые ответы кажутся хорошими, но ... как работает второй? oO
rafa11111
2
@ rafa11111 Вычитание 4из (коды ASCII) '67$f}xiw'дает коды ASCII '23 bytes'. Затем, конкатенация с пустой строкой '' преобразует ASCII-коды в символы
Луис Мендо,
2
@ Луис Мендо Довольно умный! Спасибо за разъяснение!
rafa11111
4

Petit Computer BASIC, 11 байт

?9+2,"bytes

Использование запятой в операторе печати переместит курсор на следующую кратную текущего размера вкладки. В SmileBASIC это по умолчанию 4, поэтому будет выводиться 11 bytes(2 пробела), но вместо этого PTC BASIC использовал 3, поэтому выход имеет правильный интервал.

12Me21
источник
4

APL (Dyalog Unicode) , 12 байт

Полная программа, которая неявно печатает в STDOUT.

'bytes',⍨3×4

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

,⍨ is добавляет строку к результату умножения. Стандартное отображение данных смешанного типа в APL ставит пробел между числом и последующим текстом.

Адам
источник
Я могу ошибаться, но разве у вас нет 2 в вашем числе байтов и программы? 3 * 4 должно быть хорошо, хотя
fyrepenguin
@fyrepenguin Хех, конечно, ты прав. Как глупо с моей стороны.
Адам
4

Brain-Flak , 100 БАЙТОВ

((((((<>))))))(((()[[]]((((()()((((([][]){}){}())[()]))[[][]])()){})()[][]))[()()[]])[]){({}<>)<>}<>

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

Выводит bytesдеталь во все заглавные буквы. Кто-то, знакомый с Brain-Flak, может быть действительно смущен ((<>))вначале, но будьте уверены, они только там, чтобы злоупотреблять высотой стека nilad ( []), и ни один из 0производимых ими файлов не печатается.

Джо Кинг
источник
4

Пробел , 112 байт

Просто потому, что никто еще этого не сделал

   			    
	
 	   
   	 	  		
   	   	 	
   	 	 	  
   	 		  	
   	    	 
   	     

  
	
   
 
	  

 


   




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

Печатает "БАЙТЫ" заглавными буквами, поскольку заглавные буквы имеют более короткие двоичные коды ASCII. Команды в программе, в моем собственном виде составлены видимые обозначения:

Push 112
PrintNum
Push 0
Push 0x53
Push 0x45
Push 0x54
Push 0x59
Push 0x42
Push 0x20
Label _
PrintChr
Dup
JumpZ S
Jump _
Label S
End
aschepler
источник
Ах, не заметил, что уже был ответ Whitespace. Вот более короткий ( 104 байта ). , Буду удалять мою снова. Вот то же самое с добавленной подсветкой и пояснениями.
Кевин Круйссен,
О, хм. Я предполагаю, что текст достаточно короткий, что реализация цикла на самом деле причиняет больший вред, чем просто повторение PrintChar. (И я знаю, я всегда могу отбросить окончательный NNN, но мне действительно нравится, когда не
бывает
4

Java 5 или 6, 44 байта (полная программа)

enum A{A;{System.out.print(0x2C+" bytes");}}

Отсутствует TIO-ссылка, потому что Java 5/6 старая. В Java 5/6 было возможно иметь перечисление с кодом вместо обязательного main-method, что делало его короче для полных задач программы.

Также могут быть добавлены ошибки java.lang.NoSuchMethodError: main\nException in thread "main"в STDERR после печати в STDOUT, что хорошо в соответствии с мета (но если вызов запретил бы дополнительные ошибки в STDERR, System.exit(0);можно добавить (и восьмеричные числа должны быть обновлены), чтобы предотвратить ошибку.

Предложил @ OlivierGrégoireего соответствующий Java наконечнике ).

Java 8+, 74 байта (полная программа)

interface M{static void main(String[]a){System.out.print(0112+" bytes");}}

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

Java 8+, 16 15 байт (лямбда-функция)

v->0xF+" bytes"

-1 байт благодаря @ OliverGégoire .

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

Кевин Круйссен
источник
2
Технически не полная программа :)
OOBalance
@OOBalance Упс .. как-то читал мимо этого, спасибо за исправление. Там идет мой счет .. XD
Кевин Круйссен
1
37*2содержит 7, поэтому он не действителен. Ваше альтернативное решение хорошо, хотя.
OOBalance
1
v->0xE+"bytes"или v->0xF+" bytes". Не могу проверить, но все равно должно работать. Ничто не говорит, что счет и «байты» должны быть разделены.
Оливье Грегуар
1
@ OlivierGrégoire Я знаю, я знаю. ;) Когда я опубликовал полную программу, я сомневался, что буду отвечать на нее как enum, думая о вашем отзыве-ответе . Вы знаете какой-нибудь онлайн-компилятор, который все еще поддерживает его? Я предпочитаю иметь ссылку с тестовым кодом для моих ответов ..
Кевин Круйссен
4

Applescript, 15 байт

Да, я иду туда.

9+6&”bytes”
DonielF
источник
1
Но ...Your source code can not include any of the digits from your byte count
Никель
@nicael Данг, ты прав. Одна секунда тогда ...
DonielF
Поправьте меня, если я ошибаюсь, но это не многобайтовый символ (3 байта в Юникоде, если я правильно помню), так что это больше 11 байтов?
Caird coinheringaahing
@cairdcoinheringaahing ... Стреляй. Вы правы - «составляет 2 байта, увеличивая это до 15.
DonielF
это все еще не печатает 11?
Разрушаемый лимон
3

Пакетная, 32 байта

@@echo %COMSPEC:~-10,-010% bytes

COMSPECкак правило, %WINDIR%\system32\cmd.exeпоэтому я извлекаю подстроку от 10 до 8 символов с конца. Старая 16-байтовая самореферентная версия:

@echo %~z0 bytes

К счастью, количество байтов не было кратным 10.

Нил
источник
@manatwork Хорошо, я этого не видел, вот новая версия.
Нил
3

JavaScript, 16 15 байт

x=>0xf+' bytes'
Яир Рэнд
источник
_=>5*3+' bytes'
Нил
@Neil В этом случае и код, и число байтов содержат 5
символ
@KevinCruijssen Бах, я не могу поверить, что я упустил это.
Нил
Заявки должны быть полными программами « напишите полную программу для вывода собственного кода оценки гольфа!»
Kritixi Lithos