Anagram Quines (ด้ายตำรวจ)


26

นี่คือท้าทายเธรดสามารถพบได้ที่นี่

ความท้าทายของคุณคือการเขียนโปรแกรมที่ส่งออกแอนนาแกรมของซอร์สโค้ด แต่ไม่ใช่ซอร์สโค้ดตัวเอง

ตัวอย่างเช่นโปรแกรม Python ดังต่อไปนี้

print`'print*2``'*2`

พิมพ์

'print*2``print*2``'

ซึ่งมีอักขระเหมือนกันทั้งหมดกับแหล่งต้นฉบับ แต่ในลำดับที่แตกต่างกัน

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

กฎระเบียบ

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

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

  • ใช้กฎมาตรฐานสำหรับ Quines


คำถามปกติของฉัน: ในภาษาที่ไบต์ไม่สอดคล้องกับตัวอักษรเป็นแอนนาแกรมที่ระดับไบต์หรือตัวอักษร?

@ ais523 มันควรจะเป็นแอนนาแกรมของไบต์
ข้าวสาลีตัวช่วยสร้าง


กฎควินินปกติใช้กับโจรหรือไม่? พวกเขาใช้กับตำรวจหรือไม่
เดนนิส

1
@ สรุปถ้ามันไม่เปลี่ยนเอาท์พุทมันก็ดี แต่เอาท์พุทจะต้องคงที่
ข้าวสาลีตัวช่วยสร้าง

คำตอบ:


12

Brain-Flakขนาด 231 ไบต์ถอดรหัสโดย Wheat Wizard

}{}{}{}{}{}{}{}{}{}{}{}{}{}{}{}{}{}{}{}{}{}{}{}{}{}{}{}{}{}{}{}{}{}{][][][][][][][)()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()(

โปรแกรมต้นฉบับใช้-Aอาร์กิวเมนต์

นี่คือการนับ:

( -> 74
) -> 74
{ -> 34
} -> 34
[ -> 7
] -> 7


5

Python 2, 96 ไบต์, ถอดรหัสโดย math_junkie

เอาท์พุท:

B97.off]xo) wnd[ri0'of{r1({r6-{r{rri) {r1(xo0'sjD;0'0'qhF=1({r{r2)4+}twnri2)wnlcof) yp) ) xomd2)

การตีกอล์ฟเป็นครั้งแรก! หวังว่ามันจะไม่ง่ายเกินไป


2
ฉันมีความสุขprint(''), chr() + ''เพื่อให้ห่างไกล
drolex


4

Haskell, 107 ไบต์, แคร็กโดย nimi

"$$$$'''''''',,----....::<<<<<<<<========>>>>[[[[[[[[]]]]]]]]aaddddddddddddiiiiiiiiiiiimmnnnnpprrtt||||||"

มีการขึ้นบรรทัดใหม่ที่ต่อท้าย


ทางออกเดิม:


main=print$id=<<[[id|i<-"main=print$id=<<[[id|i<-,i==d]>>d:[d]|d<-['$'..'|']]",i==d]>>d:[d]|d<-['$'..'|']]

ลองออนไลน์!

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

คำอธิบาย:

main=print$                                      -- full program which prints the following string
  id=<<[[id|i<-"...",i==d]>>d:[d]|d<-['$'..'|']]
                                 |d<-['$'..'|']  -- for each char d in "$%&'()*+,-./012 ... xyz{|"
        [id|i<-"...",i==d]                       -- build a list with as many elements as d is contained in the string
                          >>d:[d]                -- replicate the string "dd" as often as the previous list is long 
  id=<<[                                       ] -- concatenate the resulting list of srings to one single string

@nimi ใช่มันเป็นโปรแกรมแบบเต็ม นี่ไม่ใช่กฎมาตรฐานสำหรับการทดสอบใช่ไหม
Laikoni

ไม่แน่ใจ. เรามีคำถามก่อนหน้าที่อนุญาต และแม้ว่าโปรแกรมเต็มรูปแบบจะเป็นแบบมาตรฐาน "โปรแกรม" ในความท้าทายอาจตีความได้ว่าเป็นการเขียนทับค่าเริ่มต้นและอนุญาตให้ใช้ฟังก์ชันได้
nimi

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

ฉันไม่แน่ใจว่าคุณอ้างถึงคำตอบของฉันหรือไม่นั่นคือเหตุผลที่ฉันลบความคิดเห็นของฉัน มันย่อมเป็นไปได้ที่จะใช้สตริง presorted (แทนที่;ด้วย NL): และทุกตัวอักษรที่หายไปหลังจากที่i[]d=[d,d];main=print$i[]=<<"$$ ... |||"-- --ฉันพบรุ่นนี้หลังจากคำตอบของฉันจากกลุ่มโจรและหลังจากที่คุณเปิดเผยคำตอบพร้อมคำอธิบายที่เปลี่ยนไปในขณะนี้
nimi

4

ไม่มีการระบุอย่างชัดเจน 124 ไบต์

ในชุดรูปแบบของคำตอบของ DJMcMayhem นี่คืออักขระ 32 ASCII ตัวแรก (นอกเหนือจาก0x00) พิมพ์สี่ครั้ง เนื่องจากไม่สามารถมองเห็นสิ่งเหล่านี้ได้ฉันจึงไม่ได้รวมรหัสจริงในคำตอบของฉัน

นี่คือ hexdump:

00000000: 0101 0101 0202 0202 0303 0303 0404 0404  ................
00000010: 0505 0505 0606 0606 0707 0707 0808 0808  ................
00000020: 0909 0909 0a0a 0a0a 0b0b 0b0b 0c0c 0c0c  ................
00000030: 0d0d 0d0d 0e0e 0e0e 0f0f 0f0f 1010 1010  ................
00000040: 1111 1111 1212 1212 1313 1313 1414 1414  ................
00000050: 1515 1515 1616 1616 1717 1717 1818 1818  ................
00000060: 1919 1919 1a1a 1a1a 1b1b 1b1b 1c1c 1c1c  ................
00000070: 1d1d 1d1d 1e1e 1e1e 1f1f 1f1f            ............

อย่างไรก็ตามนี่คือ Python บางตัวที่พิมพ์ (และขึ้นบรรทัดใหม่) หากคุณต้องการ:

print"".join(chr(x)*4for x in range(1,32))

4

Pyth , 32 ไบต์, แคร็กโดย math_junkie

J+J=JJ 1-2#pTN%"J+J=JJ 1-2#pTN%"

โซลูชันดั้งเดิม

J2#p+"J+J=JJ 1-2#pTN%"N=J-J1 %TJ

ลองออนไลน์!

J2                               # Assign 2 to the variable J
  #                              # Infinite loop, break on error
    +"J+J=JJ 1-2#pTN%"N          # appending a '"' to the string 'J+J=JJ 1-2#pTN%'
   p                             # print the string above
                       =J-J1     # subtract 1 from J and assign back to J
                             %TJ # calculated 10%J, with a blank space before to supress output,
                                 # on the 3rd iteration this will be 10%0 that will generate an
                                 # erro and will break out the loop



4

V , 21 ไบต์ (ปลอดภัย!)


"&./124ipq|ÍÓÚîñòÿ

หมายเหตุ newline ชั้นนำ

เนื่องจากสิ่งนี้มี unprintables นี่คือ hexdump:

00000000: 0a16 1b22 262e 2f31 3234 6970 717c cdd3  ..."&./124ipq|..
00000010: daee f1f2 ff                             .....

เพื่อช่วยให้ผู้คนบางส่วนนี่คือลิงค์ไปยังQuine V ที่ขยายได้มาตรฐาน


นี่คือเวอร์ชั่นดั้งเดิม:

ñi241"qp|Ó./ò&
ÚÍîÿ

ลองออนไลน์!

เวอร์ชันที่อ่านได้คือ:

ñi<C-v>241<esc>"qp|Ó./ò&
ÚÍîÿ

วิธีการทำงานคือฝังการเรียงลำดับใน quine เริ่มต้นที่ขยายได้ ขณะที่ฉันกำลังคิดเกี่ยวกับ V-quines เพราะคำตอบนี้ฉันตระหนักว่าควินมาตรฐานที่ขยายได้สามารถย่อให้สั้นได้สามไบต์ดังนั้นวิธีแก้ปัญหานี้อาจเป็นไปได้:

ñiéÑ~"qp|Ó./ò&
ÚÍîÿ

คำอธิบาย:

ñi<C-v>241<esc>"qp  " Standard V-quine. Everything after this is recorded into register 'q'
                    " so we can do whatever we want without ruining it's "quine-ness"


|       " Go the first character on the line (I just realized now that this is pointless)
 Ó./ò&  " Put every character on a newline
Ú       " Sort every line
 Íî     " Join all lines together
   ÿ    " Necessary for V-quines

1
สูดกลิ่นฉันได้กลิ่น regex สด
Kritixi Lithos

3

ภาษาที่ไม่ระบุ 254 ไบต์ถอดรหัสโดย @Dennis!

ฉันสงสัยว่าสิ่งนี้จะชนะเพราะความกะทัดรัด แต่มันจะเป็นความเจ็บปวดที่จะถอดรหัสดังนั้นมันจึงคุ้มค่าที่จะทำ

เนื่องจากข้อผิดพลาดคำสั่งของ0x0b, 0x0c, 0x0aได้รับการผสมเล็กน้อย แต่นี่คือผลลัพธ์ที่แท้จริง

ฉันคิดว่าฉันจะไม่ระบุภาษาเพื่อที่ฉันจะได้เห็นว่าภาษานี้มีความเป็นไปได้ที่แตกต่างกันอย่างไรเนื่องจากเอาต์พุตส่วนใหญ่ไม่ใช่ ASCII นี่คือ hexdump ของเอาต์พุต:

00000000: 0102 0304 0506 0708 090b 0c0a 0e0f 1011  ................
00000010: 1213 1415 1617 1819 1a1b 1c1d 1e1f 2021  .............. !
00000020: 2223 2425 2627 2829 2a2b 2c2d 2e2f 3031  "#$%&'()*+,-./01
00000030: 3233 3435 3637 3839 3a3b 3c3d 3e3f 4041  23456789:;<=>?@A
00000040: 4243 4445 4647 4849 4a4b 4c4d 4e4f 5051  BCDEFGHIJKLMNOPQ
00000050: 5253 5455 5657 5859 5a5b 5c5d 5e5f 6061  RSTUVWXYZ[\]^_`a
00000060: 6263 6465 6667 6869 6a6b 6c6d 6e6f 7071  bcdefghijklmnopq
00000070: 7273 7475 7677 7879 7a7b 7c7d 7e7f 8081  rstuvwxyz{|}~...
00000080: 8283 8485 8687 8889 8a8b 8c8d 8e8f 9091  ................
00000090: 9293 9495 9697 9899 9a9b 9c9d 9e9f a0a1  ................
000000a0: a2a3 a4a5 a6a7 a8a9 aaab acad aeaf b0b1  ................
000000b0: b2b3 b4b5 b6b7 b8b9 babb bcbd bebf c0c1  ................
000000c0: c2c3 c4c5 c6c7 c8c9 cacb cccd cecf d0d1  ................
000000d0: d2d3 d4d5 d6d7 d8d9 dadb dcdd dedf e0e1  ................
000000e0: e2e3 e4e5 e6e7 e8e9 eaeb eced eeef f0f1  ................
000000f0: f2f3 f4f5 f6f7 f8f9 fafb fcfd feff       ..............

นั่นคืออักขระ ASCII ทุกตัวยกเว้น0x00และ0x0Dเพราะพวกเขาทั้งคู่ต่างก็ก่อให้เกิดพฤติกรรมแปลก ๆ ใน TIO ขอให้สนุก! >: D


รหัสเดิมคือ V

ลองออนไลน์

hexdump:

00000000: ee02 0304 0506 0708 090b 0c0e 0f10 1112  ................
00000010: 1314 1516 1718 191a 1b1c 1d1e 1f20 2122  ............. !"
00000020: 2324 2526 2728 292a 2b2c 2d2e 2f30 3132  #$%&'()*+,-./012
00000030: 3334 3536 3738 393a 3b3c 3d3e 3f40 4142  3456789:;<=>?@AB
00000040: 4344 4546 4748 494a 4b4c 4d4e 4f50 5152  CDEFGHIJKLMNOPQR
00000050: 5455 5657 5859 5a5b 5c5d 5e5f 6061 6263  TUVWXYZ[\]^_`abc
00000060: 6465 6667 6869 6a6b 6c6d 6e6f 7071 7273  defghijklmnopqrs
00000070: 7475 7677 7879 7a7b 7c7d 7e7f 8081 8283  tuvwxyz{|}~.....
00000080: 8485 8687 8889 8a8b 8c8d 8e8f 9091 9293  ................
00000090: 9495 9697 9899 9a9b 9c9d 9e9f a0a1 a2a3  ................
000000a0: a4a5 a6a7 a8a9 aaab adae afb0 b1b2 b3b4  ................
000000b0: b5b6 b7b8 b9ba bbbc bdbe bfc0 c1c2 c3c4  ................
000000c0: c5c6 c7c8 c9ca cbcc cdce cfd0 d1d2 d3d4  ................
000000d0: d5d6 d7d8 d9da dbdc ddde dfe0 e1e2 e3e4  ................
000000e0: e5e6 e7e8 e9ea ebec edef f0f1 f2f3 f4f5  ................
000000f0: f6f7 f8f9 fafb fcfd feff 0a53 ac01       ...........S..

โดยพื้นฐานแล้วทุกอย่างจนถึงSเพียงแค่ใส่ขยะลงในบัฟเฟอร์ 0xEEที่จุดเริ่มต้นเป็นเพียงการประกันทุกอย่างว่าหลังจากการขึ้นบรรทัดใหม่ไม่ได้เกิดขึ้นในส่วนของห่วงหรือแมโคร จากนั้นเราก็ทำ

¬<C-a>   "Insert every character in the range 0x01-0xFF


2

อ็อกเทฟ , 91 ไบต์

a=['111111111123666667eeegggkkknnszEEGn};:;:'];
''''''''''(),,,,,-[[[]]]aaaddip;;=ds1010]);


ไม่มาก ... คุณจะได้รับ '' พิเศษเมื่อสิ้นสุดผลลัพธ์
drolex

ควรจะดีตอนนี้
คณิตศาสตร์ junkie

นี่ไง. ทำได้ดี!
drolex

2

PHP, 130 ไบต์ (ปลอดภัย)

    $$$$$$''''(((((((()))))))),,22;;;;;;<<==??\\\\____aaccddeeeeeeeehhhhiiiillllmmoooooopppppppppprrrrrrrrssssssssttttttttttvvvvvv

โซลูชันดั้งเดิม

ฉันไม่สามารถเข้าใจได้ว่ามันไม่แตก

<?php $v=str_split(str_repeat('<?php\ $v=str_split(str_repeat(\'\',2));sort($v);echo\ implode($v);',2));sort($v);echo implode($v);

0

เดา, 43 ไบต์

{4"2)4q):)u(4o'{4t:q(e)(",(t22(u()o)?,?'2e

มันเป็นการยากที่จะโทรออกว่าจะแบ่งปันภาษาใด แต่ฉันคิดว่าตัวเลือกนี้ดีกว่า โปรดทราบว่ามีบรรทัดใหม่ต่อท้าย


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