Anagrammquinen (Cops 'Thread)


26

Dies ist eine Herausforderung für Den Räuber-Thread finden Sie hier

Ihre Herausforderung besteht darin, ein Programm zu schreiben, das ein Anagramm seines Quellcodes ausgibt, jedoch nicht den ursprünglichen Quellcode.

Zum Beispiel das folgende Python-Programm,

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

druckt

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

Das hat alle die gleichen Zeichen wie seine ursprüngliche Quelle, aber in einer anderen Reihenfolge.

Wenn Sie ein solches Programm gefunden haben, fügen Sie die Ausgabe des Programms als Antwort ein und lassen Sie das Programm weg, das es generiert. Wie Sie vielleicht vermutet haben, werden Räuber versuchen, das von Ihnen versteckte Programm oder ein Programm zu finden, das den Spezifikationen entspricht. Ihr Ziel ist es, das kürzeste Programm zu erstellen, das die Räuber nicht knacken können.

Regeln

  • Wie bei den meisten Herausforderungen können Sie Ihrer Antwort die beabsichtigte Lösung hinzufügen und sie als sicher markieren, wenn Ihre Antwort eine Woche lang ungerissen bleibt . Einmal sicher, kann eine Antwort von Räubern nicht geknackt werden.

  • Sie müssen die Sprache der beabsichtigten Lösung nicht einschließen. Wenn Sie jedoch die Sprache nicht einschließen, können Räuber sie in jeder Sprache vor der Herausforderung knacken, während sie sie nur in der bereitgestellten Sprache knacken können, wenn Sie die Sprache angeben.

  • Es gelten die Standardregeln für Quines.


Meine übliche Frage: In einer Sprache, in der Bytes nicht mit Zeichen übereinstimmen, befindet sich das Anagramm auf Byte- oder Zeichenebene?

@ ais523 Es sollte ein Anagramm der Bytes sein.
Weizen-Assistent


Gilt für Räuber die übliche Quine-Regel? Treffen sie auf Polizisten zu?
Dennis

1
@Fatalize Wenn die Ausgabe nicht geändert wird, ist dies in Ordnung, die Ausgabe muss jedoch statisch sein.
Weizen-Assistent

Antworten:


12

Brain-Flak , 231 Bytes vom Weizen-Zauberer geknackt

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

Das ursprüngliche Programm verwendet das -AArgument.

Hier sind die Zählungen:

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



4

Haskell, 107 Bytes, Gebrochen von Nimi

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

Es gibt eine zusätzliche nachgestellte Zeile.


Ursprüngliche Lösung:


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

Probieren Sie es online!

Meine Hauptidee war es, ein Quine zu schreiben, das seinen eigenen Quellcode sortiert, bevor es ohne Verwendung einer Bibliotheksfunktion sortausgegeben wird. Erst nach einem ersten Crack-Versuch von nimi kam mir der Gedanke , dass der Programmcode manuell sortiert, fest in das Programm codiert und dann beim Verdoppeln jedes Buchstabens ausgedruckt werden konnte. Die begrenzten verfügbaren Zeichen machen diesen Ansatz jedoch umständlicher und Nimis erfolgreicher Crack ist meinem ursprünglichen Programm ziemlich ähnlich.

Erläuterung:

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 Ja, es ist ein volles Programm. Ist das nicht eine Standardregel für Quines?
Laikoni

Nicht sicher. Vorher hatten wir Quines, die Funktionen zuließen. Und selbst wenn vollständige Programme Standard sind, könnte das "Programm" in der Challenge so interpretiert werden, dass es die Standardeinstellungen überschreibt und auch Funktionen zulässt .
nimi

@nimi Es tut mir leid, dass die vorherige Version irreführend war. Ich hatte es geschrieben, nachdem ich Ihren ersten Versuch gesehen hatte und bevor ich bemerkte, dass es gemäß den Spezifikationen nicht gültig war. Ich habe es sogar veröffentlicht und dann schnell zurückgesetzt, in der Hoffnung, dass niemand es gesehen hat, wie Sie in der Revisionshistorie sehen können. Nachdem ich Ihre feste Version gesehen hatte, kehrte ich zu dieser Version zurück, ohne zu berücksichtigen, dass die Beschreibung nicht mehr passte.
Laikoni

Ich war mir nicht sicher, ob Sie sich auf meine Antwort beziehen. Deshalb habe ich meinen Kommentar gelöscht. Es ist in der Tat möglich, einen vorsortierten String zu verwenden (durch ;einen NL zu ersetzen ): i[]d=[d,d];main=print$i[]=<<"$$ ... |||"--und alle fehlenden Zeichen nach dem --. Ich fand diese Version nach meiner Antwort aus dem Räuber-Thread und nachdem du deine Antwort mit der nun geänderten Erklärung enthüllt hast.
nimi

4

Nicht spezifizierte Sprache, 124 Bytes,

Im Thema der Antwort von DJMcMayhem sind dies die ersten 32 ASCII-Zeichen (abgesehen von 0x00), die jeweils viermal gedruckt werden. Da keines davon sichtbar ist, habe ich den eigentlichen Code nicht in meine Antwort aufgenommen.

Hier ist der 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            ............

Hier ist jedoch ein Python, der es druckt (und eine neue Zeile), wenn Sie möchten:

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

4

Pyth , 32 Bytes, Gebrochen von math_junkie

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

Originelle Lösung

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

Probieren Sie es 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 Bytes (Sicher!)


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

Beachten Sie den führenden Zeilenumbruch.

Da dies nicht druckbare Dateien enthält, ist hier ein Hexdump:

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

Hier finden Sie einen Link zum erweiterbaren Standard-V-Quine


Hier ist die Originalversion:

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

Probieren Sie es online!

Die lesbare Version ist:

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

Dies funktioniert durch Einbetten von sort in das standardmäßige erweiterbare Quine. Als ich wegen dieser Antwort über V-Quines nachdachte, wurde mir klar, dass das erweiterbare Standard-Quine um drei Bytes verkürzt werden kann. Diese Lösung hätte also lauten können:

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

Erläuterung:

ñ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
schnuppere ich rieche frischen Regex
Kritixi Lithos

3

Nicht spezifizierte Sprache, 254 Bytes Gebrochen von @Dennis!

Ich bezweifle, dass dies der Kürze halber gewinnen wird, aber es wird ein Schmerz sein, ihn zu knacken, also lohnt es sich immer noch, ihn zu machen.

Aufgrund eines Fehlers ist die Reihenfolge 0x0b, 0x0c, 0x0aein wenig durcheinander geraten, aber dies ist definitiv die eigentliche Ausgabe.

Ich dachte, ich würde die Sprache nicht spezifizieren, um zu sehen, in welchen verschiedenen Sprachen dies möglich ist. Da die Ausgabe meistens nicht-ASCII ist, ist hier ein Hexdump der Ausgabe:

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

Das ist jedes einzelne ASCII-Zeichen mit Ausnahme von 0x00und, 0x0Dweil beide seltsames Verhalten bei TIO verursacht haben. Viel Spaß beim Knacken! >: D


Der ursprüngliche Code war in V.

Probieren Sie es online aus

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

Grundsätzlich wird alles bis auf den Sgerade eingefügten Müll in den Zwischenspeicher verschoben. Am 0xEEAnfang soll nur sichergestellt werden, dass nicht alles nach dem Zeilenumbruch in einer Schleife oder einem Makro abläuft. Dann machen wir

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



2

PHP, 130 Bytes (Sicher)

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

Ursprüngliche Lösung

Ich konnte nicht verstehen, dass es nicht geknackt war

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

Rate mal, 43 Bytes

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

Es war schwierig zu entscheiden, welche Sprache es war oder nicht, aber ich denke, diese Option ist besser. Beachten Sie, dass eine nachgestellte Zeile vorhanden ist.


1
Eine Antwort ist nur dann sicher, wenn Sie der Antwort die beabsichtigte Lösung hinzufügen. Bis dahin ist diese Antwort nicht sicher.
mbomb007
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.