懒人打码高尔夫


10

你在这个代码高尔夫的目标是把两个字符串,language并且code (如果你这个写的golfed代码为多,那么这个变量将是多),和一个整数bytes。它们表示编程语言的变量,占用的字节数以及代码本身。

之后,您将像打高尔夫球的人一样格式化它。

输出变量是称为的多行字符串answer

您可以在以下位置使用多行字符串:

如果搜索Stack Overflow,则应该能够找到更多支持它的编程语言。

这是输出减价的模板。该code变量在代码块中,并且具有第二级标头。

## {language}, {bytes} bytes

     {code}

这是粘贴到Markdown解析器中后的输出结果。

{language},{bytes}个字节

    {code}

假定变量已经作为您在代码高尔夫代码中输入的语言,其占用的字节数以及实际代码进行了填写。

这是代码输出的另一个示例,这次填充了变量:

## JavaScript, 1337 bytes

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

这是版本的块引用:

JavaScript,1337字节

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

如果您使用一种<p>通过id 设置HTML中元素文本的方法,则可以从代码中删除字节result,例如以下JavaScript代码:

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

确保<p id="result"></p>JSFiddle的HTML部分中也包含,这样才能起作用。

计分

像所有的问题一样,使用最少字节数的代码也是最好的。


3
{code}成为多行代码吗?
阿德南

8
“变量将作为您在代码高尔夫项目中输入的语言,所占用的字节数以及实际代码进行填写。” 我是唯一将这解释为五花八门的变化形式的人吗?
primo

2
由于答案正在解决两个完全不同的问题,因此我将其搁置为不清楚。请说明是否输入了languagebytes并且code是输入,或者这是quine变体,其中这些内容应与求解代码本身匹配。(如果是这样,则允许直接还是间接读取该源代码,以及是否允许使用quine内置。)
Martin Ender

2
您能否也澄清一下Adnan的问题,即输入code本身是否可以包含换行符?
Martin Ender

2
@花生我很困惑。我们可以假设code不是多行吗?请在挑战文本中注明
路易斯·门多

Answers:



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(lambda表达式),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 2016年

@ R.Kap有时使用制表符代替空格会在SE上造成混乱。
user8397947'7

知道了 那么是否考虑字节数\t而不是4个空格?
R. Kap

3
在lambda上丢掉父母;您可以使用just保存两个字节b->
Brian McCutchon '16

2
如果代码多于一行会怎样?
尼尔

5

V,24字节

请注意,末尾有尾随空格。

该程序做出的假设{code}不会出现在多行上。

Op已阐明,“代码”可能是多行字符串。此24字节版本适用:

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

由于其中包含不可打印的字符,因此以下是可读版本:

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

<esc>文字转义字符在哪里,例如0x1B


1
:3
Conor O'Brien

4

蟒3.5,40 33个字节:

-7个字节,感谢Mego的澄清

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

匿名lambda函数,将输入作为格式的位置参数<function name>(String, Number, String)并输出多行字符串。

在线试用!(爱迪生)


2
如果创建参数列表*f并删除tuple呼叫,则可以删除几个字节。
Mego

@Mego不幸的是,这是行不通的,因为我TypeError: not enough arguments for format string每次运行它都会得到。
R. Kap

当我尝试时效果很好 -您必须采用位置参数而不是列表参数。此外,您可以在#和之间删除空格%
Mego

@Mego Wow,这太奇怪了,因为当我在PyCharm中使用Python 3.5.1尝试时,出现错误。那让我非常困惑。另外,#我和Lambda 之间需要有空间。
R. Kap

@Mego已更新。
R. Kap

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ʀɪᴇɴ只管去改变长度?)
Neil

4

C#,40 38字节

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

C#lambda,其中输入和输出是字符串。


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

Mathematica,40个字节

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

    ",#3]&

匿名函数。将语言,字节数和程序作为输入,并将正文打印到STDOUT。


2

Jolf,24个 22字节

"## ¦i, ¦j Ξ/u3

    ¦

这里没有太多解释。¦表示插值输入。

在这里尝试!链接中输入的输出为:

## Jolf, 24 bytes

    some filler code I think

输入为:

name

number

"code"

1

MATL28 27字节

感谢@NinjaBearMoneky的建议,节省了1个字节

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

Common Lisp,57个字节

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

同样,为了好玩,下面是一段代码,该代码为自己打印了一个标题。

普通Lisp,146个字节

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


0

hashmap,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

CJam26 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 '16

@NinjaBearMonkey谢谢!编辑。这个想法也为我的其他答案节省了一个字节
路易斯·门多

0

Pyke,25个字节

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

在这里尝试!

要么

Pyke,0个字节

在这里尝试!-单击复制答案按钮;)

编辑 -这只是网站的功能,它在作弊(或者至少我会这样认为),因为它从未解析AST,并且由于与网络语言的交互性不强,该网络程序可能不被视为语言的一部分(即使它正在运行Pyke解释器)


是什么让0字节版本起作用?
haykam'7

您可以将其添加到答案中吗?我没有在数,但您仍然可以将其保留在那。
haykam'7

嘿@muddyfish,您能将它们分为两个答案吗?
haykam '17

@haykam如果这是为了接受答案,我宁愿不要这样做,因为我认为0字节解决方案不算是实际使用Pyke,并且感觉太过随心所欲
Blue

我不会接受这个答案。
haykam

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))))
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.