Код гольфу для ледачих


10

Ваша мета в цьому коді гольф повинен взяти два рядки, languageі code (якщо golfed код написав для цього багатостроковий, то ця змінна буде багатостроковий.) , І один ціле, bytes. Вони представляють змінні для мови програмування, кількість байтів, які вона займає, та сам код.

Після цього ви будете форматувати його так, як це робить гольфіст коду.

Вихідна змінна називається багаторядковою рядком answer.

Можна використовувати багаторядкові рядки на:

Якщо ви шукаєте переповнення стека , ви маєте змогу знайти більше мов програмування, які його підтримують.

Ось шаблон розмітки на виході. codeЗмінна в блоці коду, і є заголовок другого рівня.

## {language}, {bytes} bytes

     {code}

Ось як виглядатиме висновок, вставлений у аналізатор Markdown.

{мова}, {байт} байт

    {code}

Передбачається, що змінні заповнюються вже як мовою, за якою ви зашифрували свій код для гольфу коду, кількістю байтів, які він займає, та фактичним кодом для нього.

Ось ще один приклад виведення у вигляді коду, цього разу із заповненими змінними:

## JavaScript, 1337 bytes

document.getElementById("foo").innerHTML = bar;

Ось версія як блок-котирування:

JavaScript, 1337 байт

    document.getElementById("foo").innerHTML = bar;

Байти можна зняти з вашого коду, якщо ви використовуєте спосіб встановлення тексту <p>елемента в HTML за ідентифікатором result, як-от наступний код JavaScript:

document.getElementById("result").innerHTML = answer;

Для цього обов'язково включіть <p id="result"></p>у розділ HTML JSFiddle .

Оцінка балів

Як і всі питання щодо коду про , найкращий код, який використовує найменшу кількість байтів.


3
Чи {code}коли-небудь буде багаторядковий код?
Аднан

8
"Змінні заповнюватимуться мовою, за якою ви зашифрували свій код для гольфу коду, кількість байтів, які він займає, та фактичний код для нього. Я єдиний, хто трактує це як варіацію квінта?
примо

2
Оскільки відповіді вирішують дві абсолютно різні проблеми, я ставлю це на затримку як незрозуміле. Прохання уточнити , є чи language, bytesі на codeвході , або це Куайн варіанти , де ці речі повинні відповідати самому коду Вирішуючи. (І якщо так, то чи дозволяється прямо чи опосередковано читання цього вихідного коду та чи дозволені вбудовані файли.)
Мартін Ендер

2
Чи можете ви також уточнити питання Аднана, чи codeможе сам вхід містити лінійні стрічки?
Мартін Ендер

2
@Peanut Я розгублений. Чи можемо ми припустити, що codeвін не буде багаторядковим, чи не можемо? Вкажіть, будь ласка, що у тексті виклику
Луїс Мендо

Відповіді:


2

05AB1E , 21 байт

Код:

“## ÿ, ÿ¡Ï
“,|v4ð×y«,

Використовує кодування CP-1252 . Спробуйте в Інтернеті! .



Виправлено @DrGreenEggsandIronMan.
Аднан

І ось битва V проти O5AB1E триває ... Приємна робота!
Джеймс

@DrGreenEggsandIronMan Я буду чекати наступного мистецького виклику ASCII, щоб помститися :).
Аднан

8

Java, 70 байт

String A(String[]b){return"## "+b[0]+", "+b[1]+" bytes\n\n    "+b[2];}

Припускає, що b[0]це ім'я мови, b[1]кількість байтів і b[2]код.

Здійснення його компіляції коштує 9 байт, в результаті чого 79-байт не окрема програма:

class a{String A(String[]b){return"## "+b[0]+", "+b[1]+" bytes\n\n    "+b[2];}}

Еквівалентна монолітна програма довжиною 103 байти:

interface a{static void main(String[]A){System.out.print("## "+A[0]+", "+A[1]+" bytes\n\n    "+A[2]);}}

Монолітний працює з аргументами командного рядка, припускаючи, що вони подібно до несамостійної програми:

  • Перший аргумент - це назва мови
  • Другий аргумент - кількість байтів
  • Третій аргумент - код

Java (лямбда-вираз), 56 48 байт

(b)->"## "+b[0]+", "+b[1]+" bytes\n\n    "+b[2];

Це java.util.function.Function<String[], String>.


Жодна з цих програм / функцій не обробляє багаторядкові рядки. Для цього просто замініть b[2]і A[2]на b[2].replace("\n","\n ")і A[2].replace("\n","\n ")- при цьому додається 23 байти.


Я зараз не поруч із комп’ютером, щоб підтвердити це, але ви не можете використати \tабо замінити щось через 4 пробіли після двох нових рядків?
Р. Кап

@ R.Kap Іноді використання вкладок замість пробілів створює безлад на SE.
user8397947

А, бачу. То чи враховується кількість байтів, \tа не 4 пробіли?
Р. Кап

3
Втратити парен на лямбда; ви можете зберегти два байти просто b->.
Брайан Маккотчон

2
Що станеться, якщо код містить більше одного рядка?
Ніл

5

V , 24 байти

Зауважте, що в кінці є простір.

Ця програма робить припущення, що {code}не буде в декількох рядках.

Op уточнив, що "код" може бути рядок з рядком. Ця 24-байтна версія працює:

2é#á $á,JA bytes
vGî4é 

Оскільки він містить недрукований символ, ось читабельна версія:

2é#á $á,JA bytes
<esc>vGî4é<space>

Де <esc>буквальний характер втечі, наприклад 0x1B.


1
Це завжди здається постійною боротьбою між Джольфом і V ...: 3
Conor O'Brien

4

Python 3.5, 40 33 байт:

( -7 байт завдяки деяким уточненням від Mego )

lambda*f:'## %s, %s bytes\n\n\t%s'%f

Анонімна лямбда-функція, яка приймає введення як позиційні аргументи у форматі <function name>(String, Number, String)та виводить рядок з рядком.

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


2
Ви можете поголити кілька байтів, якщо складете список параметрів *fі відмовитеся від tupleвиклику.
Мего

@Mego На жаль, це не працює, тому що я отримую TypeError: not enough arguments for format stringкожного разу, коли я його так запускаю.
Р. Кап

Добре спрацьовує, коли я спробую це - вам потрібно брати позиційні аргументи замість аргументу списку. Крім того, ви можете скинути простір між #і %.
Мего

@ Mee Wow, це так дивно, бо коли я спробую це в PyCharm з Python 3.5.1, я отримую помилку. Це мене так збентежило. Також #потрібен простір між лямбдаю та лямбда, або я так думаю.
Р. Кап

@Mego Оновлено.
Р. Кап

4

JavaScript (ES6), 56 байт

(l,b,c)=>`## ${l}, ${b} bytes

`+c.replace(/^/gm,`    `)

Також для сміху ось відповідь, яка для мене формується:

JavaScript (ES6), 68 байт

f=_=>`## JavaScript (ES6), ${`${f}`.length+3} bytes\n\n    f=${f};`;

Роздрукуйте результат f().


@PatrickRoberts На жаль, я не перевіряв довжину, я просто скопіював і вставив її, а потім додав 6 байт для (ES6). (Чому Cᴏɴᴏʀ O'Bʀɪᴇɴ тільки намагався змінити довжину?)
Ніл

4

C #, 40 38 байт

(a,b,c)=>$"## {a}, {b} bytes\n\n\t"+c;

C # лямбда, де введення та вихід - це рядки.


C #, 59 байт

(a,b,c)=>$"## {a}, {b} bytes\n\n\t"+c.Replace("\n","\n\t");

З обробкою багаторядкової відповіді.


C #, 71 байт

Рішення на 38 байт, яке друкує саме себе

()=>$"## C#, 38 bytes\n\n\t"+@"(a,b,c)=>$""## {a}, {b} bytes

\t""+c;";

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


3

Математика, 40 байт

Print["## ",#,", ",#2,"bytes

    ",#3]&

Анонімна функція. Приймає мову, кількість байтів і програмує як вхід і друкує тіло для STDOUT.


2

Джольф, 24 22 байти

"## ¦i, ¦j Ξ/u3

    ¦

Тут не так багато пояснювати. ¦означає інтерпольований вхід.

Спробуйте тут! Вихідні дані для введення посилання:

## Jolf, 24 bytes

    some filler code I think

Введення:

name

number

"code"

1

MATL , 28 27 байт

1 байт збережено завдяки пропозиції @ NinjaBearMoneky

35tOj', 'j' bytes'10t4Z"j&h

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

Блок коду повинен бути в одному рядку.

Пояснення

35t           % Push 35 (ASCII for '#') twice
0             % Push 0. When converted to char, it will be displayed as a space
j             % Input string (language name)
', '          % Push this string
j             % Input string (byte count)
' bytes'      % Push this string
10t           % Push 10 (ASCII for linefeed) twice
4Z"           % Push string containing four spaces
j             % Input string (code)
&h            % Concatenate everything into a string. Implicitly display

0

Лист звичайний, 57 байт

(lambda(L b c)(format()"## ~A, ~A bytes~%~%    ~A"L b c))

Також для розваги тут нижче фрагмент коду, який друкує заголовок для себе.

Лист звичайний, 146 байт

#1=(PROGN
(SETF *PRINT-CIRCLE* T)
(LET ((S (FORMAT NIL "~S" '#1#)))
  (FORMAT NIL "## Common Lisp, ~A bytes~%~%    ~A" (LENGTH S) S)))


0

хешмап , 29 байт.

"## "i", "h" bytes.\n\n    "i

(Я написав цю публікацію з програмою, але мені довелося вийти \ n у \\ n)
Пояснення:

"## "                         Push string
     i", "                    Push input and string
          h" bytes.\n\n    "i Push input as number and string, then the input.

0

CJam , 26 23 байт

Дякуємо @NinjaBearMonkey за видалення 3-х байт!

'#_Sl',Sl" bytes"N_S4*l

Блок коду повинен бути в одному рядку.

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

Пояснення

'#_S       e# Push character "#" twice, then a space
l          e# Read line from input
',S        e# Push a comma, then a space
l          e# Read line from input
" bytes"   e# Push this string
N_S4*      e# Push newline twice, then four spaces
l          e# Read line from input. Implicitly display 

23 байти:'#_Sl',Sl" bytes"N_S4*l
NinjaBearMonkey

@NinjaBearMonkey Дякую! Відредаговано. Ця ідея врятувала байт і для моєї іншої відповіді
Луїс Мендо

0

Пайк, 25 байт

"##"Q", "z" bytes"skd4*z+

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

Або

Пайк, 0 байт

Спробуйте тут! - натисніть кнопку копіювання відповіді;)

EDIT - Це лише особливість веб-сайту, це обман (або, принаймні, я вважаю це так), оскільки він ніколи не розбирає AST, і веб-програма, ймовірно, не вважається частиною мови через те, що вона не взаємодіє з мовою сильно (навіть якщо він працює інтерпретатором Pyke)


Що робить версію 0 байт?
haykam

Чи можете ви додати це до відповіді? Я не рахую цього, але ви все одно можете тримати його там.
haykam

Гей, @muddyfish, ти можеш розділити їх на дві відповіді?
хайкам

@haykam, якщо це для того, щоб прийняти відповідь, я вважаю за краще не так, як я не думаю, що байтове рішення на 0 байтів вважається фактично використанням Pyke і вважає себе занадто шаленим
Blue

Я не прийму цієї відповіді.
хайкам

0

Perl 5, 35 байт

Повна програма, це приймає дані як аргументи командного рядка у зворотному порядку. Це вимагає -M5.01, що безкоштовно.

say pop.', '.pop.' bytes

    '.pop

0

Emacs Lisp, 97 байт

(lambda(l c)(format"## %s, %s bytes\n\n%s"l(string-bytes c)(replace-regexp-in-string"^""    "c)))

Крім того, оскільки іноді буває важко уникнути цитат, а що ні, - приклад використання, який копіює рядок у буфер обміну. (Позначити регіон та використовувати M-:)

Emacs Lisp, 184 байти

(kill-new ((lambda(l c)(format"## %s, %s bytes\n\n%s"l(string-bytes c)(replace-regexp-in-string"^""    "c)))"Emacs Lisp"(buffer-substring-no-properties(region-beginning)(region-end))))
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.