กระจกเงา (หรือหัวของฉันเจ็บ)


32

ฉันกำลังอ่านพิมพ์รหัสของคุณไปข้างหลัง - ย้อนกลับ quineและฉันคิดว่านี่อาจน่าสนใจยิ่งขึ้นถ้ารหัสหลังของคุณนั้นทำงานได้เช่นกัน ดังนั้นความท้าทายนี้จะมีกฎและข้อกำหนดอื่น ๆ ทั้งหมด แต่ต้องเป็นแหล่งที่ถูกต้องเมื่อกลับรายการ (ในภาษาเดียวกันหรือภาษาอื่นและยังคงพิมพ์ต้นฉบับไปด้านหลัง

กฎและการให้คะแนนทั้งหมดจากการท้าทายแบบย้อนกลับจะมีผลบังคับใช้ดังนั้นคำตอบทั้งหมดสำหรับคำถามนี้จะตอบคำถามนั้น (แต่ไม่ได้คะแนนเช่นกัน)

แก้ไข:

ตามกฎทั้งหมดตอนนี้คัดลอกที่นี่

กฎ:

  • เขียนโปรแกรม p ซึ่งเมื่อประมวลผลสร้างเอาต์พุต p 'โดยที่ p' คือ p ย้อนหลังและ p 'เมื่อดำเนินการสร้าง p
  • ไม่ใช้ไฟล์อื่น (เช่นreverse.txt)
  • ความยาวรหัสขั้นต่ำคือสองอักขระ
  • โปรแกรมของคุณต้องไม่เป็นแบบ palindrome

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

  • +50 ถ้าคุณใช้ดึงข้อมูลจากอินเทอร์เน็ต
  • +25 ถ้าคุณอ่านซอร์สโค้ดของคุณเอง
  • +1 แต้มต่อตัวละคร
  • คะแนนต่ำสุดชนะ

eval(eval(eval(eval(eval(eval(eval(eval(eval(p)))))))))
Andrew Larsson

ฉันแค่บอกว่าคุณจะสามารถดำเนินการส่งออกของการดำเนินการส่งออกของการดำเนินการส่งออกของ [... ] การดำเนินการส่งออกของ p (เช่น quine ใด ๆ ยกเว้นควินินหลัง)
Andrew Larsson

@AndrewLarsson แน่นอนแม้ว่าหลักฐานของแนวคิดที่ฉันกำลังสร้าง p จะถูกเขียนใน c และ p 'ใน perl
hildred

โอ้นั่นเท่!
Andrew Larsson

1
ใช่เห็นว่าสายเกินไป ไม่ซ้ำกัน
Johannes Kuhn

คำตอบ:


22

GolfScript, 46 ตัวอักษร

0{`".~#"+.-1%+\.!@@}.~##~.}@@!.\+%1-.+"#~."`{1

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

ตกลงให้ฉันพยายามอธิบายว่าฉันสร้างมันอย่างไร ก่อนอื่นฉันเริ่มจากควินิน{".~"}.~และแก้ไขมันในคำตอบนี้เพื่อย้อนกลับ ในการทำให้เอาต์พุตเป็น quine ที่ปฏิบัติการได้ในตัวเองฉันทำสำเนาของรหัสก่อนที่จะย้อนกลับและรวม a ไว้#ที่ส่วนท้ายของรหัสเพื่อให้เวอร์ชันที่กลับด้านตอนท้ายกลายเป็นแค่ความคิดเห็น ดังนั้นเราจึงได้รับควินด์ดิคควิน:

{`".~#"+.-1%}.~##~.}%1-.+"#~."`{

อย่างไรก็ตามตามกฎแล้ว Palindromes ไม่ได้รับอนุญาตดังนั้นฉันจึงจำเป็นต้องทำลายความสมมาตรอย่างใด ฉันคิดว่าวิธีที่ง่ายที่สุดคือการรวม0(ซึ่งในตัวเองคือ quine ใน GolfScript) ในโค้ดและพลิกมัน1ด้วย!หลังจากสร้างสำเนาที่กลับด้าน ความซับซ้อนที่เหลืออยู่ส่วนใหญ่เป็นเพียงการจัดการกองซ้อนที่น่าเกลียดเพื่อให้ได้ทุกอย่างตามลำดับที่ถูกต้อง


มันคือ golfscript เมื่อกลับรายการหรือเป็นภาษาอื่นหรือไม่?
hildred

ใช่มันเป็น GolfScript ทั้งสองวิธี แน่นอนยกเว้นสำหรับ0และ1ที่จุดเริ่มต้นและจุดสิ้นสุดส่วนที่เหลือของรหัสคือ palindrome
Ilmari Karonen

9
ว้าว. โอเคฉันไม่รู้สึกฉลาดพอสำหรับ SE นี้อีกต่อไป :(
Cruncher

21

Perl และ C 6478 1955

#!/usr/bin/perl -i//
$_=<<'rahc';eval $_; #//
print scalar reverse "#!/usr/bin/perl -i//\n\$_=<<'rahc';eval \$_; #//\n${_}rahc\n" #//
__END__
__END__ enifed#
};)"{ = ][cn\rahcn\n\"(p
};)'n\'( rahctup) 1 == 21%b ( fi
;)d(p;)]1-b[c,",d%",)d(foezis,d( ftnirpns{)b--;b;)c(foezis=b( rof
;)c(p;]9[d rahc;b tni{)(niam diov
}};)]1-b[c(rahctup )]1-b[c(fi{)b--;b;)c(nelrts=b(rof;b tni{)c*rahc(p diov
>h.gnirts< edulcni#
>h.oidts< edulcni#
;}
,0
,53,33,74,711,511,411,74,89,501,011,74,211
,101,411,801,23,54,501,74,74,01,63,59,16
,06,06,93,411,79,401,99,93,95,101,811,79
,801,23,63,59,95,23,53,74,74,01,211,411
,501,011,611,23,511,99,79,801,79,411,23,411
,101,811,101,411,511,101,23,43,53,33,74,711
,511,411,74,89,501,011,74,211,101,411,801,23
,54,501,74,74,29,011,29,63,59,16,06,06
,93,411,79,401,99,93,95,101,811,79,801,23
,29,63,59,95,23,53,74,74,29,011,63,321
,59,521,411,79,401,99,29,011,43,23,53,74
,74,01,59,59,96,87,86,59,59,01,59,59
,96,87,86,59,59,23,101,011,501,201,101,001
,53,01,521,95,14,43,321,23,16,23,39,19
,99,011,29,411,79,401,99,011,29,011,29,43
,04,211,01,521,95,14,93,011,29,93,04,23
,411,79,401,99,611,711,211,14,23,94,23,16
,16,23,05,94,73,89,23,04,23,201,501,01
,95,14,001,04,211,95,14,39,94,54,89,19
,99,44,43,44,001,73,43,44,14,001,04,201
,111,101,221,501,511,44,001,04,23,201,611,011
,501,411,211,011,511,321,14,89,54,54,95,89
,95,14,99,04,201,111,101,221,501,511,16,89
,04,23,411,111,201,01,95,14,99,04,211,95
,39,75,19,001,23,411,79,401,99,95,89,23
,611,011,501,321,14,04,011,501,79,901,23,001
,501,111,811,01,521,521,95,14,39,94,54,89
,19,99,04,411,79,401,99,611,711,211,23,14
,39,94,54,89,19,99,04,201,501,321,14,89
,54,54,95,89,95,14,99,04,011,101,801,411
,611,511,16,89,04,411,111,201,95,89,23,611
,011,501,321,14,99,24,411,79,401,99,04,211
,23,001,501,111,811,01,26,401,64,301,011,501
,411,611,511,06,23,101,001,711,801,99,011,501
,53,01,26,401,64,111,501,001,611,511,06,23
,101,001,711,801,99,011,501,53,01,95,521,01
{ = ][c
rahc

แก้ไข:

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


1
วัด : O หัวของฉันระเบิด แต่ฉันนับตัวอักษร 6536 ตัวในเรื่องนั้น ...
Doorknob

อะไร ... เป็นอย่างไร ... 0_0
ผู้ชายกับหมวก

@DoorknobofSnow ฉันนับรุ่นผิด แต่นี่เป็นรุ่นที่สั้นกว่า
hildred

มันช่างเหลือเชื่อ! ฉันคิดว่า Haskell / C อาจเป็นชุดค่าผสมอื่นที่เป็นไปได้
theonlygusti

@Theonlygusti ถ้าคุณโพสต์และฉันสามารถรวบรวมมันฉันจะ upvote มัน
hildred

8

ทับทิม 145

DATA.read.tap {| a | ทำให้ a.reverse, a.tr ("\ x79 \ x59", "\ x59 \ x79")}
: Y
__END__
__DNE__
Y:
}) "97x \ 95x \", "95x \ 97x \" (rt.a, esrever.a stup | a | {pat.daer.ATAD

แนวคิดหลักง่าย ๆ : เพียงแค่ใส่รหัสครึ่งแรกของครึ่งหลังลงไปหลังจากนั้น__END__ซึ่งสามารถอ่านได้โดยใช้DATAจากทับทิม จากนั้นเพียงพิมพ์ย้อนกลับข้อมูลนี้แล้วพิมพ์ข้อมูลและคุณจะได้รับรหัสต้นฉบับดั้งเดิมกลับมา

ปัญหาคือว่าสิ่งนี้จะกลายเป็น palindrome (โปรดทราบว่าบรรทัดแรกจำเป็นต้องมี endline) ดังนั้นเราต้องแบ่งสมมาตร ฉันเพิ่งเพิ่มสัญลักษณ์:yลงในรหัสและบางรหัสที่จะแปลงสัญลักษณ์นี้ระหว่างตัวพิมพ์เล็กและตัวพิมพ์ใหญ่ระหว่างการทำงานดังนั้นการย้อนกลับสู่สถานะดั้งเดิมหลังจากการทำงานสองครั้ง

ทดสอบที่หนึ่ง: สามารถดำเนินการได้

$ ruby rq2.rb > rq2t.rb
$ ruby rq2t.rb > rq2tt.rb

ทดสอบสอง: ผลลัพธ์ของการรันสองครั้งจะคืนค่าต้นฉบับ

$ diff rq2.rb rq2tt.rb
$

ทดสอบที่สาม: รหัสไม่ใช่ Palindrome (ระยะกลางจะแตกต่างกัน)

$ diff rq2.rb rq2t.rb
3c3
< :y
---
> :Y
6c6
< Y:
---
> y:

4

> <>, 21 19 ไบต์

'rd3*70.r l?!;o90.<

ลองที่นี่!

ใช้ *> <> ล่ามเพื่อความสะดวก แต่นี่เป็นรหัสที่ถูกต้อง> <>


หากได้รับอนุญาตให้แก้ไขข้อผิดพลาดก็สามารถทำได้ใน 16 ไบต์:

'd3*}70.!r  !|o|

ลองที่นี่!


@ โจกิ้งขอขอบคุณ! มันเป็นเวลา 7 โมงเช้าและฉันก็เหนื่อยเกินกว่าจะใส่มันเข้าด้วยกัน ฉันจะแก้ไขในอีกไม่กี่ชั่วโมง
Discordian

4

Gol> <> , 11 ไบต์

":5-}H}+5:'

ไบต์ทั้งหมดถูกตัดออก! มันเกือบจะเป็น palindrome แต่ในทางเทคนิคแล้วไม่ใช่เพราะ '+' และ '-' ฮ่าฮ่า!

ลองออนไลน์!

ทั้งสองด้านล่างใช้งานไม่ได้หรืออย่างน้อยก็ไม่เป็นไปตามข้อกำหนดของความท้าทาย แต่รหัสด้านบนทำงานได้

รุ่นที่อายุน้อยกว่าเล็กน้อย 12 ไบต์

"r2ssrH}+5:'

ออกไปทางไบต์โดยใช้เครื่องหมายคำพูดคู่และเพิ่มขึ้น 5 และเวอร์ชั่นใหม่นี้มีลักษณะเหมือน palindrome น้อยกว่า

ลองออนไลน์!

รุ่นเก่ากว่า 13 ไบต์

"r2ssrHrss7r'

มีปัญหาเกิดขึ้นเมื่อก่อนหน้านี้ที่โจกิ้งชี้ให้เห็นขอบคุณสำหรับตอนนี้มันใช้งานได้ แต่ด้วยราคา 4 ไบต์พิเศษ ...

ลองออนไลน์!


1

ช่วยเหลือ WarDoq! (27 ไบต์)

เพิ่ม 25 ไบต์เนื่องจากการอ่านซอร์สโค้ด

<space>q

วิธีการทำงาน:
<space>- ความคิดเห็นที่ลงท้ายด้วยอักขระที่ไม่ใช่ช่องว่าง
q- รหัสที่มาพิมพ์กลับรายการ (q "space")

ย้อนกลับ

q<space>

วิธีการทำงาน:
q- พิมพ์รหัสที่มาย้อนกลับ (ตอนนี้)
<space>- ความคิดเห็นที่ลงท้ายด้วยอักขระที่ไม่ใช่ช่องว่างและเพิ่มตัวอักษรที่จุดเริ่มต้นของคำสั่ง q (ทำให้ "ช่องว่าง" q)

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