รหัสกอล์ฟสำหรับคนขี้เกียจ


10

เป้าหมายของคุณในการเล่นกอล์ฟรหัสนี้คือการรับสองสายlanguageและcode (หากรหัส golfed ที่คุณเขียนสำหรับการนี้คือ multiline ตัวแปรนี้จะเป็นแบบหลายบรรทัด)และจำนวนเต็มหนึ่งbytesตัว พวกเขาเป็นตัวแทนของตัวแปรสำหรับภาษาการเขียนโปรแกรมจำนวนไบต์ที่ใช้และรหัสตัวเอง

หลังจากนั้นคุณจะจัดรูปแบบเหมือนที่นักกอล์ฟทำ

answerตัวแปรที่ส่งออกเป็นสตริงหลายที่เรียกว่า

คุณสามารถใช้สตริงหลายบรรทัดบน:

หากคุณค้นหาStack Overflowคุณควรจะสามารถค้นหาภาษาการเขียนโปรแกรมเพิ่มเติมที่รองรับได้

นี่คือเทมเพลตของ markdown เอาต์พุต 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>องค์ประกอบใน HTML ด้วยรหัสresultเช่นรหัส JavaScript ต่อไปนี้:

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

ตรวจสอบให้แน่ใจว่าได้รวม<p id="result"></p>ในส่วน HTML ของJSFiddleเพื่อให้ทำงานได้

เกณฑ์การให้คะแนน

เช่นเดียวกับคำถามเกี่ยวกับรหัสที่ใช้จำนวนไบต์น้อยที่สุดจะดีที่สุด


3
จะ{code}เป็นรหัส multiline หรือไม่
Adnan

8
"ตัวแปรจะถูกกรอกเป็นภาษาที่คุณเขียนรหัสรายการกอล์ฟของคุณจำนวนไบต์ที่ใช้และรหัสจริงของมัน" ฉันเป็นคนเดียวที่ตีความสิ่งนี้ว่าเป็นรูปแบบ quine หรือไม่?
โม่

2
เนื่องจากคำตอบคือการแก้ปัญหาที่แตกต่างกันสองอย่างฉันจึงขอระงับเรื่องนี้อย่างชัดเจน กรุณาชี้แจงว่าlanguage, bytesและcodeมีการป้อนข้อมูลหรือไม่ว่านี้เป็นควินตัวแปรที่สิ่งเหล่านั้นควรจะตรงกับรหัสแก้ที่ตัวเอง (และถ้าเป็นเช่นนั้นไม่ว่าจะโดยตรงหรือโดยอ้อมที่อ่านรหัสที่มาที่ได้รับอนุญาตและไม่ว่าควินสร้างอินจะได้รับอนุญาต.)
มาร์ตินเอนเดอร์

2
คุณสามารถอธิบายคำถามของ Adnan ด้วยว่าอินพุตcodeสามารถมี linefeeds ได้หรือไม่
Martin Ender

2
@Peanut ฉันสับสน เราสามารถสมมติได้ว่าcodeจะไม่เป็นหลายสายหรือไม่ได้หรือไม่ โปรดระบุว่าในข้อความท้าทาย
Luis Mendo

คำตอบ:


2

05AB1E , 21 ไบต์

รหัส:

“## ÿ, ÿ¡Ï
“,|v4ð×y«,

ใช้การเข้ารหัสCP-1252 ลองออนไลน์! .


สิ่งนี้ไม่จัดการกับสตริงหลายบรรทัด
James

@DrGreenEggsandIronMan แก้ไขแล้ว
Adnan

และการต่อสู้ของ V vs O5AB1E ยังดำเนินต่อไป ... ทำได้ดีมาก!
James

@DrGreenEggsandIronMan ฉันจะรอการท้าทาย ASCII ครั้งต่อไปที่จะแก้แค้น :)
Adnan

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 (แลมบ์ดานิพจน์), 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

อ่าฉันเข้าใจแล้ว ดังนั้นการนับจำนวนไบต์จึงคำนึงถึงเรื่องนี้\tและไม่คำนึงถึง4 ช่องว่าง?
R. Kap

3
จงตัดทอนที่แลมบ์ดา b->คุณสามารถบันทึกไบต์ที่สองมีเพียง
Brian McCutchon

2
จะเกิดอะไรขึ้นหากมีรหัสมากกว่าหนึ่งบรรทัด
Neil

5

V , 24 ไบต์

โปรดทราบว่ามีช่องว่างท้ายท้าย

โปรแกรมนี้ทำให้สมมติฐานที่{code}จะไม่อยู่ในหลายบรรทัด

Op ได้ชี้แจงแล้ว "code" อาจเป็นสตริงหลายบรรทัด เวอร์ชัน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 ไบต์:

( -7 ไบต์ขอบคุณสำหรับการชี้แจงบางอย่างจาก Mego )

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

ฟังก์ชั่นแลมบ์ดานิรนามที่รับอินพุตเป็นอาร์กิวเมนต์ตำแหน่งในรูปแบบ<function name>(String, Number, String)และส่งออกสตริงหลายบรรทัด

ลองออนไลน์! (Ideone)


2
คุณสามารถโกนหลายไบต์ถ้าคุณสร้างรายการพารามิเตอร์*fและวางtupleสาย
Mego

@Mego แต่น่าเสียดายที่มันไม่ทำงานอย่างที่ฉันได้รับTypeError: not enough arguments for format stringทุกครั้งที่ฉันเรียกใช้มัน
R. Kap

ทำงานได้ดีเมื่อฉันลอง - คุณต้องใช้อาร์กิวเมนต์ตำแหน่งแทนอาร์กิวเมนต์รายการ นอกจากนี้คุณยังสามารถวางพื้นที่ระหว่างและ# %
Mego

@ Like Wow นั่นแปลกมากเพราะเมื่อฉันลองใช้ PyCharm กับ Python 3.5.1 ฉันได้รับข้อผิดพลาด มันทำให้ฉันสับสนมาก นอกจากนี้#ฉันจำเป็นต้องใช้ช่องว่างระหว่างและแลมบ์ดา
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

MATL , 28 27 ไบต์

บันทึก 1 ไบต์ขอบคุณคำแนะนำของ @ NinjaBearMoneky

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

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

CJam , 26 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

@NinjaBearMonkey ขอบคุณ! แก้ไข ความคิดนี้ช่วยไบต์ด้วยสำหรับคำตอบอื่น ๆ ของฉัน
Luis Mendo

0

Pyke ขนาด 25 ไบต์

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

ลองที่นี่!

หรือ

Pyke 0 ไบต์

ลองที่นี่! - คลิกปุ่มคำตอบการคัดลอก;)

แก้ไข - เป็นเพียงคุณสมบัติของเว็บไซต์มันโกง (หรืออย่างน้อยฉันก็จะพิจารณาอย่างนั้น) เพราะมันไม่เคยแยกวิเคราะห์ AST และโปรแกรมเว็บอาจไม่ถือว่าเป็นส่วนหนึ่งของภาษาเนื่องจากมันไม่ได้โต้ตอบกับภาษามากนัก (แม้ว่าจะใช้ล่าม Pyke)


รุ่น 0 ไบต์ทำงานอย่างไร
haykam

คุณสามารถเพิ่มคำตอบนั้นได้หรือไม่? ฉันไม่ได้นับมัน แต่คุณยังสามารถรักษามันไว้ได้
haykam

เฮ้ @ muddyfish คุณช่วยแยกพวกมันออกเป็นสองคำตอบได้ไหม?
haykam

@ Haykam ถ้านี่คือเพื่อจุดประสงค์ในการรับคำตอบฉันไม่อยากคิดว่า 0 byte จะนับว่าใช้ 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))))
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.