Anti-golfscript anti-golf: создайте задание, в котором GolfScript или J превзойдены вашим (обычным) языком [закрыто]


29

Вам нужно сделать три вещи:

  1. Постановка задачи, т .
  2. Решение задачи на языке обычно не используется для игры в гольф, A .
  3. Решение задачи на языке обычно используется для игры в гольф, B . Не пытайтесь просто раздуть B, чтобы накачать счет, вместо этого думайте, как будто B был написан вашим конкурентом.

Используйте здравый смысл в определении typically used for golfing, старайтесь максимально развлечь других пользователей.

Другие пользователи могут предложить лучшие Bs (может быть, в том числе на других языках "гольф").

Скоринг есть (length_in_bytes(B)+5)/(length_in_bytes(A)+5), чем больше, тем лучше. (Может быть, формула оценки должна быть изменена? ..)

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

Избегайте задач, которые упоминают конкретные языки программирования, например Input a string and execute it as a Scheme code.


1
Я полагаю, что вы делаете это соревнованием популярности вместо игры в гольф. В противном случае люди будут жаловаться, что это не «кратчайший выигрыш».
Виктор Стафуса

ОК, переход на конкурс популярности. Вы также можете предложить лучший титул или лучший результат.
Ви.

Я предполагаю, что мой предыдущий вопрос отвечает требованиям? codegolf.stackexchange.com/questions/18633/… Perl-решение - 48 символов, а J-решение - 54
символа

1
Нужно ли указывать lang B (если он хорош в гольфе)? Или кто-нибудь может сказать: «Вот программа на языке <insert language name>, и у нее очень короткое решение длины <n>:»?
Джастин

1
Кстати, некоторые языки, такие как Perl, могут быть как на стороне A, так и на стороне B, в зависимости от контекста.
Ви.

Ответы:


14

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

В соответствии с требованиями Vi. Я опубликую краткое изложение вопроса.

Напечатайте непрерывную синусоидальную волну, прокручивая вертикально на терминале. Программа не должна завершаться и должна непрерывно прокручивать волну вниз (кроме как до SIGINT). Вы можете предположить, что переполнение не является проблемой (то есть вы можете использовать бесконечные циклы с увеличивающимися счетчиками или бесконечную рекурсию).

Волна должна удовлетворять следующим свойствам:

  • Амплитуда = 20 символов (пиковая амплитуда)
  • Период = от 60 до 65 строк (включительно)
  • Вывод должен состоять только из пробелов, новой строки и |
  • После каждой строки вывода, пауза на 50 мс

На моем первоначальном вопросе есть пример вывода, но я не буду публиковать его здесь, потому что это сделает мой ответ до смешного длинным. Мой оригинальный вопрос можно увидеть здесь: Распечатать синусоидальную волну (вертикально)

Самый короткий на Aданный момент: Perl-решение с 48 символами: https://codegolf.stackexchange.com/a/18655/12205

print$"x(25+20*sin).'|
';$_+=.1;`sleep .05`;do$0

Самый короткий в Bнастоящее время: решение J с 54 символами: https://codegolf.stackexchange.com/a/18649/12205

($:+&0.1[6!:3@]&0.05[2:1!:2~' |'#~1,~[:<.20*1+1&o.)0  




В настоящее время оценка этого ответа составляет 1,113 (очень низкий балл)


Текущий счет по текущей формуле составляет примерно 1,113
Vi.

@Vi. я должен удалить этот ответ или я должен подождать некоторое время и посмотреть, что произойдет? Если последнее, как долго мне ждать?
user12205

В заявлении указываются байты, а не символы. Преобразованный в UTL-8, решение APL составило 61 байт (70 для UTF-16).
Ви.

2
Вы утверждаете, что Perl не является языком, обычно используемым для игры в гольф, но это язык, который впервые ассоциировался со словом гольф ! Руби, 56 лет, выглядит как настоящий язык А в текущих ответах на ваши вопросы.
Питер Тейлор

8

Добавьте два числа

Получить два числа из STDIN и сложить их вместе. Вы должны поддерживать числа с плавающей запятой, поэтому 0,5 + 1,5 должно равняться 2.

Perl 5 (с -E)

say<>+<>

GolfScript

n%'+'*'"#{
}"'n/\*~

Расчетный балл как (24+5)/(8+2+5) = 1.9(3). -Eтакже считается как программные байты.
Ви.

Тот же комментарий, что и я к тузу: вы утверждаете, что Perl не является языком, обычно используемым для игры в гольф, но это язык, который впервые ассоциировался со словом гольф !
Питер Тейлор

И ваша программа GolfScript не работает. В рабочей программе n%'+'*'"#{ }"'n/\*~символ между ними {}является буквальным символом новой строки (не поддерживается в комментариях).
Питер Тейлор

@PeterTaylor, по сравнению с GolfScript, Perl - «обычный» язык; по сравнению с Java это язык "гольфа".
Ви.

1
J для этого не так уж плохо, на самом деле: +/".1!:1,~1. APL, вероятно, будет еще меньше.
алгоритмическая

8

Распечатать «Привет, мир!» на стандартный выход.

PHP, 13 байт

Hello, World!

Golfscript, 15 байтов

'Hello, World!'

Pyth, 14 байт

"Hello, World!

3
Красиво актуально. :)
AdmBorkBork

2
Новый B: В HQ9 +H
Не то, что Чарльз

2
Но оно написано неправильно, @NotthatCharles
georgeunix

1
@georgeunix Хороший вопрос. Вы написали заглавную букву "W".
Не то, чтобы Чарльз

7

Оценка 48/37 или 1. (297)

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

A: Java (32)

Thread.sleep(3600000);int a=1/0;

B: для Befunge 98, требуется отпечаток ВРЕМЕНИ (43)

"EMIT"4(HMS00p01p02p#;gS-!01gM-!H-!++3-!j;@

Это берет Hour, Minute и Second во время выполнения и помещает в ячейки 02, 01 и 00. Затем он пропускает во ;вторую часть. Вторая часть работает следующим образом:

g          get the value at 00
"EMIT"4(S) get the current time in seconds
-!         subtracts the values and changes a 0 to 1, anything else to 0

аналогично для минуты и часа.

++  sums up the values
3-! i the sum is 3, we get a 1, otherwise, we get a 0.
j   jump over the next that many cells
;   skip code execution until the next ;
@   end program

Обратите внимание, что Befunge автоматически вернется к началу строки, когда будет достигнут конец строки.


Как мы видим, Befunge не очень хорош в ожидании определенного времени. Тем не менее, Java не плохая.


9
APL:⎕DL 3600
Маринус

14
Ява обычно читается как class Main{public static void main...
Vi.

3
@Vi. см. «фрагмент кода». По сути, для этого требуется код, который действительно выполняет свою работу, не более того.
Джастин

2
Я не знаю Befunge, но фрагмент кода Java не «завершает программу», как того требует спецификация. Это потребует System.exit(0);или обернуть ваш сон в mainметоде.
Питер Тейлор

3
@DoorknobofSnow Не в состоянии компилировать:error: not a statement
Боб

5

Вывести определенный текстовый файл (498,388888 баллов)

Вывод цели здесь .

Скрипт Python 3.4.3 для печати занимает 49 байт:

for b in dir(__builtins__):print(eval(b).__doc__)

Наивная программа CJam, равная выходному значению цели, путем оборачивания выходной строки "..."и экранирования каждой, "которая в ней встречается, будет иметь размер 26908 байт.


Очень умный, хотя он может идти вразрез с ограничением «определенных языков» (которое, по общему признанию, расплывчато).
BMac

Наиболее близким правилом является «избегать упоминания конкретного языка». Python не упоминается, но имеет в виду.
Ви.

Да, этот ответ немного насмешливый, я просто хотел отметить, что правило - это скользкий путь. Представьте, что если бы я "искажал" вывод больше - скажем, принимая контрольную сумму SHA1 каждой строки документа - было бы очень странно утверждать, что "эта искаженная куча шестнадцатеричных цифр слишком специфична для языка" :)
Линн

Если бы я хотел сделать более «честный» ответ, я бы, вероятно, использовал Mathematica. В нем вы можете сделать много очень специфичных для предмета вещей, которые будут занимать тысячи байтов CJam / Pyth / что-либо еще. Но, к сожалению, я не знаю языка.
Линн

Ссылка на вывод не работает.
pppery

4

Скажи "Привет, мир!" (50/26 ≈ 1,92)

Покажите окно сообщения, чтобы сказать «Привет, мир!»

JavaScript

alert('Hello world!')

В браузере с поддержкой DOM Level 0+.

Perl

use Win32;Win32::MsgBox('Hello world!','',48)

Запуск на ActivePerl с Win32 :: GUI.


alertне является неотъемлемой частью JS, а программа GolfScript - это просто комментарий.
Питер Тейлор

Я изменил ответ, чтобы использовать простой Perl.
Зубная щетка

3

Вывод "Привет, мир!" пока пользователь не нажмет "q", 1.842 105/44 = 2.386

  1. Распечатать "Привет, мир!" (включая перевод строки).
  2. Пользователь нажимает клавишу, которая не отображается на экране.
  3. Повторяйте, пока нажатая клавиша не будет «q».

QBasic ( 52 39 символов)

1?"Hello world!":IF"q"<>INPUT$(1)THEN 1

После публикации моего исходного ответа я обнаружил, что могу отключить автоформатирование в QB64. : ^ D С номером строки и ?ярлыком дляPRINT , это выглядит скорее как троичное выражение в C-подобных языках.

Первая версия:

PRINT "Hello world!"
IF INPUT$(1) <> "q" THEN RUN

Perl 5 (100 символов)

while("q"ne$e){print"Hello world!\n";system"stty cbreak -echo";$e=getc;system"stty -cbreak echo";}

Вышеуказанное будет работать только на (определенных?) Системах UNIX (протестировано в Ubuntu 12.04). Возможно, что можно использовать кроссплатформенность и уменьшить его до 91 символа с помощью модуля Term :: ReadKey , но я не проверял это:

use Term::ReadKey;while("q"ne$e){print"Hello world!\n";ReadMode 3;$e=ReadKey 0;ReadMode 0;}

1

Привет, мир (3 1/3 балла)

Напишите программу, которая выводит Hello World..

HQ9 + (1 символ)

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

H

GolfScript (15 символов)

Я сомневаюсь, что он может стать короче, даже если это GolfScript.

"Hello World."

8
Я не думаю , что HQ9+костюмы как A языке. Он предназначен для трюков / загадок / веселья. Brainfuck / unlambda / другие эзотерических языки также , кажется, не костюм как А .
Ви.

@Vi .: Но это обычно не используется для игры в гольф.
Конрад Боровски

4
Вы можете попытаться использовать его HQ9+как язык B и превзойти его с помощью Java или другого ...
Vi.

7
Похоже, что есть иерархия: по сравнению с Java, Perl - это гольф. По сравнению с Perl, GolfScript - это гольф. По сравнению с GolfScript, HQ9 + - это гольф-поле ...
Vi.

@Vi .: Я тщательно проверил описание твоей задачи. HQ9 + никогда не используется для игры в гольф, за исключением двух конкретных задач - «99 бутылок» и «Привет, мир». Если вы не можете показать какую-то другую задачу, в которой HQ9 + побеждает с любым другим языком программирования, я все равно думаю, что он соответствует определению, даже если он злоупотребляет им (эй, это - конкурс популярности ). HQ9 + просто не используется для игры в гольф, не связанной с этими двумя задачами. Таким образом, он обычно не используется для игры в гольф. Второй явно предназначен для CodeGolf - это GolfScript.
Конрад Боровски

0

Выведите «Hello world!», 33/97 = 2,94

Напишите программу, которая выводит Hello world!

Arduino или GML

Serial.print("Hello world!")

или

show_message("Hello world!")

Оба - 28 персонажей.

GTB

Я часто использую GTB для игры в гольф (особенно после того, как я создал его сам, и он завершен по Тьюрингу). К сожалению, поддержка строчных букв ограничена (потому что калькулятор TI-84 не может справиться с этим). Это, вероятно, самая короткая GTB-программа, которая может выводить Hello world!

S;"lower",1,1)→_~"H"+S;"expr(",1,1)+_+_+S;"cos(",2,1)+" W"+S;" or ",2,2)+_+S;" and ",4,1)+"!

92 персонажа.


Версия GTB также выводит это на последовательный порт?
Ви.

Является ли версия GTB преднамеренно раздутой от различных coss, exprsили она не может просто выводить что-то обычным способом? Или "персонаж на самом деле не является строковым литералом и сбивает меня с толку ...
Ви.

@Vi. Он совсем не раздут ... он должен убрать e из выражения expr, два l из нижнего, o из cos или из или, l из нижнего и d из и.
Timtech

«Другие пользователи могут предложить лучшие Bs (возможно, в том числе и на других« гольфовых »языках). Позвольте мне попробовать"Hello world!"
Джон Дворжак

@JanDvorak Вы, наверное, правы.
Timtech
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.