Dies ist der Faden des Räubers. Der Thread des Polizisten ist hier .
Eine Schlangenmatrix ist eine quadratische Matrix, die diesem Muster folgt:
3-mal-3:
1 2 3
6 5 4
7 8 9
und 4-mal-4:
1 2 3 4
8 7 6 5
9 10 11 12
16 15 14 13
Ihre Aufgabe ist es, einen Code zu schreiben, der eine Eingabe entgegennimmt n
und eine solche Matrix in derselben Sprache wie ein Cop-Beitrag erstellt, und mit einem Code, der der Regex des Cop entspricht. Das Ausgabeformat Ihres Codes muss mit dem Ausgabeformat des Cop-Codes übereinstimmen.
Bitte hinterlasse einen Kommentar unter dem Beitrag des Polizisten, um anzuzeigen, dass du ihn geknackt hast.
Gewinnkriterium:
Der Gewinner ist der Benutzer, der die meisten Einsendungen geknackt hat. Im Falle eines Gleichstands gibt es mehrere Gewinner.
quelle
¦
funktioniert tötet mich jedes Mal, habe ich versucht , das gestern , aber mitṚ
nichtU
und beschlossen , dieḤ
nicht trainieren.F
war eine tolle Idee,J
stattF
.J
... ich hatte es versuchtLR
, konnte es aber nicht unter 11 Bytes bringen05AB1E, Emigna
Ich habe 05AB1E zum ersten Mal verwendet. Habe es mit ein bisschen Hilfe geschafft. Das hat Spaß gemacht. :)
Probieren Sie es online aus
Erläuterung:
Ich habe dieses ähnliche Programm tatsächlich selbst gefunden, aber das Ausgabeformat ist anders:
Probieren Sie es online aus
Sehen Sie sich den Bearbeitungsverlauf für meine letzten beiden Versuche an.
quelle
not bool(reversed(str(bin(N))).index('1'))
... Ich denke, das ist die absurdeste Art und Weise, wie ich jemanden bei einerN%2
Operation gesehen habe.Python 2, Dennis
Dies ist ein Spaß-Token-Golf-Problem.
Regex-Überprüfung
quelle
Ohm, Nick Clifford
Mein erster Versuch Ohm.
Wirklich schöne Sprache, die ich gerne wieder benutze :)
Erläuterung
Mein erster Versuch, bei dem kein Array und kein Int hinzugefügt wurden, ist nicht möglich:
Mein zweiter Versuch, der nicht der Regex entsprach:
quelle
05AB1E, Emigna (2. Einreichung)
Das erste Mal mit 05AB1E arbeiten.
Probieren Sie es online! | Regex-Überprüfung
Erläuterung
quelle
)
ich dachte, es wäre der einzige Weg, das richtige Ergebnis auf dem Stapel zu erzielen.)
wenn Sie nur 2 nicht-alphanumerische Zeichen verwenden können. Der knifflige Teil hier sollte darin bestehen, das Programm so zu strukturieren, dass nur 2 Platzhalter verwendet werden und diese sequentiell sind. Wäre ohne die anderen Lösungen wahrscheinlich etwas schwieriger gewesen, aber es hätte einige Rätsel geben müssen :)^\w*..$
es möglich ist.UV
suchen muss+ˆ
. Ich kann mir keine andere Möglichkeit vorstellen, es mit nur 2 Wildcards am Ende zu tun. Dies kann jedoch mit 3 Platzhaltern erfolgen.CJam , Lynn
Alle Zeilenvorschübe dienen kosmetischen Zwecken und können ohne Beeinträchtigung des Programms entfernt werden.
Probieren Sie es online!
Erläuterung
Nachdem Lynn
{|}
von der Liste der erlaubten Charaktere gestrichen war, musste ich etwas Neues ausprobieren. Es stellt sich heraus, dass wir immer noch beliebige Zeichenfolgen konstruieren und als Code auswerten können.Zunächst müssen wir den Stack aufwerten. Die einzige verfügbare integrierten Ins , die etwas drücken , ohne etwas anderes zuerst popping (und ohne die Eingabe zu lesen) sind
es
,ea
undet
. Ich bin mir sicher, dass Sie von all diesen Möglichkeiten ausgehen können, aber ich habe versucht,es
den aktuellen Zeitstempel zu ändern. Da ich keine Vermutungen über den tatsächlichen Wert anstellen wollte, teste ich seine Ursprünglichkeit mitmp
(was0
und ergibt1
) und teste die Primalität dieses Wertes erneut, um sicherzustellen, dass ich einen0
auf dem Stapel habe. A1
ist nützlicher, also berechnen wirexp(0)
mitme
und wandeln es in eine Ganzzahl mit umi
. Alle Zahlen beginnen also mit:Jetzt haben wir eine ganze Reihe von unären Mathematikoperatoren, mit denen wir arbeiten können:
Wir können auch einige integrierte Funktionen kombinieren, um Folgendes zu erreichen
x
:Mit diesen können wir eine beliebige Anzahl in
0 <= x < 128
(und viele andere) in weniger als 10 Schritten von erhalten1
. Ich bin sicher, dass eine viel kleinere Teilmenge dieser Befehle auch ausreichen würde. Ich habe ein kleines Mathematica-Programm geschrieben, um all diese Ausschnitte zu bestimmen (es ist nicht sehr lesbar, sorry):Damit können wir einfach eine beliebige Liste von Zeichencodes verschieben und diese anschließend in ein Zeichen mit umwandeln
c
. Sobald wir den gesamten Code gepusht haben, den wir ausführen möchten, drücken wir95
(]
). Wir evaluieren diesen mit~
, um alle anderen in eine Zeichenfolge zu wickeln, und dann evaluieren wir diese Zeichenfolge mit~
.Der eigentliche Code, der am Ende des Programms ausgeführt wird, lautet erneut:
Eine Erklärung finden Sie in meiner vorherigen Lösung .
quelle
Python 3, TuukkaX
Entschuldigung, der von Ihnen verwendete Regex war zu einfach zu trivialisieren. Nein
0
,#
oder? Kein Problem!
Möglicherweise habe ich die Beispielausgabe falsch interpretiert, aber es ist immer noch ziemlich einfach, sie zu optimieren, da noch 45 freie Zeichen übrig sind
quelle
R, MickyT
Testfälle:
Und Regex-Bestätigung: https://regex101.com/r/OB8ZIM/1
Ich hatte auch:
Dies gibt die gleiche Ausgabe und passt zur gleichen Regex .
quelle
lets_make_a_snake
... Ich wäre überrascht, wenn das die beabsichtigte Lösung wäre: Pfor
` und `if
` vorhatte , aber viel besser golfen als meins.Röda , Fergusq
Dies ist eine anonyme Funktion , die diese PCRE regex übereinstimmt:
^{(\|[^\/#\s]*){8}$
.Probieren Sie es online!
quelle
Bash, @Marcos M
Schön gemacht:
Der erste Teil des Unterbefehls wird erzeugt
1 2 3 4
,9 10 11 12
und der zweite Teil wird erzeugen8 7 6 5
,16 15 14 13
. Das äußeresort -n
wird sie richtig mischen, um das Schlangenmuster zu bilden.Ich habe den Trick in /superuser//a/101760 verwendet , um die ungeraden und geraden Zeilen zu drucken. Vielen Dank, Marcos, wirklich ein Spaß.
quelle
Javascript, Tom
quelle
Python 3, @TuukkaX
Wenn Sie den regulären Ausdruck des Polizisten leicht analysieren, wird eine feste Vorlage angezeigt:
wo
_
ist ein Zeichen außer[ '"#]
und^
ist eines von[int()2/]
.Das
"*n)
Ende zeigt deutlich eineval("..."*n)
oderexec("..."*n)
, also müssen wir nur sicherstellen, dass"..."
die j-te Zeile gedruckt wird.Das
for i in range(j,
ist zu kurz vor dem Ende der Zeichenfolge, was auf das Verstehen der Liste hinweist, ohne dass es eines gibtif
. Also müssen wir die i-te Spalte diejenigen konstruiereni%n
,2*n
Sachen.quelle
dc , Mitchell Spector
Dies war mein erster Einstieg in eine Cops and Robbers Challenge und ich hatte viel Spaß. Der Regex, der angepasst werden musste, war einfach,
^[^# !]{59}$
was meinen Job im Grunde zu einem Golfjob machte, ohne diese 3 Zeichen zu verwenden. Anfangs hatte ich Schwierigkeiten, unter 60 Bytes zu kommen, aber am Ende habe ich es geknackt.Probieren Sie es online!
Erläuterung:
Mein Code verwendet eine Schleife mit N 2 -Iterationen, wobei ein auf Null basierender Zähler (1D) beibehalten wird, und berechnet die zu druckende Zahl basierend auf den entsprechenden Koordinaten der Matrixzeilen und -spalten (r, c).
Beispiel für was ich meine, wenn N = 4:
Es sieht kompliziert aus, aber der Zwischenschritt ist hilfreich. Außerdem habe ich von Anfang an versucht, 2 Loops zu verwenden, aber ich habe die Zeichenbegrenzung für reguläre Ausdrücke überschritten. Zahlengenerierung bei jeder Iteration (nullbasiert):
r % 2 = 0
(normale Zeile),n = (r * N) + c = counter
r % 2 = 1
(umgekehrte Zeile),n = ((r + 1) * N) - c - 1 = counter + N - (2 * c) - 1
Oder alles auf einmal, als eine Nummerierung:
n = counter + ((N - (2 * c) - 1) * (r % 2)); n++
quelle
~
, um die Zeilen- und Spaltenindizes auf einmal zu berechnen. Aber einer meiner vorherigen Versuche hat sie wie Sie separat berechnet. Große Köpfe denken ähnlich? :)~
, um den Code zu verkürzen.?sN0[AP]sP[ddlN~_2*lN+1-r2%*+1+n32P1+dlN%0=PdvlN>L]dsLx
tio.run/nexus/…PowerShell, ConnorLSW
Riss
Ich begann mit einer kleineren Lösung für das Problem und füllte meine Variablennamen auf, um den regulären Ausdruck passend zu machen. Der Versuch, eine Verwendung für den Dickdarm zu finden, war vermutlich das Schwierigste, meinen Kopf herumzuwickeln.
Erläuterung
quelle
$script
Variable und ein paar wirklich chaotisch Looping - Pad es aus, das[array]::Reverse()
war richtig aber, congrats - ich glaube , Sie auch aus der Länge wünschen könnte$i
und$MySnakeIndex
though.CJam, Lynn
Etwas wie das:
Alle Leerzeichen sind für ... "Lesbarkeit" ... und können weggelassen werden, um der Regex von Lynn zu entsprechen.
Probieren Sie es online!
Erläuterung
Der reguläre Ausdruck erfordert, dass wir das Problem nur lösen, indem wir Folgendes verwenden:
{}
, mit dem Blöcke erstellt werden können.|
Wird hauptsächlich für bitweises ODER verwendet.~
, "eval" und bitweises NOT (auch "dump array", aber ich werde es nicht benutzen).Seit wir ... Haben,
~
beliebige Zeichenfolgen erstellen können, können wir beliebigen Code ausführen. Zunächst ist es jedoch nicht klar, wie das geht.Das erste Teil des Puzzles ist, dass Blöcke nicht bewertete Codebits sind, mit denen Zeichenfolgen erstellt werden können
s
. So{abc}s
gibt es uns"{abc}"
. Als Nächstes können Sieeu
diese Zeichenfolgen in Großbuchstaben konvertieren.Dies hat den Vorteil, dass Großbuchstaben vorinitialisierte Variablen sind. Wir können also eine Menge konstanter Werte erhalten, indem wir eine solche Zeichenfolge erstellen und zweimal auswerten (einmal, um die Zeichenfolge wieder in einen Block zu verwandeln, und einmal, um diesen Block ausführen). Wir können nicht alle Buchstaben erhalten, da einige, wie z. B.,
x
keine gültigen Befehle sind (daher lehnt CJam es ab, einen Block zu analysieren, der sie enthält). Wir können es nicht so verwenden,f
wie es ist, da es von einem anderen Befehl gefolgt werden muss, aber wir könnenfb
die beiden Werte zusammen verwenden und dann ODER. Ebenso können wiree
statt verwendene
. Damit können wir die Zahlen erhalten0
,-1
,3
, und10
zu19
. Die-1
ist praktisch, denn wenn wir es in einen String ("-1"
) verwandeln, dann in ein Zeichen ('-
) und dann auswerten, können wir entweder subtrahieren oder die Differenz setzen. Wie ich schon sagte, können wir nicht bekommenX
(für .1
), aber wir können den absoluten Wert von-1
mit nehmenz
Wir können auch verwenden
s
, um eine Zeichenfolge zu erhalten, die ein Leerzeichen enthält, und diesc
in ein Leerzeichen umzuwandeln :Dies ist praktisch, da wir von dort aus viele nützliche Befehle im unteren ASCII-Bereich erhalten können, indem wir das Leerzeichen mit verschiedenen Zahlen ODER-verknüpfen. Um einige der Zeichen über dem Codepunkt zu erhalten
48
, verwenden wir'0
stattdessen das Zeichen als Basis:Dies reicht bereits aus, um beliebige Strings zu konstruieren, da wir
'+
(Addition und String-Verkettung) aus dem folgenden Snippet erhalten können:Und wir haben eine wörtliche
1
, mit dem wir Leerzeichen einfach verschieben, sie auf den gewünschten Wert erhöhen und dann alle zusammenfügen können, aber das ist etwas langweilig, und der Code würde riesig werden.Stattdessen habe ich sie generiert
[
und]
ausgewertet, sodass alle Zeichen, die ich dazwischen drücke, automatisch in eine Zeichenfolge eingeschlossen werden. Das sind diese zwei Zeilen:Und schließlich brauchen wir
f
und~
in der Zeichenfolge, die wir generieren. Dies sind zwar bereits gültige Zeichen, wir haben jedoch keine Zeichenkettenliterale oder Zeichenliterale, daher müssten wir diese ebenfalls generieren, und es ist etwas ärgerlich, größere Codepunkte aus dem Raum zu erstellen. Stattdessen habe ich hier die Mengen-Subtraktion verwendet, aber zwei Blöcke subtrahiert (um die zu entfernen{}
):Das ist so ziemlich alles. Wir bewerten
[
. Wir pushen alle Zeichen, die wir durch verschiedene Berechnungen aus den wenigen eingebauten Konstanten erhalten haben|
,-
(via eval) und+
(via eval). Wir bewerten]
. Wir machen das Ganze zu einer Zeichenkette, weil ich irgendwann einige Zeichenketten oder Zahlen in die Liste aufgenommen habe. Wir bewerten unsere beliebige Zeichenfolge mit~
.Das
ri...p
sind Teil des eigentlichen endgültigen Programms, aber ich habe sie extrahiert, weil sie keine Kodierung benötigen.Schließlich ist dies das Programm, das wir gerade ausführen:
quelle
tinylisp , @ DLosc
Probieren Sie es online!
Dies definiert eine Funktion
f
, die die Antwort zurückgibt. Es gibt auch die Namen der Funktionen aus, die ich für stdout definiert habe, aber ich gehe davon aus, dass das keine Rolle spielt, da [wir unseren Ausgabestream auswählen dürfen] zumindest für Code-Golf. Wenn es eine große Sache ist, denke ich, dass ich es optimieren kann, um diese nicht zu drucken. Wie habe ich das gemacht? Ich habe mit etwas ziemlich Normalem angefangen:Dann habe ich beobachtet, dass man Funktionsdefinitionen wie diese transformieren kann:
wird
Und Funktionsaufrufe wie folgt:
wird
Ich habe dieses rekursive Vim - Makro verwendet, das im Register gespeichert ist
q
, um das zweite zu machen (das ich habe)jk
abgebildet habe<Esc>
):f s(v(h(q(jkea))))jk@q
.Diese beiden Transformationen reichten aus, um alle Leerzeichen zu entfernen.
quelle
Swift, James Webster
Überprüfung: https://regex101.com/r/7ukrM0/1
quelle
(…)(4)
, ohne das Integer-Literal in CShort umwandeln zu müssen.PHP, @ JörgHülsermann
221 Bytes sind zu lang (also die Schlange), und das fehlende Leerzeichen kann leicht umgangen werden.
Schön gemacht:
quelle
Jelly, Länge 12, JonathanAllan
Probieren Sie es online!
Wie es funktioniert
quelle
Gelee , 12 Bytes, knackt @ JonathanAllans zweite Antwort
Probieren Sie es online!
Erläuterung
Dies ist fast das gleiche wie meine andere Antwort . Ich habe gerade zwei Änderungen vorgenommen:
Zuerst habe ich
U
"jedes ElementṚ€
umkehren" in "jedes Element umkehren" geändert . Das hilft nicht von alleine, weilṚ
es auch verboten ist.Dann habe ich das geändert
Ṛ
("reverse") in;@/
(/
"fold by";
"concatenating"@
"in der entgegengesetzten Reihenfolge zur ursprünglichen Liste") geändert. Das vermeidet alle gesperrten Zeichen und gibt eine gültige Lösung.Ich gehe davon aus, dass der nächste Schritt darin besteht, die Array-Manipulation zu verbieten gehe besteht , zusätzlich zu den Atomen Quicks .
quelle
€
...€
in Bezug auf schreiben/
. Es ist nur etwas ausführlicher als diese Lösung.;@\ṫ0
, der Regex wird lang.Jelly, Länge 13, JonathanAllan
Probieren Sie es online!
Wie es funktioniert
quelle
m
?!Jelly, Länge 14, @ JonathanAllan
Probieren Sie es online!
quelle
Scala, @Soapy
Ich habe Scala schon eine Weile nicht mehr angerührt, es hat Spaß gemacht, sie noch einmal zu besuchen. Leider fehlen dieser Lösung viele coole Funktionen von Scala.
Probieren Sie es hier aus
Regex Bestätigung
quelle
QBasic (QB64), @DLosc
Beachten Sie, dass der Zeilenumbruch hier ein (U + 000D, CR) ist , da der
.
nicht übereinstimmt\n
(U + 000A, LF\r
).Überprüfen:
Die Hauptschwierigkeit besteht darin, ein Wort nach dem einzufügen
;
. Zum Glück behandelt QB64 CR als Zeilenumbruch, während Pythons Regex dies nicht tutREM\r
. Von den fünf erlaubten Regex-Aromen"\r" =~ /./
!/./.test('\r')
(\n
,\r
,\u2028
,\u2029
sind alle Zeilenseparatoren )re.match('.', '\r')
( nur\n
als Zeilenumbruch betrachtet )regexp.Match(".", "\r")
/./ =~ "\r"
Dieser Riss ist also in Ordnung, solange wir JavaScript nicht erwähnen ... 🤐
quelle
REM
unmittelbar einer Anweisung ohne Anweisungstrennzeichen zu folgen. Meine ursprüngliche Lösung verwendete keine Kommentare. Ich habe eine weitere Variante, die ich in Kürze veröffentlichen werde. : DPython 3, Kennytm
Regex-Überprüfung
quelle
> <>, torcado
quelle
C, @Yimin Rong
Das Programm kann keine Zahlen enthalten, aber wir können Zahlen erhalten über:
c
, allgemein bekannt als "argc", was immer 2 ist.+
und-
sind verfügbar, also können wir 0 mitn-n
und 1 mit erstelleno=c;--o
.quelle
Ruby, @ Value Ink
[(-=Z-~]*
bedeutet "Ich kann alles schreiben, was ich mag :)"quelle
tinylisp, @ DLosc
Eine sehr unkomplizierte und völlig unoptimierte Lösung :)
Anrufen als
(disp (f 4))
.(p m n)
Berechnet m + n durch Subtraktions
(m + n == m - ((1 - 1) - n))(j f g)
erzeugt(f f+1 f+2 ... g-1)
(r f g)
erzeugt(g-1 g-2 g-3 ... f)
(k m o f g n)
Generieren Sie eine Zeile der Schlangenmatrix und rekurvieren Sie sich dann für die nächste Zeile, bis n Zeilen erstellt wurden. Die Argumentem
,o
werden durch substituiertej
/r
zu erzeugen Erhöhen oder Erniedrigen Reihen. Die Argumentef
,g
laufen Indizes zu wissen , welche Zeile sind wir auf.(f n)
ruft(k j r 1 1 n)
auf, um die Generierung zu starten.quelle
(f 4)
Übrigensdisp
ist es idiomatischer, nur zu tun - das ist impliziert.)PHP, @Ionut Botizan
Im Moment habe ich keine bessere Idee, die ursprüngliche Lösung zu knacken.
Unterstützt n <= 15
Es ist das erste Mal, dass ich getopt benutze. Vielleicht ist es nicht die beste Idee, Optionen als Eingabe zu verwenden.
Starten Sie von der Kommandozeile wie folgt
Original Regex
Level 1:
Sehr schöne Buchstabenkombination. Fühlen Sie sich frei, den Cops-Thread zu stimmen.
Es blockiert mich Funktionen wie - strrev - array_reverse - get_defined_vars
https://regex101.com/r/5rGTnw/2
Level 2:
https://regex101.com/r/XtVl9G/1
Lösung
Level 2:
quelle