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.


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 .


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.


20

Commodore 64 BASIC

10 NEW

Auflistung

:) :)


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.


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 /*


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


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__)

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.


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))

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")

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!!!"

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;)


1

PHP-Code, 18 Zeichen

<?unlink(__FILE__)

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


1

Bash

rm "$0" oder #!rm

Entfernt sich.

Python:

open(__file__,'w')

Öffnet sich im Schreibmodus und löscht sich


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

/ 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


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.)


0

Power Shell

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

del $MyInvocation.MyCommand.Name

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))
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.