Dies ist Teil einer Cops and Robbers-Herausforderung. Gehen Sie hier für die Polizisten.
Für diese Herausforderung definieren wir Leerzeichen als nur Zeilenvorschübe (0x0A) und Leerzeichen (0x20). Beachten Sie, dass die meisten Sprachen und Regex-Varianten auch viele andere Zeichen als Leerzeichen betrachten, sowohl innerhalb als auch außerhalb des ASCII-Bereichs, sodass Sie möglicherweise nicht in der Lage sind, die entsprechenden integrierten Funktionen zu verwenden.
Die Herausforderung der Räuber
Die Antwort eines Polizisten kann geknackt werden, indem sie in ein gültiges Programm oder eine gültige Funktion (in der ausgewählten Sprache) umgewandelt wird, mit der Leerzeichen aus einer Eingabezeichenfolge entfernt werden, indem Leerzeichen in den Code eingefügt werden. Zum Beispiel, wenn Sie die folgende Eingabe erhalten haben:
H e l l o,
W o r l d!
Das Programm sollte ausgeben
Hello,World!
Nach dem Einfügen eines Leerzeichens darf die Bytezahl der Lösung die in der Antwort des Polizisten angegebene Bytezahl nicht überschreiten. Sie müssen nicht genau die gleiche Lösung finden, die der Polizist beabsichtigt hat, solange Ihre Lösung unter den oben genannten Bedingungen gültig ist.
Wenn du das schaffst, poste eine Antwort mit der Lösung, verlinke die Antwort des Polizisten und hinterlasse einen Kommentar zu der Antwort des Polizisten, die zurück zu deiner führt.
Der Räuber, der die meisten Cop-Antworten knackt, gewinnt. Die Krawatten werden durch die Summe der Größen der geknackten Antworten der Polizisten gebrochen (zugunsten des Räubers, der längere Einreichungen knackt).
Jede Antwort eines Polizisten kann nur einmal geknackt werden, und natürlich dürfen Sie Ihre eigene Antwort nicht knacken. Wenn sich herausstellt, dass die Antwort des Polizisten vor oder nach dem Knacken ungültig ist, wird sie nicht auf die Punktzahl des Räubers angerechnet.
quelle
JavaScript ES6, 199 Bytes von Arnauld
Ich erkannte, dass die Aufteilung
"SecretCode"
bedeutete, dass ich nach 11 Zahlen suchte, die sich zu (ich nahm an) 33 summierten. Dies ist ein Problem mit Sternen und Balken , bei dem die Anzahl der Leerzeichen die Sterne und die Buchstaben in"SecretCode"
den Balken sind. Ich habe nachgerechnet, wie viele Kombinationen es zu probieren gab (1.917.334.783 Kombinationen), und entschied mich dafür, es nur mit brachialer Gewalt zu versuchen, was den ganzen Tag gedauert hat.Es ist wahrscheinlich ein intelligenter Weg , um darüber zu haben , weg, zum Beispiel bemerkt , dass
k
sein muss33
und66
für den Index 10 bzw. 21, aber ich bin faul.quelle
$/**/=/[ \n]/;s['sp'+'lit']($)
... oh, das ist dreckig.C, 475 Bytes von Rexroni
Ich könnte anfangen, einige dieser Definitionen zu verwenden :)
Nach dem Preprozessor sieht der Code ungefähr so aus:
quelle
#defineabo
warf mich für eine Weile ab. Zuerst dachte ich, es#define ab o
müsste etwas mehr sein;
, aber das hat gegen Ende nicht geklappt.Ruby, 86 Bytes + 1 Flag = 87 von Histocrat
Das hat wirklich Spaß gemacht. Jedes Zeichen in der Zeichenfolge, an die übergeben wurde,
eval
wird durch den Zeichencode (ord
) XOR-verknüpft, wobei^(...)
die Anzahl der verbleibenden Leerzeichen in der Zeichenfolge berücksichtigt wird . Der resultierende Code lautet:quelle
RprogN von Ataco
Dies scheint den Trick zu tun
quelle
V, 37 Bytes, von DJMcMayhem
Unbedruckbares:
TryItOnline
Das
ü
hat mich wirklich auf eine Schleife geworfen, ich habe immer wieder erwartet, dass esî
auch Befehle gibt.Í üî
in V bedeutet:%s/ \|\n//g
in vim, wodurch alle Leerzeichen global entfernt werden. DerÍ
Befehl ist im Wiki und dieü
undî
sind|
undn
jeweils mit ihren hohen Bit gesetztquelle
C, 140 Bytes durch Betseg
(Ich hoffe auch, dass ich das richtig mache.)
quelle
MATL, 22 Bytes von Luis Mendo
Obwohl ich nicht sicher bin warum, scheint dies zu funktionieren
Ich werde sehen müssen, ob ich herausfinden kann, was es tut. Ich stellte mir vor, dass den Kommentaren Zeilenvorschübe folgen mussten, und dann ging es nur darum, die Leerzeichen an den richtigen Stellen zu platzieren.
quelle
MATL,
2221 Bytes von Luis Mendo.Endlich ... MickyT hat es geknackt, als ich eine Erklärung schrieb, also ist seine Antwort die "gültige". Ich habe das trotzdem gepostet, gemäß diesem Meta-Post .
M
undY
sind unnötig und werden auskommentiert. Es reicht aus, 4 Leerzeichen hinzuzufügen, nicht 5.Dies entspricht dem kompakteren :
Teilweise Erklärung:
quelle
1e5
entweder gedruckt100000
wurde oder1e
ein Anruf warreshape
, aber was war dann5
? (Ich sehe jetzt, dass das%
Ende der Zeile ist, also wäre es5M
nicht eine Fünf und eineM
. Außerdem dachte ich, ich müssteY(
eine Zeile haben. Alles in allem ein sehr schönes MATL-Tutorial :)Befunge-98, 65 Bytes von Ninjalj
Probieren Sie es online!
Das hat sehr viel Spaß gemacht. Da es nur wenige Befehle zum Ändern der Richtung und keine
^<[]?x
oder ähnliche Befehle gibt, musste ein Zeilenumbruch verwendet werden. Ich habe dann ein Python-Skript geschrieben, um den richtigen Abstand für diej
's zu finden.Der Code funktioniert durch Eingabe (
~
) und zweimaliges Duplizieren (::
). Dann werden 10 (':'0
oderord(':') - ord('0')
) und 32 ('[';
oderord('[') - ord(';')
) subtrahiert . Dann wird das zweite Ergebnis logisch negiert (1 wenn Leerzeichen war, 0 sonst) und eine 8 wird gedrückt.Jetzt kommt der Teil, der herausfinden musste, was zu überspringen ist. Das
1+!
wird übersprungen, indem in der nächsten Zeile fortgefahren wird.#
überspringt das@
. Das logisch negierte Ergebnis (0 oder 1) wird mit der 8 multipliziert und 1 addiert.Der Code springt dann um so viele (dh 1 oder 9) Stellen plus eine zusätzliche Stelle, wenn sich die IP bewegt. Wenn der Charakter kein Leerzeichen war, landet er am
!
. Der Zeichencode minus 10 wird logisch negiert (1 wenn Newline war, 0 sonst).j
Überspringt dann nichts, und print (,
) wird aufgerufen, und die Schleife wird durch vertikales Umbrechen fortgesetzt.Wenn das Zeichen ein Leerzeichen war, wird die unterste Zeile erneut
32, 22
als unterste Zeile des Stapels angezeigt. Die erstenj
Sprünge 705 Felder. Dann wird die Leitung ein drittes Mal durchgeschleift. Wenn mehr als zwei Zehner auf dem Stapel übrig sind (der Code verlässt nur diese),j
springt der erste um 100 Felder und die Schleife wird wiederholt. Ansonstenj
springt der erste auf!
, eine Null wird negiert, der zweitej
springt über den Ausdruck und das Programm wird fortgesetzt.Ich habe es geschafft, es auf 59 Bytes herunter zu spielen.
quelle
C # 6, 201 Bytes, nach Milch
Repl.it Demo
trueJoin
ist nicht definiert,string.Concat()
bleibt also nur .p
ist"\n"
.p[0]^32^10
ist Raum. Es wäre (ein bisschen) schwieriger gewesen, wenn esp[0]^42
oder andere ähnliche Konstanten wären .quelle
netzförmig, 43 Bytes, von Conor O'Brien
Probieren Sie es online!
Das war für mich schwieriger, als es hätte sein sollen, weil ich zu dumm war, um die Dokumentation zu finden, und schließlich raten musste, wie einige der Befehle funktionierten. Einige dieser Erklärungen sind möglicherweise nicht ganz richtig, aber dies war mein grundlegendes Verständnis des Codes.
quelle
C #, 159 Bytes von LethalCoder
repl.it
Die Zeichenfolge am Ende von Zeile 1 lautet
" \n"
(Leerzeichen + Zeilenumbruch).quelle
Minkolang v0.15, 88 Bytes von Kritixi Lithos
Erläuterung
quelle
C
Auslassungen würden verwirrend sein, aber trotzdem gute Arbeit!