สร้างควินินแบบครบวงจรครึ่งหนึ่ง


18

ครึ่งวงกลม quine เป็นพระคาร์ดินัล quine เป็นวงกลมที่มีสองรัฐหนึ่งตั้งฉากกับคนอื่น

กฎระเบียบ

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

เมื่อหมุนแล้วช่องว่างใด ๆ ในรหัสของคุณควรถูกแทนที่ด้วยช่องว่างเพื่อรักษาตำแหน่ง

โปรแกรมของคุณจะต้องตอบสนองความหมายของชุมชนควิน

นี่คือดังนั้นโปรแกรมที่สั้นที่สุดในแต่ละภาษาชนะ โปรแกรมแรกของคุณใช้สำหรับการนับจำนวนไบต์

ช่องโหว่มาตรฐานเป็นสิ่งต้องห้าม

ตัวอย่าง

หากโปรแกรมของคุณคือ:

$_='print';eval

จากนั้นการทำซ้ำครั้งต่อไปจะต้องเป็นอย่างใดอย่างหนึ่ง:

$
_
=
'
p
r
i
n
t
'
;
e
v
a
l

หรือ

l
a
v
e
;
'
t
n
i
r
p
'
=
_
$

ซึ่งต้องแสดงผลโปรแกรมต้นฉบับ:

$_='print';eval

หากโปรแกรมของคุณคือ:

;$_=';
;$_=';
print

จากนั้นการทำซ้ำครั้งต่อไปจะต้องเป็นอย่างใดอย่างหนึ่ง:

;;
''t
==n
__i
$$r
;;p

หรือ:

p;;
r$$
i__
n==
t''
 ;;

ซึ่งต้องแสดงผลโปรแกรมต้นฉบับ:

;$_=';
;$_=';
print

ที่เกี่ยวข้อง
Dom Hastings


1
@ dylnan ไม่อีกคนหนึ่งไม่ได้ถามหาคำตอบร่วมกัน
Martin Ender

1
เมื่อเห็นคำตอบแล้วฉันคิดว่าความท้าทายที่แท้จริงคือทวนเข็มนาฬิกาหนึ่งหรือควินที่มีมากกว่าหนึ่งบรรทัด (เพื่อให้การหมุนนั้นแตกต่างจากการเปลี่ยนตำแหน่ง
Weijun Zhou

1
คุณอาจต้องการให้ทั้งสองโปรแกรมแตกต่างกัน มิฉะนั้นควินที่เกิดขึ้นมีความสมมาตรในการหมุนจะเป็นคำตอบที่ถูกต้อง
Martin Ender

คำตอบ:


14

CJam , 19 17 15 ไบต์

{s"_~"+N*""-}_~

ลองออนไลน์! ลองหมุน

คำอธิบาย

{s"_~"+  e# Standard quine framework. Puts a string representation of the entire
         e# program on the stack.
  N*     e# Riffle linefeeds into the string, which is effectively a clockwise
         e# rotation by 90°.
  ""-    e# Does nothing.
}_~

ในโค้ดที่หมุนเรามี linefeeds ทุกที่:

{
s
"
_
~
"
+
N
*
"
"
-
}
_
~

ดังที่Lynn สังเกตเห็นเกี่ยวกับความท้าทาย quine ก่อนหน้าของ Dom การแทรก linefeeds จริง ๆ แล้วยังคงเป็น quine ที่ถูกต้องเพราะ linefeeds ภายในบล็อกจะถูกเก็บรักษาเป็นคำต่อคำต่อไปและจะมี linefeeds ใน"_~"สายอักขระเพื่อให้ทั้งสอง สายของตัวเอง ดังนั้น{s"_~"+...}_~(ด้วย linefeeds) ยังคงเป็นเฟรมเวิร์ก quine ที่ถูกต้อง (แม้ว่าจะมีการป้อนบรรทัดเพิ่มเติมที่ท้ายสตริง) N*ตอนนี้แทรก linefeeds ให้มากขึ้นในสตริงนั้น แต่เราไม่สนใจจริง ๆ : เพราะตอนนี้""-มี linefeed อยู่ภายในสตริงนั้นดังนั้นมันจึงลบ linefeeds ทั้งหมดออกจากการเป็นตัวแทนของโปรแกรม ดังนั้นเราจึงสิ้นสุดด้วยรูปแบบแนวนอนของรหัสอีกครั้งยกเลิกการหมุน



5

> <> , 22 ไบต์

 "2+}>oao#ov*48}}*d3'v

ลองออนไลน์!

หมุนทวนเข็มนาฬิกา:

v
'
3
d
*
}
}
8
4
*
v
o
#
o
a
o
>
}
+
2
"

ลองออนไลน์!

คนแรกพิมพ์เส้นตรงข้ามโดยมีบรรทัดใหม่สลับกันและบรรทัดที่สองพิมพ์กลับด้านโดยไม่มีบรรทัดใหม่


มันฉลาดมาก!
ผลไม้แยก

กำลังเข้าใกล้มันในโหมดยาก!
Dom Hastings

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