Jika bahasa yang dikompilasi digunakan, program harus menghapus executable yang dikompilasi (tetapi tidak perlu menghapus file sumber). Jika bahasa yang ditafsirkan digunakan, program harus menghapus file sumber.
Tawaran pembuka saya:
Python (29 karakter)
import os;os.remove(__file__)
Sunting: untuk mencegah solusi seperti rm -rf / , program tidak boleh menghapus apa pun kecuali file yang dapat dieksekusi atau sumber.
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
LAMBANG
sumber
sumber
Jawaban:
Skrip Bash (7 karakter, 7 byte)
sumber
./the\"program
,./'the"program'
,'./tha"program'
. Semua berfungsi sebagaimana dimaksud. (Kutipan perlu diloloskan atau dilampirkan dalam tanda kutip tunggal pada panggilan.) Juga akan bekerja pada file yang berisi nama dengan baris baru dll.rm "$0"
di shell Bash alih-alih dalam skrip batch . Anda harus mengedit tajuknya seperti ini:# Bash script, 7 bytes
Unix? (9):
Sebuah klasik. Digunakan
rm
sebagai penerjemah, untuk penghapusan diri secara instan. Bukan yang terpendek sekalipun.sumber
rm
.#!
garis tidak dihitung dalam skor.#!
garis yang sepenuhnya standar yang hanya memberi nama jumlah penerjemah default bahasa sebagai nol. Ini adalah garis yang sangat tidak biasa#!
sejauh Bash pergi. (Bukannya ini benar-benar berfungsi di Bash, meskipun ada bahasa lain di mana ia bekerja.)bash
, ia tidak akan menghapus apa pun). Ini adalah UNIX / Linux yang dapat dieksekusi. (Ini juga bekerja di Perl, yang mengemulasi penanganan#!
garis UNIX / Linux sehingga dapat digunakan untuk menjalankan skrip shell pada platform yang tidak dapat melakukannya secara asli.)Batch - 6 byte
Cukup mudah. Catatan: Bekerja meskipun namanya mengandung spasi.
sumber
%~0
.Ruby, 14 karakter
$0
adalah variabel global khusus yang berisi nama skrip yang sedang berjalan.sumber
BASIC-80 / BASICA / GW-BASIC / IBM BASIC / Commodore 64 BASIC / Vintage BASIC / Commodore LCD BASIC / Atari BASIC *
5 byte
Yah, itu sesederhana yang didapat.
NEW
membuat program baru, jadi menempatkan ini di mana saja di program Anda akan menghapusnya.Bukti konsep pada IBM BASIC (memakai
NEW
jalur 40 untuk kejelasan):* Ya, saya mencantumkan setiap versi BASIC lama yang telah saya uji ini (atau cukup banyak digunakan)
sumber
PHP, 17 karakter
sumber
<?unlink(__FILE__);
unlink(__FILE__);
. Itu tidak menghapus file.PowerShell (32)
sumber
Perl 5 (8 karakter)
$0
adalah nama skrip, danunlink
menghapusnya. Biasanya, Anda setidaknya akan menambahkan ruang di antara untuk keterbacaan.sumber
C # (112)
Tanpa malu-malu dicuri dari http://www.codeproject.com/Articles/31454/Cara-Untuk-Membuat-Anda-Aplikasi-Delete-Itself-Immedia
sumber
k (8)
Atau q setara dengan 14:
sumber
Python, 18
Buka sendiri dalam mode hanya-tulis, hapus sendiri.
sumber
R, 26 karakter
sumber
Node.js - 22 karakter
sumber
Julia, 13 byte
Sederhana. Tapi lebih lama. : P
sumber
Vitsy + bash, 8 byte
sumber
Mathematica, 29 byte
sumber
Lua, 17 byte
Ini sebenarnya hanya berfungsi jika Anda menjalankan program dengan mengetikkan filepath lengkap, yaitu
lua ~/Scripts/removeself.lua
akan berfungsi, tetapilua removeself.lua
tidak, dengan asumsi nama fileremoveself.lua
dan direktori kerja saat ini dari~/Scripts
.Sejauh yang saya tahu, tidak ada cara untuk menemukan file sebenarnya dari sebuah skrip, hanya argumen yang diteruskan ke sana. Saya memang tahu
debug.getinfo(1).source
, tetapi dalam pengujian saya bahwa permainan itu persis sama dengan hasilarg[0]
. Jika ada yang tahu cara menemukan filepath, beri tahu saya.sumber
Nodejs, 32 byte
sumber
JS, 37 byte
Apakah ini masuk hitungan? Itu membunuh javascript di halaman
sumber
=
tcl, 18
demo - PERHATIAN: Ini hanya demo satu kali! Hanya pertama kali itu akan bisa dijalankan. Harap simpan di poster asli pertanyaan. Untuk mencoba: tekan
Execute
tombol. Area hijau tidak akan melaporkan kesalahan apa pun. Setelah itu, klik berikutnya padaExecute
tombol akan menghasilkannot found
kesalahan!sumber
C, 32 byte
sumber
}
diizinkan dalam C? Wow!}
tetapi ternyata saya salah menyalin / menempelkan cuplikan. Terima kasih telah menunjukkannya!main(c,v)int**v;{remove(*v);}
char**
keint**
secara teknis valid. Saya khawatir tentang masalah penyelarasan potensial.JavaScript (ES6), 13 byte
Cobalah
Log sumber
f
, panggilanf
(yang menghapusf
), mencoba untuk logf
lagi tetapi melemparkan kesalahan karenaf
sekarang tidak terdefinisi.sumber
PowerShell v3 - 17
sumber
Julia - 25 byte
Tulis ini ke dalam file, lalu sertakan file dengan
include("<filename here>")
dan jalankanf()
:Ini jelas merupakan suatu fungsi - saya tidak yakin bagaimana cara mendeteksi nama file dari suatu file yang sedang dijalankan secara langsung (sebagai pernyataan sertakan tanpa definisi fungsi di dalamnya).
sumber
C ++, 137 byte.
Sebagian besar waktu berfungsi di windows
C, 90 byte
sumber
#include <string>
, menghapus ruang asing, dan membuat C ini, yang memungkinkan Anda menghapusint
danreturn
. Selain itu, Anda perlu#include <stdio.h>
membuat karya ini, karena di situlahsprintf
dinyatakan.MATLAB, 36 byte
Simpan kode di atas sebagai file-m mengikuti panduan nama file Matlab.
sumber
VBA,
6967 BytesSubrutin yang tidak mengambil input dan menghapus sendiri.
Mengharuskan kode di bawah ini menjadi baris pertama di panel kode aktif, dan bahwa VBA memiliki akses tepercaya ke model Proyek VBE.
-2 byte untuk diganti
ActiveCodePane
denganCodePane(1)
sumber
T-SQL, 28 byte
Itu hanya menjatuhkan / menghapus prosedur dan kode ketika menjalankan sendiri. Pemakaian:
sumber
shortC , 10 byte
Bagaimana itu bekerja:
Program C Setara:
sumber
8086/8088 kode mesin, 1 byte
Asumsi:
Itu
stosb
toko instruksi byte dalam AL mendaftar di lokasi memori yang ditunjuk oleh ES dan DI, maka kenaikan atau decrements DI. Dalam hal ini, ia menyimpan byte 0 pada alamat memori 0, yang kebetulan merupakan tempat instruksi itu sendiri.Memang, program ini tidak menghapus file atau apa pun. Tetapi jika Anda berhasil mendapatkan prosesor 8086, mencolek program ini ke dalam memori, dan menjalankannya, itu sebenarnya akan menimpa dirinya sendiri.
sumber