Anagram Quines (wątek gliniarzy)


26

To wyzwanie dla Wątek można znaleźć tutaj

Wyzwanie polega na napisaniu programu, który wyświetli anagram kodu źródłowego, ale nie samego kodu źródłowego.

Na przykład następujący program w języku Python:

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

odbitki

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

który ma wszystkie te same znaki, co oryginalne źródło, ale w innej kolejności.

Po znalezieniu takiego programu dołącz wynik programu jako odpowiedź, pomijając program, który go generuje. Jak można się domyślić, złodzieje będą próbowali odkryć ukryty program lub dowolny program zgodny ze specyfikacją. Twoim celem jest stworzenie najkrótszego programu, którego złodzieje nie są w stanie złamać.

Zasady

  • Podobnie jak w przypadku większości wyzwań , jeśli twoja odpowiedź pozostanie bez odpowiedzi przez tydzień, możesz dodać zamierzone rozwiązanie do odpowiedzi i oznaczyć ją jako Bezpieczną . Po uzyskaniu bezpieczeństwa złodzieje nie mogą złamać odpowiedzi.

  • Nie musisz podawać języka zamierzonego rozwiązania, jednak jeśli go nie uwzględnisz, złodzieje języka mogą go złamać w dowolnym języku poprzedzającym wyzwanie, a jeśli podasz język, mogą go złamać tylko w podanym języku.

  • Obowiązują standardowe zasady dotyczące Quines.


Moje zwykłe pytanie: w języku, w którym bajty nie odpowiadają znakom, czy anagram jest na poziomie bajtów lub znaków?

@ ais523 powinien to być anagram bajtów.
Kreator pszenicy


Czy zwykłe zasady dotyczące quine mają zastosowanie do złodziei? Czy dotyczą policjantów?
Dennis

1
@Fatalize Jeśli to nie zmienia wyjścia, jest w porządku, ale wyjście musi być statyczne.
Kreator pszenicy

Odpowiedzi:


12

Brain-Flak , 231 bajtów Cracked by Wheat Wizard

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

Oryginalny program używa -Aargumentu.

Oto liczby:

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



4

Haskell, 107 bajtów, Cracked by nimi

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

Istnieje dodatkowy końcowy znak nowej linii.


Oryginalne rozwiązanie:


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

Wypróbuj online!

Moją główną ideą było napisanie quinu, który sortuje własny kod źródłowy przed wypisaniem go bez użycia sortfunkcji biblioteki . Dopiero po początkowej próbie krakingu przez Nimi przyszło mi do głowy, że kod programu może być ręcznie sortowane, ciężko zakodowana w programie, a następnie wydrukować natomiast podwojenie każdą literę. Jednak ograniczone dostępne postacie sprawiają, że to podejście jest bardziej kłopotliwe, a udane złamanie ich jest dość podobne do mojego oryginalnego programu.

Wyjaśnienie:

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 Tak, to pełny program. Czy to nie jest standardowa zasada dla quinesów?
Laikoni

Niepewny. Wcześniej mieliśmy quines, który umożliwiał funkcje. I nawet jeśli pełne programy są standardowe, „program” w wyzwaniu może być interpretowany jako nadpisanie wartości domyślnych, a także zezwalanie na funkcje .
nimi

@nimi Przykro mi, ale poprzednia wersja wprowadzała w błąd. Napisałem go po obejrzeniu twojej pierwszej próby i zanim zauważyłem, że nie był ważny zgodnie ze specyfikacją. Nawet opublikowałem go, a potem szybko wycofałem, mając nadzieję, że nikt go nie widział, jak widać w historii zmian. Po obejrzeniu poprawionej wersji przywróciłem tę wersję, nie biorąc pod uwagę, że ten opis już nie pasuje.
Laikoni,

Nie byłem pewien, czy odwołujesz się do mojej odpowiedzi, dlatego usunąłem swój komentarz. Rzeczywiście jest możliwe użycie wstępnie napisanego ciągu (zamień ;na NL): i[]d=[d,d];main=print$i[]=<<"$$ ... |||"--i wszystkich brakujących znaków po --. Znalazłem tę wersję po mojej odpowiedzi z wątku złodziei i po tym, jak ujawniłeś swoją odpowiedź ze zmienionym wyjaśnieniem.
nimi

4

Nieokreślony język, 124 bajty,

W temacie odpowiedzi DJMcMayhem jest to pierwsze 32 znaki ASCII (poza 0x00) drukowane czterokrotnie. Ponieważ żaden z nich nie jest widoczny, w odpowiedzi nie podałem rzeczywistego kodu.

Oto zrzut heksowy:

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            ............

Tutaj jednak jest jakiś Python, który go wypisuje (i nowy wiersz), jeśli chcesz:

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

4

Pyth , 32 bajty, Cracked by math_junkie

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

Oryginalne rozwiązanie

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

Wypróbuj online!

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 bajtów (Bezpiecznie!)


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

Uwaga wiodący nowy wiersz.

Ponieważ zawiera to niedrukowalne, oto zrzut heksowy:

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

Aby pomóc niektórym ludziom, oto link do standardowej rozszerzalnej litery V.


Oto oryginalna wersja:

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

Wypróbuj online!

Wersja do odczytu to:

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

Działa to poprzez osadzenie sort w domyślnej rozszerzalnej quine. Kiedy zastanawiałem się nad V-quinesami z powodu tej odpowiedzi, zdałem sobie sprawę, że standardowy rozciągalny quine może być skrócony o trzy bajty, więc to rozwiązanie mogło być:

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

Wyjaśnienie:

ñ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
wącham Czuję świeży regex
Kritixi Lithos

3

Nieokreślony język, 254 bajtów Pęknięty przez @Dennis!

Wątpię, czy wygra to zwięźle, ale złamanie go będzie trudne, więc nadal warto to zrobić.

Z powodu błędu kolejność 0x0b, 0x0c, 0x0apomieszania się nieco się zmieniła, ale jest to z pewnością prawdziwa wydajność.

Doszedłem do wniosku, że nie będę określał języka tylko po to, aby zobaczyć, w jakich różnych językach jest to możliwe. Ponieważ dane wyjściowe nie są w większości ASCII, oto zrzut danych wyjściowych:

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       ..............

To jest każda pojedyncza postać ASCII, z wyjątkiem 0x00i 0x0Dponieważ spowodowały one dziwne zachowanie na TIO. Baw się dobrze cracking! >: D


Oryginalny kod był w V.

Wypróbuj online

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..

Zasadniczo wszystko do samej Stylko wstawia śmieci do bufora. Na 0xEEpoczątku jest po to, aby upewnić się, że wszystko po nowej linii nie dzieje się w części pętli lub makra. Więc robimy

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



2

PHP, 130 bajtów (bezpieczny)

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

Oryginalne rozwiązanie

Nie mogłem zrozumieć, że nie był pęknięty

<?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

Zgadnij, 43 bajty

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

To było trudne wezwanie do dzielenia się, jaki to był język, ale myślę, że ta opcja jest lepsza. Zauważ, że pojawia się nowa linia.


1
Odpowiedź jest bezpieczna tylko wtedy, gdy dodasz do niej zamierzone rozwiązanie. Do tego czasu ta odpowiedź nie jest bezpieczna.
mbomb007
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.