게으른 코드 골프


10

이 코드 골프에서 당신의 목표는 두 개의 문자열을하는 것입니다, language그리고 code (이에 대해 쓴 golfed 코드가 여러 인 경우,이 변수는 여러 될 것입니다.) , 하나 개의 정수 bytes. 프로그래밍 언어의 변수, 사용하는 바이트 수 및 코드 자체를 나타냅니다.

그 후에는 코드 골퍼처럼 형식을 지정합니다.

출력 변수는이라고하는 여러 줄 문자열 answer입니다.

여러 줄 문자열을 사용할 수 있습니다 :

Stack Overflow 를 검색 하면이를 지원하는 더 많은 프로그래밍 언어를 찾을 수 있습니다.

다음은 출력 마크 다운 템플릿입니다. code변수는 코드 블록에 있고, 두 번째 레벨의 헤더가있다.

## {language}, {bytes} bytes

     {code}

다음은 마크 다운 파서에 붙여 넣을 때의 결과입니다.

{언어}, {바이트} 바이트

    {code}

변수는 코드 골프 항목을 코딩 한 언어, 소요되는 바이트 수 및 실제 코드로 이미 채워져있는 것으로 가정합니다.

다음은 코드로 출력의 또 다른 예입니다. 이번에는 변수가 채워져 있습니다.

## JavaScript, 1337 bytes

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

다음은 블록 인용 버전입니다.

자바 스크립트, 1337 바이트

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

다음 자바 스크립트 코드와 같이 <p>id로 HTML 요소 의 텍스트를 설정하는 방법을 사용하면 코드에서 바이트를 제거 할 수 있습니다 result.

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

JSFiddle<p id="result"></p> 의 HTML 섹션 에도이 기능 을 포함 시키십시오 .

채점

모든 질문 과 마찬가지로 가장 적은 양의 바이트를 사용하는 코드가 가장 좋습니다.


3
{code}지금까지 여러 줄의 코드를 수?
Adnan

8
"코드 골프 항목을 코딩 한 언어, 소요되는 바이트 수 및 실제 코드로 변수가 채워집니다." 이것을 킨 변형으로 해석하는 유일한 사람입니까?
primo

2
답이 완전히 다른 두 가지 문제를 해결하고 있기 때문에 이것을 불명확하게 유지하고 있습니다. 명확히 여부하십시오 language, bytescode입력하거나 여부입니다 quine의 그 일이 해결 코드 자체를 일치해야 변형. (그렇다면 소스 코드를 직접 또는 간접적으로 읽을 수 있는지, 퀴인 내장이 허용되는지 여부)
Martin Ender

2
입력 code자체에 줄 바꿈이 포함될 수 있는지에 대한 Adnan의 질문을 명확하게 설명해 주 시겠습니까?
마틴 엔더

2
@Peanut 혼란 스러워요. 여러 줄 code이 아니라고 가정 할 수 있습니까 ? 도전 과제 텍스트
Luis Mendo

답변:



8

자바, 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]);}}

모 놀리 식은 독립형 프로그램과 마찬가지로 가정하여 명령 행 인수와 함께 작동합니다.

  • 첫 번째 인수는 언어 이름입니다
  • 두 번째 인수는 바이트 수입니다
  • 세 번째 주장은 코드입니다

자바 (람다 식), 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

@ R.Kap 공백 대신 탭을 사용하면 SE에 혼란이 생길 ​​수 있습니다.
user8397947

아, 알겠습니다 그렇다면 바이트 수는 \t4 칸이 아닌 고려 됩니까?
R. Kap

3
람다에서 파 렌스를 잃으십시오. 당신은 단지 2 바이트를 저장할 수 있습니다 b->.
Brian McCutchon

2
두 줄 이상의 코드가 있으면 어떻게됩니까?
Neil

5

V , 24 바이트

끝에는 후행 공백이 있습니다.

이 프로그램은 {code}여러 줄에 있지 않을 것이라고 가정합니다 .

Op는 "코드"가 여러 줄 문자열 일 수 있음을 분명히했습니다. 이 24 바이트 버전은 작동합니다.

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

여기에는 인쇄 할 수없는 문자가 포함되어 있으므로 읽을 수있는 버전은 다음과 같습니다.

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

<esc>리터럴 이스케이프 문자는 어디에 있습니까 0x1B?


1
그것은 항상 Jolf와 V 사이의 끊임없는 투쟁처럼 보입니다 ... : 3
Conor O'Brien

4

Python 3.5, 40 33 바이트 :

( Mego의 일부 설명 덕분에 -7 바이트 )

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

형식에서 위치 인수로 입력을 받아서 여러 <function name>(String, Number, String)줄 문자열을 출력 하는 익명 람다 함수입니다 .

온라인으로 사용해보십시오! (아이디어)


2
매개 변수 목록을 작성 *f하고 tuple호출을 삭제 하면 몇 바이트를 줄일 수 있습니다 .
Mego

@Mego 불행히도, TypeError: not enough arguments for format string내가 그렇게 실행할 때마다 작동하지 않습니다 .
R. Kap

내가 시도 할 때 잘 작동합니다 . 목록 인수 대신 위치 인수를 취해야합니다. 또한, 당신은 사이의 공간 놓을 수 #와를 %.
Mego

@ Mego 와우, 그것은 너무 이상합니다 .PyCharm에서 Python 3.5.1로 시도하면 오류가 발생하기 때문입니다. 그것은 나를 너무나 혼란스럽게했다. 또한 #람다 사이의 공간 이 필요하므로 그렇게 생각합니다.
R. Kap

@Mego 업데이트되었습니다.
R. Kap

4

자바 스크립트 (ES6), 56 바이트

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

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

또한 웃음을 위해, 나를 위해 형식화하는 대답이 있습니다.

자바 스크립트 (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 # 람다


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

줄프, 24 22 바이트

"## ¦i, ¦j Ξ/u3

    ¦

여기서 설명 할 것이 많지 않습니다. ¦보간 된 입력을 의미합니다.

여기 사용해보십시오! 링크의 입력에 대한 출력은 다음과 같습니다.

## Jolf, 24 bytes

    some filler code I think

입력은 다음과 같습니다

name

number

"code"

1

MATL , 28 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

공통 리스프, 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 바이트

3 바이트를 제거해 주신 @NinjaBearMonkey에게 감사드립니다!

'#_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 감사합니다! 편집했습니다. 내 다른 대답 바이트도 저장이 아이디어
루이스 Mendo

0

파이크, 25 바이트

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

여기 사용해보십시오!

또는

파이크, 0 바이트

여기 사용해보십시오! -답변 복사 버튼을 클릭하십시오.)

편집 -그것은 웹 사이트의 기능 일뿐입니다 .AST를 구문 분석하지 않으며 웹 프로그램이 언어와 많이 상호 작용하지 않기 때문에 웹 프로그램이 언어의 일부로 간주되지 않기 때문에 부정 행위 (또는 적어도 그렇게 생각할 것입니다) (Pyke 인터프리터를 실행하더라도)


0 바이트 버전이 작동하는 이유는 무엇입니까?
haykam

답변에 추가 할 수 있습니까? 나는 그것을 세지 않고 있지만 여전히 거기에 유지할 수 있습니다.
haykam

안녕 @muddyfish, 당신은 두 답변으로 분리 할 수 ​​있습니까?
haykam

@haykam 만약 이것이 답을 받아 들일 목적이라면, 0 바이트 솔루션이 실제로 파이크를 사용하는 것으로 생각하지 않고 너무 가슴이 think다고 생각하지 않을 것입니다.
Blue

나는 그 대답을 받아들이지 않을 것이다.
haykam

0

펄 5, 35 바이트

전체 프로그램은 입력을 명령 행 인수로 역순으로받습니다. 이 (가) 필요 -M5.01하며 무료입니다.

say pop.', '.pop.' bytes

    '.pop

0

이맥스 리스프, 97 바이트

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

또한 따옴표를 피하기 어려울 수도 있고 그렇지 않을 수도 있으므로 문자열을 클립 보드에 복사하는 사용 예입니다. (지역 표시 및 사용M-: )

이맥스 리스프, 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))))
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.