Palindrome สวัสดีชาวโลก


29

งานของคุณคือการสร้างโปรแกรมที่พิมพ์ "Greetings, Planet!" ตรงกับคอนโซล ดูเหมือนง่ายพอใช่ไหม นี่คือเคล็ดลับ รหัสจะต้องเป็นแบบ palindrome ซึ่งหมายความว่าอ่านจากขวาไปซ้ายเหมือนในซ้ายไปขวา ไม่อนุญาตช่องโหว่มาตรฐาน


นี่ดูเหมือนจะไม่เป็น "สวัสดีโลก"
Erik the Outgolfer

4
@ ΈρικΚωνσταντόπουλοςเหมือนกับ Hello World สำหรับทุกเจตนารมณ์และวัตถุประสงค์ เป้าหมายคือการพิมพ์สตริงสั้น ๆ ที่ประกอบด้วยคำสองคำโดยมีเครื่องหมายวรรคตอนร่วมกันในโปรแกรม Hello World เช่นกัน นอกเหนือจากบิวด์อินที่พิมพ์ Hello World โซลูชันจะเหมือนกันอย่างแน่นอน (นอกเหนือจากสตริงที่แท้จริง) โดยไม่คำนึงถึงสตริงที่แท้จริงที่กำลังพิมพ์ (และฉันถือว่าวลี "Greetings, Planet!" ได้รับเลือกโดยเฉพาะเพื่อสร้างสิ่งที่ไร้ประโยชน์)
Martin Ender

1
@ MartinBüttnerผมคิดว่าHello, world!และHello World!เป็นผลได้รับอนุญาตเท่านั้นสำหรับสวัสดีโลกโปรแกรม
Erik the Outgolfer

คำตอบ:



16

TI-BASIC, 67 ไบต์

"!tenalP ,sgniteerG"
"Greetings, Planet!"

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

ตัวอักษรพิมพ์เล็กแต่ละตัวจะถูกจัดเก็บเป็น 2 ไบต์และอักขระที่เหลือคือ 1 ไบต์ ถ้าฉันจะงอกฎและพิมพ์ในตัวพิมพ์ใหญ่ทั้งหมดจะเป็น41 ไบต์ :

"!TENALP ,SGNITEERG"
"GREETINGS, PLANET!"

คุณสามารถใช้eและi(ตัวเลข) เพื่อลดจำนวนไบต์เพิ่มเติมได้หรือไม่
Addison Crump

1
@VTCAKAVSMoACE ฉันพิจารณาแล้ว แต่พวกมันเอียงดังนั้นพวกเขาจึงดูต่างกันเล็กน้อย
NinjaBearMonkey

เพื่อให้ชัดเจนว่าบรรทัดแรกไม่ใช่ความคิดเห็นมันจะถูกเก็บไว้ในตัวแปรคำตอบ
Julian Lachniet

12

ฉันรู้ว่ามันช้าไปหน่อย (และค่อนข้างพิถีพิถัน) แต่ ...

> <> (ปลา), 47 45 47 ไบต์ (จริง43 45 ถ้าฉันไม่ได้ใช้ทิศทางสุ่ม)

x"!tenalP ,sgniteerG"!|o|!"Greetings, Planet!"x

คำตอบเหล่านี้แตกต่างกันเล็กน้อย มีโอกาสสำหรับทิศทางของโค้ดที่จะดำเนินการ

ดังนั้นโดย "การพิมพ์ไปยังคอนโซล" ฉันถือว่าคุณหมายถึงการพิมพ์ไปยัง stdout สิ่งนี้ทำให้เกิดข้อผิดพลาด; ข้อผิดพลาดจะถูกโยนไปที่ stderr หลังจากที่สตริงจะถูกพิมพ์ไปยัง stdout

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

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

สมมติว่าผู้กำกับทั้งสองชี้ไปทางซ้ายตัวละครจะถูกโหลดอีกครั้งเพื่อ "สแต็ค" ในลำดับย้อนกลับ (เนื่องจากโค้ดโหลดไปด้านหลังนี่ทิศทางไปทางซ้าย) จากนั้นกลับด้านของย้อนกลับ (หรือ ข้อความปกติ) ถูกพิมพ์

หากผู้กำกับแบบสุ่มชี้ขึ้นหรือลงสิ่งนี้จะไม่สำคัญ - ปลารู้วิธีวนรอบไปยังด้านล่างหรือด้านบนของรหัสชี้กลับไปที่ตัวสุ่ม ด้วยวิธีนี้มันจะวนลูปต่อไปเรื่อย ๆ จนกว่ามันจะชี้เข้าด้านในเพื่อให้โค้ดทำงาน

!|o|!บิตไม่ต่อไปนี้จากทั้งสองด้าน:

  • !ข้ามคำสั่งถัดไป (จะข้ามเสมอ|)

  • |เป็นตัวสะท้อนแสง oมันชี้กลับเข้าสู่การ

  • o เอาต์พุตรายการปัจจุบันของสแต็กเพื่อคอนโซลเป็นอักขระและลบออกจากสแต็ก

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

ตอนนี้ใช้อิโมจิแมว >o<เปลี่ยนทิศทางเอาต์พุตขาเข้าอย่างไม่สิ้นสุดยังคงโยนข้อผิดพลาด แต่ฉันสามารถออกไปได้โดยไม่ใช้การข้ามไปยังการสะท้อน

จะเปิดออกผมเป็นสิทธิครั้งแรก - ความพยายามที่สองไม่ได้palindromicแต่มันก็สะท้อนแสง

ปลา (โดยไม่ต้องพิมพ์ไปยัง stderr), 64 ไบต์ (ew)

x"!tenalP ,sgniteerG"!;oooooooooooooooooo;!"Greetings, Planet!"x

เพื่อนคนนี้อีกต่อไปอีกหน่อย

มันมีฟังก์ชั่นลูกศรแบบสุ่มที่เหมือนกัน (เพื่อพิสูจน์ว่าใช้ได้ทั้งสองวิธี) และไม่พิมพ์ไปยัง stderr

ความแตกต่างที่นี่ชัดเจน ;แท้จริงฉันพิมพ์ออกมาทุกรายการในกองแล้วสิ้นสุดการดำเนินการกับ

การ!;ดำเนินการไม่สิ้นสุดทันทีในขณะที่!ข้ามรายการถัดไป ( จบการประมวลผลในกรณีนี้) และดำเนินการต่อไปจนกว่าจะถึงอีกด้านหนึ่งซึ่งทำหน้าที่เป็นที่;!นั้นการดำเนินการสิ้นสุดก่อนที่จะข้ามสิ่งใด

มันเป็นไปตามรูปแบบทิศทางแบบสุ่มเช่นเดียวกับคำตอบที่สั้นกว่า


ฉันคิดว่าคุณควรจะเรียกภาษา> <> เพื่อแยกความแตกต่างจากตู้ปลา
Aaron

@Aaron มักจะคิดว่าปลาที่นี่หมายถึง> <> แต่ฉันเคยพบปัญหามาก่อน - ฉันจะเพิ่มมัน ขอบคุณ!
Addison Crump

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

@GLASSIC โปรแกรมจะแสดงผลเพียงครั้งเดียวและรหัสทั้งหมดจะไม่ถูกดำเนินการ
Addison Crump



8

CJam, 41 ไบต์

ขอบคุณเดนนิสสำหรับการปิดสามไบต์

"!tenalP ,sgniteerG";"Greetings, Planet!"

2
คุณต้องพลิกสาย ตอนนี้คุณกำลังโผล่เอาท์พุทที่ถูกต้องและพิมพ์สิ่งที่ตรงกันข้าม
NinjaBearMonkey

@NinjaBearMonkey อ๊ะ แก้ไข
The_Basset_Hound

ยังใช้งานได้ใน GolfScript
Ilmari Karonen


6

จาวาสคริปต์, 56 ไบต์

สิ่งนี้สามารถทำงานได้ในเบราว์เซอร์ใด ๆ

alert("Greetings, Planet!")//)"!tenalP ,sgniteerG"(trela

การแทนที่print/tnirpด้วยalert/trelaจะทำงานในเอนจิ้นอื่นเช่นกัน
ETHproductions

@ETHproductions ไม่สามารถเชื่อได้ว่าฉันไม่ได้คิดอย่างนั้นขอบคุณ!
Downgoat


@jrich your're ถูกต้องalert`Greetings, Planet!`//`!tenalP ,sgniteerG`trela52 ไบต์
Aᴄʜᴇʀᴏɴғᴀɪʟ

5

GolfScript, 41 ไบต์

"Greetings, Planet!":"!tenalP ,sgniteerG"

ดูสิว่าไม่มีตัวเลือก! ลองใช้ออนไลน์ในเว็บ GolfScript

ครึ่งหลังของซอร์สโค้ดเก็บสตริงในสตริงที่สอง

"Greetings, Planet!":"!tenalP ,sgniteerG"
"!tenalP ,sgniteerG"

จะพิมพ์

Greetings, Planet!Greetings, Planet!

5

C ++, 129 ไบต์

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

/**/
#include<cstdio>
int main(){puts("Greetings Planet!");}//*/
/*//};)"!tenalP sgniteerG"(stup{)(niam tni
>oidtsc<edulcni#
/**/

5

Python 3, 57 ไบต์

print('Greetings, Planet!')#)'!tenalP ,sgniteerG'(tnirp

ฉันแก้ไขปัญหาด้วยวงเล็บ

Python 2, 53 ไบต์

print'Greetings, Planet!'#'!tenalP ,sgniteerG'tnirp

ฉันใช้ประโยชน์จากการขาดวงเล็บและช่องว่างที่จำเป็นใน Python 2 แต่ก็ไม่ได้มีความแตกต่างใหญ่นัก


5

เยลลี่ไม่ใช่การแข่งขัน

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.

4

ติดอยู่ 41 ไบต์

"Greetings, Planet!"p"!tenalP ,sgniteerG"

ค่อนข้างคล้ายกับคำตอบ CJam ยกเว้นใน Stuck หากออกคำสั่งพิมพ์การพิมพ์สแต็คอัตโนมัติจะถูกระงับ


3

Mathematica, 52 ไบต์

Print@"Greetings, Planet!""!tenalP ,sgniteerG"@tnirP

สร้างสิ่งNull "!tenalP ,sgniteerG"[tnirP]ที่ไม่ได้รับการพิมพ์ด้วย


1
FYI คำตอบของคุณจำนวนมาก (รวมอยู่ในนี้) ได้รับการโยนในคิวคุณภาพต่ำเนื่องจากเป็นชื่อ / คะแนนและรหัส แต่เพียงผู้เดียว แม้ว่าจะไม่มีอะไรผิดปกติคุณอาจพิจารณาเพิ่มข้อความเพิ่มเติม (เช่นคำอธิบาย) เพื่อให้ข้อความไม่ถูกตั้งค่าสถานะอัตโนมัติ
Mego

@Mego โอเคคิดว่าพวกเขาอธิบายตนเองได้ดี
LegionMammal978

1
ฉันไม่ได้บอกว่าการขาดคำอธิบายนั้นเป็นสิ่งที่ไม่ดี (แม้ว่าคำตอบที่มีคำอธิบายมักจะได้รับ upvotes มากขึ้น) ฉันแค่บอกให้คุณรู้ว่าคำตอบ (ถูกต้อง) ของคุณกำลังถูกตั้งค่าสถานะอัตโนมัติเนื่องจากความยาว :)
Mego

2
คุณสามารถบันทึก 2 ไบต์ที่มีในEcho v10.3
ยัก

3

ฟิชชัน , 45 43 ไบต์

ขอบคุณ jimmy23013 สำหรับการบันทึก 2 ไบต์

;"!tenalP ,sgniteerG"R"Greetings, Planet!";

ลองออนไลน์!

Rเริ่มต้นอะตอมซึ่งเคลื่อนไปทางขวา "สลับโหมดสตริงซึ่งพิมพ์สตริงที่ต้องการเป็น STDOUT ก่อนกดปุ่ม;ซึ่งจะทำลายอะตอมและยุติโปรแกรม ครึ่งแรกนั้นไม่เคยถูกประหาร


@ jimmy23013 ฉันไม่มีเงื่อนงำที่จะซื่อสัตย์ ขอบคุณ
Martin Ender


2

STATA 52 ไบต์

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" หรือบางอย่าง) แต่ดูเหมือนจะไม่


2

Japt 29 ไบต์

ภาษาการเขียนโปรแกรมนี้ทำหลังจากคำถามถูกโพสต์ แต่ไม่ได้ทำสำหรับคำถามนี้

`!t?ÓP ,?Ä>ÎG`;`GÎ>Ä?, PÓ?t!`

ลองออนไลน์!

แต่ละตัว?เป็นอักขระ Unicode ที่ไม่สามารถพิมพ์ได้: U + 0082, U + 000F, U + 000F และ U + 0082 ตามลำดับ

ความจริงแล้วสนุก: ถ้า Japt เผยแพร่เร็วกว่าหนึ่งเดือนมันจะชนะการท้าทายนี้อย่างถูกกฎหมาย


2

APL, 41 ไบต์

'Greetings, Planet!'⍝'!tenalP ,sgniteerG'

ใน APL ค่าสุดท้ายจะถูกพิมพ์และตัวอักษรหลอดไฟ (⍝) เริ่มแสดงความคิดเห็น


สวัสดีและยินดีต้อนรับสู่ PPCG! คำตอบที่ดี!
NoOneIsHere


2

TCL, 80 ไบต์

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"การกำหนดชื่อคำสั่งดังนั้นundefinedproc จากบรรทัดแรกจะถูกเรียกใช้แทน

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



1

Vitsy , 41 ไบต์

ภาษาการเขียนโปรแกรมนี้ทำหลังจากคำถามถูกโพสต์ แต่ไม่ได้ทำสำหรับคำถามนี้

"! tenalP, sgniteerG" Z "สวัสดีโลก!

Zตัวละครเอาท์พุททุกอย่างในกองเพื่อ STDOUT

ลองออนไลน์!


1

Unefunge 98 - 49 ไบต์

"!tenalP ,sgniteerG<DC1>"k,@,k"<DC1>Greetings, Planet!"

โค้ดข้างต้นมีตัวละครทั้งสองไม่สามารถพิมพ์ด้วยรหัส 17 (การควบคุมอุปกรณ์ 1) <DC1>ตัวแทนจาก


1

MSM , 73 ไบต์

GGreetings, Planet!.................,.................!tenalP ,sgniteerGG

ครึ่งแรกก่อนกลาง,สร้างสตริงคำทักทายแบบย้อนกลับรวมถึงส่วนเพิ่มเติมGทางด้านขวา ตรงกลาง,จะลดลงและส่วนที่เหลือเป็นโปรแกรม "Hello / Greeting / Anything" ที่เป็นที่ยอมรับ ,ตัวละครเพิ่มเติมที่ปลายทั้งสองมีความจำเป็นเนื่องจากข้อความมี sหนึ่งซ้ายจะถูกดำเนินการและหยด ทั้งสอง,และsต้องการการแทนที่จุดเชื่อมต่อด้านซ้ายดังนั้นGs ,ทางด้านขวาจะไม่ทำงาน แต่สร้างเป็นสตริงสุดท้าย


1

CoffeeScript, 53 ไบต์

คล้ายกับ Ruby และ Lua และตัวแปรทั้งหมดที่นี่

alert 'Greetings, Planet!'#'!tenalP ,sgniteerG' trela


1

Bash, 52 48 ไบต์

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.
$

1
ลบเครื่องหมายคำพูดทั้งหมด
จัดการ

1
โอ้ที่รักคำตอบ bash สั้นกว่า python = / กลับไปที่กระดานวาดภาพ!
Ashwin Gupta

1

Lua 52 ไบต์

print"Greetings, Planet!"--"!tenalP ,sgniteerG"tnirp

ในเทอร์มินัล Lua มีเพียง 44 ไบต์เท่านั้น

="Greetings, Planet!"--"!tenalP ,sgniteerG"=

ความผิดฉันเอง. ขอบคุณสำหรับการแจ้งเตือน!
Digital Veer

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

Lua 5.3 ไม่ต้องการ=ในเทอร์มินัลดังนั้นมันจึงมี 2 ไบต์ ฉันคิดว่ามันมีอยู่ในปี 2015 ไม่แน่ใจเหมือนกัน
val พูดว่า Reinstate Monica

1

ทางช้างเผือก 1.5.10 , 43 41 39 ไบต์

"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>

คุณต้องการความคิดเห็นจริงๆหรือ หากเป็นแบบสแต็ก (โดยไม่มีเอาต์พุตโดยปริยาย) ดังนั้นเพียงแค่แสดงผลสแต็กควรใช้งานได้
Addison Crump

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