สวัสดีชาวโลก! โดยไม่มีการซ้ำซ้อน


27

ในภาษาการเขียนโปรแกรมใด ๆ ที่มีอยู่ก่อนที่จะถามคำถามนี้ให้เขียนโปรแกรม (ไม่ใช่ฟังก์ชั่น) ที่ให้ผลลัพธ์อักขระHello world!ตามด้วยการขึ้นบรรทัดใหม่ โปรแกรมของคุณ:

  • ไม่ควรใช้อักขระมากกว่าหนึ่งครั้ง (รวมถึงช่องว่าง)
  • ควรใช้อักขระ ASCII เท่านั้น
  • ไม่ควรใช้ไลบรารีที่มีอยู่แล้ว
  • ไม่ควรรับอินพุต (ผู้ใช้ไฟล์ชื่อไฟล์ตัวแปรระบบอินเทอร์เน็ตอะไรก็ได้)
  • ไม่ควรส่งออกอย่างอื่น

ผู้ชนะคือผู้ที่ได้คะแนนมากที่สุดหลังจาก 14 วันและปฏิบัติตามกฎทั้งหก

กฎข้อที่หกคือคุณไม่สามารถใช้ H9 +, HQ9 +, HQ9 + B, HQ9 ++, HQ9 + 2D, Hello, Hello +, Hello ++, Hexish, CHIQRSX9 + หรือ Fugue นอกจากนี้คำตอบทั้งหมดที่ต้องมีการใช้งานที่ใหม่กว่าความท้าทายนี้จะต้องทำเครื่องหมายว่าไม่ใช่การแข่งขัน


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


หากเรากำลังหลบหนีรหัสอักขระจะสามารถใช้อักขระ "\" มากกว่าหนึ่งครั้งได้หรือไม่
WallyWest

4
แล้ว piet ล่ะ
Victor Stafusa

@Victor "ควรใช้อักขระ ASCII เท่านั้น"
Timtech

3
นั่นเป็นปริศนาที่ยอดเยี่ยมและฉันสนุกกับการทำมัน :-)
Konrad Borowski

9
“ ควรใช้อักขระ ASCII เท่านั้น” - ข้อ จำกัด ที่เข้มงวด ซึ่งจะลบคลาสทั้งหมดของภาษาที่ไม่ได้เกิดขึ้นกับการใช้ ASCII
Timwi

คำตอบ:


33

Perl 6 (29 28 ตัวอักษร)

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

say
Q[@A`DO world!]~|<HeLhg>

มีโทเค็นที่น่าสนใจสี่อัน

  • say

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

  • Q[@A`DO world!]

    นี่คือสตริงแรก Q[]ใช้สำหรับสตริงดิบ (เหมือนr""ใน Python) มันสามารถใช้ตัวคั่นใด ๆ (หรือคู่ของพวกเขา) ในกรณี[]นี้ ในกรณีนี้ฉันใช้สิ่งนี้เพื่ออ้างอิงฉันไม่ต้องการพฤติกรรมสตริงแบบดิบ

  • ~|

    นี่คือตัวดำเนินการแบบสตริง ( ~) bitwise หรือ ( |)

  • <HeLhg>

    <>เป็นรายการตามตัวอักษรซึ่งใช้ช่องว่างคั่นรายการองค์ประกอบ ในกรณีนี้มันมีองค์ประกอบหนึ่งและใช้เป็นสเกลาร์มันให้สตริง


3
! ที่น่าตื่นตาตื่นใจ ฉันต้องการเรียนรู้ บางไวยากรณ์ Perl 6! ฉันเห็นด้วยกับความคิดเห็นของคุณเช่นกันเป็นปัญหาที่สนุกอย่างแน่นอน!
Dom Hastings

4
ว้าว ... ใจฉันถูกพัด: O +1
Doorknob

12

Perl 5กับ-M5.010, 29 ไบต์

say+He.v108
x2,q(O world!)^$"

ลองออนไลน์!

ฉันได้รับความรู้มากมายตั้งแต่ครั้งแรกที่ฉันลองทำสิ่งนี้ ยังไม่สั้นเท่ากับคำตอบอื่น ๆ แต่สิ่งที่ดีที่สุดที่ฉันสามารถทำได้!


wท้าทายมีกรณีที่ต่ำกว่า
Ørjan Johansen

@ ØrjanJohansenขอบคุณฉันลืม!
Dom Hastings

11

Perl 5.10+: 24 ตัวอักษร

say+He,YZX^q(567 world!)

ตกลงฉันคิดว่านี่สั้นเท่าที่จะได้รับใน Perl

ทำงานด้วยperl -M5.010(หรือเพียงperl -E) เพื่อเปิดใช้งานsayคุณสมบัติPerl 5.10+


ประทับใจอย่างจริงจัง! ผมใช้เวลาทุกเพศทุกวัยพยายามที่จะรับรอบlls ...
ดอมเฮสติ้งส์

9

Golfscript 42 33

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

{1wZ$Qei^Ak 3h-)ulmsogr7}.`*]2%n+

การสาธิตออนไลน์: http://golfscript.apphb.com/?c=ezF3WiRRZWleQWsgM2gtKXVsbXNvZ3I3fS5gKl0yJW4r

[{1$^(r iFNGDJUHv98oIMgtplbh4m}.`\*]6>2%n+

กำหนดบล็อครหัส สร้างสำเนาของบล็อครหัสและแปลงเป็นสตริง ใช้บล็อกรหัสเพื่อวนซ้ำสตริง สำหรับการวนซ้ำแต่ละครั้งโค้ดจะทำสำเนาของค่าถ่านก่อนหน้านี้หรือ xor กับค่าถ่านปัจจุบันและลบ 1 สตริงที่เกิดขึ้นนั้นจะมีการลบตัวอักษร 6 ตัวแรกและลบตัวอักขระที่สองทุกตัวออก ในที่สุดฟีดบรรทัดจะต่อท้าย

"r iFNGDJUHv98oIMgtplbh4m" เป็นเพียงตัวแปรสองตัวที่ไม่ได้ประกาศพวกเขาไม่ทำอะไรเลย แต่พวกมันถูกสร้างอย่างระมัดระวังเพื่อให้ได้ผลลัพธ์ที่ต้องการ

การสาธิตออนไลน์: http://golfscript.apphb.com/?c=W3sxJF4ociBpRk5HREpVSHY5OG9JTWd0cGxiaDRtfS5gXCpdNj4yJW4r


6

กลุ่ม 7.3, 18 การกดแป้น

:h-cu
9j3wy$<C-^>P<End>r!o

คัดลอกสตริงHello worldจากhelpfile นี้ซึ่งโชคไม่ดีที่ถูกลบใน Vim เวอร์ชันที่ไม่เคยใช้


ตามนี้ Keystrokes like <Esc>และชุดค่าผสมที่เกี่ยวข้องกับการนับคีย์ Ctrl เป็นหนึ่งไบต์
oktupol

6

Befunge-98 , 34 31 bytes

f"v!dlrow
+c<>a,kb@#*98e':g05-3

ลองออนไลน์!

ใช้วิธีการที่แตกต่างกันเล็กน้อยเพื่อหลีกเลี่ยงอักขระที่ซ้ำซ้อน

อันดับแรกเราใช้การตัดสตริงตามตัวอักษรเพื่อหลีกเลี่ยงการใช้สอง"s นี่เป็นการเพิ่ม "โลก!" เพื่อสแต็ค

ไปทางซ้ายบนบรรทัดที่สองเราเพิ่ม 9 ลงในส่วนเสริมfเพื่อสร้างo"Hello" เราได้gตัวละครจากเซลล์ 5,0 ( l) จากนั้นทำซ้ำ จะใช้ในการดึงข้อมูลตัวอักษร' eคูณ 9 8 ที่จะได้รับ 72, Hค่าของ จากนั้นเราพิมพ์ทุกอย่างโดยใช้ck,และพลิกทิศทางด้วย>เพื่อนำมาใช้ใหม่,เพื่อพิมพ์บรรทัดใหม่ ( a)


ดีมาก แต่ความท้าทายนี้ไม่มีเครื่องหมายจุลภาค
Ørjan Johansen

โอ้ฮ่า ๆ นั่นทำให้มันง่ายขึ้น ... ขอบคุณ @ ØrjanJohansen
Jo King

คุณมีสองของและ+ d
Ørjan Johansen

@ ØrjanJohansenอุ๊ปส์ ควรได้รับการแก้ไขแล้ว
Jo King

3

Elixir , 37 ไบต์

IO.puts~c(He#{[?n-2,108]}\x6f world!)

ลองออนไลน์!

ฉันไม่สามารถรับประกันได้ว่าสิ่งนี้จะได้ผลในปี 2557 เมื่อความท้าทายนี้ถูกโพสต์และ Elixir ยังคงเป็นรุ่นก่อน 1.0 (และไม่ว่าจะเป็นทางการ "แข่งขัน" แต่ดูบันทึกย่อประจำรุ่นของพวกเขาฉันคิดว่ามันควรจะเป็น ตกลง). อย่างไรก็ตามฉันมีความสุขที่ในที่สุดฉันก็พบทางออกที่ถูกต้องสำหรับงานนี้โดยใช้ภาษาวัตถุประสงค์ทั่วไปทั่วไปนอกเหนือจาก Perl!

เกมส์

IO.puts     #Print with trailing newline
~c(...)     #Sigil: charlist with interpolation
He          #Start of literal string...
#{...}      #Interpolated block
[?n-2,108]  #A list of codepoints for 2 'l's
\x6f        #Hex code for 'o'
world!      #...and done!

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