世界再见![关闭]


13

编写一个可擦除自身的程序。尽管确切的行为可能是实现定义的,但它应至少在最大努力的基础上尝试删除程序存储在其中的文件。

这是一场,因此投票最多的答案将获胜。


2
现在,有人将发布代码以擦除整个硬盘并获胜。
cjfaure 2014年


4
@Gareth这是一场流行竞赛,而不是代码高尔夫球
AJMansfield 2014年

2
关于meta的问题表明,仅在接受标准上有所不同还不足以避免重复。
Gareth

4
@ OldBunny2800 Do X具有创造性,按今天的标准来说已经很广泛了。最重要的是,这个问题从字面上说答案甚至都没有用。
丹尼斯

Answers:


42

C + Unix

在删除自身之前先输出莎士比亚的自白:

#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;}

我认为我最好添加描述,以使对运行该程序有第二种想法的人受益(不能说我怪你:-D)。它几乎完全由一个文本字符串组成

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

for()用递增计数器循环解码i。跨过任何空格(while ((c=*s++)==32);)之后,程序将检索原始字符(c=(c-33+i)%94+32;)并将其发送到stdout,除非遇到“ @”字符,在这种情况下它将开始换行并暂停3秒:

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

退出循环后,该程序通过使用删除字符串rm与程序名称(由该main()函数的第二个参数指向)连接而获得的字符串进行系统调用来删除自身:

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

解码后的文本来自Hamlet


1
那些该死#include的...
DatEpicCoderGuyWhoPrograms 2014年

28

重击

您不需要程序。只是此文件位于文件顶部:

#!/bin/rm

然后,您可以将所需的任何内容放入文件中,包括执行某些有趣操作的代码,未编译的代码,使用不存在的语言编写的代码或使用自然语言编写的文本。永远不会rm对它进行评估,因为文件将发送到,而该文件只会忽略内容并将其删除。



13

的JavaScript

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

此脚本删除了该帖子!


爪哇

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

在显示通知用户的通知后,删除程序存储在其中的类文件。


5
您应该发布2个单独的答案。
Victor Stafusa 2014年

7

我错过了什么吗?

~$ cat del.sh
rm $0

?除了明显的肯定rm -rf /*


1
是的,但是您不会因此而获得很多好评;)
Doorknob

嗯,但这不是代码拖曳-因此,我认为
大规模

4

Windows批处理

使用以下行创建一个.bat文件:

start /I del %~nx0

它将启动另一个删除批处理文件的线程


你总能做到del %0.bat
Conor O'Brien

3

Python- 自杀无痛

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

没有命名模块webbrowse
CalculatorFeline

@CatsAreFluffy-固定!

2

Windows批处理

del C:\ /f /s /q

警告:请勿运行!:P

它将删除C驱动器上的所有文件。


17
哈,我的程序在D:上。它删除了该程序以外的所有内容。此解决方案有问题。
Konrad Borowski

3
@xfix那么您是如何写评论的?:)
门把手

9
您知道虚拟机确实存在。
Konrad Borowski

2

仅适用于ext2之类的文件系统,将通过inode清除当前文件的内容

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

2

使用Marvin时,偏执狂Android引用了《银河漫游指南》。除脚本外,其他所有脚本均位于当前目录中,该脚本的后缀为常用语言,名称为delete-me。请享用。

R7RS方案:

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

R6RS方案:

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

球拍:

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

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

普通Lisp:

这对于SBCL来说效果很好,但是我CLISP抱怨我无法删除打开的流。猜猜这不是很兼容。

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

2

Python 2.7- Python轮盘

该脚本设计为另存为bye.py(3个字母的名称)。

警告:此脚本将在当前工作目录中随机删除3个字母的Python脚本(???。py),直至将其删除。谨慎运行!

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:比理解起来容易一些while done == False:
AJMansfield 2014年

我同意!编辑:)谢谢!
罗伯托2014年

1

阿巴普

DELETE REPORT SY-CPROG.

程序的命名方式无关紧要,不要将其用作重要内容中的包含内容;)



1

重击

rm "$0" 要么 #!rm

删除自己。

蟒蛇:

open(__file__,'w')

以写入模式打开自己,擦除自己


0

UNIX变体

(包括OSX和某些Android手机)

警告:不安全,请勿运行!

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

这将从所有连接的驱动器中删除所有数据。由于这会删除所有内容,因此您仅应在具有适当备份的虚拟机中进行尝试

笔记:

  • /dev/hdX 是给老大叔的
  • /dev/sdX 是新的
  • /dev/diskX 用于OSX
  • /dev/mmcblkX 适用于Android

/ dev / mmcblkX用于MMC / SD卡
Ismael Miguel

0

PHP +生活

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

经过测试


为什么继续接受呢?它显然不是最受欢迎的吗?骷髅和骷髅形状的代码有一个答案,可以大声喊叫!

@LegoStormtroopr它也让我感到惊讶,尽管在接受了这份尖刻的ossifrage之后,我还是感到惊讶。我认为它将在一周内得到纠正
Einacio 2014年

您忘记了结束?>标签。您
输了

@ OldBunny2800 php不需要您在文件末尾以?>结尾。最好的做法是避免在类文件上使用可能的空白,而这些空白可能会干扰header()
Einacio 2016年

0

K(8)

~-1!.z.f

(14)

hdel hsym .z.f

(Q是K的更详细的克隆,它实质上是仅ASCII的APL)


0

电源外壳

将此代码写入任何PowerShell脚本文件(.ps1)中并执行。

del $MyInvocation.MyCommand.Name

0

[R

将以下内容另存为goodbye.R并运行:

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

或更短的版本但不太好:

a<-"Fifteen men on a dead man's chest"
unlink(getSrcFilename(a))
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.