ย้อนหลังไปข้างหน้าและพูดได้หลายภาษาควิน!


9

คุณต้องให้พูดได้หลายภาษาที่ผลรหัสต้นฉบับในภาษาหนึ่งและรหัสที่มาของมันย้อนกลับอีก แตกต่างจากกฎปกติคุณได้รับอนุญาตให้อ่านไฟล์ปัจจุบันหรือใช้ builtin เพื่อรับซอร์สโค้ดของการส่งของคุณและย้อนกลับในภาษาเดียว ซอร์สโค้ดของคุณต้องไม่เป็นแบบ palindrome

ตัวอย่างเช่นหากซอร์สโค้ดของคุณabcxyzต้องเป็นเอาต์พุตabcxyzในภาษาหนึ่งและzyxcbaอีกภาษาหนึ่ง หากรหัสของคุณเป็นรหัสที่abcxyzyxbcaไม่ถูกต้องเพราะเป็นรูปเล่ม

โชคดี!


3
กฎปกติอยู่ที่นั่นด้วยเหตุผล การอนุญาตให้ quine ในตัวมีแนวโน้มที่จะทำให้ความท้าทายนี้กว้างเกินไปและการอนุญาตให้ใช้ซอร์สโค้ดของ palindrome จะช่วยให้คำตอบซึ่งเป็น quines ไปข้างหน้าสำหรับทั้งสองภาษา
Erik the Outgolfer

@EriktheOutgolfer palindromes ไม่ได้รับอนุญาต
programmer5000

1
@EriktheOutgolfer อ่าซอร์สโค้ดไม่สามารถเป็นพาลินโดรมได้?
Luis Mendo

2
ฉันคิดว่าคุณควรเสนอเงินรางวัลให้กับคนแรกเพื่อให้การท้าทายนี้เสร็จสมบูรณ์โดยไม่ทำผิดกฎ quine ปกติใด ๆ (อาจจะเป็นตัวแทน 50 คน)
clismique

1
ฉันอ่าน "ในภาษาเดียว" อย่างชัดเจนไม่อนุญาตให้กรณีที่ทั้งสองภาษาอ่านซอร์สโค้ด แต่คำตอบที่ได้รับคะแนนสูงสุดในปัจจุบันทำอย่างนั้น คุณสามารถแก้ไขเพื่อให้ชัดเจนว่าควรอนุญาตหรือไม่
hvd

คำตอบ:


5

PHP & GolfScript, 2 ไบต์

1

เช่นการขึ้นบรรทัดใหม่และหลัก 1

นี่คือควินกลับในGolfScript , มีส่วนในเว็บไซต์นี้โดยจัสติน PHP ไม่ได้ทริกเกอร์ว่าเป็นภาษาการเขียนโปรแกรมดังนั้นจึงพิมพ์อินพุตของมัน


6

Python 2 / Python 3, 71 ไบต์

lambda _='lambda _=%r:(_%%_)[::int(1-(1/2)*4)]':(_%_)[::int(1-(1/2)*4)]

ไม่ใช้ตัวสร้างควินใด ๆ

ขอบคุณ ovs สำหรับการปลุกฉันโดยทั่วไป


lambda _='lambda _=%r:(_%%_)[::int(1-(1/2)*4)]':(_%_)[::int(1-(1/2)*4)]for 71 bytes
ovs

@ovs โอ้แน่นอนฉันไม่คิดอย่างนั้น
Erik the Outgolfer

6

Batch / bash + tac, 39 ไบต์

:;tac -r -s '.\|'$'\n' $0;exit
@type %0

ส่งออกไปข้างหน้าในชุด คำอธิบาย: แบทช์เห็นบรรทัดแรกเป็นเลเบลและละเว้นมันในขณะที่บรรทัดที่สองเพียงคัดลอกไฟล์ต้นฉบับไปยัง STDOUT (โปรดทราบว่าคุณต้องเรียกใช้ไฟล์รวมถึงส่วนขยายหรือเปลี่ยน%0เป็น%~f0) bashเห็นคำสั่งสี่คำ:

  • :ไม่ทำอะไรเลย (เหมือนtrue)
  • tac -r -s '.\|'$'\n' $0
    • -rทำให้tacเข้าสู่โหมด regex
    • -s ระบุ regex
    • '.\|'$'\n' คือ regex ประกอบด้วย
      • . อักขระใด ๆ ยกเว้นการขึ้นบรรทัดใหม่
      • \| หรือ
      • $'\n' ขึ้นบรรทัดใหม่
    • ผลที่สุดคือการtacแยกไฟล์เป็นตัวละครมากกว่าเส้น
  • exit หยุดสคริปต์โดยไม่สนใจคำสั่งที่สี่
  • @type %0 (ไม่สนใจ)

:;rev $0|tac;exitผมคิดว่าคุณสามารถแทนที่บรรทัดแรกกับ นอกจากนี้ส่วนหัวควรระบุBatch / sh + util-linux + coreutilsแทน
Erik the Outgolfer

@EriktheOutgolfer $'\n'เป็น Bashism rev $0|tacไม่ทำการขึ้นบรรทัดใหม่อย่างถูกต้องและไม่สำคัญว่าtacมาในแพ็คเกจหรือไม่
Neil

$'\n'ไม่มีอยู่ในการแทนที่ที่ฉันแนะนำและใช้rev $0|tacงานได้สำหรับฉัน และฉันคิดว่าเป็นการดีกว่าที่จะระบุแพ็คเกจแทนยูทิลิตี้ส่วนตัวเพราะบางครั้งอาจเกิดความสับสน (เช่นแพ็คเกจtacไหน)
Erik the Outgolfer

@EriktheOutgolfer ลองออนไลน์! มันผิด. ดังนั้นลองออนไลน์! (แต่รายละเอียดเพิ่มเติม)
Neil

คุณช่วยอธิบายได้ไหม
programmer5000

3

PHP & Retina ขนาด 2 ไบต์

1

เช่นเดียวกับคำตอบ PHP & GolfScript ของ Gille

PHP เพียงแค่อ่านโค้ดและส่งออกโดยตรง Retina จะแทนที่การจับคู่ของสตริงว่างในอินพุตและแทนที่ด้วย 1 และส่งออกด้วยบรรทัดใหม่


2

JS (ES5), JS (ES6), 94 ไบต์

function f(){try{eval("x=(f+'f()').split``.reverse().join``")}catch(e){x=f+"f()"};return x}f()

ห้ามใช้ตัวบิวท์อินใด ๆ เพียงใช้ข้อเท็จจริงที่ว่าฟังก์ชั่น JS ทำให้รหัสของพวกเขาเป็นจริง อาจจะสามารถเล่นกอล์ฟได้มากขึ้น


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