ไขว้กัน


10

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

โปรแกรมของคุณ
บน
สี่สาย

เอาท์พุท

 yof
 ono
 u u
 r r
    
 p l
 r i
 o n
 g e
 r s
 a
 m

ช่องว่างในผลลัพธ์ไม่ได้โดยพลการ ช่องว่างปรากฏในสองสถานการณ์: ที่มีช่องว่างในต้นฉบับ (เช่นระหว่างrและlในคอลัมน์ที่สี่) และตำแหน่งที่จำเป็นในการใส่อักขระ (เช่นช่องว่างทั้งหมดในคอลัมน์แรก) จำเป็นต้องใช้ทั้งสองและช่องว่างจะไม่ปรากฏที่ใดก็ได้ อื่นในการส่งออก

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

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

การโกงแบบควงที่อ่านจากไฟล์ที่มีซอร์สโค้ดของพวกเขาดึงข้อมูลจาก URL ใช้การสร้างแบบอิน - อินและไม่อนุญาต

นี่คือรหัสกอล์ฟ: รหัสสั้นที่สุดในหน่วยชนะไบต์


สิ่งนี้จำเป็นต้องเป็นควินจริงหรือไม่?
lirtosiast

2
@ThomasKwa ตรงข้ามกับ?
Martin Ender

@ MartinBüttnerอาจจะมีภาษาที่ใช้ตัวอักษรสะท้อน ในกรณีที่
lirtosiast

@ThomasKwa ไม่เป็นไรตราบใดที่มันเป็นไปตามกฎทั้งหมดที่ระบุ
ลุค

การใช้ห้องสมุดภายนอก (เช่น Lodash ใน Javascript) เป็นสิ่งต้องห้ามหรือไม่?
Mama Fun Roll

คำตอบ:


5

CJam, 14 ไบต์

{`"_~".+N*}
_~

ทดสอบที่นี่

ในขณะที่สั้นกว่าอาจน่าสนใจน้อยกว่าโซลูชันฟิชชัน

คำอธิบาย

{       e# Quine framework. Runs the block while another copy of it is on the stack.
  `     e# Stringify the block.
  "_~"  e# Push the remaining code as a string.
  .+    e# Element-wise append... essentially puts the two strings in a grid and 
        e# transposes it.
  N*    e# Join with linefeeds.
}_~

10

ฟิชชัน 17 ไบต์

ยังเป็นภาษาโปรดของฉันสำหรับการทดสอบ ...

'"
!0
0+
;!
DN
"!

ลองออนไลน์!

คำอธิบาย

นี้ค่อนข้างคล้ายกับพื้นฐานฟิชชั่นควิน ในความเป็นจริงถ้ามันไม่ได้สำหรับ "ต้องมีอย่างน้อยสองเส้นที่มีอย่างน้อยสองตัวละครที่ไม่ใช่การขึ้นบรรทัดใหม่แต่ละกฎ" ผมก็จะได้ย้ายที่และแทนที่ด้วยR Dกฎนั้นทำให้สิ่งต่าง ๆ น่าสนใจยิ่งขึ้นไปอีกเพราะเราจำเป็นต้องพิมพ์บรรทัดใหม่

การควบคุมการไหลเริ่มต้นที่Dอะตอมเดียวที่ไหลลงใต้ เมื่อมันกระทบ"มันจะพันและพิมพ์

'!0;D

กับ STDOUT คล้ายกับว่าจะเป็นอย่างไรในควินปกติ แล้วชุดมวลอะตอมที่จะรหัสของตัวละคร'! !นี่0คือเครื่องเคลื่อนย้ายมวลสารที่เคลื่อนย้ายอะตอมไปยังคอลัมน์ที่สองซึ่งยังคงเคลื่อนที่ไปทางทิศใต้

ด้วยการที่เราเพิ่มมวลอะตอมของค่าของ+ พิมพ์ใบเสนอราคา linefeed อ้าง ตอนนี้ STDOUT มีลักษณะดังนี้:"!N!

'!0;D"
"

หลังจากล้อมรอบอะตอมจะชนกับอีก"และตอนนี้พิมพ์คำต่อบรรทัดที่สอง:

'!0;D"
"0+!N!

เราเสร็จแล้ว อะตอมใช้เครื่องเคลื่อนย้ายมวลสารอีกครั้งและตกลงไปในที่;ซึ่งมันจะทำลายมันและยุติโปรแกรม

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


3

Javascript ES6, 90 ไบต์

$=_=>[...(_=`$=${$};$()`.split`
`)[0]].map((x,y)=>_.map(v=>[...
v][y]).join``).join`
`;$()

ไม่เลวไม่เลว

คำอธิบาย

นี่คือกรอบมาตรฐาน quine:

$=_=>`$=${$};$()`;$()

ในการปรับเปลี่ยนฉันเพิ่งแยกสตริง quine ตามบรรทัดใหม่และตัวอักษรเพื่อสร้างเมทริกซ์ของตัวอักษร transposed โดยใช้ 2 ฟังก์ชั่นแผนที่และเข้าร่วมเพื่อสร้างผลลัพธ์



2

Befunge-93 , 57 bytes

^
_^
,@
+,
5*
52
,+
*9
28
+|
9
8#
|!
 ,
##
!:
,^
#
:
^
""

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

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


มันจะสั้นกว่าหรือไม่ที่จะย้ายเครื่องหมายคำพูดในคอลัมน์ที่สองไปด้านบนอย่างที่ฉันทำในคำตอบฟิชชัน?
Martin Ender

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

อืมฉันคิดว่ามันอาจทำให้คุณสร้าง"เพียงครั้งเดียวเพื่อให้คุณสามารถเปลี่ยนรหัสบางส่วนจากคอลัมน์แรกเป็นคอลัมน์ที่สอง
Martin Ender

1

Python 2, 91 75 69 ไบต์

s='#%r;print"s#\\n="+"\\n".join(s%%s)';print"s#\n="+"\n".join(s%s)
##

ลองออนไลน์

คำอธิบาย:

สิ่งนี้ใช้การดัดแปลงของ quine มาตรฐาน:

s='s=%r;print s%%s';print s%s

หลังจากปรับเปลี่ยน:

s='s=%r;print"\\n".join(s%%s)';print"\n".join(s%s)

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

หากต้องการพิมพ์อย่างถูกต้องตอนนี้ฉันต้องพิมพ์#ที่ท้ายสองบรรทัดแรก ดังนั้นผมจึงเอาตัวละครสองตัวแรกจากสตริงsและพิมพ์ผู้ที่มีก่อนที่จะพิมพ์# s%sฉันใส่หนึ่ง#ในจุดเริ่มต้นของsการบันทึกไบต์โดยการลบตัวอักษรขึ้นบรรทัดใหม่

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