Anagram Quines(警察的线)


26

这是挑战,可以在此处找到强盗的线索

您面临的挑战是编写一个程序,该程序输出其源代码的字谜,而不输出原始源代码本身。

例如以下Python程序,

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

版画

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

与原始来源具有相同的字符,但顺序不同。

找到这样的程序后,将其输出作为答案包括在内,而忽略生成它的程序。正如您可能已经猜到的那样,强盗会试图发现您隐藏的程序或任何符合规范的程序。您的目标是制作最强盗无法破解的程序。

规则

  • 与大多数挑战一样,如果您的答案一周都保持不变,则可以在答案中添加预期的解决方案并将其标记为“ 安全”。一旦安全,抢劫者就无法破解答案。

  • 您不需要包括预期解决方案的语言,但是如果您不包括语言,强盗可以在挑战之前以任何一种语言破解它,而如果您指定语言,则他们只能在提供的一种语言中破解它。

  • 适用Quines的标准规则。


我通常的问题:在字节不对应字符的语言中,字谜是在字节还是字符级别?

@ ais523,它应该是字节的字谜。
小麦巫师


常见的奎奴规则适用于强盗吗?他们适用于警察吗?
丹尼斯

1
@Fatalize如果不更改输出,则可以,但是输出必须是静态的。
小麦巫师

Answers:


12

Brain-Flak,231字节,被Wheat Wizard破解

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

原始程序使用该-A参数。

这是计数:

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



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函数的情况下将其源代码排序后输出的quine 。只有在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'2

不确定。在允许功能之前,我们有奎因。即使完整的程序是标准程序,挑战中的“程序”也可以解释为覆盖默认值并允许功能
nimi

@nimi对不起,先前的版本引起误解。在看完您的第一次尝试之后,我注意到它是无效的,然后才注意到它是无效的。我什至发布了它,然后迅速回滚,希望没有人看到它,就像您在修订历史中看到的那样。在看到您的固定版本之后,我回滚到了该版本,而没有考虑到该描述不再合适。
Laikoni '17

我不确定您是否在参考我的答案,这就是我删除评论的原因。确实可以使用预排序的字符串(;用NL 代替):i[]d=[d,d];main=print$i[]=<<"$$ ... |||"--和之后的所有丢失字符--。我在强盗线索中找到答案之后,并在用现在更改的说明揭露答案后找到了该版本。
nimi

4

未指定语言,124个字节,

在DJMcMayhem的回答主题中,这是前32个ASCII字符(除之外0x00),每个字符四次打印。由于这些都不可见,因此我没有在答案中包含实际的代码。

这是十六进制转储:

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|ÍÓÚîñòÿ

注意领先的换行符。

由于其中包含不可打印的内容,因此这里是一个十六进制转储:

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

为了帮助人们,这是指向标准可扩展V quine的链接


这是原始版本:

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

在线尝试!

可读版本为:

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

它的工作方式是将sort嵌入默认的可扩展quine中。由于这个答案,我在考虑V-quines时,我意识到可以将标准可扩展quine缩短三个字节,因此该解决方案可能是:

ñ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
我闻到新鲜的正则表达式
Kritixi Lithos

3

未指定语言,254个字节,由@Dennis破解!

我怀疑这样做是否会简短,但是要破解它会很痛苦,因此仍然值得一试。

由于有错误,顺序0x0b, 0x0c, 0x0a有点混乱,但这绝对是真正的输出。

我认为我不会仅指定语言,所以我可以看到这是什么不同的语言。由于输出大部分是非ASCII的,因此这是输出的十六进制转储:

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中。

在线尝试

十六进制转储:

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

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 '17
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.