หนึ่งในภารกิจมาตรฐานที่พบบ่อยที่สุด (โดยเฉพาะอย่างยิ่งเมื่อแสดงภาษาการเขียนโปรแกรมที่ลึกลับ) คือการใช้"โปรแกรมแมว" : อ่าน STDIN ทั้งหมดและพิมพ์ไปยัง STDOUT แม้ว่าสิ่งนี้จะตั้งชื่อตามยูทิลิตี้เชลล์ Unix cat
แต่ก็มีประสิทธิภาพน้อยกว่าของจริงมากซึ่งโดยปกติจะใช้ในการพิมพ์ (และเชื่อมต่อ) หลายไฟล์ที่อ่านจากแผ่นดิสก์
งาน
คุณควรเขียนโปรแกรมเต็มรูปแบบที่อ่านเนื้อหาของอินพุตสตรีมมาตรฐานและเขียนคำต่อคำลงในเอาต์พุตสตรีมมาตรฐาน หากและหากภาษาของคุณไม่รองรับอินพุตมาตรฐานและ / หรือกระแสข้อมูลออก (ตามที่เข้าใจในภาษาส่วนใหญ่) คุณสามารถใช้คำเหล่านี้เพื่อหมายถึงภาษาที่ใกล้เคียงที่สุดในภาษาของคุณ (เช่น JavaScript prompt
และalert
) นี่เป็นเพียงรูปแบบที่ยอมรับได้ของ I / O เนื่องจากอินเตอร์เฟสอื่น ๆ ส่วนใหญ่จะเปลี่ยนลักษณะของงานและให้คำตอบที่เทียบเคียงได้น้อยกว่ามาก
เอาท์พุทควรมีตรงเข้าและไม่มีอะไรอื่น ข้อยกเว้นสำหรับกฎนี้เท่านั้นคือเอาต์พุตแบบคงที่ของล่ามภาษาของคุณที่ไม่สามารถระงับได้เช่นคำทักทายรหัสสี ANSI หรือการเยื้อง นอกจากนี้ยังใช้กับการขึ้นบรรทัดใหม่ หากอินพุตไม่มีบรรทัดขึ้นต่อท้ายเอาต์พุตไม่ควรรวมหนึ่งบรรทัด! (ข้อยกเว้นเพียงอย่างเดียวคือถ้าภาษาของคุณพิมพ์บรรทัดใหม่ที่ต่อท้ายเสมอหลังการดำเนินการ)
เอาต์พุตไปยังสตรีมข้อผิดพลาดมาตรฐานจะถูกละเว้นตราบใดที่เอาต์พุตสตรีมมาตรฐานมีเอาต์พุตที่คาดหวัง โดยเฉพาะอย่างยิ่งนี่หมายความว่าโปรแกรมของคุณสามารถยุติด้วยข้อผิดพลาดเมื่อกดจุดสิ้นสุดของสตรีม (EOF) โดยที่ไม่ทำให้เกิดมลพิษต่อสตรีมเอาต์พุตมาตรฐาน หากคุณทำเช่นนี้ฉันขอแนะนำให้คุณเพิ่มเวอร์ชันที่ปราศจากข้อผิดพลาดในคำตอบของคุณด้วย (สำหรับการอ้างอิง)
เนื่องจากนี่เป็นความท้าทายในแต่ละภาษาและไม่ใช่ระหว่างภาษาจึงมีกฎเฉพาะบางภาษา:
- หากเป็นไปได้ในภาษาของคุณที่จะแยกแยะโมฆะ null ในสตรีมอินพุตมาตรฐานจาก EOF โปรแกรมของคุณจะต้องสนับสนุน null ไบต์เช่นไบต์อื่น ๆ (นั่นคือพวกเขาจะต้องถูกเขียนไปยังสตรีมเอาต์พุตมาตรฐานด้วย)
- หากเป็นไปได้ในภาษาของคุณที่จะสนับสนุนการป้อนข้อมูลแบบไม่มีที่สิ้นสุดโดยพลการ (เช่นถ้าคุณสามารถเริ่มพิมพ์ไบต์ไปยังเอาต์พุตก่อนที่คุณจะกด EOF ในอินพุต) โปรแกรมของคุณจะต้องทำงานอย่างถูกต้องในกรณีนี้ เป็นตัวอย่าง
yes | tr -d \\n | ./my_cat
ควรพิมพ์กระแสไม่สิ้นสุดของy
s มันขึ้นอยู่กับคุณว่าคุณพิมพ์และส่งกระแสข้อมูลมาตรฐานบ่อยแค่ไหน แต่ต้องรับประกันว่าจะเกิดขึ้นหลังจากระยะเวลา จำกัด โดยไม่คำนึงถึงกระแส (โดยเฉพาะอย่างยิ่งหมายความว่าคุณไม่สามารถรอตัวละครที่เฉพาะเจาะจงเช่น ตัวป้อนบรรทัดก่อนพิมพ์)
โปรดเพิ่มหมายเหตุลงในคำตอบของคุณเกี่ยวกับพฤติกรรมที่แน่นอนเกี่ยวกับ null-bytes, infinite stream และเอาท์พุตภายนอก
กฎเพิ่มเติม
นี่ไม่ได้เกี่ยวกับการค้นหาภาษาด้วยวิธีแก้ปัญหาที่สั้นที่สุดสำหรับเรื่องนี้ (มีบางโปรแกรมที่โปรแกรมเปล่าทำเคล็ดลับ) - สิ่งนี้เกี่ยวกับการค้นหาวิธีแก้ปัญหาที่สั้นที่สุดในทุกภาษา ดังนั้นจะไม่มีการทำเครื่องหมายคำตอบว่าเป็นที่ยอมรับ
การส่งในภาษาส่วนใหญ่จะได้คะแนนเป็นไบต์ในการเข้ารหัสที่มีมาก่อนโดยปกติ UTF-8 (แต่ไม่จำเป็น)
บางภาษาเช่นโฟลเดอร์นั้นค่อนข้างยากที่จะทำคะแนน หากมีข้อสงสัยกรุณาสอบถามในMeta
อย่าลังเลที่จะใช้ภาษา (หรือรุ่นภาษา) แม้ว่ามันจะใหม่กว่าความท้าทายนี้ ภาษาที่เขียนขึ้นเพื่อส่งคำตอบแบบ 0 ไบต์ต่อความท้าทายนี้เป็นเกมที่ยุติธรรม แต่ไม่น่าสนใจอย่างยิ่ง
โปรดทราบว่าจะต้องมีล่ามเพื่อให้สามารถส่งการทดสอบได้ ได้รับอนุญาต (และสนับสนุนให้) เขียนล่ามนี้ด้วยตัวคุณเองสำหรับภาษาที่ยังไม่ได้ใช้งานมาก่อน
นอกจากนี้ทราบว่าภาษาไม่ต้องปฏิบัติตามเกณฑ์ปกติของเราสำหรับการเขียนโปรแกรมภาษา
หากภาษาที่คุณเลือกนั้นแตกต่างจากภาษาอื่น (อาจเป็นที่นิยมมากกว่า) ซึ่งมีคำตอบอยู่แล้ว (คิดว่าภาษาเบสิกหรือภาษา SQL, เชลล์ Unix หรืออนุพันธ์ Brainfuck ที่น่าสนใจเช่น Headsecks หรือ Unary) ให้เพิ่มบันทึกย่อลงในคำตอบที่มีอยู่ว่า วิธีการแก้ปัญหาที่เหมือนกันหรือคล้ายกันมากนั้นก็สั้นที่สุดในภาษาอื่น
จนกว่าพวกเขาจะได้รับการตกไปก่อนหน้านี้ทุกมาตรฐานรหัสกอล์ฟกฎรวมทั้งhttp://meta.codegolf.stackexchange.com/q/1061
โปรดอย่าลดคำตอบที่น่าเบื่อ (แต่ใช้ได้) ในภาษาที่มีกอล์ฟไม่มากนัก สิ่งเหล่านี้ยังคงมีประโยชน์สำหรับคำถามนี้เนื่องจากพยายามรวบรวมแค็ตตาล็อกให้สมบูรณ์ที่สุด อย่างไรก็ตามให้ตอบคำถามเป็นหลักในภาษาที่ผู้เขียนต้องใช้ความพยายามในการตีกอล์ฟ
แค็ตตาล็อก
สแต็คส่วนย่อยที่ด้านล่างของโพสต์นี้สร้างแคตตาล็อกจากคำตอบ a) เป็นรายการคำตอบสั้นที่สุดต่อภาษาและ b) เป็นลีดเดอร์บอร์ดโดยรวม
เพื่อให้แน่ใจว่าคำตอบของคุณปรากฏขึ้นโปรดเริ่มคำตอบด้วยหัวข้อโดยใช้เทมเพลต Markdown ต่อไปนี้:
## Language Name, N bytes
ที่N
มีขนาดของส่งของคุณ หากคุณปรับปรุงคะแนนของคุณคุณสามารถเก็บคะแนนเก่าไว้ในบรรทัดแรกโดยการตีพวกเขาผ่าน ตัวอย่างเช่น
## Ruby, <s>104</s> <s>101</s> 96 bytes
หากคุณต้องการรวมหลายตัวเลขไว้ในส่วนหัวของคุณ (เช่นเนื่องจากคะแนนของคุณคือผลรวมของไฟล์สองไฟล์หรือคุณต้องการแสดงรายการบทลงโทษการตั้งค่าสถานะของล่ามแยกต่างหาก) ตรวจสอบให้แน่ใจว่าคะแนนจริงเป็นตัวเลขสุดท้ายในส่วนหัว:
## Perl, 43 + 2 (-p flag) = 45 bytes
คุณยังสามารถตั้งชื่อภาษาให้เป็นลิงค์ซึ่งจะปรากฏในตัวอย่างข้อมูล:
## [><>](http://esolangs.org/wiki/Fish), 121 bytes
sh
คำตอบโดยใช้cat
ซึ่งนอกจากนี้ยังมีวิธีการแก้ปัญหาโดยใช้สั้นdd
.)
cat