Anti-golfscript anti-golf: สร้างงานที่ GolfScript หรือ J ถูก outgolfed โดย lang (ดั้งเดิม) ของคุณ [ปิด]


29

คุณต้องทำสามสิ่ง:

  1. คำชี้แจงของงาน, T
  2. วิธีการแก้ปัญหาของงานในภาษาที่ไม่ได้มักจะใช้สำหรับการเล่นกอล์ฟ,
  3. วิธีการแก้ปัญหาของงานในภาษาที่มักจะใช้สำหรับการเล่นกอล์ฟ, B อย่าพยายามขยายตัวBเพื่อเร่งคะแนน แต่ให้คิดว่าราวกับว่าเขียนโดยBของคู่แข่ง

ใช้สามัญสำนึกในการกำหนดtypically used for golfingพยายามเพิ่มความสนุกให้กับผู้ใช้รายอื่น

ผู้ใช้รายอื่นอาจเสนอภาษาที่ดีกว่าB(อาจรวมถึงภาษา "กอล์ฟ" อื่น ๆ )

การให้คะแนนคือ(length_in_bytes(B)+5)/(length_in_bytes(A)+5)มากขึ้นดีกว่า (อาจจะมีการเปลี่ยนแปลงสูตรการให้คะแนนหรือไม่ .. )

แนวคิดหลักคือการคิดค้นงานที่ภาษาที่มักจะทำงานได้ดีใน codegolf พบปัญหา มันอาจเป็นความแข็งแกร่งอย่างฉับพลันของภาษาปกติในงานที่มอบหมายหรือความอ่อนแออย่างกะทันหันของบางภาษา

Input a string and execute it as a Scheme codeหลีกเลี่ยงการงานที่กล่าวถึงการเขียนโปรแกรมภาษาเฉพาะเช่น


1
ฉันคิดว่าคุณทำให้การประกวดนี้เป็นที่นิยมแทนการเขียนโค้ดกอล์ฟ มิฉะนั้นผู้คนจะบ่นว่าไม่ใช่ "shortest-code-wins"
Victor Stafusa

ตกลงเปลี่ยนเป็นการประกวดความนิยม นอกจากนี้คุณยังสามารถแนะนำชื่อที่ดีขึ้นหรือคะแนนที่ดีขึ้น
วิ

ฉันคิดว่าคำถามก่อนหน้าของฉันมีคุณสมบัติหรือไม่ codegolf.stackexchange.com/questions/18633/…โซลูชั่น perl คือ 48 ตัวอักษรในขณะที่วิธีแก้ปัญหา J คือ 54 ตัวอักษร
12205

1
เราจะระบุ lang B (ตราบใดที่มันดีในการเล่นกอล์ฟ) หรือทุกคนสามารถพูดว่า "ที่นี่เป็นโปรแกรมในภาษา <insert language name> และมันมีวิธีแก้ปัญหาความยาวน้อยมาก <n>:"?
Justin

1
BTW บางภาษาเช่น Perl สามารถเป็นได้ทั้งด้าน A และด้าน B ขึ้นอยู่กับบริบท
วิ

คำตอบ:


14

คำถามก่อนหน้าของฉันพิมพ์คลื่นไซน์ (แนวตั้ง) มีคุณสมบัติในขณะนี้ ฉันกำลังโพสต์ไว้ที่นี่เป็นวิธีแก้ปัญหาและหวังว่าพวกคุณจะได้พบกับคำตอบสั้น ๆ สำหรับคำถามเดิมของฉัน

ตามที่ Vi. ฉันจะโพสต์สรุปคำถาม

พิมพ์คลื่นไซน์แบบต่อเนื่องที่เลื่อนไปตามแนวตั้งบนเทอร์มินัล โปรแกรมไม่ควรยุติและควรเลื่อนคลื่นอย่างต่อเนื่อง (ยกเว้นจนกระทั่ง SIGINT) คุณอาจสันนิษฐานว่าการล้นเกินนั้นไม่ใช่ปัญหา (เช่นคุณอาจใช้ลูปไม่สิ้นสุดกับตัวนับที่เพิ่มขึ้นหรือการเรียกซ้ำแบบไม่สิ้นสุด)

คลื่นควรตอบสนองคุณสมบัติดังต่อไปนี้:

  • Amplitude = 20 chars (ความกว้างสูงสุด)
  • จุด = 60 ถึง 65 บรรทัด (รวม)
  • ผลลัพธ์ควรประกอบด้วยช่องว่าง, บรรทัดใหม่และ |
  • หลังจากแต่ละบรรทัดของเอาต์พุตหยุดชั่วคราวเป็น 50ms

มีตัวอย่างผลลัพธ์จากคำถามเดิมของฉัน แต่ฉันไม่ได้โพสต์ไว้ที่นี่เพราะจะทำให้คำตอบของฉันยาวเหยียด คำถามเดิมของฉันสามารถเห็นได้ที่นี่: พิมพ์คลื่นไซน์ (แนวตั้ง)

สั้นที่สุด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 ฉันควรลบคำตอบนี้หรือควรรอสักครู่และดูว่าเกิดอะไรขึ้น ถ้าหลังฉันจะรอนานแค่ไหน?
user12205

คำสั่งระบุไบต์ไม่ใช่ตัวอักษร แปลงเป็น UTL-8 โซลูชัน APL สร้าง 61 ไบต์ (70 สำหรับ UTF-16)
วิ

2
คุณอ้างว่า Perl ไม่ใช่ภาษาที่ใช้ในการเล่นกอล์ฟ แต่เป็นภาษาที่เกี่ยวข้องกับคำว่ากอล์ฟเป็นครั้งแรก! Ruby อายุ 56 ปีดูเหมือนภาษาจริง A ในคำตอบปัจจุบันสำหรับคำถามของคุณ
Peter Taylor

8

เพิ่มตัวเลขสองตัว

รับตัวเลขสองตัวจาก STDIN และเพิ่มเข้าด้วยกัน คุณต้องรองรับตัวเลขทศนิยมดังนั้น 0.5 + 1.5 ต้องเท่ากับ 2

Perl 5 (พร้อม-E)

say<>+<>

GolfScript

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

(24+5)/(8+2+5) = 1.9(3)การคำนวณคะแนนเป็น -Eนับเป็นไบต์โปรแกรมด้วย
วิ

ความคิดเห็นแบบเดียวกับที่ฉันทำกับ ace: คุณอ้างว่า Perl ไม่ใช่ภาษาที่ใช้ในการเล่นกอล์ฟ แต่เป็นภาษาที่เกี่ยวข้องกับคำว่ากอล์ฟเป็นครั้งแรก!
Peter Taylor

และโปรแกรม GolfScript ของคุณไม่ทำงาน โปรแกรมn%'+'*'"#{ }"'n/\*~ที่ใช้งาน{}จะเป็นตัวอักษรที่ขึ้นบรรทัดใหม่ (ไม่สนับสนุนในความคิดเห็น)
Peter Taylor

@ PeterTaylor เปรียบเทียบกับ GolfScript แล้ว Perl เป็นภาษาที่ "ปกติ"; เมื่อเทียบกับ Java มันเป็นภาษา "กอล์ฟ"
วิ

1
+/".1!:1,~1เจสำหรับเรื่องนี้คือไม่เลวร้ายเกินไปจริง: APL อาจมีขนาดเล็กลง
algorithmshark

8

พิมพ์ 'Hello, World!' เพื่อ stdout

PHP, 13 ไบต์

Hello, World!

Golfscript ขนาด 15 ไบต์

'Hello, World!'

Pyth, 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
Java มักจะอ่านว่าclass Main{public static void main...
Vi

3
@Vi ดู "ข้อมูลโค้ด" โดยทั่วไปจะต้องการรหัสที่ใช้งานได้จริงไม่มากไปกว่านั้น
Justin

2
ฉันไม่รู้ว่า Befunge แต่ตัวอย่าง Java ไม่ได้ "จบโปรแกรม" ตามที่กำหนดไว้ ที่จะต้องมีSystem.exit(0);หรือปิดการนอนหลับของคุณในmainวิธีการ
Peter Taylor

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 ไม่ได้กล่าวถึง แต่มีความหมายอย่างชัดเจน
วิ

ใช่คำตอบนี้เป็นคำพูดเล็ก ๆ น้อย ๆ แก้มฉันอยากจะชี้ให้เห็นว่ากฎเป็นแบบลาดลื่น ลองนึกภาพถ้าฉันมี "mangled" เอาท์พุทมากขึ้น - พูดโดยใช้การตรวจสอบ SHA1 ของแต่ละสตริง - มันจะแปลกมากที่จะอ้างว่า "เลขฐานสิบหกที่อ่านไม่ออกนี้เป็นภาษาเฉพาะเกินไป" :)
Lynn

ถ้าฉันต้องการคำตอบที่ "ยุติธรรม" มากกว่านี้ฉันอาจใช้ Mathematica คุณสามารถทำสิ่งต่าง ๆ ที่เฉพาะเจาะจงในโดเมนได้อย่างมากโดยใช้ CJam / Pyth / สิ่งอื่นใดนับพันไบต์ แต่น่าเศร้าที่ฉันไม่รู้ภาษา
ลินน์

ลิงก์ไปยังเอาต์พุตนั้นตาย
pppery

4

พูดว่า "สวัสดีชาวโลก!" (50/26 ≈ 1.92)

แสดงกล่องข้อความเพื่อพูดว่า "Hello world!"

JavaScript

alert('Hello world!')

ในเบราว์เซอร์ที่รองรับ DOM ระดับ 0+

Perl

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

ทำงานบน ActivePerl ด้วย Win32 :: GUI


alertไม่ได้เป็นส่วนหนึ่งของ JS และโปรแกรม GolfScript เป็นเพียงความคิดเห็น
Peter Taylor

ฉันเปลี่ยนคำตอบเพื่อใช้ Perl ธรรมดา
แปรงสีฟัน

3

เอาท์พุท "สวัสดีชาวโลก!" จนกว่าผู้ใช้จะกด "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-like

รุ่นแรก:

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+เหมาะสมกับการเป็นภาษา มันถูกออกแบบมาสำหรับเทคนิค / ปริศนา / สนุก brainfuck / unlambda / ภาษา esoterical อื่น ๆ ยังไม่ได้ดูเหมือนจะเหมาะกับเป็น
วิ

@Vi: แต่โดยทั่วไปจะไม่ใช้สำหรับเล่นกอล์ฟ
Konrad Borowski

4
คุณสามารถ hovewer พยายามที่จะใช้HQ9+เป็นBภาษาและเอาชนะมันโดย Java หรือเช่น ...
Vi

7
ดูเหมือนว่ามีลำดับชั้น: เมื่อเทียบกับ Java แล้ว Perl's golflang เมื่อเปรียบเทียบกับ Perl แล้ว GolfScript เป็น Golflang เปรียบเทียบกับ GolfScript แล้ว HQ9 + เป็นสนามกอล์ฟ ...
ไว

@Vi: ฉันตรวจสอบรายละเอียดงานของคุณอย่างระมัดระวัง HQ9 + ไม่เคยถูกใช้สำหรับการเล่นกอล์ฟยกเว้นงานสองอย่าง - "99 ขวด" และ "สวัสดีโลก" นอกจากว่าคุณจะสามารถแสดงงานอื่น ๆ ที่ HQ9 + ชนะด้วยภาษาการเขียนโปรแกรมอื่น ๆ ฉันยังคิดว่ามันเหมาะกับคำจำกัดความแม้ว่ามันจะใช้งานในทางที่ผิด (เฮ้มันเป็นการประกวดความนิยม ) HQ9 + นั้นไม่ได้ใช้สำหรับการเล่นกอล์ฟที่ไม่เกี่ยวข้องกับงานทั้งสอง ดังนั้นจึงไม่ได้มักจะใช้สำหรับการเล่นกอล์ฟ อย่างที่สองได้รับการออกแบบมาอย่างชัดเจนสำหรับ CodeGolf - เป็น GolfScript
Konrad Borowski

0

เอาท์พุท "Hello world!", 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 จงใจป่องขึ้นกับการต่างๆcosและexprsหรือ genuintely ไม่สามารถเพียงแค่บางสิ่งบางอย่างที่ส่งออกในทางปกติ? หรือ"ตัวละครไม่ใช่สตริงและทำให้ฉันสับสน ...
ไว

@Vi มันไม่บวมเลย ... มันต้องตัด e จาก expr, l สองจากด้านล่าง, o จาก cos, หรือจากหรือ, จาก l ล่างและ d จากและ
Timtech

'ผู้ใช้รายอื่นอาจเสนอ Bs ที่ดีกว่า (อาจรวมถึงภาษา "golfy" อื่น ๆ ) '--- ให้ฉันลอง golfscript:"Hello world!"
John Dvorak

@JanDvorak คุณอาจพูดถูก
Timtech
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.