Виведіть свій бал!


54

Виклик:

Концепція досить проста: написати повну програму, щоб вивести свій власний бальний код гольфу!

Вихід повинен бути лише кількістю байтів вашої програми та трейлінг bytes.

АЛЕ ЗАЧЕКАЙТЕ ..... є одне обмеження:

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

Приклад Вихід:

315 bytes
27 Bytes
49 BYTES

Додаткові правила:

  • У вихідному коді заборонені символи, пробіли та нові рядки заборонені, однак пробіли та нові рядки абсолютно прийнятні у висновку
  • Між цифрою та bytesу виході має бути єдиний пробіл
  • Букви нечутливі до регістру
  • Немає самоперевірки чи зчитування вихідного коду
  • стандартні лазівки заборонені

  • це , так

Найкоротший код у байтах виграє!


6
Чи потрібен цей тег quine , чи код може самостійно перевіряти?
Адам

3
@Dat, зважаючи на форматування слова, bytesя підозрюю, що це має на увазі, що графа повинна містити байти, необхідні для друку тексту:bytes
Jeff Schaller

2
Чи прийнятні провідні проміжки на виході?
rafa11111

3
Якщо мій код довжиною 1 байт, я повинен вивести 1 bytesабо 1 byte? (майте на увазі, що вже 41 відповідь, хоча я не думаю, що жодна з них впливає)
Erik the Outgolfer

1
@JoKing добре, я не звертався до корпусу в правилах, але якщо якимось способом використання великих літер знижує ваш показник нижче, то я б усіляко хотів би побачити, що ви придумали. Я кажу, піди на це!
X1M4L

Відповіді:


41

JavaScript, 19 байт

Октал був винайдений для виконання двох цілей:

  • налаштування дозволів на файли в Linux
  • відповівши на цей виклик

alert(023+' bytes')

Спробуйте в Інтернеті!


Чи вважається це повноцінною програмою?
ericw31415

1
@ ericw31415 Це програма для браузера , як визначено в цьому метавідповіді .
Арнольд

5
+1, тому що нарешті роз’яснює мені, чому восьмерик не зовсім марний!
серхіол

34

Perl 5 , 16 байт

Є багато інших способів отримати, 16але цей мій

say afpbytes^PPP

Спробуйте в Інтернеті!


1
Як це працює?
caird coinheringaahing

9
@cairdcoinheringaahing У perl ви можете залишити цитати на рядках, якщо вони виглядають як буквальний і не суперечать ключовому слову (і дуже сильно застаріли, але ми не байдуже в гольфі), двійкові оператори, & | ^а ~також можна застосувати до рядків і працювати над ними, як у списку значень ASCII (якщо і лише якщо обидві сторони є рядками). Для |і ^вона працює , як якщо рядок shorte розширюється з \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 (+ деякі інші ефекти, які нас не цікавлять)

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


15

Полотно , 8 байт

8 bytes+

Спробуйте тут!

Більш цікаве 20-байтне рішення:

bytecount.innerText#

Спробуйте тут!


3
Гаразд, це досить розумно.
Адам

Зауважте, що одне з обмежень - "Ваш вихідний код не може включати жодну цифру з вашого числа байтів", тому перше рішення в цьому випадку недійсне =)
Cyclonecode

1
@Cyclonecode У тому, що "8" немає звичайного ASCII 8, - це символ 8 ширини в цій унікодовій версії коду, хоча насправді це байт 0xD5, який абсолютно не пов'язаний з будь-якими 8s
dzaima


11

PHP, 14 байт

<?=7*2?> bytes

8
Як щодо розміщення bytesдеталі поза ?>? Спробуйте в Інтернеті!
Джо Кінг

@JoKing чудово на 3 байти менше
Cyclonecode

1
Тільки фій, напевно, найкраще, що ви розділили свою відповідь на кілька відповідей, якщо ви охоплюєте більше однієї мови.
Conor O'Brien

@ ConorO'Brien - Окі зробить
Cyclonecode


6

Стакс , 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")

Спробуйте в Інтернеті!


Чи не 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

PHP + HTML, 16 байт

&#49;&#54; bytes

Так, це дуже близько до зловживань з лазівкою, але я вважав, що це потрібно опублікувати. А використання PHP означає , що ця відповідь технічно це написано в Тьюринг-повний мову програмування. Звичайно, будь-яка інша схожа мова HTML-шаблонів працювала б так само добре.

Демонстраційна демонстрація (без PHP):

&#49;&#54; bytes


Бий мене до цього! І то; зазвичай можна опустити!
весілля

Ааа , але тоді це буде 14/15 байт
wedstrom


4

MATL , 13 байт

'57$f}xiw'4-c

Спробуйте в Інтернеті!

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


6EV' bytes'hце 12 (я ось-ось збирався це опублікувати)
Джузеппе

1
хоча це той самий нудний підхід: П
Джузеппе


4

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

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

Спробуйте в Інтернеті!

І це:

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

Спробуйте в Інтернеті!


Перша відповідь здається прекрасною, але ... як працює друга? оо
rafa11111

2
@ rafa11111 Віднімання 4(коди ASCII) '67$f}xiw'дає коди ASCII '23 bytes'. Потім, об'єднуючись із порожньою рядком, '' перетворює коди ASCII в символи
Луїс Мендо

2
@Luis Mendo Дуже розумний! Дякуємо за уточнення!
rafa11111

4

Petit Computer BASIC, 11 байт

?9+2,"bytes

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


4

APL (Dyalog Unicode) , 12 байт

Повна програма, яка неявно друкує на STDOUT.

'bytes',⍨3×4

Спробуйте в Інтернеті!

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


Я можу помилятися, але хіба у вас немає байта та програми? 3 * 4 має бути добре
fyrepenguin

@fyrepenguin Хе, так, звичайно, ти. Як глупо мені.
Adám

4

Мозг-Флак , 100 байт

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

Спробуйте в Інтернеті!

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



4

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

Просто тому, що ще ніхто цього не зробив:

   			    
	
 	   
   	 	  		
   	   	 	
   	 	 	  
   	 		  	
   	    	 
   	     

  
	
   
 
	  

 


   




Спробуйте в Інтернеті!

Друкує "BYTES" великими літерами, оскільки великі літери мають більш короткі двійкові коди 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

Ага, не помітили, що вже була відповідь Whitespace. Ось коротший ( 104 байти ). . Буде видалено моє знову. Ось те саме з доданими виділенням та поясненням.
Кевін Кройсейсен

О, хм. Я думаю, що текст є досить коротким, що реалізація циклу насправді шкодить більше, ніж просто повторювати PrintChar. (І я знаю, я завжди можу скинути остаточний NNN, але мені дуже подобається не мати помилок.)
aschepler

4

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

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

Ніякого TIO-посилання, оскільки Java 5/6 стара. У Java 5/6 можна було мати перерахунок з кодом замість обов'язкового main-методу, що скорочує його для повних програмних викликів.

Також помилки 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містить a 7, тому воно недійсне. Хоча ваше альтернативне рішення чудово.
OOBalance

1
v->0xE+"bytes"або v->0xF+" bytes". Неможна перевірити, але все одно повинна працювати. Ніщо не говорить про те, що оцінка та "байти" повинні бути розділені.
Олів'є Грегоар

1
@ OlivierGrégoire Я знаю, я знаю. ;) Коли я опублікував повну програму, я сумнівався, щоб відповісти на неї, як задумавшись про вашу підказку . Чи знаєте ви будь-який онлайн-компілятор, який все ще підтримує його? Я віддаю перевагу мати посилання з тестовим кодом для моїх відповідей ..
Кевін Кройсейсен


4

Яблукопис, 15 байт

Так, я їду туди.

9+6&”bytes”

1
Але ...Your source code can not include any of the digits from your byte count
nicael

@nicael Dang, ти маєш рацію. Одну секунду потім ...
ДоніельФ

Виправте мене, якщо я помиляюся, але це не багатобайтовий символ (3 байти в Unicode, якщо я правильно пам’ятаю), тож це більше 11 байт?
caird coinheringaahing

@cairdcoinheringaahing ... Стріляй. Ви маєте рацію - «це 2 байти, що
збільшує

це ще не друкує 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
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.