งานของคุณคือการสร้างโปรแกรมที่พิมพ์ "Greetings, Planet!" ตรงกับคอนโซล ดูเหมือนง่ายพอใช่ไหม นี่คือเคล็ดลับ รหัสจะต้องเป็นแบบ palindrome ซึ่งหมายความว่าอ่านจากขวาไปซ้ายเหมือนในซ้ายไปขวา ไม่อนุญาตช่องโหว่มาตรฐาน
งานของคุณคือการสร้างโปรแกรมที่พิมพ์ "Greetings, Planet!" ตรงกับคอนโซล ดูเหมือนง่ายพอใช่ไหม นี่คือเคล็ดลับ รหัสจะต้องเป็นแบบ palindrome ซึ่งหมายความว่าอ่านจากขวาไปซ้ายเหมือนในซ้ายไปขวา ไม่อนุญาตช่องโหว่มาตรฐาน
คำตอบ:
"!tenalP ,sgniteerG"
"Greetings, Planet!"
สิ่งนี้ใช้ได้เนื่องจากบรรทัดสุดท้ายของโปรแกรมแสดงบนหน้าจอในขณะที่สตริงแรกจะถือว่าเป็นความคิดเห็น
ตัวอักษรพิมพ์เล็กแต่ละตัวจะถูกจัดเก็บเป็น 2 ไบต์และอักขระที่เหลือคือ 1 ไบต์ ถ้าฉันจะงอกฎและพิมพ์ในตัวพิมพ์ใหญ่ทั้งหมดจะเป็น41 ไบต์ :
"!TENALP ,SGNITEERG"
"GREETINGS, PLANET!"
e
และi
(ตัวเลข) เพื่อลดจำนวนไบต์เพิ่มเติมได้หรือไม่
ฉันรู้ว่ามันช้าไปหน่อย (และค่อนข้างพิถีพิถัน) แต่ ...
x"!tenalP ,sgniteerG"!|o|!"Greetings, Planet!"x
คำตอบเหล่านี้แตกต่างกันเล็กน้อย มีโอกาสสำหรับทิศทางของโค้ดที่จะดำเนินการ
ดังนั้นโดย "การพิมพ์ไปยังคอนโซล" ฉันถือว่าคุณหมายถึงการพิมพ์ไปยัง stdout สิ่งนี้ทำให้เกิดข้อผิดพลาด; ข้อผิดพลาดจะถูกโยนไปที่ stderr หลังจากที่สตริงจะถูกพิมพ์ไปยัง stdout
เพื่อพิสูจน์ว่าวิธีนี้ใช้ได้ทั้งสองวิธีฉันใช้ "ทิศทางสุ่ม" ผู้กำกับ "x" ปลาเป็นภาษาสองมิติดังนั้นไม่ว่าผู้กำกับจะชี้ทางใดรหัสจะยังคงถูกดำเนินการ (ในที่สุด)
สมมติว่าผู้กำกับคนแรกชี้ไปทางขวาตัวละครจะถูกโหลดไปที่ "สแต็ค" ในลำดับย้อนกลับจากนั้นกลับด้านของการย้อนกลับ (หรือข้อความปกติ) จะถูกพิมพ์
สมมติว่าผู้กำกับทั้งสองชี้ไปทางซ้ายตัวละครจะถูกโหลดอีกครั้งเพื่อ "สแต็ค" ในลำดับย้อนกลับ (เนื่องจากโค้ดโหลดไปด้านหลังนี่ทิศทางไปทางซ้าย) จากนั้นกลับด้านของย้อนกลับ (หรือ ข้อความปกติ) ถูกพิมพ์
หากผู้กำกับแบบสุ่มชี้ขึ้นหรือลงสิ่งนี้จะไม่สำคัญ - ปลารู้วิธีวนรอบไปยังด้านล่างหรือด้านบนของรหัสชี้กลับไปที่ตัวสุ่ม ด้วยวิธีนี้มันจะวนลูปต่อไปเรื่อย ๆ จนกว่ามันจะชี้เข้าด้านในเพื่อให้โค้ดทำงาน
!|o|!
บิตไม่ต่อไปนี้จากทั้งสองด้าน:
!
ข้ามคำสั่งถัดไป (จะข้ามเสมอ|
)
|
เป็นตัวสะท้อนแสง o
มันชี้กลับเข้าสู่การ
o
เอาต์พุตรายการปัจจุบันของสแต็กเพื่อคอนโซลเป็นอักขระและลบออกจากสแต็ก
โดยพื้นฐานแล้วนี่คือเคล็ดลับ "กระจกสองบานในห้องน้ำที่กดกัน" ที่ฉันแสดงจนกระทั่งฉันทำไม่ได้อีกต่อไป
ตอนนี้ใช้อิโมจิแมว >o<
เปลี่ยนทิศทางเอาต์พุตขาเข้าอย่างไม่สิ้นสุดยังคงโยนข้อผิดพลาด แต่ฉันสามารถออกไปได้โดยไม่ใช้การข้ามไปยังการสะท้อน
จะเปิดออกผมเป็นสิทธิครั้งแรก - ความพยายามที่สองไม่ได้palindromicแต่มันก็สะท้อนแสง
x"!tenalP ,sgniteerG"!;oooooooooooooooooo;!"Greetings, Planet!"x
เพื่อนคนนี้อีกต่อไปอีกหน่อย
มันมีฟังก์ชั่นลูกศรแบบสุ่มที่เหมือนกัน (เพื่อพิสูจน์ว่าใช้ได้ทั้งสองวิธี) และไม่พิมพ์ไปยัง stderr
ความแตกต่างที่นี่ชัดเจน ;
แท้จริงฉันพิมพ์ออกมาทุกรายการในกองแล้วสิ้นสุดการดำเนินการกับ
การ!;
ดำเนินการไม่สิ้นสุดทันทีในขณะที่!
ข้ามรายการถัดไป ( จบการประมวลผลในกรณีนี้) และดำเนินการต่อไปจนกว่าจะถึงอีกด้านหนึ่งซึ่งทำหน้าที่เป็นที่;!
นั้นการดำเนินการสิ้นสุดก่อนที่จะข้ามสิ่งใด
มันเป็นไปตามรูปแบบทิศทางแบบสุ่มเช่นเดียวกับคำตอบที่สั้นกว่า
0000000: 73 2f 4a 4d 2d c9 cc 4b 2f d6 51 08 c8 49 cc 4b 2d 51 04 s/JM-..K/.Q..I.K-Q.
0000013: 04 51 2d 4b cc 49 c8 08 51 d6 2f 4b cc c9 2d 4d 4a 2f 73 .Q-K.I..Q./K..-MJ/s
print "Greetings, Planet!""!tenalP ,sgniteerG" tnirp
โซลูชันที่ไม่ใช้ความคิดเห็น (ส่วนใหญ่เป็นเพราะ Macaroni ไม่มีความคิดเห็น ... )
ขอบคุณเดนนิสสำหรับการปิดสามไบต์
"!tenalP ,sgniteerG";"Greetings, Planet!"
!tenalP ,sgniteerG"Greetings, Planet!
บันทึกไม่กี่ไบต์
สิ่งนี้สามารถทำงานได้ในเบราว์เซอร์ใด ๆ
alert("Greetings, Planet!")//)"!tenalP ,sgniteerG"(trela
print/tnirp
ด้วยalert/trela
จะทำงานในเอนจิ้นอื่นเช่นกัน
alert`Greetings, Planet!`//`!tenalP ,sgniteerG`trela
52 ไบต์
"Greetings, Planet!":"!tenalP ,sgniteerG"
ดูสิว่าไม่มีตัวเลือก! ลองใช้ออนไลน์ในเว็บ GolfScript
ครึ่งหลังของซอร์สโค้ดเก็บสตริงในสตริงที่สอง
"Greetings, Planet!":"!tenalP ,sgniteerG"
"!tenalP ,sgniteerG"
จะพิมพ์
Greetings, Planet!Greetings, Planet!
การพยายามทำสิ่งนี้โดยปราศจากความคิดเห็นทำให้ฉันกลายเป็นฝันร้ายของนักพรีโพรเซสเตอร์ที่มืดและลึกโดยที่ไม่มีทางที่ฉันจะได้เห็น แต่ฉันแค่มุ่งหวังที่จะทำให้มันสั้นที่สุด
/**/
#include<cstdio>
int main(){puts("Greetings Planet!");}//*/
/*//};)"!tenalP sgniteerG"(stup{)(niam tni
>oidtsc<edulcni#
/**/
print('Greetings, Planet!')#)'!tenalP ,sgniteerG'(tnirp
ฉันแก้ไขปัญหาด้วยวงเล็บ
print'Greetings, Planet!'#'!tenalP ,sgniteerG'tnirp
ฉันใช้ประโยชน์จากการขาดวงเล็บและช่องว่างที่จำเป็นใน Python 2 แต่ก็ไม่ได้มีความแตกต่างใหญ่นัก
25 ไบต์ คำตอบนี้ไม่ใช่การแข่งขันเนื่องจากความท้าทายมาก่อนการสร้างเจลลี่
»1ị“RsẈḄ,#ʠU“Uʠ#,ḄẈsR“ị1»
ดูสิไม่มีความเห็น! ลองออนไลน์!
»1ị“RsẈḄ,#ʠU“Uʠ#,ḄẈsR“ị1» Main link. No arguments.
“ “ “ » Decompress all three strings; yield a list of strings.
RsẈḄ,#ʠU (decompresses to 'Greetings, Planet!')
Uʠ#,ḄẈsR (decompresses to ' WafdkmC Posited,')
ị1 (decompresses to 'Taarhus')
»1 Take the maximum of the default argument (0) and 1.
ị Select the string at the index to the left.
"Greetings, Planet!"p"!tenalP ,sgniteerG"
ค่อนข้างคล้ายกับคำตอบ CJam ยกเว้นใน Stuck หากออกคำสั่งพิมพ์การพิมพ์สแต็คอัตโนมัติจะถูกระงับ
Print@"Greetings, Planet!""!tenalP ,sgniteerG"@tnirP
สร้างสิ่งNull "!tenalP ,sgniteerG"[tnirP]
ที่ไม่ได้รับการพิมพ์ด้วย
Echo
v10.3
ขอบคุณ jimmy23013 สำหรับการบันทึก 2 ไบต์
;"!tenalP ,sgniteerG"R"Greetings, Planet!";
R
เริ่มต้นอะตอมซึ่งเคลื่อนไปทางขวา "
สลับโหมดสตริงซึ่งพิมพ์สตริงที่ต้องการเป็น STDOUT ก่อนกดปุ่ม;
ซึ่งจะทำลายอะตอมและยุติโปรแกรม ครึ่งแรกนั้นไม่เคยถูกประหาร
รหัส:
”!º¥,ÁÙ””ÙÁ,¥º!”
คำอธิบาย:
”!º¥,ÁÙ” # Compressed string which results in "! Crm, Everywhere".
”ÙÁ,¥º!” # Compressed string which results in "Greetings, Planet!".
# Top of stack is implicitly outputted.
di "Greetings, Planet!"//"!tenalP ,sgniteerG" id
เวอร์ชันที่ยาวกว่าเล็กน้อย (53 ไบต์) ที่ไม่ได้ใช้ความคิดเห็นคือ:
#d
di "Greetings, Planet!";"!tenalP ,sgniteerG" id
d#
#d [something]
เปลี่ยน delimiter (เริ่มต้น carriage return) เป็น;
เว้นแต่ [บางสิ่งบางอย่าง] cr
ดังนั้นคำสั่งแรกเปลี่ยน delimiter ;
เป็นครั้งที่สองพิมพ์สตริงและที่สาม (ซึ่งต่อเนื่องไปจนถึงตอนท้าย) จะเห็นได้ชัดว่า nop แม้ว่าฉันจะไม่มี คิดว่าทำไม ฉันจะเดาได้ว่าสิ่งนี้จะทำให้เกิดข้อผิดพลาด (คำสั่งที่ไม่รู้จัก "! tenalP, sgniteerG" หรือบางอย่าง) แต่ดูเหมือนจะไม่
ภาษาการเขียนโปรแกรมนี้ทำหลังจากคำถามถูกโพสต์ แต่ไม่ได้ทำสำหรับคำถามนี้
`!t?ÓP ,?Ä>ÎG`;`GÎ>Ä?, PÓ?t!`
แต่ละตัว?
เป็นอักขระ Unicode ที่ไม่สามารถพิมพ์ได้: U + 0082, U + 000F, U + 000F และ U + 0082 ตามลำดับ
ความจริงแล้วสนุก: ถ้า Japt เผยแพร่เร็วกว่าหนึ่งเดือนมันจะชนะการท้าทายนี้อย่างถูกกฎหมาย
'Greetings, Planet!'⍝'!tenalP ,sgniteerG'
ใน APL ค่าสุดท้ายจะถูกพิมพ์และตัวอักษรหลอดไฟ (⍝) เริ่มแสดงความคิดเห็น
proc unknown args {puts "Hello World!"}
}"!dlroW olleH" stup{ sgra nwonknu corp
คำอธิบาย: TCL ดำเนินการ proc ระดับโลกunknown
เมื่อพบการโทรไปยังคำสั่งที่ไม่ได้กำหนดบรรทัดแรกจะนิยามใหม่ของ proc ที่เป็นโปรแกรม "hello world" อย่างง่าย
กฎการอ้างอิงของ TCL ค่อนข้างบอบบางการเปิดแบบเปิดจะเริ่มต้นคำที่ยกมาซึ่งจะขยายไปสู่การจับคู่แบบปิดในการจับคู่ครั้งถัดไป การจัดฟันจะถือว่าเป็นตัวอักษรปกติ ห้าคำ: }"!dlroW olleH"
, stup{
, sgra
, และnwonknu
corp
ไม่มี}"!dlroW olleH"
การกำหนดชื่อคำสั่งดังนั้นundefined
proc จากบรรทัดแรกจะถูกเรียกใช้แทน
คำถามที่คล้ายกันถูกโพสต์ใน StackOverflow ของสมัยโบราณ; ซึ่งถูกปิดและลบตั้งแต่นั้น ฉันใช้วิธีแก้ปัญหาของฉันเป็นตัวอย่างลิ้นแก้มในคำตอบนี้และตอนนี้ฉันได้รับความคิดเห็นเพื่อขอคำอธิบายดังนั้นฉันจึงสร้างคำตอบใหม่ขึ้นที่นี่
ภาษาการเขียนโปรแกรมนี้ทำหลังจากคำถามถูกโพสต์ แต่ไม่ได้ทำสำหรับคำถามนี้
"! tenalP, sgniteerG" Z "สวัสดีโลก!
Z
ตัวละครเอาท์พุททุกอย่างในกองเพื่อ STDOUT
"!tenalP ,sgniteerG<DC1>"k,@,k"<DC1>Greetings, Planet!"
โค้ดข้างต้นมีตัวละครทั้งสองไม่สามารถพิมพ์ด้วยรหัส 17 (การควบคุมอุปกรณ์ 1) <DC1>
ตัวแทนจาก
GGreetings, Planet!.................,.................!tenalP ,sgniteerGG
ครึ่งแรกก่อนกลาง,
สร้างสตริงคำทักทายแบบย้อนกลับรวมถึงส่วนเพิ่มเติมG
ทางด้านขวา ตรงกลาง,
จะลดลงและส่วนที่เหลือเป็นโปรแกรม "Hello / Greeting / Anything" ที่เป็นที่ยอมรับ ,
ตัวละครเพิ่มเติมที่ปลายทั้งสองมีความจำเป็นเนื่องจากข้อความมี s
หนึ่งซ้ายจะถูกดำเนินการและหยด ทั้งสอง,
และs
ต้องการการแทนที่จุดเชื่อมต่อด้านซ้ายดังนั้นG
s ,
ทางด้านขวาจะไม่ทำงาน แต่สร้างเป็นสตริงสุดท้าย
คล้ายกับ Ruby และ Lua และตัวแปรทั้งหมดที่นี่
alert 'Greetings, Planet!'#'!tenalP ,sgniteerG' trela
p"Greetings, Planet!"#"!tenalP ,sgniteerG"p
echo Greetings, Planet!||!tenalP ,sgniteerG ohce
ใช้ได้กับ ksh, zsh, yash, dash แต่ไม่ใช่ tcsh
$ cat x.sh
echo Greetings, Planet!||!tenalP ,sgniteerG ohce
$ bash x.sh
Greetings, Planet!
$ ksh x.sh
Greetings, Planet!
$ zsh x.sh
Greetings, Planet!
$ yash x.sh
Greetings, Planet!
$ dash x.sh
Greetings, Planet!
$ tcsh x.sh
tenalP: Event not found.
$
print"Greetings, Planet!"--"!tenalP ,sgniteerG"tnirp
ในเทอร์มินัล Lua มีเพียง 44 ไบต์เท่านั้น
="Greetings, Planet!"--"!tenalP ,sgniteerG"=
=
ในเทอร์มินัลดังนั้นมันจึงมี 2 ไบต์ ฉันคิดว่ามันมีอยู่ในปี 2015 ไม่แน่ใจเหมือนกัน
"Greetings, Planet!"!tenalP ,sgniteerG"
"Greetings, Planet!" # push the string to the stack
! # output the TOS
tenalP ,sgniteerG" # throws an error and exits
python3 milkyway.py <path-to-code>