การฉายรังสีทำให้ควินอ่อนลง


38

มันง่าย: สร้างควินที่เหมาะสมถ้าคุณลบตัวละครใด ๆ มันก็ยังคงเป็นควิน

ความแตกต่างระหว่างสิ่งนี้กับควินเสริมความเข้มการแผ่รังสีคือถ้าโปรแกรมของคุณคือABในควินที่ผ่านการแผ่รังสีที่แผ่AออกABมา แต่ที่นี่AจะออกAมา

รหัสกอล์ฟกฎมาตรฐานทั้งหมดช่องโหว่มาตรฐานใช้ไม่มีการโกง


โปรแกรมว่างเปล่าใช้ได้ไหม?
Loovjo

4
@ Loovjo ไม่
Martin Ender

3
@feersum ความท้าทายรัฐ "ทำให้ควินที่ ..." ดังนั้นควรเอาท์พุทAB AB
Mego

1
@ เล็กน้อยฉันรู้ว่ามันบอกว่า แต่สเปคนั้นไม่แม่นยำเสมอไปและไม่ได้ระบุไว้ในตัวอย่าง
feersum

4
@feersum "ทำให้เป็นควิน" หมายถึงทำให้เป็นควิน "ความแตกต่างระหว่างสิ่งนี้กับควินที่ผ่านการแผ่รังสี ... " หมายความว่าข้อแตกต่างเพียงอย่างเดียวคือโปรแกรมที่มีไบต์ใด ๆ ที่ลบผลลัพธ์จะเป็นควินไม่ใช่โปรแกรมที่พิมพ์ต้นฉบับของโปรแกรม ไม่มีความกำกวมอยู่ที่นี่
Mego

คำตอบ:


22

> <> (ปลา), 145 107 ไบต์

คำตอบนี้ใช้> <> คำสั่งการกระโดดเพื่อแก้ไขปัญหา

!<0078*+00~..>0[!."r43a*+8a+&{ee+00&1-:&(?.~~ol?!;4b*0.0f<>0['r3d*159*+&}7a*00&1-:&(?.~~ol?!;68a*+0.0+*a58 

Quine นี้มีเครื่องกำเนิดไฟฟ้าควินสองตัวที่ต่างกันจริงๆ มันเริ่มต้นด้วยตรรกะการกระโดดและโดยค่าเริ่มต้นใช้ควินซ้าย หากตัวละครถูกลบออกจากตรรกะการกระโดดหรือจากควินซีซ้ายโปรแกรมจะกระโดดไปที่ควินขวา

คุณสามารถลองได้ที่นี่

คำอธิบาย

รหัสสามารถแบ่งออกเป็นสองสามส่วน:

A: !<0078*+00~..>0[!. 
B:              >0[!."r43a*+8a+&{ee+00&1-:&(?.~~ol?!;4b*0.
C:                                                    .0f<
D:                                                        >0['r3d*159*+&}7a*00&1-:&(?.~~ol?!;68a*+0.
E:                                                                                                 .0+*a58 

คำอธิบายของส่วนต่าง ๆ :

  • A: ข้ามไปทางขวาของ C หากตัวละครใด ๆ ถูกลบออกจาก A สิ่งนี้จะกระโดดไปทางซ้ายของ D หรือทางขวาของ E เพื่อเรียกควินที่สอง หากตัวละครใด ๆ ถูกลบออกจาก B หรือ C รหัสจะถูกย้าย 1 ตัวไปทางซ้ายทำให้สิ่งนี้กระโดดข้ามไปทางซ้ายของ D
  • C: รหัสนี้กระโดดไปทางซ้ายของ B.
  • B: Quine # 1
  • D: Quine # 2
  • E: ข้ามไปทางซ้ายของ D

คำอธิบายของควิน (พร้อม # 1 เป็นตัวอย่าง):

เมื่อตัวชี้การเรียนการสอนมาถึง quines อย่างใดอย่างหนึ่งคุณมั่นใจว่าควินินสมบูรณ์

>0[!.                                       //Fix the instruction pointer's direction and empty the stack (The '!.' is a leftover from codepart A)
     "r43a*+                                //Start reading all of the code and add the '"' character to the stack
            8a+&                            //Because the quine started reading at the 19th character instead of the first, the stack has to move 18 characters. 
                                            //This part saves the number 18 to the register.
                {ee+00&1-:&(?.              //Move the stack one to the left, decrease the stack by 1. If the stack is not empty yet, jump back to the start of this section.
                              ~~              //Clean the temporary variables from the stack. It should now contain the whole quine.
                                ol?!;4b*0.  //Print the first character from the stack. As long as the stack isn't empty, jump back to the start of this section.

กรุณาอธิบาย
CalculatorFeline

คงคำแนะนำข้างต้น
CalculatorFeline

1
ชัดเจนเพียงพอหรือไม่
Thijs ter Haar

36

Lenguage , 4.54 × 10 761ไบต์

มันมีจำนวนอักขระ null นี้:

453997365974271498471447945720930600149036031871190716908688344432973027776681259141680552038829875159204621651993092104775733418288411812715164994750890484868305218411129600012389568016974351721147925344946382782884546247102886167837964612372737300786173159265347137401863281368021545169383664534228503236761742285358985343373496184959796553930661837467682191561275123057706776367104142995491262443697167483190110516522677811931124842961701222425076750211774387637740969301686178545299089832300154448308384461700726890067468872402133010536518468336342175124002115991866466700174974019423711837589532744970385003356612639263433822126850314801275940879069069974437167102618471264140597777702065896715558989678487253830854848740247786166790545462769498303055791292

เมื่อเห็นว่าเกณฑ์ในการท้าทายนี้ขัดแย้งกับคำจำกัดความของ "ควิน quine ที่เหมาะสม" อย่างจริงจังฉันคิดว่าตัวแปร Unary จะชนะ

รหัส Brainfuck ขยาย:

>>+++>++++++++>+++>+++>+>+>+>+>+>+>+>+++>+>+>+>+>+>+>+>+>+++>+>+>+>+>+>+>+>+>++++++++>++++>++++++++>++++>+++++++>++>+++>+>+++>++>+++>+++>+>+>+>+>+>+>+>+>++++>++++>+++++++>+>++++>++++++++>++>+++++++>+++>++++++++>++>+++++++>+++>++++++++>++>+++++++>+++>++++++++>++>+++++++>+++>+++++>++++++++>++++>+++++++>+++++++>+>+>+++>+>+>+>++++++++>+++>+++++++>+>+++>+>+++>+>+++>+>++++++++>++++>++++++++>++++>++++++++>++++>++++>+>+++>+++>++>+++++++>+++++++>+>+>+>++++++++>+++>+>++++++++>++++>+>+++>++>+++++++>++>+++++++>++++>++++>++++++++>+++>++++++++>+++>+++>+>++++>++++>++>+++++++>+++>+++>++++++++>++++>+>+++>++>+++++++>++++>++++>+++++++>+++>+++>+++>+++>++++++++>++++>++++>+>+++>+>+++>++>+++++++>+++++++
[
    [->+>+<<]
    >>>>[<<[->+<]>>[-<<+>>]>]
    <<[-[->+<]+>]+++
    [[->>+<<]<]<
]
+>+>+>+
[>]+++>++
[
    [<].
    >[-]>[-]>[-]>[-]
    <+[<<++++++++>>->+>-[<]<]
    ++++++++>++++++++>+++++++>>
]
.

หากตัวละครตัวหนึ่งถูกลบออกจากโปรแกรม Lenguage ตัวอักษรตัวสุดท้ายจะกลายเป็น a <ซึ่งทำให้โปรแกรมพิมพ์ตัวอักษรน้อยลงหนึ่งตัว


1
คุณจัดการหาจุดคงที่ได้อย่างไร (หรืออีกวิธีหนึ่งรหัส Brainfuck ทำงานอย่างไร?)
Martin Ender

1
@ MartinBüttnerสำเนาลูปขนาดใหญ่ตัวแรกและเข้ารหัสข้อมูลในรูปแบบของ "> +++ ... " (และกลับด้าน) อีกวงใหญ่พิมพ์ข้อมูลเป็นจำนวนเต็มในเอก มันไม่ซับซ้อน แต่มีความยาวเพียงเพราะ Brainfuck
jimmy23013

โอ้ใช่แล้วมันก็เหมือนกับ Brainfuck ที่สงบนิ่ง แต่มีฟังก์ชั่นการถอดรหัสที่แตกต่างกันใช่ไหม
Martin Ender

@ MartinBüttnerค่อนข้าง แต่ครึ่งหนึ่งของโปรแกรมคือ "ฟังก์ชั่นการถอดรหัส"
jimmy23013

ดูเหมือนว่าคุณสามารถใช้เทคนิคที่คล้ายกันในการสร้างคำตอบของคะแนนโดยพลสำหรับcodegolf.stackexchange.com/q/57257/8478 (แม้ว่าวิธีการว่าว่างานจะขึ้นอยู่กับคำตอบของความคิดเห็นล่าสุดของฉัน)
Martin Ender
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.