สร้างบิด“ Hello world!”


31

งานของคุณคือค่อนข้างง่ายเขียนโปรแกรมที่พิมพ์ว่าเมื่อบิดสร้างโปรแกรมที่พิมพ์Hello, world!Twister!

วิธีการที่สตริงจะบิด

อัลกอริทึมการบิดนั้นง่ายมาก แต่ละคอลัมน์ถูกเลื่อนลงโดยดัชนี (คอลัมน์ 0 เคลื่อนลง 0, คอลัมน์ 1 เลื่อน 1, ... ) การเปลี่ยนคอลัมน์ล้อมรอบด้านบน มันดูเหมือนว่า:

a
ba
cba
----
 cba
  cb
   c

พร้อมทุกอย่างภายใต้การตัดบรรทัดไปด้านบน ตัวอย่างจริง:

Original:
\\\\\\\\\\\\
............
............
............

Twisted:
\...\...\...
.\...\...\..
..\...\...\.
...\...\...\

(ตัวอย่างเพิ่มเติมและ twisters ในภาษาที่คุณชื่นชอบอยู่ที่นี่ )

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

โปรแกรมของคุณจะต้องเป็นสี่เหลี่ยมมุมฉาก นี่คือโค้ดกอล์ฟที่มีจำนวนไบต์ต่ำสุดที่จะชนะ!

กฎระเบียบ

  • โปรแกรมแรกของคุณจะต้องพิมพ์ Hello, world!โปรแกรมแรกของคุณจะต้องพิมพ์ขึ้นบรรทัดใหม่เพียงหนึ่งบรรทัดเท่านั้น
  • โปรแกรมแรกและโปรแกรมที่สองของคุณต้องเป็นภาษาเดียวกัน
  • Twister!โปรแกรมที่สองของคุณจะต้องพิมพ์ ขึ้นบรรทัดใหม่เพียงหนึ่งบรรทัดเท่านั้น
  • โปรแกรมของคุณต้องมีอย่างน้อย 2 แถวและ 2 คอลัมน์

3
ในหน้ารหัสของเยลลี่ตัวละครที่สอดคล้องกับ (และเพื่อวัตถุประสงค์ทั้งหมดทำหน้าที่) ตัวป้อนบรรทัดมีจุดโค้ด 127 (ASCII DEL) อักขระที่มีรหัสจุด 10 (ASCII linefeed) มีสัญลักษณ์½และใช้รากที่สองของตัวเลข หนึ่งในสองที่ควรพิจารณาเป็นบรรทัดใหม่สำหรับความท้าทายนี้
เดนนิส

Darn เป็นฉันเพียงคนเดียวที่หวังว่า "Twisted Hello World" ใช้ "twisted" ในความรู้สึกที่ผิดปกติดังนั้นเราจะแสดงผลลัพธ์เช่น "Goodbye Cruel World" แทน ..
DasBeasto

@Dennis ฉันคิดว่าสิ่งที่ดีกว่าที่จะใช้ในกรณีนี้คือ newline jelly
J Atkin

@JAtkin ตกลงขอบคุณสำหรับการชี้แจง ฉันอัพเดตคำตอบแล้ว
เดนนิส

คำตอบ:


10

เจลลี่ , 33 วันที่ 31 29 ไบต์

เป็นต้นฉบับ

“ɗ⁻%OḶ$“¡¦ḟṠ»Ṫ
“ɗ⁻%OḶ$“¡¦ḟṠ»Ḣ

ลองออนไลน์

เป๋

“ɗ⁻%OḶ$“¡¦ḟṠ»Ḣ
“ɗ⁻%OḶ$“¡¦ḟṠ»Ṫ

ลองออนไลน์!

มันทำงานอย่างไร

ในแต่ละโปรแกรมแต่ละบรรทัดจะกำหนดลิงก์ ลิงค์สุดท้ายคือลิงค์หลักและจะถูกเรียกใช้งานเมื่อโปรแกรมเริ่มทำงาน เนื่องจากไม่มีการอ้างอิงไปยังลิงก์แรกจึงไม่สนใจ

สำหรับโปรแกรมทั้ง“ɗ⁻%OḶ$“¡¦ḟṠ»ผลตอบแทนถัวเฉลี่ยรายการ['Hello, world!', 'Twister!']โดยใช้การบีบอัดพจนานุกรมคงวุ้นของ

ข้อแตกต่างระหว่างรหัสต้นฉบับและรหัสบิดคืออักขระตัวสุดท้ายของลิงก์หลัก เลือกสตริงแรกของรายการและเลือกสตริงสุดท้าย


2
ดูเหมือนว่ามันจะกรีดร้องว่า "Holy Sh * t"
เฟส

42

Python 2, 59 ไบต์

print "  Hello, world!"[ 2::]
#rint "T w i s t e r !"[ ::2]

Twisted:

print "T weils,twerrd!"[ ::2]
#rint "  H l o   o l !"[ 2::]

โดยทั่วไปจะใส่Twister!ข้อมูลในดัชนีคี่ของสตริงแล้วเปลี่ยนจากการลบอักขระสองตัวแรก (padding) เป็นการลบอักขระอื่นทุกตัวแทน


นี่ฉลาดกว่าแนวทางของฉันมาก
wnnmaw

นี่มันไร้สาระเลย 40 upvotes?
J Atkin

@JAtkin ฉันสังเกตว่าโซลูชัน Python บางตัวมีแนวโน้มที่จะได้รับจำนวนมหาศาล ไม่ใช่ว่าฉันจะบ่น: ~)
PurkkaKoodari

วิธีที่เย็นกว่า:print " Hello, world!" [2::]
Erik the Outgolfer

@ EʀɪᴋᴛʜᴇGᴏʟғᴇʀใช้งานได้ แต่ฉันจะเก็บไว้ตามนี้
PurkkaKoodari

17

ฟิชชัน , 215 162 56 53 50 ไบต์

นี่คือจุดเริ่มต้น:

D1
\\
""
TH
we
il
sl
to
e,
r 
!w
"o
1r
;l
1d
;!
 "

ลองออนไลน์!

เมื่อบิด:

D"
\1
"\
T"
wH
ie
sl
tl
eo
r,
! 
"w
1o
;r
1l
;d
 !

ลองออนไลน์!

คำอธิบาย

Hello, world!รหัสค่อนข้างง่าย:

  • D วางไข่อะตอมเดียวลงไป
  • \กระจกสองตัวเบี่ยงเบนไปที่คอลัมน์ที่สอง
  • "Hello, world!" พิมพ์สตริงที่ต้องการ
  • 1เป็นพอร์ทัล มันเคลื่อนย้ายอะตอมไปยังลำดับถัดไป1ในการอ่านเพื่อรักษาทิศทางของมัน (นั่นคืออันถัดจากr)
  • อะตอมยังคงเคลื่อนที่ลงไป;ซึ่งจะทำลายอะตอมและยุติโปรแกรม

โฟลว์การควบคุมสำหรับTwister!โค้ดนั้นค่อนข้างมาก ... บิด ...

  • อีกครั้งที่Dวางไข่อะตอม
  • \เบี่ยงเบนไปทางขวาเข้าสู่1.
  • 1ตอนนี้พอร์ทัลส่งอะตอมต่อไป อะตอมจะกระทบกับoการเปลี่ยนแปลงมวลของมัน แต่เราสามารถเพิกเฉยได้ โค้ดล้อมรอบเพื่อให้อะตอมชนกัน1อีกครั้งโดยข้ามสองแถว อีกครั้งเราสามารถเพิกเฉยlอะตอมนั้นล้อมรอบและกระทบ1อีกครั้ง ตอนนี้ไม่มีอะไรเพิ่มเติม1ในรหัสดังนั้นอะตอมจะข้ามกลับไป1ที่ด้านบนสุด
  • หลังจากล้อมรอบขอบอีกครั้งอะตอมถูกเบี่ยงเบนอีกครั้งโดย\ตอนนี้ลงไปอีกครั้ง
  • "Twister!" พิมพ์รหัสที่ต้องการ
  • 1เทเลโฟร์อะตอมอีกครั้งผ่านครั้งแรก;แต่มีอีกอันหนึ่ง;รอให้โปรแกรมยุติการทำงาน

ว้าวใกล้มากแล้ว! :) ฉันแน่ใจว่ามีวิธีที่จะสั้น ...
FryAmTheEggman

ทำไมคุณถึงชอบฟิชชั่น?
J Atkin

@JAtkin ทำไมเราไม่ทำล่ะ :)
Martin Ender

@ MartinBüttnerฉันคิดอย่างเฉพาะเจาะจงว่าทำไมถึงมีความท้าทายนี้
J Atkin

1
@JAtkin 2D ภาษาดูเหมาะสมและฟิชชันดูเหมือนง่ายเป็นพิเศษเพราะคุณสามารถเลือกจุดเข้าใช้อย่างน้อยหนึ่งจุดในโปรแกรม
Martin Ender

15

ฟิชชัน , 35 ไบต์

วิธีฟิชชัน # 3 (# 4 นับจำนวนที่ฉันแก้ไขจากโพสต์แรกของฉัน)

R"Hello, " \"tri"
T;L"!dlrow"/"es!w

ลองออนไลน์!

R;H"ldor w /"er!"
T"Le!ll,o""\"tsiw

ลองออนไลน์!

คำอธิบาย

อันนี้จริง ๆ แล้วเป็นวิธีที่ง่ายที่สุดในการแก้ปัญหาฟิชชัน ในทั้งสองโปรแกรมมีจุดเข้าใช้งานสองจุด: Rสร้างอะตอมที่ถูกต้องและอะตอมLซ้ายไป ในทั้งสองกรณี;ทำลายหนึ่งในนั้นทันที

ตอนนี้ในHello, world!โปรแกรมอะตอมแรกพิมพ์ครึ่งสตริงด้วย"Hello, "แล้ว\และ/(ซึ่งเป็นมิเรอร์) เบี่ยงเบนอะตอมไปยังบรรทัดที่สองที่เหลือ "world!"(อ่านในทิศทางของอะตอมที่กำลังเคลื่อนที่) พิมพ์ส่วนที่เหลือของสตริง Lตอนนี้เป็น no-op และ;ทำลายอะตอมนี้เช่นกันการยกเลิกโปรแกรม

Twister!โปรแกรมเป็นหลักเหมือนกัน แต่หมุน 180 องศา เวลานี้อะตอมมีชีวิตอยู่และเริ่มพิมพ์ด้วยL และอีกครั้งเบนเข็มลงไปบนเส้นอื่น ๆ ที่ตอนนี้ไปทางขวา พิมพ์ส่วนที่เหลือของสตริงเป็น no-op และยกเลิกโปรแกรม"Twist"\/"er!R;


! ที่น่าตื่นตาตื่นใจ ฉันคิดว่านี่เป็นเรื่องเล็กน้อยที่จะได้รับปริมาณการใช้ซ้ำนั้นน่าประทับใจ
FryAmTheEggman


4

Japt, 67 61 57 ไบต์

บันทึกแล้ว 6 ไบต์ขอบคุณ @JAtkin, 4 ไบต์ขอบคุณ @Ian

"Tzwzizsztzezzzzzzrzzzz!"rz;
"Hzezlzlzoz,z zwzorlzdz!"rz;

Twisted:

"Hzezlzlzoz,z zwzorlzdz!"rz;
"Tzwzizsztzezzzzzzrzzzz!"rz;

ทดสอบออนไลน์: ต้นฉบับ , Twisted

มันทำงานอย่างไร

"Tzwzizsztzezzzzzzrzzzz!"rz;  // Take this string and remove all "z"s.
"Hzezlzlzoz,z zwzorlzdz!"rz;  // Take this string and remove all "z"s.
                              // Implicit: output *last* expression

ถ้างานนี้เหมือนที่ผมคิดว่ามันไม่คุณสามารถลบพื้นที่ต่อท้ายหลังโดยการแทนที่ช่องว่างด้วยTwister! .
J Atkin

@JAtkin มันใช้งานไม่ได้จริง ๆ แต่ฉันสามารถบันทึกได้หลายไบต์ ขอบคุณ!
ETHproductions

"T.w.i.s.t.e.r.!. . . . . "k".(newline)"H.e.l.l.o.,. .w.o.r.l.d.!"k".
J Atkin

อาจจะง่ายกว่ามากในการอ่านที่มีตัวเติมที่แตกต่างกัน ...
mbomb007

4
@ mbomb007 ตั้งแต่เมื่อใดที่ "ง่ายต่อการอ่าน" ความสำเร็จ? : D
yo '

4

Python, 398 414 380 456ไบต์ *

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

โซลูชันนี้ไม่ปฏิบัติตามกฎเนื่องจากจะพิมพ์ข้อความแสดงข้อผิดพลาดเพิ่มเติมจากผลลัพธ์ที่ได้รับอนุญาต

ฉันแค่อยากจะดูว่าสิ่งนี้สามารถทำได้ในหลาม มันสามารถ แต่มันไม่สวย

print'Hello, world!'
#rint'Twister!'     
#rint'Twister!'     
#rint'Twister!'     
#rint'Twister!'     
#rint'Twister!'     
#rint'Twister!'     
#rint'Twister!'     
#rint'Twister!'     
#rint'Twister!'     
#rint'Twister!'     
#rint'Twister!'     
#rint'Twister!'     
#rint'Twister!'     
#rint'Twister!'     
#rint'Twister!'     
#rint'Twister!'     
#rint'Twister!'     
#rint'Twister!'     

เมื่อบิดเป็นเกลียว

print'Twister!'
#rint'Twister!'
#rint'Twister!'
#rint'Twister!'
#rint'Twister!'
#rint'Twister!'
#rint'Hwister!'
#rint'Teister!'
#rint'Twlster!'
#rint'Twilter!'
#rint'Twisoer!'
#rint'Twist,r!'
#rint'Twiste !'
#rint'Twisterw'
#rint'Twister!o
#rint'Twister!'r
#rint'Twister!' l
#rint'Twister!'  d
#rint'Twister!'   !

ฉันคิดว่าคุณสามารถลบช่องว่างในแต่ละบรรทัดจากนั้นลบบรรทัดสุดท้ายโดยสิ้นเชิง
ETHproductions

ฉันไม่คิดว่าจะทำเช่นนั้นเพราะขัดกับกฎของการเริ่มต้นการบิด แต่ขอขอบคุณ!
wnnmaw

คุณลืมที่จะอัปเดตรหัส;)
ETHproductions

ฉันคิดว่ามันจะไม่สำคัญ แต่ฉันทำได้ดีมาก
wnnmaw

1
ฉันคิดว่าคุณเข้าใจผิด รหัสจะต้องเป็นรูปสี่เหลี่ยมผืนผ้าเบาะ แต่คุณสามารถลบช่องว่างออกจากrint 'ในทุกบรรทัด
ETHproductions


1

Brainfuck, 467 367 285 ไบต์

untwisted

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

ลองออนไลน์!

เป๋

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

ลองออนไลน์!


1
คุณสามารถบันทึกไบต์โดยใช้ชื่อ "Hello, world!" โปรแกรม
Jo King

@JoKing ขอบคุณสำหรับคำแนะนำ! ความคิดใด ๆ วิธีหา "Twister ที่เล็กลง" โปรแกรมเช่นกัน?
orthoplex

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