反golfscript反golf:创建一个任务,其中GolfScript或J被您的(常规)lang超越。


29

您需要做三件事:

  1. 一个任务,声明牛逼
  2. 用通常不用于打高尔夫球的语言A解决任务。
  3. 用通常用于打高尔夫球的语言B解决任务。不要试图夸大B来提高得分,而要想像B是您的竞争对手写的。

使用常识来定义typically used for golfing,尝试为其他用户带来最大的乐趣。

其他用户可能会提出更好B的建议(可能包括其他“古怪”语言)。

得分(length_in_bytes(B)+5)/(length_in_bytes(A)+5)越高,越好。(也许应该更改得分公式?。)

主要思想是发明一项任务,使通常在代码高尔夫中表现良好的语言遇到问题。在给定任务中,可能是常用语言的突然强项,也可能是某些golflang的突然弱项。

避免使用提及特定编程语言的任务,例如Input a string and execute it as a Scheme code


1
我想您应该使它成为流行竞赛,而不是代码高尔夫球。否则,人们会抱怨这不是“最短代码胜利”。
Victor Stafusa 2014年

好的,改为人气竞赛。您还可以建议更好的头衔或更好的得分。
六。

我假设我之前的问题符合条件?codegolf.stackexchange.com/questions/18633/…perl解决方案为48个字符,而J解决方案为54个字符
user12205 2014年

1
我们是否可以指定lang B(只要它擅长打高尔夫球)?还是有人可以说“这里有一个语言<插入语言名称>的程序,它的长度<n>的解决方案很短:”?
贾斯汀

1
顺便说一句,根据上下文,某些语言(例如Perl)可以同时在A侧和B侧使用。
六。

Answers:


14

我的上一个问题(垂直打印正弦波)在这一刻符合条件。我将其发布在此处作为解决方案,也希望你们可以为我的原始问题提供一些简短的解决方案。

根据Vi。的要求,我将发布问题摘要。

打印在终端上垂直滚动的连续正弦波。程序不应终止,而应连续向下滚动波形(直到SIGINT除外)。您可能会认为溢出不是问题(即,您可以使用带有递增计数器的无限循环或无限递归)。

该波应满足以下特性:

  • 幅度= 20个字符(峰值幅度)
  • 期间= 60至65行(含)
  • 输出应仅包含空格,换行符和 |
  • 每行输出后,暂停50ms

我的原始问题有一个示例输出,但是我不在这里发布,因为这会使我的回答荒谬。我的原始问题可以在这里看到:垂直打印正弦波

A当前最短的:具有48个字符的Perl解决方案:https//codegolf.stackexchange.com/a/18655/12205

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

B当前最短的:具有54个字符的J解决方案: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 2014年

该语句声明字节,而不是字符。转换为UTL-8后,APL解决方案占用了61个字节(UTF-16为70个字节)。
六。

2
您声称Perl不是通常用于打高尔夫球的语言,但它是最早与golf这个词相关联的语言!现年56岁的Ruby在当前问题的答案中看起来像是真实的语言A。
彼得·泰勒

8

加两个数字

从STDIN中获得两个数字,并将它们加在一起。您必须支持浮点数,因此0.5 + 1.5必须等于2。

Perl 5(带有-E

say<>+<>

高尔夫脚本

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

计算得分为(24+5)/(8+2+5) = 1.9(3)-E也计为程序字节。
六。

与我对ace相同的评论:您声称Perl不是通常用于打高尔夫球的语言,但它是最早与golf单词相关的语言!
彼得·泰勒

而且您的GolfScript程序不起作用。一个工作程序就是n%'+'*'"#{ }"'n/\*~其中的字符{}是文字换行符的位置(注释中不支持)。
彼得·泰勒

@PeterTaylor,与GolfScript相比,Perl是一种“常用”语言;与Java相比,它是一种“高尔夫”语言。
六。

1
实际上,J不太差+/".1!:1,~1。APL可能会更小。
algorithmhark


7

得分48/37或1.(297)

T:编写一个代码段,在运行了一个小时(尽可能接近,例如在一秒钟内)后结束程序。不用担心异常,它们可以被处理。

答:Java(32)

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

B:用于Befunge 98,需要TIME指纹(43)

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

这将在运行时花费小时,分钟和秒,并将at置于单元格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 2014年

14
Java通常读为class Main{public static void main...
Vi。

3
@Vi。请参阅“代码段”。基本上,它需要实际完成工作的代码,仅此而已。
贾斯汀

2
我不知道Befunge,但是Java片段没有按规范要求“结束程序”。这将需要System.exit(0);或将您的睡眠包装在一种main方法中。
彼得·泰勒

3
@DoorknobofSnow无法编译:error: not a statement
Bob

5

输出一定的文本文件(498.388888点)

目标输出在这里

打印的Python 3.4.3脚本为49字节:

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

通过包装输出字符串"..."并转义"其中出现的每个字符串,等于目标输出的天真的CJam程序将为26908字节。


非常聪明,尽管它可能会违反“特定语言”的限制(诚然这是含糊的)。
BMac

最接近的规则是“避免提及特定语言”。没有提到Python,但是有明确的含义。
六。

是的,这个答案有点tongue舌,我只是想指出规则是滑溜溜的。试想一下,如果我对输出进行了更多的“混合”处理-例如,采用每个文档字符串的SHA1校验和-声称“这乱码的十六进制数字太特定于语言了”,将是很奇怪的:)
Lynn

如果我想做一个更“公平”的答案,我可能会使用Mathematica。您可以在其中做很多非常特定于域的事情,这将花费数千字节的CJam / Pyth /其他任何东西。但是可悲的是,我不懂这种语言。
林恩

链接到输出无效。
pppery

4

说“你好,世界!” (50/26≈1.92)

显示一个消息框,说“你好,世界!”

的JavaScript

alert('Hello world!')

在支持DOM Level 0+的浏览器中。

佩尔

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

使用Win32 :: GUI在ActivePerl上运行。


alert不是JS固有的一部分,GolfScript程序只是一个注释。
彼得·泰勒

我将答案更改为使用纯Perl。
牙刷

3

输出“ Hello world!” 直到用户按下“ q”,1.842 105/44 = 2.386

  1. 打印“ Hello world!” (包括换行符)。
  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上测试)。可能可以跨平台使用Term :: ReadKey模块将其降至91个字符,但我尚未对其进行测试:

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中/其他esoterical语言也似乎并不适合作为一个
六。

@Vi .:但是通常不用于打高尔夫球。
Konrad Borowski14年

4
你可以hovewer尝试使用HQ9+语言和Java或这样......打败它
六。

7
看起来好像有一个层次结构:与Java相比,Perl是golflang。与Perl相比,GolfScript是golflang。与GolfScript相比,HQ9 +是golflang ...
Vi。

@Vi .:我仔细检查了您的任务说明。HQ9 +从未用于打高尔夫球,除了两个特殊任务-“ 99瓶”和“ Hello,world”。除非您能展示出HQ9 +在任何其他编程语言中都能胜出的其他任务,否则我仍然认为它符合定义,即使它滥用了它(嘿,这是普及竞赛)。HQ9 +根本不用于与这两项任务无关的高尔夫球。因此,它通常不用于打高尔夫球。第二个显然是为CodeGolf设计的-它是GolfScript。
Konrad Borowski14年

0

输出“ Hello world!”,33/97 = 2.94

编写输出程序 Hello world!

Arduino或GML

Serial.print("Hello world!")

要么

show_message("Hello world!")

两者均为28个字符。

GTB

我经常使用GTB打高尔夫球(尤其是自从我自己创建高尔夫之后,就已经完成了图灵比赛)。不幸的是,对小写字符的支持有限(因为TI-84计算器无法处理)。这可能是可以输出Hello world的最短的GTB程序!

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。

@Vi。它根本没有膨胀……它必须从expr除去e,从较低的值除去2 l,从cos除去o,或者从or除去l,从and除去d。
Timtech

'其他用户可能会提出更好的B(可能包括其他“古怪”语言)。'---让我尝试golfscript:"Hello world!"
约翰·德沃夏克

@JanDvorak你可能是对的。
Timtech
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.