Auf Wiedersehen Welt! [geschlossen]

13

Schreiben Sie ein Programm, das sich selbst löscht. Das genaue Verhalten kann zwar von der Implementierung bestimmt werden, es sollte jedoch mindestens versucht werden, die Datei zu entfernen, in der das Programm gespeichert war, bevor es nach besten Kräften ausgeführt wird.

Dies ist ein , daher gewinnt die Antwort mit den meisten positiven Stimmen.

AJMansfield
quelle
2
Jetzt wird jemand eine Postleitzahl eingeben, um die gesamte Festplatte zu löschen und zu gewinnen.
cjfaure
4
@Gareth Dies ist ein Beliebtheitswettbewerb , kein Code-Golf .
AJMansfield
2
Diese Frage zu Meta legt nahe, dass ein Unterschied in den Akzeptanzkriterien allein nicht ausreicht, um ein Duplikat zu vermeiden.
Gareth
4
@ OldBunny2800 X kreativ zu machen ist nach heutigen Maßstäben schon weit gefasst . Darüber hinaus besagt die Frage wörtlich, dass die Antworten nicht einmal funktionieren müssen.
Dennis

Antworten:

42

C + Unix

Gibt einen Shakespeare-Monolog aus, bevor er sich selbst löscht:

#include <stdio.h>
#include <string.h>
#include <unistd.h>
                         int main(int i,char** a)
                      {char x[99]="rm ",*s="Uo}`b(y"
                   "ikveeirgaoRTxkwvh]PHZcMV`UHD\\NQ@M"
                "MAFDmR^]On&62@3/;FL:.7A00\"+#/:$(7,}y3!z~"
               "s.#{+}~nmkwDWjf~rjfjbmwYeZsUed`gbl\\RiY^\\YG"
             "LIRWT^EMOPPH>v&HSHBPE1:3K-=7<F(-&-155>~<0!z8(|5"
            "*'#(r{s\"8KKwl'h~$rrqorgkcy_g\\uj]Y`1o{zlA[iNRMqd"
           "poaVP^RJBAKdWcbTs\"BP>?A3fJ,8-F)?C%A5-%$.;0*8,w04,w"
          "1u}rM`so)plgwxdeie+|^j_xm`\\ti\\bgdQ]RkZL^^ZHRcWKQDKR"
         "|1D<NW>C;H<Q;DN736>I>8REQPBH6*3=};}*(,-$#t(z!}NQq#y~|s!"
         "%xr\"ce}ufoc!]&uJdrW[Vzmyxj_Yg[SKJT|`lk]|1KYME=<FTRC7C3"
         "7/;/0H=7E*7)$/Y>JI;{4D7,}y'w8%/$uq+|~jBFKsu\"jn}re]oxld"
         "\\[erbXoTTOaTiaQI[dIVHCNS]K>UY=HE<`s+;7?NF3K4,@.F:.:*).&"
         "$=-#\"9.!!*4\"#%&pz-ozsu4GSzww\"hiuc{qnxiYliZ.qfYUaSr_i^"
         "QMeXJWSGDT}2E=OXF9B;HR63=1<7AEI9/F:5C020(>+'#!TX]')4,z\""
         "0(}$xo*kmhx%xkg!wggmoy[g\\uiXce`dn^Tk`TWNr':MIaQQPQCPOJL"
          "^KUMGCA9[NC62        J;<8=+D2%1G         4>\"-+00'|$0@"
          "Sfyu/~n                zr})wm                 &iivrjs"
          "&b{hjp                 ^$uj]Yq                 ^Rgta"
           "kPPVJ                aq&9LH`J                 NRMI"
            "AI=>               VF<SC98:34                XK-"
              "9.G             </+C7373.2\\o              $z."
              "7(v           *|w!&/{r ~t~)wm&y           lh\""
              "vnvmo      pcswlXaZg}    2HXT\\kTP     hQQTYJPI`"
            "NIFFQZCCLVHK>9GGDN</81      i!2</D&B%#3%=~,~&#'U5-"
             "{#1)~%yp+~qmzk%jdtee        kq{^`[k$7JdrZdf^clNZ"
              "Oh\\_LGYbXPEEQ\\>Z         R?:JPTA=97[noCAJ?2"
                 "*<E  :-)A&3%~\"         ;+!8,'$y)     zz~"
                         "v.nr!o{(       kkfxk.!-"
                          ",|=Pc_wmeZ^gVagUasQjNY"
                           "^V[X^naHSOL\\TDJM>V9E"
    "JFAp}                 ?MB?-A/54,8C6(662-1G:FE                7(,0/"
  "~v%/$uq+#                rts2EEqf!m`iboyolviW               i\\XdoRTO_"
"j_RX[LdNPOU_WD                                            \\E=Q?w,?7CR9>JNC"
 "=K;?2.::D9,$6?7$<(*                                  *17&v+zz'0~tLL_r~{'"
           "itrvejemabz_i^                       kucV_XpT_fO_P^hX"
                  "Ne[XbDNMy}}K@           YNAMJTI<8P?1C7"
                        "C1I2>-E5+B5'4/+31%*(W_*4({"
                           "t{{wrp+y0my&|mwj!tgc"
                          "{l\\f^vZWhhqaWncV\\aR"
                   "R]#''SHaGOTDPMN     DM>KUE;R:D61CL="
             "5?-1F(4)B01.%-2G               Zp#-~5*{{&0#stm}n5("
   "{njmu\"duqpbjomwllhcrTi                     ciy..ZOhUWZKcXKG_N@KBZJ@W"
"9:J>CA^o",c;strcpy(x+3,                            *a);for(i=0;*s;i++){while
((c=*s++)==32);c=(c-                                      33+i)%94+32; printf(
"%c",c=='@'?(sleep(                                         3),'\n'):c);}printf
      ("\n");system                                            (x);sleep
       (6);return                                                c-c;}

Ich dachte, ich füge besser eine Beschreibung hinzu, zum Wohle aller, die sich Gedanken über die Ausführung dieses Programms machen (ich kann nicht sagen, dass ich Ihnen die Schuld geben muss :-D). Es besteht fast ausschließlich aus einer einzelnen Textzeichenfolge

*s="Uo}`b(yikveeirgaoRT ... G_N@KBZJ@W9:J>CA^o"; /* 1459 bytes */

Das wird in einer for()Schleife mit einem inkrementierenden Zähler dekodiert i. Nach dem Überschreiten eines Leerzeichens ( while ((c=*s++)==32);) ruft das Programm das ursprüngliche Zeichen ( c=(c-33+i)%94+32;) ab und sendet es an stdout, es sei denn, es trifft auf ein "@" - Zeichen. In diesem Fall beginnt es eine neue Zeile und hält für 3 Sekunden an:

printf("%c",c=='@'?(sleep(3),'\n'):c);

Beim Verlassen der Schleife löscht sich das Programm selbst, indem es einen Systemaufruf mit einer Zeichenfolge ausführt, die durch Verketten des Befehls delete rmmit dem Namen des Programms (auf den das zweite Argument der main()Funktion verweist) erhalten wird:

int main(int i,char** a) {
  char x[99]="rm " ...
    :
  strcpy(x+3,*a);
    :
  system(x);

Der entschlüsselte Text stammt aus Hamlet .

zimperliches Ossifrage
quelle
1
#include
These
28

Bash

Du brauchst kein Programm. Nur dieser Knall oben in deiner Akte:

#!/bin/rm

Dann können Sie alles in die Datei einfügen, was Sie wollen , einschließlich Code, der etwas Interessantes bewirkt, Code, der nicht kompiliert wird, Code in einer Sprache, die nicht existiert, oder Text in einer natürlichen Sprache. Es wird niemals ausgewertet, da die Datei an gesendet wird rm, wodurch der Inhalt einfach ignoriert und gelöscht wird.

Martin Broadhurst
quelle
20

Commodore 64 BASIC

10 NEW

Auflistung

:) :)

Danko Durbić
quelle
Wie funktioniert das?
AJMansfield
@AJMansfield NEW setzt das gespeicherte Programm zurück.
Oberon
4
Ja, und wenn Sie Simons 'BASIC (eine Erweiterung von BASIC v2.0) hatten, können Sie OLDeingeben, um das Programm wiederherzustellen, das von NEW:) entfernt wurde
Danko Durbić,
Ha ha ha wie auf meinem guten alten Klon des ZX-Spektrums! :-)
Tomas
13

JavaScript

window.confirm = function() {return true;}; 
document.getElementById("delete-post-19739").click();

Dieses Skript löscht diesen Beitrag!


Java

import java.io.File;
class Main{
   public static void main(String[] args){
       new File(Main.class.getResource("Main.class")).deleteOnExit();
       JOptionPane.showMessageDialog(null, "Goodbye, World!",
           "I can't even do anything useful, so I'll just delete myself!");
       System.exit(0);
   }
}

Löscht die Klassendatei, in der das Programm gespeichert ist, nachdem eine Benachrichtigung angezeigt wurde, die den Benutzer informiert.

AJMansfield
quelle
5
Sie sollten 2 separate Antworten posten.
Victor Stafusa
7

Vermisse ich etwas oder kann es so einfach sein wie

~$ cat del.sh
rm $0

? Sicher, abgesehen vom Offensichtlichenrm -rf /*

german_guy
quelle
1
Ja, aber du wirst nicht viele positive Stimmen bekommen;)
Türklinke
Hmmm, aber es ist kein Code-Trolling - also denke ich, dass große Zerstörung nicht der
richtige
4

Windows Batch

Erstellen Sie eine .bat-Datei mit dieser Zeile:

start /I del %~nx0

Es wird ein weiterer Thread gestartet, der die Batchdatei löscht

thepirat000
quelle
Das könnte man immer tun del %0.bat.
Conor O'Brien
3

Python - Selbstmord ist schmerzlos

import webbrowser,os
webbrowser.open('http://goo.gl/JDJNjU')
os.remove(__file__)

quelle
Kein Modul namenswebbrowse
CalculatorFeline
@CatsAreFluffy - Behoben!
2

Windows Batch

del C:\ /f /s /q

ACHTUNG: nicht rennen! : P

Es werden alle Dateien auf dem Laufwerk C gelöscht.

Türknauf
quelle
17
Ha, mein Programm ist auf D :. Es hat alles außer dem Programm entfernt. Diese Lösung ist fehlerhaft.
Konrad Borowski
3
@ xfix Wie hast du dann diesen Kommentar geschrieben? :)
Türklinke
9
Es gibt virtuelle Maschinen.
Konrad Borowski
2

Funktioniert nur auf einem ext2-ähnlichen Dateisystem, wird der Inhalt der aktuellen Datei durch Inode gelöscht

#!/bin/bash
D=`stat -c '%d' $0`                                         
M=$(($D/256))
debugfs -wR clri `stat -c '<%i>' $0` /dev/block/$M:$(($D-$M*256))
Robokop
quelle
2

Mit Marvin the Paranoid zitiert Android aus The Hitchhiker's Guide to the Galaxy. Alle außer dem zu benennenden Skript delete-me mit dem üblichen Sprachsuffix und dass es sich im aktuellen Verzeichnis befindet. Genießen.

R7RS-Schema:

#!r7rs
(import (scheme))
(display "Marvin: I'm just trying to die.\n")
(delete-file "delete-me.scm")

R6RS-Schema:

#!r6rs
(import (rnrs))
(display "Marvin: "Life. Don't talk to me about life.\n")
(delete-file "delete-me.scm")

Schläger:

#!racket
(display "Marvin: I have a million ideas. They all point to certain death.\n")
(delete-file "delete-me.rkt")

Bogen

(prn "I think you ought to know I'm feeling very depressed.\n")
(rmfile "delete-me.arc")

Gemeines Lisp:

Dies funktioniert gut mit SBCL, aber ich beschwere mich, dass ich einen offenen Stream nicht löschen kann. Schätze, das ist nicht sehr kompatibel.

(format t "Marvin: I ache, therefore I am.~%")
(delete-file "delete-me.cl")
Sylwester
quelle
2

Python 2.7 - Python-Roulette

Dieses Skript soll als bye.py(ein 3-stelliger Name) gespeichert werden .

WARNUNG : Dieses Skript löscht zufällig 3-Buchstaben-Python-Skripte (???. Py) in Ihrem aktuellen Arbeitsverzeichnis, bis es sich selbst löscht. Laufen Sie mit Vorsicht!

import string, sys, os, random
directory = os.getcwd()
done = False
while not done:
    name = ''
    for i in range(3):
        name += string.ascii_lowercase[random.randrange(0, len(string.ascii_uppercase))]
    fullname = directory + '\\' + name + '.py'
    print "Trying to remove:", fullname, "...",
    try:
        os.remove(fullname)
    except:
        print "No harm done!"
    else:
        "Oops!!"
    try:
        a = open(sys.argv[0], "r")
        a.close()
    except:
        done = True
        print "Booom!!!"
Roberto
quelle
1
while not done:wäre ein bisschen leichter zu verstehen als while done == False:.
AJMansfield
Genau! Bearbeitet :) Danke!
Roberto
1

ABAP

DELETE REPORT SY-CPROG.

Es ist egal, wie Sie das Programm benennen, nicht als Include in etwas Wichtiges verwenden;)

Konijn
quelle
1

PHP-Code, 18 Zeichen

<?unlink(__FILE__)

Dies löscht das aktuell ausgeführte PHP-Skript.

Ismael Miguel
quelle
1

Bash

rm "$0" oder #!rm

Entfernt sich.

Python:

open(__file__,'w')

Öffnet sich im Schreibmodus und löscht sich

Niemand ist hier
quelle
0

UNIX-Varianten

(einschließlich OSX und einigen Android-Handys)

Achtung: unsicher, nicht rennen!

$  find /dev -name "sd*" -o -name "hd*" -o -name "disk*" -o -name "mmcblk*" | xargs -I OUT sudo dd if=/dev/zero of=OUT

Dadurch werden alle Daten von allen angeschlossenen Laufwerken gelöscht. Da dies alles löscht, sollten Sie dies nur in einer virtuellen Maschine mit einer ordnungsgemäßen Sicherung ausprobieren

Anmerkungen:

  • /dev/hdX ist für alte einheiten
  • /dev/sdX ist für neue
  • /dev/diskX ist für OSX
  • /dev/mmcblkX ist für Android
SztupY
quelle
/ dev / mmcblkX wird für MMC / SD-Karten verwendet
Ismael Miguel
0

PHP + LIFE

<?php

$individual;
$days = 0;

Class Person{
    protected $happiness;

    function __construct(){
        $this->happiness = mt_rand(0,100);
    }

    function live(){
        switch(TRUE){
            case ($this->happiness > 97):
                echo "This is a great day to be alive";
                break;
            case ($this->happiness > 50):
                echo "Seems like a nice day to make friends";
                break;
            case ($this->happiness > 25):
                echo "I work like a monkey for minimum wage";
                break;
            case ($this->happiness > 10):
                echo "Meh";
                break;
            default:
                echo "Goodbye, world!";
                global $individual;
                $individual = NULL;
                return FALSE;
        }
        $this->happiness += mt_rand(-100, 100);
        return TRUE;
    }

    function __destruct(){
        unlink(__FILE__);
    }
}

$individual = new Person();
while($individual->live()){
    $days++;
    sleep(1);
}

geprüft

Einacio
quelle
Warum sollte ich das akzeptieren? Es ist offensichtlich nicht das beliebteste? Es gibt eine Antwort mit dem Code in Form eines Totenkopfs zum lauten Schreien!
@LegoStormtroopr es hat mich auch überrascht, obwohl das zimperliche Ossifrage veröffentlicht wurde, nachdem dieses akzeptiert wurde. Ich denke, es wird im Laufe der Woche korrigiert
Einacio
Sie haben den Schluss- ?>Tag vergessen . SIE VERLIEREN
OldBunny2800
@ OldBunny2800 PHP erfordert nicht, dass Sie mit?> Am Ende einer Datei schließen. Es ist sogar eine gute Praxis, mögliche Leerzeichen in
Klassendateien
0

K (8)

~-1!.z.f

Q (14)

hdel hsym .z.f

(Q ist ein ausführlicherer Klon von K, bei dem es sich im Wesentlichen um reine ASCII-APL handelt.)

Skeevey
quelle
0

Power Shell

Schreiben Sie diesen Code in eine beliebige PowerShell-Skriptdatei ( .ps1) und führen Sie ihn aus.

del $MyInvocation.MyCommand.Name
mikrobisch
quelle
0

R

Speichern Sie Folgendes als goodbye.Rund führen Sie Folgendes aus:

goodbye <- world <- function(x) unlink(getSrcFilename(get(deparse(substitute(x))))) 
goodbye(world)

Oder eine kürzere Version, aber weniger schön:

a<-"Fifteen men on a dead man's chest"
unlink(getSrcFilename(a))
lebatsnok
quelle