Kode itu hanya akan dieksekusi sekali


223

Tujuan

Tujuan dari tantangan ini adalah menulis kode yang akan dieksekusi satu kali dan hanya sekali. Ini berarti bahwa pada dasarnya itu merusak program, skrip, atau lingkungan dengan cara tertentu. Jika mem-boot ulang sistem, kode dapat dijalankan kembali yang diizinkan.

Mencetak gol

Jumlah suara. Semua asumsi harus dicantumkan dengan jelas. Setiap jawaban yang baru saja memulai reboot atau dihentikan akan didiskualifikasi.

Aturan Tambahan karena Greg Hewgill adalah setengah dewa

Tidak ada akses root diizinkan.

Tanggal Berakhir

Kontes akan ditutup pada 31 Mei 2014.

Sunting

Kontes ini telah diubah menjadi kontes popularitas.


7
@PeterTaylor Solusi yang mungkin adalah a self delete tetapi karena hasilnya menunjukkan itu bukan satu-satunya.
Lukei

101
Untuk banyak orang yang memanggil vidalam lingkungan terminal tunggal memiliki efek ini, tidak ada jalan keluar dari itu kecuali Anda reboot :) Hanya lelucon di sini.
orion

6
Situs ini gratis bagi Anda untuk mengajukan pertanyaan seperti itu.
ojblass

16
echo "If you try to execute me again, it means you are an idiot.";<- Tidak ada yang akan mengeksekusi lebih dari sekali: P
user3459110

25
Apakah perangkat lunak terkait rudal sudah memenuhi syarat? ;)
rsegal

Jawaban:


518

Penjagaan

Akhirnya, usecase untuk Vigil!

def main():
  raise Exception()

Kutipan dari "spesifikasi bahasa":

Tak perlu dikatakan bahwa fungsi yang melempar pengecualian yang tidak tertangkap adalah salah dan harus dihukum.

...

Jika sumpah rusak, fungsi menyinggung [...] akan dihukum.

Bagaimana?

Sederhana: itu akan dihapus dari kode sumber Anda.

Satu-satunya cara untuk memastikan program Anda memenuhi persyaratan untuk benar-benar melarang kode yang gagal melakukannya. Dengan Vigil, ini akan melakukan ini untuk Anda secara otomatis.

Ada cara lain untuk melakukan ini, karena Vigil memberikan kata kunci imploredan swearyang pada dasarnya sumpah untuk mematuhi pra-dan pasca-kondisi tertentu:

def main():
  swear 0 > 1

116
Tidak diragukan lagi, ini pantas untuk menang.
Matteo Italia

77
Akhirnya, bahasa yang cukup waspada untuk zaman modern! Saya akan mulai menggunakannya dalam produksi. Semua bug harus dibersihkan.
Claudiu

13
Bagi saya tampaknya itu tidak selalu kesalahan fungsi yang melempar pengecualian yang tidak tertangkap, bisa juga bahwa fungsi pada tumpukan panggilan lalai karena gagal menangkapnya. Bahkan bisa menyarankan arsitektur seluruh aplikasi cacat (Karena mungkin tidak ada cara untuk menangani pengecualian itu tanpa merestrukturisasi kode?) Singkatnya, seluruh program harus dihapus.
Jonathan Pullano


32
Poin tambahan untuk bersumpah. Suatu program yang membuat pernyataan palsu yang percaya diri tidak diragukan lagi perlu dihilangkan.
orion

293

Hampir semua distro Linux, 9 karakter

Yang ini klasik!

#!/bin/rm

Masukkan ini ke dalam file dan jalankan:

> ed
a
#!/bin/rm
.
wq foo
> ls
Mail mbox foo
> chmod 777 foo
> ./foo
> ls
Mail mbox

Aaand itu hilang!

Mengenai apa yang terjadi: Saya benar-benar hanya berlari rm! #!disebut shebang . Dan jika Anda meletakkan salah satu dari ini diikuti oleh path ke beberapa executable sebagai baris pertama dalam skrip Anda, program loader akan mengeksekusi file skrip Anda dengan apa pun yang Anda tulis di sana - default biasanya #!/bin/bashatau #!/bin/sh(Bourne-again shell / Bourne shell) . Argumen pertama yang diteruskan ke skrip ini adalah nama file itu sendiri (itulah sebabnya Anda melihat begitu banyak solusi termasuk %0atau $0dan sejenisnya di sini); jadi dengan membuat file saya berisi #!/bin/rmdan menjalankannya, semua yang saya lakukan adalah meneruskan nama file file saya ke rm.


9
Tanpa pernah menggunakan Linux sendiri, saya pikir itu menghapus file skrip.
Kamis

56
@NateKerkhofs #!urutan memulai shebang, yang mengidentifikasi penerjemah apa yang akan Anda gunakan untuk skrip - biasanya /bin/bash. Di sini, Flonk telah digunakan /bin/rmsebagai "penerjemah". rmadalah program yang menghapus file. karena Linux berpikir bahwa kami ingin rmmenjadi seorang juru bahasa, ia memberikan nama file sebagai argumen untuk itu. oleh karena itu, file menghapus dirinya sendiri

19
Ini histeris
ojblass

25
@ user80551 Saya tidak perlu akses root untuk ini.
Flonk

9
hmm ..../foo mbox
Izkata

241

biner x86, 4 byte

F0 0F C7 C8

Asumsi: Harus dijalankan pada CPU Pentium P5.

Instruksi di atas umumnya dikenal sebagai bug F00F . Mencoba mengeksekusi instruksi yang tidak valid, diawali dengan kunci .

Ini membeku CPU sepenuhnya (bukan berhenti atau reboot) dan bahkan tidak memerlukan akses root.


4
Wow ... itu sangat menarik.
ojblass

31
@ JackM: Ya, tapi itu diizinkan secara eksplisit dalam pertanyaan.
Dennis

34
@JackM, sepertinya itu cara yang bagus untuk menghentikan "script" agar tidak berjalan.
Paul Draper

5
Saya ingat ketika bug ini membuat putaran. Pemecahan masalah kernel ditemukan segera - itu tidak akan crash komputer kecuali Anda menjalankan OS tanpa patch.
zwol

3
@RosLuP 209 pengguna yang berbeda, tampaknya. Jika Anda tidak setuju, downvote dan lanjutkan.
Dennis

150

Bash, 5

>"$0"

Memotong dirinya sendiri ke panjang nol.

Jika nama file tidak mengandung spasi, >$0berfungsi untuk 3 karakter !


2
Sebenarnya, tanda kutip tidak pernah diperlukan untuk variabel yang digunakan dalam nama file redirect seperti ini, bahkan jika program atau path ke program berisi spasi, karena kasus khusus dalam aturan parsing shell. Jadi Anda selalu dapat melakukannya dalam 3 karakter!
apenwarr

3
@apenwarr dikatakan "$ 0: redirect ambigu" ketika tanpa tanda kutip dan nama file mengandung spasi

1
@apenwarr, diperlukan jika shell yang mengartikan skrip itu berdasarkan ksh88 atau bash tidak dalam mode posix. Ini bukan tentang ruang, ini tentang karakter $IFSuntuk bash dan karakter wildcard untuk bash dan ksh88. Skrip she-bang less biasanya akan ditafsirkan oleh sh sistem, tetapi beberapa shell termasuk bash dan ksh88 akan menafsirkannya pada anak-anak mereka sendiri.
sch

144

gzip

#!/bin/gzip

Untuk banyak gangguan kepada orang-orang yang digunakan untuk alat commandline tidak rusak, gzipsecara default merusak file asli, menggantinya dengan versi gzip (menambahkan akhiran).

Ini adalah variasi pada #!/bin/rmopsi, kecuali yang ini dapat dipulihkan dengan intervensi manusia manual (panggilan gunzipsaja). Sebagai bonus khusus, file yang dihasilkan jauh lebih lama daripada aslinya (perbedaannya tergantung pada panjang nama file).

Peringatan: lokasi gzipmungkin berbeda.

EDIT: seperti yang ditunjukkan oleh WChargin, ini lebih portabel:

#!/usr/bin/env gzip

Sisa file dapat memiliki konten apa pun. Ini pada dasarnya adalah file yang, ketika dipanggil, bersembunyi di dalam kotak dan menolak untuk keluar sampai Anda membongkar secara paksa.


7
Saya tidak pernah memikirkannya sebelumnya tetapi Anda benar-benar benar.
ojblass

sangat menarik
Grijesh Chauhan

11
"Peringatan: lokasi gzipmungkin beragam" - ini bukan kode-golf , jadi Anda dapat menggunakan#!/usr/bin/env gzip
wchargin

37
+1 hanya untuk It's essentially a file that, when called, hides itself in a box and refuses to come out until you forcibly unpack it.Anda yang membuat hari saya, dan ini jam 1 pagi.
bertepuk tangan

Ini pada dasarnya file yang, ketika dipanggil, menyembunyikan dirinya di dalam kotak dan menolak untuk keluar sampai Anda membongkar secara paksa. membuatku tertawa. : D
Mischa

121

Bash, 13 12

Bukan yang terpendek, tetapi sebenarnya tidak menghapus file atau membuat sistem tidak dapat digunakan.

chmod 0 "$0"

Jika nama file tidak mengandung spasi, Anda dapat menghapus tanda kutip untuk menyimpan 2 karakter.

Penjelasan

Ini menghapus semua izin ( rwx) dari dirinya sendiri. Ketika Anda mencoba menjalankannya, atau bahkan melihat kodenya, untuk kedua kalinya, tanpa secara manual mengembalikan izin, itu akan mengatakan sesuatu seperti

bash: <FILENAME>: Permission denied

Kembalikan izin dengan

chmod +rwx <FILENAME>

Versi lama

Hanya menghapus izin eksekusi, tetapi satu karakter lagi (ini adalah pertanyaan sebelum diubah menjadi ):

chmod -x "$0"

Versi licik oleh Łukasz Niemier

#!/bin/chmod 0

4
chmod 0berfungsi juga
gnibbler

@gnibbler thnx, ditambahkan

Saya pikir Anda dapat memanggil program adan menyimpan 3 karakter:chmod 0 a
yo '

@tohecz itu pada dasarnya curang

5
Even nicer#!/bin/chmod 0
Hauleth

112

6800 kode mesin - 1 byte

0xDD

Ini dikenal sebagai HCF atau Halt and Catch Fire


78
Nah, aturan mengatakan "Setiap jawaban yang hanya memulai reboot atau berhenti akan didiskualifikasi", tetapi ini tidak hanya memulai penghentian, karena itu juga terbakar. Jadi, +1!
Trejkaz

94

Shell + sed, 16 byte

Tidak cukup destruktif seperti beberapa jawaban lainnya ;-)

Script ini menyisipkan komentar #di awal setiap barisnya sendiri:

sed -i s/^/#/ $0

3
Bagaimana dengan sed -i g $0?
seshoumara

91

Commodore 64 BASIC

Yang ini tidak menghapus program.

1 POKE 2048,1

Penghancuran diri

Menurut peta memori Commodore 64 , alamat 2048tidak digunakan, tetapi harus mengandung nilai 0sehingga program BASIC dapat RUN.


1
Apakah poke hanya memindahkan variabel ke lokasi?
ojblass

12
@ojblass ya, secara efektif. poke a, badalah setara dengan kode C *((unsigned char *)a) = b;.
Jules

4
Saya ingin memvisualisasikan FaceBook saya dengan cara itu!
Sunny R Gupta

3
Oh wow ... Saya ingat MENGINTIP dan POKE dari C64 BASIC! Saya menulis hal ini sekitar tahun 1977.
Fixee

catatan samping: Satu 0byte digunakan untuk menandai akhir dari baris kode; jadi alamat 0x800 mungkin perlu satu untuk menandai awal dari baris kode pertama.
Titus

89

Asumsi: Menjalankan Solaris, login sebagai root

killall

3
apakah solaris benar-benar memiliki hal seperti itu?
ojblass

21
Ya, ia melakukan apa yang tertulis di kaleng dan membunuh semua proses yang berjalan.
Greg Hewgill

satu upvote untuk Anda!
ojblass

9
1, Pertanyaannya menyebutkan tidak ada akses root diizinkan.
user80551

119
@ user80551 dia adalah alasan untuk aturan itu.
Seiyria

68

Python, 18

open(__file__,'w')

Memotong file dengan membukanya dalam mode tulis saja.


14
Kalau-kalau Anda serius, itu membuka sendiri ( __file__mengacu pada nama file sendiri). Membuka dalam wmode memotong file, pada dasarnya membersihkannya.
Bob

7
Saya pikir pemotongan terjadi di tempat terbuka, tetapi terlepas dari runtime Python harus menyiram semua file yang terbuka di akhir program, dan baik Python atau OS akan menutupnya ketika proses berakhir. Tentu saja, biasanya merupakan praktik yang baik untuk secara eksplisit menutup pegangan terbuka ketika Anda selesai menggunakannya.
Bob

5
Cara "benar" untuk menangani file dengan Python adalah dengan ... eh, dengan. with open("myfile.txt","r") as thefile:dan kemudian kode penanganan file Anda akan secara otomatis menutup file ketika Anda selesai.
Schilcote

1
Ini bisa disingkat menjadi sesuatu seperti open("f.py","w").
Ethan Bierlein

1
Tidak berhenti bekerja saat sisa
.pyc

66

Batch: 5 Bytes

%0|%0

Ini pada dasarnya adalah forkbomb untuk Windows.

Aplikasi memulai argumen pertamanya dua kali. Jangan jalankan di lingkungan yang produktif;)


83
Apakah ada lingkungan windows yang produktif? (Aku bercanda tentu saja).
orion

17
terlihat sangat polos!
ojblass

15
Ok, pasti jangan mencobanya. Itu tidak berjalan dengan baik.
rmobis

75
Tidak memiliki perwakilan untuk downvote, tetapi itu melanggar "berjalan hanya sekali" dengan cara yang paling parah.
Xan

14
Saya percaya manusia hanya mengeksekusi sekali dan memenuhi syarat.
ojblass

54

JavaScript

localStorage.x = eval(localStorage.x + localStorage.x)

Pertama kali Anda menjalankannya, itu akan berjalan dengan baik:

>>> localStorage.x = eval(localStorage.x + localStorage.x)
NaN

Jika Anda mencoba menjalankannya lebih banyak (bahkan jika Anda menyegarkan), Anda akan mendapatkan kesalahan:

>>> localStorage.x = eval(localStorage.x + localStorage.x)
ReferenceError: NaNNaN is not defined

5
Jadi, jika Anda menjalankannya berkali-kali, Anda mendapatkan tema Batman. +1 untuk itu.
Hankrecords

2
@Hankrecords Sayangnya, tidak juga, karena ini tidak akan dieksekusi nanti ...
RedClover

@ Soo Bummer ...
Hankrecords

@Hankrecords kecuali Anda menghapus eval, tetapi tidak akan memenuhi tantangan ini
RedClover

46

Sistem Operasi CMS IBM, yang merupakan sistem operasi pengguna tunggal yang berjalan sebagai tamu di bawah VM Hypervisor IBM, memiliki struktur file yang menarik.

File terdiri dari tiga elemen, Nama File, Jenis File, dan Mode File. Mode File terdiri dari dua elemen, alfabet tunggal, yang untuk kemudahan penjelasan dapat dianggap dengan cara yang mirip dengan Drive Letter untuk Windows / MS-DOS, dan satu digit angka tunggal.

Digit angka tunggal memiliki makna, http://publib.boulder.ibm.com/infocenter/zvm/v5r4/index.jsp?topic=/com.ibm.zvm.v54.dmsa3/hcsd0b10127.htm , dan untuk tugas ini itu adalah nomor 3 yang menarik:

File Mode Number 3
File mode number 3 berarti file dihapus setelah dibaca. Anda dapat menggunakan mode file nomor 3 jika Anda tidak ingin menyimpan salinan di rok mini Anda atau di direktori SFS Anda.

Jadi, habiskan berjam-jam menulis skrip Anda dan ajukan sebagai `LOST FOREVER A3 '. Jalankan, ini berfungsi pertama kali. Berangkat rumah, pekerjaan dilakukan dengan baik.

Catatan, tidak ada pesan yang dihasilkan yang menunjukkan penghapusan. Lagipula, semua orang tahu apa 3artinya itu, bukan?

Ini sebenarnya tentu saja sangat bermanfaat. Anda dapat, setelah pengujian selesai, gunakan 3untuk file sementara, dan tidak perlu membersihkan setelah itu, karena mereka adalah file read-once.


44

Commodore 64 BASIC

0 NEW

NEW menghapus program.


1
Apa itu?
Darth Egregious

3
@ user973810 jika saya ingat dasar, baru untuk membersihkan memori, sehingga akan menghapus program
user902383

3
Bagus. Tidak spesifik untuk Commodore 64, mungkin berfungsi seperti pada hampir setiap mesin BASIC 8-bit dari tahun 80-an ...
ysap

Anda bisa TUA atau O. kembali juga. Saya baru 12 bulan dari 12 tahun game genius coding; p bekerja secara tidak sengaja sekali. Kemudian secara tidak sengaja disimpan bukan dari yang lama. O. tidak bekerja lagi :( Saya belajar bagaimana hex editor bekerja cukup tajam :)
Matt Warren

3
@ysap: Akan lebih portabel jika menggunakan 1 sebagai nomor baris; tidak semua implementasi BASIC mendukung nomor baris 0.
celtschk

41

Bash, 12

Catatan: Ini destruktif.

:(){ :|:&};:

Ini adalah bom garpu bash yang populer. Secara eksponensial memakan semua memori dan PID mengunci sistem. Hard-reboot akan memungkinkan kode dijalankan lagi meskipun mengapa Anda ingin melakukan itu?


Bash, 10

:(){ :&};:

Untuk dua karakter yang kurang, ini memakan memori Anda secara linear.


Bash, 7

w;PATH=

w dipilih sebagai executable terpendek yang dapat saya pikirkan.

Ini hanya menghapus variabel path sehingga shell tidak dapat menemukan /usr/bin/wwaktu berikutnya. Restart shell memperbaikinya karena path biasanya disimpan~/.profile


Sialan: DI punya ide yang sama: P
Knerd

1
:(){ :&};:seharusnya tidak memakan ingatan Anda. Itu berhenti segera setelah bercabang, jadi hanya ada yang O(1)aktif. Anda telah selesai while(fork());, apa yang akan memakan ingatan Anda secara linear setara dengan fork(); while(1);.
marinus

26
Wow! itu adalah beberapa emosi yang mematikan! Saya lebih baik tidak memanggil komputer saya bignosed frownyface :(){ ....
Level River St

1
Jika saya ingat benar ... bom fork secara berkala membuat satu PID terbuka. Script dapat dijalankan lagi dalam interval itu ... dan jika itu tidak masuk hitungan, adalah mungkin untuk membunuh semua fork dengan beberapa usaha. Reboot hanyalah solusi termudah.
Brilliand

11
Saya pikir ini tidak memenuhi syarat. Itu tidak membuat skrip tidak dapat dijalankan lagi, melainkan skrip itu menjamin bahwa skrip berjalan lagi (berkali-kali).
Ben Voigt

20

C #

Kode terpendek untuk menghapus diri

Process.Start(new ProcessStartInfo("cmd.exe", "/C choice /C Y /N /D Y /T 3 & Del \"" + Assembly.GetExecutingAssembly().Location + "\""));

Kode untuk membuatnya tidak terlihat di UI

Process.Start( new ProcessStartInfo()
{
    Arguments = "/C choice /C Y /N /D Y /T 3 & Del \"" + Assembly.GetExecutingAssembly().Location+"\"",
    WindowStyle = ProcessWindowStyle.Hidden, CreateNoWindow = true, FileName = "cmd.exe"
});

7
Akhirnya, jawaban C #!
Pharap

Mengapa pilihan dibutuhkan?
wizzwizz4

19

C ++ 71

File yang dapat dieksekusi "golf" tidak diizinkan menjalankannya lain kali.

#include <stdlib.h>
int main()
{
system("chmod a-x golf");
return 0;
}

JavaScript / HTML 137, 145 dengan uji konsol

<script id="s"> 
function h(){
console.log(1);
var s=document.getElementById("s");
h=s.innerHTML;
h=h.replace("h","g");
s.innerHTML=h;
}

11
@Templar dalam konteks JavaScript, saya pikir menyegarkan halaman dianggap sebagai me-reboot (mungkin?)

2
Bahkan jika Anda tidak menghapus skrip dari halaman, itu masih akan dijalankan hanya sekali. Tidak ada gunanya untuk ini.
nderscore

2
@nderscore Sepertinya fungsi h adalah apa yang hanya akan dijalankan sekali. Anda harus benar-benar memanggilnya dari tempat lain (analog dengan menjalankan program, saya kira). Katakan <button onclick="h();">,.
Bob

4
Mengingat bahwa memuat ulang laman diizinkan, dan tujuan Anda hanya untuk mencegah agar tidak dapat dieksekusi lebih dari sekali ketika sudah dimuat, ada apa dengan itu function h(){h=0}?
Tertarik

1
Dengan #include <sys/stat.h>Anda dapat mengakses chmodfungsi secara langsung, menghemat beberapa byte ( <stdlib.h>tidak diperlukan lagi, dan juga tidak system). Juga, tidak returndiperlukan.
Ben Voigt

19

Shell My Name ... PowerShell

Pesan penghancuran diri klasik:

@'
##################################
Project X is a go

Meet Eagle 1 at WP Alpha

Further comms is hereby prohibited
##################################
This message will self destruct in 
5 seconds
'@
5..1| %{$_;Sleep 1;}
"Goodbye"
rm $(.{$MyInvocation.ScriptName})

Penjelasannya, tolong?
noɥʇʎԀʎzɐɹƆ

@ noɥʇʎԀʎzɐɹƆ Baris hingga 13 hanya omong kosong. Setelah itu, seperti shell lainnya, PowerShell memuat skrip yang sedang berjalan ke dalam memori dan karenanya tidak lagi memerlukan file skrip asli ... sehingga ia menghapus sendiri.
SomeShinyObject

18

Bash (5)

rm $0

Dengan asumsi Anda tidak memiliki spasi di nama file.


40
Inilah sebabnya mengapa Unix lebih baik daripada Windows: rm bukannya del menyelamatkan Anda satu byte.
MadTux

1
@ MadTux Saya lebih suka * nix daripada Unix.
wizzwizz4

14

SH

#!/bin/sh
curl http://runonce.herokuapp.com/

Hanya akan berjalan sekali (dan ini menunjukkan "Halo, dunia!" Jika berjalan), bahkan jika Anda menginstal ulang sistem, dan meletakkan skrip lagi.


EDIT: Saya pikir saya akan merilis skrip di belakang runonce juga. Tidak ada yang istimewa, karena tidak seharusnya dirilis, tapi terserah.

<?php
$db = pg_connect("[connection information]");
$ip = isset($_SERVER["HTTP_X_FORWARDED_FOR"]) ? $_SERVER["HTTP_X_FORWARDED_FOR"] : $_SERVER["REMOTE_ADDR"];

pg_query("DELETE FROM users WHERE time < now() - interval '1 day'");

$result = pg_query_params($db, "SELECT * FROM users WHERE ip = $1 LIMIT 1", array($ip));

if (!pg_fetch_row($result)) {
    echo "Hello, world!\n";
    pg_query_params($db, "INSERT INTO users (ip) VALUES ($1)", array($ip));
}

Serta skema database

CREATE TABLE users (
    ip inet PRIMARY KEY,
    time timestamp with time zone NOT NULL DEFAULT now()
);
CREATE INDEX ON users (time);

Data disimpan dalam database Heroku, jangan ragu untuk memeriksa kebijakan privasi mereka jika Anda mau. Saya tidak memeriksa data yang disimpan dalam database, ini disimpan murni untuk memungkinkan kode untuk dieksekusi sekali.


4
Saya berpendapat bahwa ini akan berjalan beberapa kali, hanya saja tidak menghasilkan output setelah yang pertama.
Brilliand

5
Itu bahkan tidak sekali pun menunjukkan "Hello World" untukku.
Paŭlo Ebermann

1
@ StéphaneGourichon: Ya, ia mengingat IP, dan tidak ada cara untuk menghapus IP sebelum penghapusan otomatis. Saya memutuskan untuk meletakkan kode sumber, sehingga Anda dapat memeriksa apa fungsinya.
Konrad Borowski

1
@ StéphaneGourichon: pg_query_paramscukup banyak melindungi dari injeksi SQL. Namun itu tidak akan disimpan, karena '; DROP TABLE users;--bukan IP yang valid ( inethanya menerima IP), dan karena itu jika Anda memiliki X-Forwarded-Forheader palsu , kunjungan Anda tidak akan disimpan. Saya sendiri tidak menganggapnya sebagai masalah.
Konrad Borowski

2
Saya percaya bahwa ini merupakan pelanggaran terhadap celah standar: Mengalihtugaskan jawaban yang sebenarnya .
juniorRubyist

12

PHP, 22 20 karakter

<?=unlink(__FILE__);

EDIT: Menghapus dua karakter di akhir per komentar.


2
Ini dapat lebih disederhanakan sebagai <?unlink(__FILE__);?>
:,

Anda harus mulai dengan <?=atau tag awal tidak dikenali.
Michael Mior

2
PHP menghancurkan dirinya sendiri ... ha! E_NOTICE baris 3048
metadings

<?+ ruang juga ok. Anda tidak bisa menggunakan huruf setelah tag pendek.
Titus

11

Ruby, 14

Itu menulis ulang kode sumber sebagai nama program.

IO.write $0,$0

3
Dan bagaimana jika program ini diberi nama "IO.write $ 0, $ 0"? "Asumsi: Beri nama program ini sesuatu yang bukan kode yang valid dalam bahasa apa pun."
Brilliand

@Brilland program ruby ​​harus selalu diakhiri dengan .rbdan bahkan jika namanya adalah "IO.write $ 0, $ 0 # .rb" itu tidak akan berhasil karena ketika menulis itu akan menyertakan path lengkap.
Mhmd

3
@ Mhmd program ruby ​​bisa diakhiri dengan apa saja. Sebagai contoh gemdanirb merupakan program Ruby tanpa ekstensi.
bfontaine

@ Belfontaine Yang punya shebangs. Ini tidak.
wizzwizz4

@ wizzwizz4 Shebangs tidak ada hubungannya dengan ekstensi. ruby foodanruby foo.rb akan bekerja sama dengan atau tanpa shebang. ./foodan ./foo.rb(dengan asumsi mereka dapat dieksekusi) akan gagal tanpa shebang dan berhasil dengannya (dengan asumsi kode yang benar, dll).
bfontaine

10

Batch (6 karakter)

Ini dengan asumsi kami memiliki izin untuk menghapus file, dan tentu saja dapat dilakukan pada Windows (mungkin juga MS-DOS).

del %0

10

Bash 9 8 Karakter

nc -l 1&

Hanya akan berjalan sekali, karena port diblokir selamanya.


1
Saya pikir ini tidak berhasil, karena 0ini adalah port khusus (ini disediakan). Ketika saya menjalankan ini di komputer saya, saya bisa membukanya beberapa kali. Juga, ini adalah port < 1024, yang berarti membutuhkan akses root untuk didengarkan.
heinrich5991

nc -l 1&akan memperbaiki masalah dengan 0dan menjadi satu byte lebih pendek, karena ruang terakhir tidak diperlukan.
kasperd

@kasperd Terima kasih atas masukannya :-)
Falco

@ heinrich5991 ok - daripada saya akan membutuhkan 11 karakter tanpa akses root untuk menggunakan Port seperti 9654
Falco

Mau jelaskan mengapa Anda downvoted?
Falco

9

NodeJS - 33 byte

require('fs').unlink(__filename);

Bisakah Anda jelaskan apa yang dilakukan untuk mereka yang tidak terbiasa dengan bahasa itu?
Kyle Kanos

1
@KyleKanos Ia mendapatkan modul sistem fsfile __filenamedan nama file saat ini dan menghapus nama file itu dari sistem file.
Tertarik

7
Anda dapat menghilangkan tanda titik koma karena itu opsional dalam JavaScript.
nalply

8

Batch, 7 karakter

Simpan pekerjaan yang belum disimpan sebelum mencoba ini.

Mengasumsikan sistem 64-bit, atau sistem 32-bit dengan <2 GB RAM memory. Harus disimpan ke file .bat atau .cmd sebelum diluncurkan, cukup memasukkannya di cmd.exe tidak akan berfungsi.

^ nul<^

Ini mengkonsumsi inti CPU penuh dan mengisi memori RAM Anda pada kecepatan beberapa ratus megabyte per detik. Jika Anda tidak menghentikannya dalam waktu (Task Manager), itu akan mengkonsumsi setiap byte RAM pada komputer Anda, seluruh sistem Anda akan membeku dan Anda tidak dapat melakukan apa pun sebelum Anda secara paksa mematikan dan memulai kembali komputer Anda dengan cara memotong daya atau menahan tombol daya.

Semua kredit masuk ke txtechhelp di StackOverflow untuk ini, lihat informasi lebih lanjut di sini: https://stackoverflow.com/q/23284131/1955334


Bagaimana ini mungkin? Bagaimana dengan paging? Prioritas proses?
Nicolas Barbulesco

Saya menjalankan skrip ini, tidak ada yang terjadi.
Pavel

@Pavel Saya kira sudah diperbaiki di Windows 10 lalu. Saya tidak dapat mereproduksi pada Windows 10, tetapi berfungsi pada Windows 8.1.
bilde2910

1
"Ini menghabiskan inti CPU penuh dan mengisi memori RAM Anda pada kecepatan beberapa ratus megabyte per detik. Jika Anda tidak menghentikannya dalam waktu (Task Manager), itu akan mengkonsumsi setiap byte RAM pada komputer Anda, seluruh sistem Anda akan membeku dan Anda tidak dapat melakukan apa pun sebelum Anda secara paksa mematikan dan menyalakan kembali komputer Anda dengan cara memotong daya atau menahan tombol daya. " Kedengarannya seperti cerita horor untuk komputer ...
no 31zɐɹƆ

7

Ini pasangan. Tidak seperti banyak orang, ini tidak destruktif, hanya kreatif dan tidak lazim.

Pesta

#!/usr/bin/env bash
read <<< ''
printf "$REPLY" > "$0"

Yang ini cukup sederhana. Variabel $REPLYdibuat secara implisit oleh read, tetapi diisi dengan herestring kosong. String kosong itu kemudian printfdimasukkan ke dalam skrip saat ini. Ini setara dengan yang agak dikaburkan sebagai berikut:

#!/usr/bin/env bash
cat <<< '' > "$0" # probably a lot more portable

Windows Batch

copy con %0 < nul

Yang kedua pada dasarnya menyalin input konsol, membaca dari nul, ke file saat ini.


Diposting setelah ini menjadi kontes popularitas
Isiah Meadows

1
Yang pertama tidak akan berfungsi tanpa izin root. Mengapa Anda mencoba mengganti perangkat null? Ketika dijalankan sebagai root, ini sebenarnya akan membuat sistem berperilaku tidak menentu. Anda juga menimpa null saat menulis ke dalamnya :) Mengapa tidak memindahkannya ke tempat lain? Seperti mv "$ 0" "$ {0} x" atau apalah? Seharusnya melakukan trik.
orion

Apakah file tersebut masih ada setelahnya?
Isiah Meadows

Saya sekarang benar-benar mengubah contoh Bash.
Isiah Meadows

Bagaimana ini tidak merusak?
ysap

7

Sinclair BASIC

10 POKE 23635,255

Memindahkan alamat program BASIC dalam memori dari tempat seharusnya (203) sehingga data yang salah ditemukan oleh penerjemah.


Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.