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)чим краще, тим краще. (Можливо, формулу оцінювання слід змінити? ..)

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

Уникайте завдань, які згадують конкретні мови програмування, наприклад Input a string and execute it as a Scheme code.


1
Я припускаю, що ви робите це змагання популярності замість коду-гольфу. Інакше люди будуть скаржитися, що це не "найкоротший код-виграш".
Віктор Стафуса

Гаразд, перехід на популярність-конкурс. Ви також можете запропонувати кращий титул або кращий рахунок.
Ві.

Я припускаю, що попереднє запитання відповідає вимогам? codegolf.stackexchange.com/questions/18633/… Рішення perl становить 48 знаків, тоді як рішення J - 54 символи
user12205

1
Чи можемо ми вказати язик B (якщо це добре в гольфі)? Або хтось може сказати: "ось програма мовою <вставте назву мови> і вона має дуже коротке рішення довжиною <n>:"?
Джастін

1
BTW деякі мови, як Perl, можуть бути як на стороні A, так і на B, залежно від контексту.
Ві.

Відповіді:


14

Моє попереднє запитання «Друк синусоїдальної хвилі (по вертикалі)» кваліфікується в цей момент. Я розміщую це тут як рішення, також сподіваюся, що ви, хлопці, зможете придумати кілька коротших варіантів мого оригінального питання.

Як вимагає Ві., Я опублікую короткий виклад питання.

Друкуйте безперервну синусоїдальну хвилю, що прокручується вертикально на терміналі. Програма не повинна припинятися і повинна постійно прокручувати хвилю вниз (за винятком 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. я повинен видалити цю відповідь чи варто почекати деякий час і подивитися, що станеться? Якщо останній, як довго я повинен чекати?
користувач12205

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

2
Ви стверджуєте, що Perl не є мовою, яка зазвичай використовується для гольфу, але це мова, яка вперше була пов'язана зі словом golf ! Рубі, у віці 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 не є мовою, яка зазвичай використовується для гольфу, але це мова, яка вперше була пов'язана зі словом golf !
Пітер Тейлор

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

@PeterTaylor, порівняно з GolfScript, Perl - це "звичайна" мова; порівняно з Java, це "гольф" мова.
Ві.

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

8

Друк "Привіт, світ!" до stdout.

PHP, 13 байт

Hello, World!

Гольфскрипт, 15 байт

'Hello, World!'

Піт, 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, потрібен відбиток часу TIME (43)

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

Це займає Час, Хвилину та Друге під час бігу, і ставить на осередки 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
marinus

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 кожної docstring - було б дуже дивно стверджувати, що "ця шарова купка шістнадцяткових цифр занадто мовна" :)
Lynn

Якби я хотів зробити більш "справедливу" відповідь, я, мабуть, скористався б Mathematica. Ви можете зробити багато надзвичайно доменних речей, які займуть тисячі байтів CJam / Pyth / будь-що інше. Але, на жаль, я не знаю мови.
Лінн

Посилання на вихід мертве.
pppery

4

Скажи "Здрастуй, світ!" (50/26 ≈ 1,92)

Покажіть вікно повідомлень, щоб сказати "Привіт, світ!"

JavaScript

alert('Hello world!')

У браузері з підтримкою рівня DOM 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цього це схоже на потрійний вираз у мовах, подібних С.

Перша версія:

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
Ви можете hovewer спробувати використовувати в HQ9+якості B мови і бити його по Java або такий ...
Vi.

7
Схоже, існує ієрархія: Perl - це гольфланг. Порівняно з Perl, GolfScript - це гольфланг. Порівняно з GolfScript, HQ9 + - це гольфланг ...
Vi.

@Vi .: Я уважно перевірив опис вашого завдання. HQ9 + ніколи не використовується для гри в гольф, крім двох конкретних завдань - "99 пляшок" та "Привіт, світ". Якщо ви не зможете показати якесь інше завдання, в якому HQ9 + перемагає з будь-якою іншою мовою програмування, я все-таки думаю, що вона відповідає визначенню, навіть якщо вона зловживає цим (ей, це популярність-змагання ). HQ9 + просто не використовується для гри в гольф, не пов'язаного з цими двома завданнями. Отже, він зазвичай не використовується для гольфу. Другий, очевидно, призначений для CodeGolf - це GolfScript.
Конрад Боровський

0

Вихід "Привіт, світ!", 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

"Інші користувачі можуть запропонувати кращі пропозиції (можливо, включно з іншими" гофрованими "мовами). '--- дозвольте спробувати гольфскрипт:"Hello world!"
Джон Дворак

@JanDvorak Ви, мабуть, праві.
Тімтех
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.