Anagram Quines (Нить Копов)


26

Это вызов Нить грабителей можно найти здесь.

Ваша задача - написать программу, которая выводит анаграмму своего исходного кода, но не сам исходный код.

Например, следующая программа Python,

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

печать

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

который имеет все те же символы, что и его исходный источник, но в другом порядке.

Как только вы нашли такую ​​программу, включите вывод программы в качестве ответа, опуская программу, которая ее генерирует. Как вы уже догадались, грабители будут пытаться обнаружить скрытую вами программу или любую программу, которая соответствует спецификациям. Ваша цель - создать самую короткую программу, которую грабители не смогут взломать.

правила

  • Как и в случае с большинством задач, связанных с , если ваш ответ остается без изменений в течение недели, вы можете добавить в ответ предполагаемое решение и пометить его как Безопасный . Когда-то безопасный ответ не может быть взломан грабителями.

  • Вам не нужно включать язык предполагаемого решения, однако, если вы не включите язык, грабители могут взломать его на любом языке, предшествующем вызову, в то время как если вы укажете язык, он может взломать его только на одном из предоставленных языков.

  • Применяются стандартные правила для Quines.


Мой обычный вопрос: на языке, где байты не соответствуют символам, находится ли анаграмма на уровне байтов или символов?

@ ais523 это должна быть анаграмма байтов.
Пшеничный волшебник


Применимы ли обычные правила Куайн к грабителям Они относятся к полицейским?
Деннис

1
@Fatalize Если он не изменяет вывод, он в порядке, но вывод должен быть статическим.
Пшеничный волшебник

Ответы:


12

Brain-Flak , 231 байт, взломанный волшебником пшеницы

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

Оригинальная программа использует -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<-['$'..'|']]

Попробуйте онлайн!

Моя основная идея заключалась в том, чтобы написать quine, которая сортирует свой собственный исходный код перед выводом без использования библиотечной sortфункции. Только после первоначальной попытки взлома 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 Да, это полная программа. Разве это не стандартное правило для муки?
Лайкони

Не уверена. У нас были квины, до этого разрешенные функции. И даже если полные программы являются стандартными, «программа» в задании может интерпретироваться как перезапись значений по умолчанию, а также разрешающих функций .
Ними

@nimi Извините, предыдущая версия вводила в заблуждение. Я написал это после того, как увидел вашу первую попытку и, прежде чем заметил, что она не действительна в соответствии со спецификациями. Я даже опубликовал его, а затем быстро откатился в надежде, что никто не видел его, как вы можете видеть в истории изменений. Увидев вашу исправленную версию, я вернулся к этой версии, не считая, что описание больше не подходит.
Лайкони

Я не был уверен, что вы имели в виду мой ответ, поэтому я удалил свой комментарий. Действительно возможно использовать предварительно отсортированную строку (заменить ;на NL): i[]d=[d,d];main=print$i[]=<<"$$ ... |||"--и все пропущенные символы после --. Я нашел эту версию после моего ответа в ветке грабителей и после того, как вы раскрыли свой ответ с измененным объяснением.
Ними

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

Обратите внимание на ведущий перевод строки.

Поскольку это содержит непечатаемые, вот hexdump:

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

Чтобы помочь людям, вот ссылка на стандартную расширяемую V-строку


Вот оригинальная версия:

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

Попробуйте онлайн!

Читаемая версия:

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

Это работает путем встраивания сортировки в расширяемую квину по умолчанию. Из-за этого ответа я размышлял о V-квинах и понял, что стандартная расширяемая квинза может быть сокращена на три байта, поэтому это решение могло бы быть:

ñ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 байта Cracked by @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.

Попробуйте онлайн

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

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
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.