ใช่มีความยาว 91 บรรทัด


50

yesจาก coreutils เป็น91 สายยาว หลายคนมีความเห็น แต่ที่ยังคงเป็นทางยาวเกินไป

แก้ไขจากกันยายน 2019: ไฟล์ต้นฉบับขยายตัวในช่วงห้าปีที่ผ่านมาและขณะนี้มีความยาว 126 บรรทัด

เขียนโปรแกรมที่เลียนแบบyes:

  • ส่งออกไปยังstdoutกระแสอนันต์ของ "y \ n"
  • ต้องมีตัวเลือกในการหยุดกระบวนการอื่นนอกจากฆ่ากระบวนการด้วยSIGKILL: แต่SIGINTและSIGPIPEใช้ได้
  • คุณไม่ได้รับอนุญาตให้ใช้ "y" หรือ "\ n" หรือค่า ASCII ของพวกเขา (121, 0x79, 0171, 10, 0xA หรือ 012)

คำตอบที่สั้นที่สุดชนะ

โบนัส:

  • ลบ 10 จากความยาวโค้ดของคุณหากคุณสามารถรับวลีstdinและพิมพ์ออกมาแทน "y" (แต่ยังรวมถึงตัวแบ่งบรรทัด)

13
" คุณไม่ได้รับอนุญาตให้ใช้" y "หรือ" \ n " " - ฉันควรอ่านข้อความนี้ว่า "คุณไม่สามารถใช้yหรือ\nอยู่ภายในสตริงตัวอักษร"?
apsillers

12
ในบันทึกที่เกี่ยวข้อง GNU true.cมีความยาว 80 บรรทัด
Dennis Williamson

6
@DennisWilliamson ในบันทึกที่เกี่ยวข้องในทำนองเดียวกัน false.c มีความยาว 2 บรรทัด .... ; _;
LordAro

6
coreutils ใช้เวลาอาร์กิวเมนต์ตัวเลือกในบรรทัดคำสั่งไม่ได้yes stdin
Brian Minton

7
@MrLore: ไปยังโปรแกรมอื่นที่อาจขอการยืนยันสิ่งต่าง ๆ ที่พวกเขาทำอยู่ตลอดเวลาดังนั้นคุณไม่จำเป็นต้องนั่งพิมพ์yตัวเอง
marcus erronius

คำตอบ:


37

CJam, 13 ไบต์ - 10 = 3

l_'x)?{_oNo}h

คุณจะต้องใช้ล่าม Javaสำหรับเรื่องนี้เพราะล่ามออนไลน์จะส่งกลับเฉพาะเมื่อโปรแกรมสิ้นสุดลง

คุณสามารถยกเลิกโปรแกรมด้วย SIGINT (โดยกด Ctrl-C) มันจะอ่านบรรทัดจาก STDIN และพิมพ์บรรทัดนั้นหรือyถ้าอินพุตว่างเปล่า

คำอธิบาย

l             "Read line from STDIN.";
 _            "Duplicate.";
  'x          "Push character x.";
    )         "Increment to get y.";
     ?        "Ternary operator. Replaces line with y if it was empty.";
      {    }h "Repeat while true. Leaves condition on the stack, which is the output string.";
       _o     "Duplicate line and print.";
         No   "Push string with newline and print.";

หลังจากชี้แจงของ OP, ต่อไปนี้ดูเหมือนมากขึ้นเพื่อ spec:

l{_o9c)o1}g

ฉันจะรอด้วยการอัปเดตการส่งจนกว่า OP จะตอบกลับความคิดเห็นของฉัน


16
ฉันชอบที่โปรแกรมของคุณเกิดขึ้นในการแข่งขัน/no/iโดยพิจารณาจากความท้าทาย
Kevin - Reinstate Monica

20

Brainfuck - 38 ไบต์

++++++++++[>++++++++++++>+<<-]>+[.>.<]

มันไม่ได้ใช้ 10 หรือ 121 เพราะ+-<>.,[]เป็นตัวละครที่มีความหมายในภาษาอยู่ดี แต่มันจะคำนวณอย่างไร้เดียงสา (0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 = 1 = 1) 10, 10 * 12 + 1 = 121)

สิ่งนี้อาจขึ้นอยู่กับล่าม แต่มันเสียชีวิต^Cในเครื่องของฉัน

Brainfuck - (63-10) = 53

++++++++++[>,]<<[[<]>>[[.>]<[<]>]]>[>++++++++++++>+<<-]>+[.>.<]

@ ทอดฉันไม่สามารถทำได้ต่ำกว่า 39 แบบนั้น ฉันต้องการ 10 อยู่แล้วดังนั้นฉันจึงบวก 1 ถึง 120 หรือลบ 1 จาก 11 และสั้นกว่าที่จะทำก่อนหน้านี้
undergroundmonorail

ใช่ฉันสังเกตเห็นหลังจากที่คุณนำมาใช้ใหม่ 10 ขอโทษ: P
FryAmTheEggman

แทนที่จะเป็น 10 * 12 + 1 ทำไมไม่ลอง 11 * 11 ล่ะ ฉันคิดว่านั่นสามารถช่วยคุณประหยัดได้
ProgramFOX

@pro ฉันไม่สามารถรับมันต่ำกว่า 39 แบบนั้น ฉันต้องการ 10 อยู่แล้วดังนั้นฉันจึงบวก 1 ถึง 120 หรือลบ 1 จาก 11 และสั้นกว่าที่จะทำก่อนหน้านี้
undergroundmonorail

@undergroundmonorail อ่าฉันเข้าใจแล้ว
ProgramFOX

18

Python 3, 27 ไบต์

ทำงานได้กับ CPython และ Jython เป็นอย่างน้อย

while 1:print(str(help)[1])

SIGINT หยุดมัน


18
ทำให้มัน python2 while 1:print`help`[1]และคุณสามารถย่อให้
undergroundmonorail

4
ฮ่าฮ่าเยี่ยมมาก ฉันลืมว่ามี "ใช้" จะเป็นผู้ประกอบการ backtick ในหลาม :)
pgy

คุณสามารถใช้chr(11**2)เพื่อบันทึกอักขระไม่กี่ตัวเช่นกัน
user1354557

2
@RamchandraApte 121คุณไม่ได้รับอนุญาตให้ใช้
Jonathon Reinhart

17

Marbelous 14 ไบต์

0978
]]/\++
!!

นี่เป็นเรื่องที่ตรงไปตรงมาอุปกรณ์ '/ \' วางสำเนาสองชุดไว้ที่ด้านซ้ายและขวาส่วนที่ถูกต้องนั้นเพิ่มขึ้นจาก++นั้นจึงตกลงมาจากกระดานและพิมพ์ออกมา ]]อุปกรณ์ดันหินอ่อนใด ๆ ไปทางขวาถ้า STDIN ว่างเปล่า แต่ช่วยให้ไบต์แรกบน STDIN ล้มลงถ้ามันไม่ได้ นี่จะทริกเกอร์!!อุปกรณ์ซึ่งออกจากบอร์ด ดังนั้นสิ่งนี้จะพิมพ์ y \ n จนกว่าคุณจะป้อนอะไรก็ได้บน stdin

ใช้งานได้เฉพาะกับตัวแปลของหลามเท่านั้น


17

Pyth, 10 9 6 ไบต์ - 10 = 0 -1 -4

#|zePG

ฉันพยายามมานานแล้วเพื่อให้ได้สิ่งที่ฉันพอใจ โดยทั่วไปจะแปลงเป็น:

#      = while True
(implied print)
|      = or
z      = (automatically initialized from stdin)
ePG    = second-to-last lowercase letter = 'y'

ตัวแปร "z" ถูกเตรียมใช้งานจาก stdin จากนั้นค่าจะถูกใช้หลังจากนั้น พบวิธีสั้น ๆ ในการรับค่า ascii โดยไม่ต้องเขียนอย่างชัดเจน
swstephe

เปลี่ยนจาก "^ 11 2" เป็น "^ hT2" เพื่อบันทึกอักขระ
swstephe

สวัสดีสวัสดีฉันรู้สึกตื่นเต้นที่ได้เห็นผู้ใช้ภาษาคนอื่น! คู่ของโรงแรมพร้อมสนามกอล์ฟ A: #มีการทำงานเทียบเท่ากับW1และePGเป็นวิธีที่สั้นมากที่จะได้รับตัวละครมากกว่าy C^hT2
isaacg

ขอบคุณฉันจะใช้การเปลี่ยนแปลงเหล่านั้น ยังใหม่กับสิ่งกอล์ฟนี้ ฉันชอบ Pyth แต่หวังว่าจะมีฟังก์ชั่นตามบริบทและการจัดการบิตอีกเล็กน้อย
swstephe

13

C #, 81 78 76 ไบต์

ไม่สามารถแข่งขันกับภาษาอื่น ๆ ได้ แต่ที่นี่จะเป็นเช่นนั้น:

class A{static void Main(){for(;;)System.Console.WriteLine((char)('x'+1));}}

สามารถฆ่าด้วย SIGINT โดยการกด+CtrlC

ไม่มีโบนัสเพราะใช้เวลามากกว่า 10 ไบต์ในการรับ


คุณใช้while(1)ไม่ได้เหรอ บันทึกอักขระสองตัว
แปรงสีฟัน

@ แปรงสีฟันฉันลองแล้ว แต่มันใช้ไม่ได้กับ C #
ProgramFOX

1
for(;;) ควรทำงาน
core1024

2
ด้วยเหตุผลบางอย่างรหัสนี้ยังคงมีyอยู่ในนั้น Systemกรุณาตรวจสอบ
TheNumberOne

4
@TheBestOne ที่Systemไม่สามารถลบได้ เป็นเนมสเปซอันดับต้น ๆ ใน. NET Framework ทุกคลาส / เนมสเปซอื่น ๆ อยู่ในนั้นดังนั้นการสะท้อนจะไม่ช่วยที่นี่ แต่ไม่แน่ใจว่ามันไม่ถูกต้องหรือไม่ ดูความคิดเห็นของ Ramon: "ไม่มีสิ่งใดที่ประเมินเป็น y หรือ \ n" yนี้ไม่ได้ประเมิน ฉันแสดงความคิดเห็นในคำถามเพื่อถาม Ramon ว่าสิ่งนี้ถูกต้องหรือไม่
ProgramFOX

10

Java, 178

class C{public static void main(String[]a)throws Exception{for(char c='x'+1;;)((java.io.PrintStream)Class.forName("java.lang.S"+c+"stem").getField("out").get(null)).println(c);}}

ต้องการการพิมพ์Systemแต่yห้ามใช้อักขระ ดังนั้นฉันต้องใช้การสะท้อนกลับ


FileDescriptor.outเป็นสิ่งที่ฉันหมายถึง
TheNumberOne

คุณสามารถบันทึก a ;โดยใส่char c='x'+1;การforประกาศลูปดังนั้นfor(char c='x'+1;;)เนื่องจากคุณมีเซมิโคลอนว่างอยู่ในนั้น
corsiKa

@corsiKa จุดดี
Ypnypn

10

Perl: 18 ไบต์ - 10 = 8

สตริงมาจาก STDIN

$_=<>;{print;redo}

3
พิมพ์y\nซ้ำหลายครั้งหรือไม่หากไม่ได้รับอินพุตจาก STDIN yesถ้าไม่เช่นนั้นมันไม่ถูกต้องเลียนแบบ
vurp0

@ vurp0 yesไม่รับข้อมูลSTDINหลังจากทั้งหมด :)
core1024

1
มันไม่ได้ แต่คำถามกอล์ฟรหัสที่นี่ที่ระบุว่าหากไม่ได้รับการป้อนข้อมูลซ้ำ ๆ y\nควรพิมพ์
vurp0

2
@ vurp0 ที่ไหน โปรแกรมใด ๆ ที่อ่านจากสตรีมจะหยุดทำงานโดยไม่มีอินพุต
core1024

@ vurp0 ดูความคิดเห็นของ OP ในคำถาม
nyuszika7h

9

Ruby, 30 23 18 ไบต์

loop{puts ?x.succ}

สามารถฆ่าด้วย SIGINT โดยการกด+CtrlC

ขอบคุณmanatworkสำหรับการแบ่งปันการปรับปรุง!


1
loop{puts [*?x..?z][1]}- 23 chars loop{puts ?x.succ}- 18 chars
manatwork

@ การจัดการขอบคุณ! Updated
ProgramFOX

8

Perl, 26 ไบต์

{print chr$=*2+1,$/;redo}

อินพุตที่กำหนดเองจากอาร์กิวเมนต์ (เช่นyesใช้งานได้จริง), 22 ไบต์ -10 = 12

{print @ARGV,$/;redo}

อินพุตที่กำหนดเองจาก stdin, 22 bytes-10 = 12

while(<>){print;redo}

โปรแกรมของ @mar Nitz มีความยาวเพียง 14 ไบต์และมีความคิดเห็น upvoted สูงมากในลิงก์ของคุณที่ระบุว่ามันเป็นเรื่องที่น่ายินดีสำหรับชื่อไฟล์หากคุณรวมไว้ใน bytecount ดูเหมือนว่าจะเป็นเรื่องถูกต้องสำหรับฉัน
undergroundmonorail

โอ้เดี๋ยวก่อนฉันไม่เห็นส่วน "คุณไม่สามารถใช้ \" y \ "" ของคำถามได้ ไม่เป็นไรนี่เป็นสิ่งที่ไม่ดี
undergroundmonorail

ใช่คุณ แก้ไข
Nitz

6

C, 64 55 53 45 40 - 10 = 30

main(int c,int**a){for(;;)puts(a[c>1]);}

ฉันไม่พอใจอย่างมากกับสิ่งนี้เนื่องจากมันต้องใช้โปรแกรมที่มีชื่อว่า "y" และจะถูกเรียกด้วย `y` เท่านั้นเท่านั้นดังนั้นจึงต้องอยู่ใน $ PATH แต่เฮ้, codegolf ตัวแรก :)

ทางเลือก:

C, 30 (+ 1 ชื่อไฟล์)

main(){for(;;)puts(__FILE__);}

ใช้เทคนิคเดียวกับเพื่อนร่วมงานที่นับถือ @Matt Windsor

  • แก้ไข: ปรากฎว่าได้รับรอบตัวอักษร \ n ทำให้มันสั้นลง
  • EDIT2: "int" สั้นกว่า "char"
  • EDIT3: ไม่ต้องการตัวแปรนั้นเลย
  • EDIT4: พฤติกรรมที่ไม่ได้กำหนดเล็กน้อยไม่เคยทำร้ายใคร
  • EDIT5: เพิ่มรุ่นทางเลือก

5

Linux Bash, 33-10 = 23

read a; while :; do echo $a; done

สามารถฆ่าด้วย SIGINT โดยการกด+CtrlC


คุณควรอ่านเพียงหนึ่งบรรทัดและพิมพ์บรรทัดเดียวกันซ้ำ ๆ โปรแกรมของคุณไม่ใช่yesแต่catโปรแกรม
jimmy23013

ไม่ดีฉันไม่ควรลองหลังจากทำงานมาทั้งวัน
Orace

วิธีการเกี่ยวกับread a;for((;;));{ echo $a;}
core1024

5

สนิม 52 ตัวอักษร

fn main(){loop{println!("{}",'Y'.to_lowercase())}}

ดูเหมือนจะไม่มีวิธีที่ดีในการคำนวณyโดยไม่ต้องหน้าด้านในสนิม - พวกเขาทำงานได้ดีเกินไปในการทำตัวอักษรอย่างปลอดภัย ผม:

  • ไม่สามารถระบุสตริงที่ไม่ใช่ตัวอักษรprintln!ได้ดังนั้นจึงไม่อนุญาตให้ใช้เทคนิคได้
  • ไม่สามารถเพิ่ม 1 ไปยัง'x'ได้เพราะใน Rust chars ไม่ใช่ตัวเลข
  • ไม่สามารถ ROT13 (ทำไม Rust ถึงไม่มี ROT13 ในไลบรารี่มาตรฐานของมัน!?);
  • ไม่สามารถทำสิ่งที่ไม่ปลอดภัยได้อย่างง่ายดายเช่นวางสาย C แปลงจากตัวเลขเป็นตัวอักษร ฯลฯ โดยไม่ต้อง verbose อย่างไม่น่าเชื่อและไปมากกว่า 52c

ไม่ว่าจะเป็นโบนัสโค้ดที่คุ้มค่าหรือไม่เพราะการอ่านจากstdinนั้นจะต้องมีการจัดการข้อผิดพลาด = 3

การลดรหัสส่วนใหญ่ฉันพบว่าเกี่ยวข้องกับการทำสิ่งที่ผิดกฎมากขึ้นด้วยสภาพแวดล้อมคอมไพเลอร์:

สนิม 44 ตัวอักษร (+ อย่างน้อย 1 ถ่านสำหรับชื่อไฟล์)

fn main(){loop{println!("{:.1}", file!())}}

ล้าสมัยโดยด้านล่าง อันนี้อาจจะไม่ได้นับเป็นชื่อของแหล่งที่มาของyไฟล์ต้องมีการเริ่มต้นด้วย

แก้ไข: สนิม, 36 ตัวอักษร (35 แหล่ง, 1 ชื่อไฟล์)

fn main(){loop{println!(file!())}}

ข้างต้น แต่ไฟล์ได้จะเรียกว่าy(ไม่ได้y.rs, y) อย่างตลกขบขันสนิมจะเขียนทับแหล่งที่มาด้วยไบนารี! อย่างน้อยในเครื่องของฉันไบนารีทำงานหลังจากนั้น

สนิม 37 ตัวอักษร (+ เทียบเท่าenv K='y'กับบนแพลตฟอร์มของคุณ)

fn main(){loop{println!(env!("K"))}}

หนึ่งนี้จะเลวร้ายยิ่ง: คุณจะต้องตั้งตัวแปรสภาพแวดล้อมKในการyที่รวบรวมเวลา

แก้ไข : ถ้าคุณตั้งค่าKเพื่อy\nคุณสามารถวางlnในprintln!รวมที่ยิ่งใหญ่ของ35 ตัวอักษรและหลาย facepalms:

fn main(){loop{print!(env!("K"))}}

นโยบายตามปกติของเราในการกำหนดชื่อไฟล์หรือธงคอมไพเลอร์คือการรวมไว้ในการนับไบต์
Martin Ender

@ MartinBüttnerยุติธรรมพอสมควร ดูเหมือนว่าสนิมไม่ใช่ภาษาที่ดีที่สุดสำหรับ code golf>: P
Matt Windsor

คุณสามารถเพิ่มหนึ่งxในแฟชั่น แต่ก็ยังไม่สั้น:(b'x' + 1) as char
Shepmaster

5

Linux Bash - 19 ไบต์

นี่อาจเป็นการโกงและอาจล้มเหลวหากคุณไม่มี / usr / bin / ใช่หรือมี / usr / bin / xes หรือ / usr / bin / zes:

/usr/bin/[x-z]es $*

ฉันคิดว่ามันเป็นไปตามข้อกำหนดแม้ว่าบางทีมันอาจเป็นการฝ่าฝืนกฎ และบางทีการเลียนแบบyesด้วยการวิ่งจริงyesนั้นผิดกฎ

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

/*/*/?es $*

ฉันไม่สามารถหาวิธีรับโบนัส 10 คะแนนโดยการอ่านสตริงจาก stdin โดยไม่ต้องเพิ่มโค้ดมากกว่า 10 ไบต์


2
/*/*/?es `line` หรือถ้าคุณไม่ได้มี/*/*/?es `head -n1` /usr/bin/line
jimmy23013

2
หรือสำหรับsed q line
jimmy23013

5

dc, 12

[30986Pdx]dx

y\nเอาท์พุทเท่านั้น ไม่ได้อ่านจาก stdin ดังนั้นจึงไม่มีโบนัส

30986 คือ 0x790A (เช่น "y \ n") Pคำสั่งเพียงแค่แปลงหมายเลขที่ฐาน 256 และพิมพ์ตัวอักษรที่สอดคล้องกันสำหรับแต่ละฐาน 256 บาท


มันค่อนข้างฉลาด 30986 จะประเมินได้y\nอย่างไร
nyuszika7h

ฉันรู้เกี่ยวกับPแต่ไม่ทราบว่าสามารถทำได้มากกว่าหนึ่งตัวอักษรในแต่ละครั้ง
nyuszika7h

5

เสียงกระเพื่อมสามัญ: (30-10) = 20

(format t"~@{~a~%~:*~}"(read))
  • (read) จากอินพุตสตรีม
  • พิมพ์ไปยังเอาต์พุตสตรีม: (format t ... )
  • วนซ้ำformatอาร์กิวเมนต์ทั้งหมด(มีเพียงหนึ่งที่นี่):~@{ ... ~}
  • ภายในลูปสำหรับแต่ละอาร์กิวเมนต์:

    • อาร์กิวเมนต์พิมพ์~Aตามด้วยขึ้นบรรทัดใหม่~%
    • ย้อนกลับองค์ประกอบปัจจุบันไปยังองค์ประกอบก่อนหน้า~:*(วงไม่สิ้นสุด)

คุณสามารถแบ่งลูปด้วยCtrl+Cซึ่งเป็นสัญญาณข้อผิดพลาดด้วยตัวเลือกการรีสตาร์ท (ทำต่อ / ยกเลิก)



3

Ruby, 27 ไบต์ - 10 = 17

เป็นเพียงโซลูชันของ @ ProgramFOX พร้อมโบนัส (ใช้ 9 ไบท์เพื่อแก้ไขคำถามโบนัส)

loop{puts ARGV[0]||?x.succ}

3

dc, 21 ไบต์ - 10 = 11

C1st?st[ltP[]ps0dx]dx

โปรดทราบว่าการป้อนข้อมูลจะต้องห่อหุ้ม[]เช่น[no]เนื่องจาก?เป็นวิธีเดียวที่จะรับอินพุตซึ่งเรียกใช้งานเป็นdcรหัส


คุณสามารถใช้แทนC2 122ในความเป็นจริงฉันจะยืนยันว่า122 1-สามารถแทนที่ด้วยC1ตามที่C1เป็นสิ่งต้องห้ามอย่างชัดเจนในคำถาม
บาดเจ็บดิจิตอล

3

พลเรือจัตวา 64 พื้นฐาน: 14 13 ไบต์

1?C|(11↑2):R╭

ตามปกติฉันได้ทำการเปลี่ยนตัวอักขระใน PETSCII ที่ไม่ได้อยู่ใน Unicode |ถูกนำมาใช้เพื่อเป็นตัวแทนSHIFT+Hในขณะที่แสดงให้เห็นถึง SHIFT+Uโปรดทราบว่าเอาต์พุตนี้ ASCII 'y' (ค่าไบต์ 121) แทนที่จะเป็นอักขระที่ชุดอักขระ Commodore เริ่มต้นแสดงเป็น 'y'

ภาษาเบสิกเป็นภาษาโปรแกรมที่ง่ายต่อการเรียนรู้คล้ายภาษาอังกฤษ โยนลงไปในทางลัดการพิมพ์ที่มีอยู่ในภาษาถิ่นต้นจำนวนมากและคุณจะได้รับสิ่งที่สั้นกว่าและสามารถอ่านได้น้อยกว่า Perl

แก้ไข : ใน "โหมดเลื่อน" สิ่งนี้ทำให้สั้นลงสองไบต์เนื่องจากตัวพิมพ์เล็ก "y" ถูกเข้ารหัสที่ค่าทศนิยม 89 การใช้ชุดอักขระที่ไม่ใช่ ASCII เพื่อหลีกเลี่ยงกฎ "ไม่อนุญาตให้ใช้ค่า ASCII" แม้ว่าการโกง

1?cH(89):rU

ด้วย💩ทั้งหมดที่มีอยู่ใน Unicode ดูเหมือนว่าน่าแปลกใจที่ชุดอักขระแบบเต็มที่ C64 ใช้จะไม่อยู่ในนั้น
kasperd

@kasperd อักขระการวาดกล่องของ Unicode ส่วนใหญ่มาจากชุด "DOS" ของ IBM และผ่านจุดศูนย์กลางของเซลล์อักขระ PETSCII มีชุดที่ใหญ่กว่ามากซึ่งส่วนใหญ่ใช้ขอบของเซลล์อักขระ U + 2502 น่าจะเป็นการประมาณที่เหมาะสมของแถบแนวตั้งที่สร้างโดยSHIFT+Hแต่ตัวพิมพ์พิทนั้นง่ายกว่าในการพิมพ์ ไม่มีสิ่งใดที่ตรงกับ "บรรทัดที่ด้านบนและขอบซ้าย" ที่สร้างโดย `SHIFT + O"
Mark

ดีมาก แต่คุณสามารถบันทึกหนึ่งไบต์โดยแทนที่ "Goto 1" โดย "Run": "1? cH (89): rU"
LeFauve

@ LeFauve ขอบคุณ ฉันได้นำไปใช้กับเวอร์ชันที่เปล่งด้วย ASCII
ทำเครื่องหมาย

3

AWK, 38 ไบต์

BEGIN{for(;;)printf("%c%c",60+61,5+5)}

ตัวแปรที่จะอ่านสตริงบน stdin: 14 bytes-10 = 4

{for(;;)print}

แต่เนื่องจากไม่สามารถทำทั้งสองอย่างได้ (เปลี่ยนเป็น "y" หากไม่มี stdin ให้) ฉันไม่แน่ใจว่าจะนับ ... : o)

ทั้งสองสามารถออกได้ด้วย Ctrl + C


3

ฟิชชัน 5 ไบต์

Rx+!N

นี่เป็นการแข่งขันที่ค่อนข้างสมเหตุสมผลสำหรับฟิชชัน :)

การควบคุมการไหลเริ่มต้นด้วยอะตอมขวาที่จะได้รับ(1,0) ชุดมวลและเพิ่มมันเพื่อให้ จากนั้นพิมพ์อักขระที่เกี่ยวข้อง ( ) และพิมพ์บรรทัดใหม่ ซอร์สโค้ดล้อมรอบขอบดังนั้นอะตอมผ่านอีกครั้ง (ซึ่งไม่ได้ทำอะไรเลยในตอนนี้) ตั้งมวลเป็นอีกครั้งเพิ่มขึ้นเรื่อย ๆ เรื่อย ๆ ...Rx120+(121,0)!yNRx120+


3

C, 32 ไบต์

ต้องการเครื่อง endian เล็ก ๆ น้อย ๆ และการรวบรวมด้วย -O2 (เพื่อหลีกเลี่ยงการล้นสแต็ค)

a=11*11;main(){main(puts(&a));}

2

PowerShell, 27 - 10 = 17

param($s=$Host[1])for(){$s}

อาจไม่ทำงานใน Pash ทางเลือกที่แข็งแกร่งยิ่งขึ้นควรเป็น

param($s="$(gal gh*)"[2])for(){$s}

2

Lua, 42 ไบต์ - 10 = 32

while 1 do print(...or('').char(90+31))end

Lua, 49 ไบต์ - 10 = 39

y=...or(string.char(60+61))while 1 do print(y)end

ทั้งสองถูกทดสอบด้วย Lua 5.1.4 และสามารถฆ่าได้ด้วย SIGINT ( Ctrl+ C)


น่ากลัว! แม่ของฉันเขียนใน Lua ฉันไม่เคยเห็นมันมาก่อน ( เฮ้แม่! เดาสิ่งที่ฉันเห็น! )
สัญญาณ 15

2

Perl, 31

นี่คือเวอร์ชั่น Perl ที่ทำงานเหมือน GNU yesเท่าที่ฉันจะบอกได้:

{print "@ARGV"||chr 11**2;redo}

ใช้งานได้หากไม่เป็นไรที่จะใช้สวิตช์บรรทัดคำสั่งของ perl ( -lสำหรับการขึ้นบรรทัดใหม่) มิฉะนั้นจะกลายเป็น 3 ตัวอักษรอีกต่อไป:

{print "@ARGV"||chr 11**2,$/;redo}

พิมพ์ผิด: คือ-l(ไม่ใช่-e) สวิตช์สำหรับบรรทัดใหม่
chris-l

นอกจากนี้ยังมีโบนัสเป็นเพียงถ้าสคริปต์ของคุณสามารถอ่านจากstdin ใช่ฉันรู้ว่าใช่จริงไม่ได้อ่านจาก stdin แต่จากการทะเลาะวิวาท แต่นั่นคือกฎของ OP มันจะต้องมาจาก stdin เพื่อรับโบนัส
chris-l

@ chris-l แก้ไขประเภทขอบคุณ ฉันได้ลบการอ้างสิทธิ์เกี่ยวกับโบนัส แต่ฉันจะทิ้งคำตอบไว้เนื่องจาก :-P
xebtl

hehe แน่ใจ, คำตอบของฉันเองก็เหมือนคุณ; มันใช้อาร์กิวเมนต์แทน stdin IMHO สหกรณ์ควรให้โบนัสกับคนที่จริงทำในสิ่งที่จริงใช่ไม่
chris-l

2

CAPL 1.5+; 6 ไม่มีอินพุต; 10 - 10 = 0 พร้อมอินพุต

Sidenote
ฉันได้อ่านบาง [link?] ว่าภาษาที่กำหนดเองไม่ได้รับอนุญาตในการเล่นกอล์ฟคำถามเช่นที่พวกเขาจะทำให้ฟังก์ชั่นที่ไม่ตรงกับสิ่งที่เป็นคำถามที่ถาม แต่ฉันทำ CAPL ที่จะทำให้การเล่นกอล์ฟได้ง่ายขึ้นโดยทั่วไป หากคุณคิดว่านี่ไม่ได้รับอนุญาตที่นี่โปรดแจ้งให้เราทราบ!

ฉันได้ความคิดบางอย่างจาก> <>และBefunge (คุณสามารถย้ายระหว่างบรรทัดและใช้อักขระเลขฐานสิบหกเพื่อกดตัวเลข) บางตัวจาก Ruby และบางตัวจากของฉันเองเพื่อทำให้การเล่นกอล์ฟง่ายขึ้น
CAPL อ่านจากซ้ายไปขวาและลงหนึ่งบรรทัดที่ท้ายบรรทัด หากเป็นบรรทัดสุดท้ายโปรแกรมจะหยุดทำงาน

อย่างที่ไม่มีใครรู้ภาษานี้ฉันจะพยายามอธิบายให้มากที่สุด

กำลังส่งออก y 6 ไบต์

bb*.n<

bb* bเป็นเลขฐานสิบหกสำหรับ11เพื่อbb*เป็น11*11= 121ซึ่งเป็น UTF-8 yเทียบเท่า ค่านี้ถูกส่งไปยังสแต็ก
.ดึงค่าสูงสุดจากสแต็กและส่งออกเป็น UTF-8 เช่นเดียว121กับที่ด้านบนของสแต็คดัชนีจะถูกละเว้นที่นี่
nขึ้นบรรทัดใหม่
<ส่งตัวชี้กลับไปที่จุดเริ่มต้นของบรรทัดดังนั้นการทำซ้ำบรรทัดนั้น เนื่องจากเราไม่คาดหวังอินพุตเราสามารถทำสิ่งนี้ได้อย่างปลอดภัยโดยไม่ต้องขออินพุตอีกครั้ง

เอาต์พุตจากอินพุต 10 ไบต์, 0 หลังจากโบนัส

i~a&{X:.)}

iรับอินพุตจากผู้ใช้ดันเป็น UTF-8 ที่ด้านบนสุดของสแต็กและกดความยาวหลังจากนั้น คือ[72,101,108,108,111,5]
~ดึงตัวเลขจากสแต็กจากนั้นกลับจำนวนไบต์นั้น Ie [111,108,108,101,72]
aHexadecimal สำหรับ10อักขระบรรทัดใหม่
&{...}ทำให้วนซ้ำไม่สิ้นสุด เรามีอินพุตดังนั้นเราจึงไม่สามารถส่งตัวชี้กลับไปที่บรรทัด ฉันสามารถวางฟังก์ชั่นในบรรทัดด้านล่างซึ่งจะปลอดภัยฉันไบต์ แต่บรรทัดใหม่ไม่ได้รับอนุญาตในความท้าทายนี้
Xลบค่าสูงสุดออกจากสแต็ก (ดัชนีจากลูป)
:.ทำซ้ำค่าสูงสุดจากนั้นส่งออกเป็น UTF-8
)หมุนสแต็กไปทางขวา ( [1,2,3,4,5]-> [5,1,2,3,4])

Howver ซึ่งหมายความว่าเราเริ่มต้นด้วยการขึ้นบรรทัดใหม่จากนั้นเริ่มเอาท์พุทอินพุตจากนั้นขึ้นบรรทัดใหม่จากนั้นป้อนข้อมูล ฯลฯ หากเราไม่ได้รับอนุญาตให้เริ่มต้นด้วยการขึ้นบรรทัดใหม่ให้ใช้รหัสต่อไปนี้ด้วย 12 ไบต์หรือ 2 หลังจากลบออก โบนัส

iXa#~&{X:.)}

คำสั่งใหม่เฉพาะที่นี่คือ#ซึ่งจะผลักดันจำนวนรายการในสแต็กไปยังสแต็ก
ฉันลบความยาวออกiเนื่องจากเพิ่ม 1 แล้วการสลับกับ newline นั้นยาวกว่าการลบและรับความยาวอีกครั้ง

เพื่อความสนุกนี่คือโปรแกรม "Hello World"

"Hello World"#~
#?!;.<

การ?!ดำเนินการเหมือนกับ> <>


ที่จริงแล้วข้อ จำกัด ใช้กับภาษาที่กำหนดเอง / ไลบรารี / ฟีเจอร์ที่เผยแพร่หลังจากคำถามถูกโพสต์
จัดการ

@ manatwork นั่นหมายความว่าคำตอบของฉันไม่ถูกต้อง ขอขอบคุณสำหรับการชี้แจง. ฉันทำภาษานี้และต้องการที่จะทำสิ่งที่ท้าทายกอล์ฟเพื่อทดสอบสิ่งที่ฉันสามารถปรับปรุงสำหรับรุ่นอนาคตถ้านั่นทำให้อะไรดีขึ้น
ชาร์ลี

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

2

APL (Dyalog APL) , 5 - 10 = -5 ไบต์

คำเตือน: อาศัยฟีเจอร์ / บั๊กที่ไม่มีเอกสารและไม่สนับสนุน

⎕←⍣≢⍞

ที่ว่างเปล่า STDINพิมพ์บรรทัดว่าง (ไม่ใช่ "Y") ซึ่งได้รับอนุญาตและได้รับการแนะนำ

ลองออนไลน์!

 STDOUT พร้อมการขึ้นบรรทัดใหม่

 ได้รับ

 ซ้ำ ๆ จนกระทั่ง

 มันแตกต่างจาก

 STDIN

ie ไม่เคย แต่ไม่หยุดชะงักโดยหยุดเธรดชั่วคราว


อืมมม การใช้ข้อบกพร่องในทางที่ผิด .. น่าสนใจ
Matthew Roh

@MatthewRoh ใช้ไม่ได้ใช้ในทางที่ผิด "ฟีเจอร์" กำลังใช้โอเปอเรเตอร์กับการมอบหมายแม้ว่าจะไม่ใช่ฟังก์ชั่นจริงที่เหมาะสม ยังทำงานผ่าน ...
2560

2

> <>, 6 ไบต์

b:*oao

เมื่อไม่รวม a ;ในตอนท้าย> <>จะยังคงว่ายน้ำจนกว่าเขาจะได้รับการปล่อยตัวจาก SIGINT

คำอธิบาย

b:*oao
b         Push 11
 :        Duplicate
  *       Multiply top elements to get 121
   o      Print as character
    a     Push 10
     o    Print as character (yielding '\n')
          No program terminator, so our ><> will 
          keep on swimming this path forever.
^----' 


> <>, 17 - 10 = 7 ไบต์

ก่อนหน้านี้เป็นวิธีการแก้ปัญหาที่น่าเบื่อดังนั้นนี่คือวิธีการหนึ่งที่รับข้อมูลจาก stdin ละเมิดสิทธิมนุษยชนนี้ความจริงที่ว่าวิธีการเริ่มต้นของการจัดหาการป้อนข้อมูลไปยัง> <>โปรแกรมecho 'input' | fish.py yes.fishที่echoให้\nตัวละคร

 i:0)?!v
0r}o:r~<

คำอธิบาย

 i:0)?!v     Load STDIN into the stack (reversed)

             NOP           <----------,
 i           Push a byte from STDIN   |
  :          Duplicate top element    |
   0         Push 0                   |
    )?       If (i > 0):              |
      !        Wrap around  ----------'
             Else:
       v       Move to the second part

0r}o:r~<     Print STDIN until halted

       <     Go right         <---------------,
      ~      Remove top element (duplicated   |
                -1 from EOF)                  |
     r       Reverse stack                    |
    :        Duplicate top element            |
   o         Output as character              |
  }          Rotate stack to right (go to     |
                next character)               |
 r           Reverse the stack                |
0            Push 0                           |
             Wrap around       ---------------'

0rในตอนท้ายให้ SFOR ห่วงที่จะเกิดขึ้นโดยการตัดรอบที่เรายังคงถือว่าสแต็คที่จะตรงกันข้ามกับ-1ด้านบน


1

เห็นได้ชัดว่านี่ไม่ได้พกพาได้ทั้งหมด ของฉัน sys.version คือ 2.7.9 (default, Dec 11 2014, 04:42:00) \n[GCC 4.9.2]ดังนั้นหากคุณแตกต่างนี้อาจไม่ทำงานฉันเดา

Python 2 - (76-10) = 66

import sys
s=sys.stdin;a=`help`[1]if s.isatty()else s.read()
while 1:print a

ค่อนข้างยาว แต่ฉันต้องการโบนัส (แม้ว่าจะมีราคามากกว่า 10 ไบต์) การตรวจสอบว่า stdin ว่างเปล่าหรือไม่โดยไม่แจ้งให้ป้อนข้อมูลเห็นได้ชัด

ตอนแรกฉันเข้าใจผิดว่าเป็นการโต้แย้งแทนที่จะเป็น stdin ฉันภูมิใจในวิธีแก้ปัญหาของฉันดังนั้นฉันจึงโพสต์ไว้แล้ว;)

Python 2 - (52-10 + ∞) = ∞ (ไม่ถูกต้อง!)

import sys
while 1:print(sys.argv+[0])[1]or`help`[1]

sys.argvเป็นรายการที่องค์ประกอบ zeroth เป็นชื่อไฟล์และทุกองค์ประกอบ afterwords เป็นอาร์กิวเมนต์ที่กำหนดให้กับโปรแกรม ฉันเพิ่มค่าความเท็จในตอนท้ายของรายการ; หากไม่มีข้อโต้แย้งองค์ประกอบแรกคือค่าที่ผิดพลาดมิฉะนั้นจะเป็นอาร์กิวเมนต์แรก a or bใน Python จะส่งกลับค่าแรกที่ยืนยันว่าผลลัพธ์จะเป็นอย่างไร: หากaเป็นความจริงเรารู้อยู่แล้วว่าทุกสิ่งจะเป็นจริงดังนั้นจึงเพิ่งได้รับคืน หากเป็นเท็จbจะถูกส่งคืน (ตั้งแต่False or b== b)


@ ทอดฉันทำได้ แต่จะแจ้งให้ผู้ใช้ทราบ ฉันอยากให้มันคายออกมาy\nทันทีถ้า stdin ว่างเปล่า
undergroundmonorail

@ ทอดนั่นแปลกมันใช้งานได้สำหรับฉัน มันอาจจะขึ้นอยู่กับ cPython? ฉันไม่มีความคิดอื่นใด
undergroundmonorail

ความคิดที่ดีในนั้น
undergroundmonorail

r=raw_input();p=r if r else`help`[1]\nwhile 1:print p 52 ตัวอักษร
globby

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