Wenn eine kompilierte Sprache verwendet wird, muss das Programm die kompilierte ausführbare Datei löschen (die Quelldatei muss jedoch nicht gelöscht werden). Wenn eine interpretierte Sprache verwendet wird, muss das Programm die Quelldatei löschen.
Mein Eröffnungsgebot:
Python (29 Zeichen)
import os;os.remove(__file__)
Bearbeiten: Um Lösungen wie rm -rf / zu verhindern , darf das Programm nur die ausführbare Datei oder die Quelldatei löschen.
html,body{margin:0;padding:0;height:100%;overflow:hidden}
<iframe src="https://xmikee1.github.io/ppcg-leaderboard/?id=19355" width="100%" height="100%" style="border:none;">Oops, your browser is too old to view this content! Please upgrade to a newer version of your browser that supports HTML5.</iframe>
code-golf
file-system
EMBLEM
quelle
quelle
Antworten:
Bash-Skript (7 Zeichen, 7 Bytes)
quelle
./the\"program
,./'the"program'
,'./tha"program'
. Alles funktioniert wie vorgesehen. (Anführungszeichen müssen beim Abruf maskiert oder in einfache Anführungszeichen eingeschlossen werden.) Funktioniert auch bei Dateien mit Namen mit Zeilenvorschub usw.rm "$0"
in der Bash- Shell anstatt in einem Batch- Skript ausgeführt wird . Sie sollten den Header folgendermaßen bearbeiten:# Bash script, 7 bytes
Unix? (9):
Ein Klassiker. Verwendet
rm
als Interpreter für die sofortige Selbstlöschung. Nicht die allerkürzeste.quelle
rm
Programm.#!
Linie wird nicht in der Punktzahl gezählt.#!
Zeilen, die nur den Namen des Standardinterpreters der Sprache enthalten, werden als Null gewertet. Dies ist eine sehr ungewöhnliche#!
Linie, was Bash betrifft. (Nicht, dass dies tatsächlich in Bash funktioniert, obwohl es andere Sprachen gibt, in denen es funktioniert.)bash
, wird nichts gelöscht). Es ist eine UNIX / Linux-Programmdatei. (Es funktioniert auch in Perl, das die Verarbeitung von#!
Zeilen unter UNIX / Linux emuliert , sodass Shellscripts auf Plattformen ausgeführt werden können, auf denen dies nicht möglich ist.)Batch - 6 Bytes
Ziemlich einfach. Hinweis: Funktioniert auch, wenn der Name Leerzeichen enthält.
quelle
%~0
.Ruby, 14 Zeichen
$0
ist eine spezielle globale Variable, die den Namen des aktuell ausgeführten Skripts enthält.quelle
BASIC-80 / BASICA / GW-BASIC / IBM BASIC / Commodore 64 BASIC / Vintage BASIC / Commodore LCD BASIC / Atari BASIC *
5 Bytes
Das ist so einfach wie es nur geht.
NEW
Erstellt ein neues Programm. Wenn Sie dieses also an einer beliebigen Stelle in Ihrem Programm platzieren, wird es gelöscht.Proof of Concept auf IBM BASIC (
NEW
aus Gründen der Übersichtlichkeit Zeile 40 einfügen):* Ja, ich habe jede alte BASIC-Version aufgelistet, in der ich das getestet habe (oder die ich so ziemlich immer benutzt habe)
quelle
PHP, 17 Zeichen
quelle
<?unlink(__FILE__);
unlink(__FILE__);
. Die Datei wird nicht gelöscht.PowerShell (32)
quelle
Perl 5 (8 Zeichen)
$0
ist der Skriptname undunlink
entfernt ihn. Normalerweise fügen Sie zur besseren Lesbarkeit mindestens ein Leerzeichen dazwischen ein.quelle
C # (112)
Schamlos gestohlen von http://www.codeproject.com/Articles/31454/How-To-Make-Your-Application-Delete-Itself-Immedia
quelle
k (8)
Oder das q-Äquivalent für 14:
quelle
Python, 18
Öffnet sich im Nur-Schreib-Modus und löscht sich.
quelle
R, 26 Zeichen
quelle
Node.js - 22 Zeichen
quelle
Julia, 13 Bytes
Einfach. Aber länger. : P
quelle
Vitsy + Bash, 8 Bytes
quelle
Mathematica, 29 Bytes
quelle
Lua, 17 Bytes
Dies funktioniert eigentlich nur, wenn Sie das Programm ausführen, indem Sie den vollständigen Dateipfad eingeben, das heißt , wenn Sie einen Dateinamen von und ein aktuelles Arbeitsverzeichnis von annehmen,
lua ~/Scripts/removeself.lua
würde dies funktionieren, aberlua removeself.lua
nicht .removeself.lua
~/Scripts
Soweit ich weiß, gibt es keine Möglichkeit, den tatsächlichen Dateipfad eines Skripts zu ermitteln, sondern nur die Argumente, die an dieses Skript übergeben wurden. Ich weiß
debug.getinfo(1).source
, aber in meinem Test dieses Spiel genau die gleichen Ergebnisse wiearg[0]
. Wenn jemand eine Möglichkeit kennt, den Dateipfad zu finden, lass es mich wissen.quelle
Nodejs, 32 Bytes
quelle
JS, 37 Bytes
Zählt das? Es tötet Javascript auf der Seite
quelle
=
tcl, 18
Demo - ACHTUNG: Es ist nur eine einmalige Demo! Nur das erste Mal wird es lauffähig sein. Bitte reservieren Sie es auf dem Originalposter der Frage. Zum Ausprobieren: Drücken Sie die
Execute
Taste. Der grüne Bereich meldet keinen Fehler. Danach führen alle nachfolgenden Klicks auf dieExecute
Schaltfläche zu einemnot found
Fehler!quelle
C 32 Bytes
quelle
}
s sind in C erlaubt? Wow!}
aber ich habe das Snippet offensichtlich falsch kopiert / eingefügt. Vielen Dank für den Hinweis!main(c,v)int**v;{remove(*v);}
char**
zuint**
technisch gültig ist. Ich mache mir Sorgen um mögliche Ausrichtungsprobleme.JavaScript (ES6), 13 Byte
Versuch es
Protokolliert die Quelle von
f
, ruft auff
(die gelöscht wirdf
), versucht erneut zu protokollierenf
, gibt jedoch einen Fehler aus, da sief
jetzt undefiniert ist.quelle
PowerShell v3 - 17
quelle
Julia - 25 Bytes
Schreiben Sie dies in eine Datei, fügen Sie die Datei dann hinzu
include("<filename here>")
und führen Sie Folgendes ausf()
:Dies ist offensichtlich eine Funktion. Ich bin nicht sicher, wie man den Dateinamen einer Datei ermitteln soll, die direkt ausgeführt wird (als Include-Anweisung ohne darin enthaltene Funktionsdefinition).
quelle
C ++, 137 Bytes.
Funktioniert die meiste Zeit unter Windows
C 90 Bytes
quelle
#include <string>
, überflüssigen Leerzeichen entfernen und dieses C erstellen, mit dem Sie dasint
und entfernen könnenreturn
. Darüber hinaus müssen Sie#include <stdio.h>
diese Funktion ausführen, da dortsprintf
deklariert ist.MATLAB, 36 Bytes
Speichern Sie den obigen Code als M-Datei gemäß den Dateinamenrichtlinien von Matlab.
quelle
VBA,
6967 BytesSubroutine, die keine Eingabe nimmt und sich selbst löscht.
Erfordert, dass der unten stehende Code die erste Zeile im aktiven Codebereich ist und dass VBA vertrauenswürdigen Zugriff auf das VBE-Projektmodell hat.
-2 Bytes zum Ersetzen
ActiveCodePane
durchCodePane(1)
quelle
T-SQL, 28 Bytes
Es löscht / entfernt nur die Prozedur und den Code, wenn es sich selbst ausführt. Verwendung:
quelle
shortC , 10 Bytes
Wie es funktioniert:
Äquivalentes C-Programm:
quelle
8086/8088 Maschinencode, 1 Byte
Annahmen:
Das
stosb
Befehl speichert das Byte im AL-Register an der Speicherstelle, auf die ES und DI zeigen, und erhöht oder erniedrigt dann DI. In diesem Fall speichert es das Byte 0 an der Speicheradresse 0, die sich zufällig dort befindet, wo sich der Befehl selbst befindet.Zugegeben, dieses Programm löscht keine Datei oder ähnliches. Wenn Sie es jedoch schaffen, einen 8086-Prozessor in den Griff zu bekommen, dieses Programm in den Speicher zu bekommen und auszuführen, überschreibt es sich in der Tat von selbst.
quelle