Inspiriert von diesem Kommentar ...
Vielen Dank an die Benutzer Step Hen , Wheat-Wizard und Dennis, die mir geholfen haben, die Spezifikation dieser Herausforderung zu konkretisieren, bevor ich sie veröffentlichte!
Das ist der Thread des Räubers! Für den Faden Cops, gehen hier
In dieser Herausforderung müssen Sie Code ausführen, der dafür sorgt, dass Ihre Sprache unsere Kriterien als Programmiersprache nicht mehr erfüllt. In dieser Herausforderung heißt das, es so zu machen, dass die Sprache nicht mehr ...
Zahleneingabe und -ausgabe übernehmen
Addiere zwei Zahlen
Testen Sie, ob eine bestimmte Zahl eine Primzahl ist oder nicht.
Dies ist eine Cops-and-Robbers- Herausforderung, bei der es zwei unterschiedliche Herausforderungen mit zwei unterschiedlichen Zielen gibt: Die Cops werden versuchen, Code zu schreiben, der die Sprache größtenteils unbrauchbar macht, und die Räuber werden versuchen, die verborgene Problemumgehung zu finden, die es den Cops ermöglicht ihre Sprache wiederzugewinnen.
Die Bullen werden zwei Code-Schnipsel schreiben:
Eine, die ihre Sprache größtenteils unbrauchbar macht, z. B. indem eingebaute Funktionen für Eingabe / Ausgabe und numerische Operationen entfernt werden. Dieser Code darf nicht abstürzen oder beendet werden. Es sollte möglich sein, Code am Ende dieses Snippets hinzuzufügen, und dieser Code wird ausgewertet . Und
Ein Codeausschnitt, der zwei Zahlen als Eingabe verwendet, sie addiert und ihre Summe ausgibt. Dieses Snippet muss auch nach dem Ausführen des ersten Snippets noch ordnungsgemäß funktionieren. Wenn die beiden Ausschnitte miteinander kombiniert werden, müssen sie ein vollständiges Programm bilden, das zwei Zahlen hinzufügt, oder eine Funktion definieren, die zwei Zahlen hinzufügt. Dieses Snippet wird sich wahrscheinlich auf obskures Verhalten stützen und schwer zu finden sein.
Die Bullen wählen auch eine Standardmethode für die Ein- und Ausgabe . Sie müssen jedoch genau angeben, welches Format (Eingabe und Ausgabe) sie verwenden. Damit Sie ihre Antwort knacken können, müssen Sie dasselbe Eingabe- / Ausgabeformat verwenden, oder Ihr Riss zählt nicht.
Eine Antwort der Polizei wird immer enthüllen
Der erste Ausschnitt (offensichtlich nicht der zweite).
Sprache (einschließlich Nebenversion, da die meisten Einsendungen wahrscheinlich auf seltsamen Randfällen beruhen)
IO-Format, einschließlich, ob es sich um eine Funktion oder ein vollständiges Programm handelt. Räuber müssen dasselbe Format verwenden, um ein gültiger Riss zu sein.
Irgendwelche seltsamen Randfälle, die erforderlich sind, damit ihre Antwort funktioniert. Läuft beispielsweise nur unter Linux oder erfordert eine Internetverbindung .
Als Räuber müssen Sie sich eines der Vorschläge der Polizei ansehen und versuchen, es zu knacken. Sie können es knacken, indem Sie irgendwelche schreiben gültiges Snippet , das als Snippet 2 funktionieren könnte (indem Sie zwei Zahlen addieren, nachdem die Sprache größtenteils unbrauchbar gemacht wurde). Dies muss nicht dasselbe Snippet sein, das der Cop ursprünglich geschrieben hat. Sobald du eine Antwort geknackt hast, poste deinen Code als Antwort in diesem Thread und poste einen Link zu deiner Antwort als Kommentar zur Antwort des Polizisten. Dann wird dieser Beitrag bearbeitet, um anzuzeigen, dass er geknackt wurde.
Hier ist ein Beispiel. Für das erste Snippet sehen Sie möglicherweise das folgende Python 3-Programm als Antwort der Polizei:
Python 3
print=None
Übernimmt die Eingabe von STDIN und gibt sie an STDOUT aus
Ein gültiges zweites Snippet könnte sein
import sys
a,b=int(input()),int(input())
sys.stdout.write(a+b)
Dies ist gültig, da zwei Zahlen als Eingabe und Ausgabe ihrer Summe verwendet werden, auch wenn Sie die beiden Ausschnitte zusammenfügen, z
print=None
import sys
a,b=int(input()),int(input())
sys.stdout.write(a+b)
Dies ist ein gültiger Riss zu ihrer Antwort.
Wenn die Antwort eines Polizisten eine Woche lang nicht geknackt ist, kann er sie in seinem zweiten Snippet bearbeiten und darauf hinweisen, dass seine Antwort jetzt sicher ist . Sobald es sicherheitshalber bearbeitet wurde, dürfen Sie nicht mehr versuchen, es zu knacken. Wenn sie es nicht als sicher bearbeiten, können Sie weiterhin versuchen, es zu knacken, bis sie es tun.
Der Gewinner des Räuber-Threads ist der Benutzer, der die meisten Antworten geknackt hat, wobei der Tie-Breaker der Zeitpunkt ist, an dem er N- Risse erreicht hat. (Wenn also zwei verschiedene Benutzer zum Beispiel jeweils 5 Risse haben, ist der Benutzer, der den 5. Crack zuerst gepostet hat, der Gewinner.) Nachdem genügend Zeit verstrichen ist, akzeptiere ich die Antwort des Gewinners mit den meisten Stimmen.
Habe Spaß!
Regelklärungen
Das erste Snippet muss korrekt ausgeführt werden, ohne dass Eingaben erforderlich sind . Es kann beliebig ausgegeben werden, und diese Ausgabe wird ignoriert. Solange das Snippet fertig ist, wird das zweite Snippet korrekt ausgeführt.
Das zweite Snippet muss tatsächlich ausgeführt werden, damit Ihre Antwort gültig ist. Dies bedeutet eine Antwort wie
import sys sys.exit()
ist nicht gültig, weil es die Sprache nicht bricht. Es hört einfach auf.
Nachdem Sie sicher sind, ist Ihre Punktzahl die Byteanzahl beider Ausschnitte .
Dies geht zurück auf Bitte enthüllen Sie alle seltsamen Randfälle, die erforderlich sind, damit Ihre Antwort funktioniert . Ihre Einreichung muss genügend Informationen enthalten, bevor sie enthüllt wird, damit sie nach der Enthüllung reproduzierbar ist. Dies bedeutet, dass, wenn Ihre Antwort sicher ist, Sie Folgendes bearbeiten: Hier ist meine Antwort. Oh ja, übrigens funktioniert dies nur, wenn Sie es unter Solaris ausführen, Witze über Sie! Ihre Antwort ist ungültig und wird gelöscht und gilt nicht als gewinnberechtigt.
Das zweite Snippet kann nach der Ausgabe der Summe abstürzen. Solange die Ausgabe noch korrekt ist (wenn Sie sich beispielsweise für die Ausgabe in STDERR entscheiden und dann eine Reihe von Absturzinformationen erhalten, ist diese ungültig)
Bestenliste
Hier ist eine Liste aller Benutzer mit mindestens einem Riss, sortiert nach Punktzahl und anschließendem Namen (alphabetisch). Wenn Sie einen Crack einreichen, aktualisieren Sie bitte Ihre Punktzahl entsprechend.
#User #Score
Ilmari Karonen 8
Dennis 5
Olivier Grégoire 4
Sisyphus 3
Veedrac 3
Arnold Palmer 2
Bruce Forte 2
DJMcMayhem 2
Dom Hastings 2
ppperry 2
1bluston 1
2012rcampion 1
Ben 1
BlackCap 1
Christian Sievers 1
Cody Gray 1
HyperNeutrino 1
Joshua 1
Kaz 1
Mark 1
Mayube 1
Xnor 1
zbw 1
quelle
SecurityManager
, das im Geltungsbereich liegt ... Sie könnenSystem.in
an dieser Stelle jedoch auch lesen , da es noch nicht geschlossen ist.sun.awt.SecurityManager
und"sun.awt.command"
ist plattformabhängig und ist nicht Teil von Java .System.getProperties().get("blah")
(da ich nur den Zugang blockiert habeSystem.getProperty
, nichtSystem.getProperties
), aber das ist gut genug! Gut gemacht!C (GCC / Linux) von Sisyphus
Dieses Snippet schließt die bereitgestellte Funktion und startet eine neue (klassische Code-Injection), die selbst neu definiert wird,
close
sodass anstelle des Schließens von fd der gewünschte Code ausgeführt wird.quelle
Python, Weizen Wizard-Lösung hier
Ich meine, Sie können einfach das Rekursionslimit zurücksetzen und nichts Schlimmes passiert ...
Funktioniert mit TIO
Hinweis
Dies ist meine allererste CnR-Einreichung. Wenn dies gegen Regeln verstößt, sag es mir bitte und ich werde dies löschen.
quelle
os.sys
, wenn das einen Unterschied macht: PHaskell von Ben
Ich habe immer noch wörtliche Zahlen und Zeichen (ich benutze
0
,'0'
und'-'
), und[a..]
und ,[a..b]
die ist sehr nützlich. Und ich habe unary-
, aber ich könnte verzichten.Ich erstelle neu
++
zu implementierenr
(reverse
) und zu definierent
undts
welche sindtail
undtails
.x a b
Gibt dasn
th-Element von zurückb
, wobein
die Längea
minus eins ist.x
könnte normalerweise definiert werden alssnd.last.zip
. Die Funktiond
nimmt eine Liste und gibt eine Liste mit den Elementen von den Positionen zurück, die ein Vielfaches von zehn sind.l!!s
Gibt dasn
th-Element von zurückl
, wobeis
die umgekehrte Zeichenfolgendarstellung von istn
.+
Gibt als Ganzzahl die Summe zweier natürlicher Zahlen zurück, die ebenfalls-
für die Differenz als umgekehrte Zeichenfolgen angegeben werden .add
Gibt als Ganzzahl die Summe zweier möglicherweise negativer Ganzzahlen zurück, die als Zeichenfolgen angegeben werden.Ich frage mich, ob dies etwas ähnlich ist, was Ben im Sinn hatte.
quelle
:
als ich feststellte, dass es sogar mitNoImplicitPrelude
und ohne Import von etwas im Umfang war .C (gcc) von Conor O'Brien
Probieren Sie es online!
quelle
Python 2 von Wheat Wizard (vierte Iteration)
Probieren Sie es online!
Keine Exploits, nur eine Funktion
' &)(,.:[]a`cdfijmonrt~'
, die wie vorgesehen nur mit Zeichen hinzugefügt werden kann (eigentlich nur'(),.:[]`acdfijmnort'
).Ich machte keinen Versuch, es kurz zu machen; Ich habe gerade Unterausdrücke für Zwischenwerte wie 0 und die leere Zeichenfolge geschrieben und diese durch Zeichenfolgen ersetzt.
Probieren Sie es online!
Die Kernidee ist, dass das Zeichenkettenformat
'{0:5}'.format('1')
die Zahl Null auf eine Länge von5
ähnlich auffüllt'1 '
. Bei der Verkettung zweier solcher Zeichenfolgen''.join
ergibt sich aus der Summe ihrer Länge die Summe der eingegebenen Zahlen. Dann wenden wir uns0
dem Ende zu und rufen.find()
die endgültige Position auf, die die Summe ist.Die
'{0:5}'
zu formatierende Zeichenfolge wird durch Extrahieren der{:}
Zeichen aus Zeichenfolgenrepräsentanten von Wörterbüchern erzeugt, die mit erstellt wurdendict
. Die Zeichenfolge jedes aufeinanderfolgenden Summanden wird dort platziert, wo die 5 wäre. Ich wollte ein Diktat wie es{0:5}
selbst verwenden, aber sein Repräsentant enthält ein Leerzeichen, das es durcheinandergebracht hat.Eingaben von 0 bringen den Prozess durcheinander, weil das String-Sub eine Mindestlänge von 1 hat.
and/or
In diesem Fall haben wir die mit einem , um den leeren String zu geben.quelle
int([]in[])
einfach Golf spielen ,int()
da beide 0 ausgeben.Haskell von Laikoni
quelle
x86-16-Bit-Real-Mode-Assembly von Joshua
Erläuterung:
Der durch Joshuas Code eingeführte "Bruch" ist das Setzen des Trap-Flags (TF), das die CPU in den Einzelschrittmodus versetzt. Dies bedeutet, dass immer nur eine Anweisung ausgeführt wird, bevor die CPU mit einem Typ-1-Interrupt stoppt (Traps). Auf diese Weise können Debugger Code in einem Schritt implementieren - sehr praktisch, aber eine echte PITA, wenn Sie den Code außerhalb des Kontexts eines Debuggers ausführen möchten!
Der folgende Codeabschnitt aktiviert das Trap-Flag:
Durch die Implementierung des Trap-Flags haben wir die Möglichkeit, genau einen Befehl vor den CPU-Traps auszuführen - den, der unmittelbar nach dem
POPF
hier steht. Also müssen wir diesen einen zählen lassen.Der Trick ist der
INT 3
Befehl, der Interrupt Nummer 3 aufruft. Es gibt zwei Gründe, warum dies funktioniert, um den Code "aufzubrechen":Das Trap-Flag wird in Interrupt-Handlern gelöscht. Dies ist nur ein Teil von Intels Design, wurde aber vermutlich aus Gründen der Vernunft gemacht. Denken Sie daran, dass die Implementierung des Trap-Flags darin besteht, dass nach Ausführung jedes Befehls ein Interrupt vom Typ 1 aufgerufen wird. Wenn also TF nicht gelöscht
INT 1
würde , würde dies selbst einen Interrupt auslösen - es würde den ganzen Weg nach unten unterbrochen. Außerdem erleichtert das Löschen von TF-Interrupts das Debuggen des Codes, ähnlich wie bei einer IDE, bei der Aufrufe von Bibliotheksfunktionen automatisch übersprungen werden.Die Art und Weise, wie Interrupts funktionieren, ist im Wesentlichen die gleiche wie bei einer Ferne
CALL
. Sie rufen den Interrupt-Handler auf, dessen Adresse an der entsprechenden Position in der globalen Interrupt-Vektortabelle gespeichert ist. Da diese Tabelle an der Adresse beginnt0x0000:0000
und in einem 4-Byte-segment:offset
Format gespeichert ist, ist die Berechnung der Adresse so einfach wie das Multiplizieren von 4 mit dem Interrupt-Vektor / der Interrupt-Nummer. In diesem Fall rufen wir den Interrupt 3 auf, so dass 4 × 3 = 12 wäre.… Und Sie werden bemerken, dass Joshua dies sorgfältig für uns eingerichtet hat. Vor dem Aktivieren des Trap-Flags hat er den folgenden Code:
welches setzt
0x0000:000C
(der Interrupthandler fürINT 3
) aufBP:SI
. Das bedeutet, dass es bei jedemINT 3
Aufruf das FLAGS-Register auf den Stapel schiebt, gefolgt von der Rücksprungadresse, und dannBP:SI
in einem Kontext, in dem das Trap-Flag deaktiviert ist, zu verzweigt , um erneut mit der Ausführung von Code zu beginnen.Es geht alles bergab nachher
INT 3
. Alles was wir tun müssen, ist zwei Zahlen zu addieren und das Ergebnis auszudrucken. Abgesehen davon, dass dies in der Assemblersprache nicht so einfach ist wie in anderen Sprachen, wird hier der Großteil des Codes ausgegeben.Joshua lässt zu, dass der Räuber die gewünschten E / A-Mechanismen angibt. Daher gehe ich vereinfacht davon aus, dass die Werte in
DX
und übergeben werdenCX
Registern werden. Das ist vernünftig, da diese nirgendwo durch seinen "Prolog" -Code überfordert sind.Die Ausgabe erfolgt dann durch Speichern von ASCII-Bytes direkt im Videospeicher. Der Videopuffer beginnt bei
0xB800:0000
CGA, EGA und / oder VGA im Textmodus, sodass wir dort mit dem Drucken beginnen. Das Format lautet: Zeichen im unteren Byte und Farbattribut im oberen Byte. Das bedeutet, dass sich jedes Zeichen auf einem 2-Byte-Versatz befindet. Wir durchlaufen einfach jede der Ziffern in der Zahl (Basis 10), konvertieren sie in ASCII und geben sie einzeln auf dem Bildschirm aus. Ja, das ist viel Code. Es gibt keine Bibliotheksfunktionen, die uns in der Assemblersprache helfen. Dies kann mit ziemlicher Sicherheit weiter optimiert werden, aber ich habe es satt, daran zu arbeiten ...Nachdem die Ausgabe angezeigt wurde, kann der Code abstürzen oder was auch immer tun, sodass wir nur die Interrupts löschen und die CPU anhalten.
quelle
INT 3
und erhalte sofort wieder die Anweisung, die ihm folgt. Hat das vielleicht etwas mit meiner Testumgebung zu tun?CLI
würde nur Hardware-Interrupts deaktivieren, aber selbst wenn es über dasHLT
hinausgeht, würden Sie denken, es würde durchfallen und den Codel
sofort danach ausführen .Python 2 von TwiNight
Probieren Sie es online!
quelle
Python 3 , die 2. Herausforderung von ppperry
Wow, das hat Spaß gemacht! Ich habe es genossen, das zu lösen.
Bearbeiten: OK, ich habe es behoben. Anscheinend befanden sich die Klassen auf TIO an einem anderen Index in der Unterklassenliste als auf meinem Computer. Daher habe ich beide Klassen unterstützt und ein TIO hinzugefügt.
Probieren Sie es online!
quelle
sys.excepthook is missing
?sys.excepthook
Ursache, aber irgendwo dort wird eine wirkliche Ursache aufgeführt.)IndexError('list index out of range',)
. Es ist auf der Linie mit der Definition von_io_RawIOBase
._io_IOBase = [cls for cls in object.__subclasses__() if cls.__name__ == '_IOBase'][0]
sollte überall funktionieren.Haskell von zbw
Kann keinen Code zur Laufzeit ausführen? Führen Sie es zur Kompilierungszeit aus!
Das hat sehr viel Spaß gemacht, ich kannte Template Haskell vor dieser Herausforderung nicht.
quelle
Gelee durch Hyperneutrino
Super einfach. Die Newline bewirkt, dass der erste Link nicht aufgerufen wird.
Probieren Sie es online!
quelle
Python 2 von Wheat Wizard
Probieren Sie es online!
quelle
Java von LordFarquaad
Das Sperren des Zugriffs auf die Objekte auf der Quellebene war wirklich klug (und beim Testen ärgerlich), gut gemacht!
quelle
ClassLoader
sie beschattet worden wären ?"".getClass().getClassLoader()
. Das Abschatten ist normalerweise nur ein Problem, über das Sie einmal nachdenken müssen, und dann ist es in Ordnung. Du könntest sogar Schatten werfenObject
, ich wäre immer noch in der Lage, das zu lösen. Ok, Sie könnten mich in die 1kb-Lösung zwingen, aber es ist möglich.Ruby von Histocrat
Probieren Sie es online!
quelle
Inform 7 von Ilmari Karonen
Offensichtlicher Missbrauch mehrdeutiger Substantive ... Mein Code beginnt mit
factory is a room
. Die vorherige Zeile ist der Code des Polizisten. Geben Sie beispielsweise einadd 1 and 1
, um 2 zu erhalten.quelle
Java, Roman Gräf
Sets
stdout
undstderr
zurück auf ihre ursprünglichen Werte.Ich glaube, ich kann den vollqualifizierten Namen anstelle eines Imports verwenden. Wenn ich mich irre, korrigieren Sie mich bitte (dies ist mein erster Beitrag hier). Dies könnte wahrscheinlich auch durch Reflektion geschehen.
Bearbeiten: hier ist eine reflektierende Lösung mit nur
java.lang.reflect.*
:quelle
stdin
,stdout
undstderr
werden an anderer Stelle gespeichert! Sie müssen nicht einmal verwendensetOut
undsetErr
da können Sie einfach diePrintStream
direkt verwenden.JavaScript von Daniel Franklin
Dies kann als eine etwas betrügerische Lösung angesehen werden, funktioniert jedoch unter Chromium 59 / Linux, auch wenn ich zusätzlich eine Warnung erhalte:
Ps. Hier ist ein weiterer Riss, diesmal ohne Warnung:
quelle
prompt()- -prompt()
speichert zwei BytesJava 8 von Olivier Grégoire
Ein äußerst ausführlicher Riss für eine äußerst ausführliche Herausforderung. :) Der Schmerz, indirekt mit Klassen zu arbeiten, die Sie nicht benennen können, ist spürbar.
Probieren Sie es online!
Ps. Hier ist mein früherer Versuch, der geschrieben wurde, bevor Olivier klarstellte, dass die Eingabe über Befehlszeilenargumente erfolgen sollte. Im Gegensatz zum obigen Riss ist dieser nicht Linux-spezifisch.
Probieren Sie es online!
quelle
String[] args = ((String) system.getMethod("getProperty", String.class).invoke(null, "sun.java.command")).split(" ");
die nicht Linux-spezifisch ist, aber eine scheinbar undokumentierte Eigenschaft verwendet, die von einigen JVMs festgelegt wird.C # (.NET Core) von raznagul
Ich gehe davon aus, dass dies nicht die beabsichtigte Lösung war.
quelle
/dev/std*
da. Ursprünglich wollte ich einen ähnlichen Ansatz verfolgen, fand aber keinen einfachen Weg, um Streams für stdin / out zu öffnen, ohne auf System.Console zuzugreifen, und entschied mich stattdessen für Reflection. Natürlich funktioniert Ihre Lösung vermutlich nur unter Linux und anderen Unixish-Systemen mit den entsprechenden/dev
Einträgen, aber raznagul hat nicht ausdrücklich gesagt, dass sie unter Windows funktionieren muss. Und es funktioniert mit TIO.Java, von racer290
Dies war eher ein grundlegendes Übersehen, dass
static
Initialisierer vor dermain
Methode aufgerufen werden. Es war ein schöner Versuch: Ich warthrow new Error()
am Anfang bestürzt , fand aber am Ende den Weg;)quelle
System.out.println("Hello World!");
Addiert nicht zwei Ganzzahlen? .. " 2. Ein Codeausschnitt, der zwei Zahlen als Eingabe verwendet, sie addiert und ihre Summe ausgibt. Dieser Ausschnitt muss auch nach dem Ausführen des ersten Ausschnitts noch ordnungsgemäß funktionieren. Wenn die beiden Ausschnitte vorhanden sind Zusammengenommen müssen sie ein vollständiges Programm bilden, das zwei Zahlen hinzufügt, oder eine Funktion definieren, die zwei Zahlen hinzufügt. Dieses Snippet wird wahrscheinlich auf obskurem Verhalten beruhen und schwer zu finden sein. "Java von Kevin Cruijssen
Gut gebaut. Eine Menge Code, mit dem jeder richtig darüber nachdenken kann, wie man diese Herausforderung löst. Ich denke, das "Setzen Sie Ihren Code danach" war ein großer, großer Hinweis.
Probieren Sie es hier aus.
quelle
JavaScript von Grant Davis
Funktioniert in der JS-Konsole auf der
about:blank
Seite (wie im Cop-Post angegeben) unter Chromium 59 / Linux.quelle
cQuents , Step Hen , 3 Bytes
Probieren Sie es online!
Ich habe viel mit Step Hen geredet, um herauszufinden, wie zum Teufel seine seltsame Sprache funktioniert, aber kurz gesagt:
Sein Code war
#|1,1:A
.#|1,1
ist die Standardeingabe, dh alle Eingaben an das Programm werden durch 2 Einsen angehängt. (IE, wenn Sie eine 47 und eine 53 übergeben, ist Ihre Eingabe[47, 53, 1, 1]
.:
stellt einfach den Modus ein, der den ausgibtn
dritte Element in der Sequenz wennn
ausgibt, eingestellt ist, und gibt ansonsten die gesamte Sequenz aus.Endlich
A
bekommt der erste Eingang.Weil wir 4 Eingänge haben
[47, 53, 1, 1]
, addierenBC
zum Ende auch den 2. und 3. Eingang holen, und der 4. Eingang wird implizitn
.Weil unsere Sequenz so ist
ABC
, wird sie algebraisch analysiert, was bedeutet, dass sie wirdA*B*C
. Wir wollen das nicht, aber wenn wir ein+
zwischen A und B einfügen , wird esA+B*C
, woA
undB
sind unsere Eingaben, undC
ist 1.quelle
how the hell his weird language works
Vielleicht ist es sinnvoller, wenn ich fertig binC # (.NET Core) von raznagul
Probieren Sie es online!
Dies hätte wahrscheinlich weniger Zeit in Anspruch genommen, wenn ich tatsächlich C # gewusst hätte. Mit einigem Durchsuchen der Dokumentation und ein wenig Hilfe von Jon Skeet gelang es mir jedoch, etwas zusammenzubasteln, das funktioniert.
quelle
Vim Challenge von @DJMcMayhem
Es ist schon eine Weile her, dass ich vim nicht beenden konnte. Hier ist meine Lösung (beachte, dass es weit mehr als
23
Bytes ist - es ist also wahrscheinlich nicht die beabsichtigte Lösung):Probieren Sie es online!
Die Idee ist einfach zu Rohr die beiden ganzen Zahlen
awk
überbash
, da=
und+
waren untauglich ich ein kleines Behelfslösung verwenden musste. Dieawk
Zeile erweitert sich zu:Bearbeiten : Die ursprüngliche Absicht war, dass sich die Eingabe bereits im Puffer befindet, aber das wäre nicht schwieriger - die Hauptschwierigkeit bestand darin, das Hinzufügen zum Laufen zu bringen.
Hier ist der Lösungsvorschlag von @DJMcMayhem: Probieren Sie es online aus!
quelle
[insert your number here]
im Einfügemodus tun können. Stattdessen ist es einfach schon im Puffer. Aber damit könnte man umgehenOecho "<esc>Go"|awk...
, also denke ich, das zählt. Schön gemacht! Dies ist nicht der Riss, den ich mir vorgestellt habe (ich hatte auf eine reine vim-Antwort gehofft), also werde ich wahrscheinlich eine neue Antwort posten, die externe Befehle und korrigiert!
.Java 7 von Poke
Probieren Sie es online!
Es sind keine Linux-spezifischen Tricks erforderlich, nur das einfache Maskieren der nicht qualifizierten Namen
String
undSystem
Klassennamen. Dies ist wahrscheinlich nicht die beabsichtigte Lösung, aber es funktioniert.quelle
GolfScript von Ilmari Karonen
Probieren Sie es online!
quelle
RProgN2 von @ATaco
Probieren Sie es online!
Dies ist bei weitem nicht die beste Antwort, die ich geben konnte, aber es ermöglicht das erneute Addieren von Zahlen. Hätte ich tatsächlich ein ordentliches Stack-Handling absolviert, hätte ich wahrscheinlich einiges Golf spielen können, aber jetzt bin ich mit der Antwort zufrieden.
In ATacos ursprünglichem Posten ordnete er praktisch alle Hauptrechenoperatoren neu zu, um ihre Eingaben zu zerstören. Um dieses Problem zu beheben, habe ich den Zusatz in Bezug auf seine Binäroperationen neu definiert. Dies war ein Schmerz, da RProgN2 keinen Operator für die binäre Negation oder xor hat.
Hinweis: Wenn Sie die Eingabe testen möchten, müssen Zahlen mit mehr als einer Ziffer im Formular enthalten sein
"XX..." n
, damit sie in eine tatsächliche Zahl umgewandelt werden können, da RProgN2 jedes Zeichen unverändert akzeptiert, es sei denn, es handelt sich um ein Konzept oder eine Zeichenfolge. Bearbeiten: @ATaco hat festgestellt, dass das Hinzufügen eines '$' vor einer mehrstelligen Zahl dasselbe bewirkt.EDIT: Hier ist die Logik für meine Lösung. Wie Sie sehen, definitiv nicht der raffinierteste Code, aber es funktioniert.
quelle
56$46$12
werden die Nummern 5, 6, 46 und 12 schieben werde ich meine eigentliche Lösung und solche tommorow PostJavaScript (Node.js) von jrich , 298 Bytes
Ich bin der Meinung, dass dies nicht die beabsichtigte Lösung ist, aber wenn es gut gemacht ist, habe ich eine Weile versucht, herauszufinden, wie man den Namen der deklarierten Funktion erhält! :)
Probieren Sie es online!
quelle