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.
popularity-contest
stateful
ojblass
sumber
sumber
vi
dalam lingkungan terminal tunggal memiliki efek ini, tidak ada jalan keluar dari itu kecuali Anda reboot :) Hanya lelucon di sini.echo "If you try to execute me again, it means you are an idiot.";
<- Tidak ada yang akan mengeksekusi lebih dari sekali: PJawaban:
Penjagaan
Akhirnya, usecase untuk Vigil!
Kutipan dari "spesifikasi bahasa":
Ada cara lain untuk melakukan ini, karena Vigil memberikan kata kunci
implore
danswear
yang pada dasarnya sumpah untuk mematuhi pra-dan pasca-kondisi tertentu:sumber
Hampir semua distro Linux, 9 karakter
Yang ini klasik!
Masukkan ini ke dalam file dan jalankan:
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/bash
atau#!/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%0
atau$0
dan sejenisnya di sini); jadi dengan membuat file saya berisi#!/bin/rm
dan menjalankannya, semua yang saya lakukan adalah meneruskan nama file file saya kerm
.sumber
#!
urutan memulai shebang, yang mengidentifikasi penerjemah apa yang akan Anda gunakan untuk skrip - biasanya/bin/bash
. Di sini, Flonk telah digunakan/bin/rm
sebagai "penerjemah".rm
adalah program yang menghapus file. karena Linux berpikir bahwa kami inginrm
menjadi seorang juru bahasa, ia memberikan nama file sebagai argumen untuk itu. oleh karena itu, file menghapus dirinya sendiri./foo mbox
biner x86, 4 byte
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.
sumber
Bash, 5
Memotong dirinya sendiri ke panjang nol.
Jika nama file tidak mengandung spasi,
>$0
berfungsi untuk 3 karakter !sumber
$IFS
untuk 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.gzip
Untuk banyak gangguan kepada orang-orang yang digunakan untuk alat commandline tidak rusak,
gzip
secara default merusak file asli, menggantinya dengan versi gzip (menambahkan akhiran).Ini adalah variasi pada
#!/bin/rm
opsi, kecuali yang ini dapat dipulihkan dengan intervensi manusia manual (panggilangunzip
saja). Sebagai bonus khusus, file yang dihasilkan jauh lebih lama daripada aslinya (perbedaannya tergantung pada panjang nama file).Peringatan: lokasi
gzip
mungkin berbeda.EDIT: seperti yang ditunjukkan oleh WChargin, ini lebih portabel:
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.
sumber
gzip
mungkin beragam" - ini bukan kode-golf , jadi Anda dapat menggunakan#!/usr/bin/env gzip
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.Bash,
1312Bukan yang terpendek, tetapi sebenarnya tidak menghapus file atau membuat sistem tidak dapat digunakan.
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 sepertiKembalikan izin dengan
Versi lama
Hanya menghapus izin eksekusi, tetapi satu karakter lagi (ini adalah pertanyaan kode-golf sebelum diubah menjadi kontes popularitas ):
Versi licik oleh Łukasz Niemier
sumber
chmod 0
berfungsi jugaa
dan menyimpan 3 karakter:chmod 0 a
#!/bin/chmod 0
6800 kode mesin - 1 byte
Ini dikenal sebagai HCF atau Halt and Catch Fire
sumber
Shell + sed, 16 byte
Tidak cukup destruktif seperti beberapa jawaban lainnya ;-)
Script ini menyisipkan komentar
#
di awal setiap barisnya sendiri:sumber
sed -i g $0
?Commodore 64 BASIC
Yang ini tidak menghapus program.
Menurut peta memori Commodore 64 , alamat
2048
tidak digunakan, tetapi harus mengandung nilai0
sehingga program BASIC dapat RUN.sumber
poke a, b
adalah setara dengan kode C*((unsigned char *)a) = b;
.0
byte digunakan untuk menandai akhir dari baris kode; jadi alamat 0x800 mungkin perlu satu untuk menandai awal dari baris kode pertama.Asumsi: Menjalankan Solaris, login sebagai root
sumber
Python, 18
Memotong file dengan membukanya dalam mode tulis saja.
sumber
__file__
mengacu pada nama file sendiri). Membuka dalamw
mode memotong file, pada dasarnya membersihkannya.with open("myfile.txt","r") as thefile:
dan kemudian kode penanganan file Anda akan secara otomatis menutup file ketika Anda selesai.open("f.py","w")
.Batch: 5 Bytes
Ini pada dasarnya adalah forkbomb untuk Windows.
Aplikasi memulai argumen pertamanya dua kali. Jangan jalankan di lingkungan yang produktif;)
sumber
JavaScript
Pertama kali Anda menjalankannya, itu akan berjalan dengan baik:
Jika Anda mencoba menjalankannya lebih banyak (bahkan jika Anda menyegarkan), Anda akan mendapatkan kesalahan:
sumber
eval
, tetapi tidak akan memenuhi tantangan iniSistem 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:
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
3
artinya itu, bukan?Ini sebenarnya tentu saja sangat bermanfaat. Anda dapat, setelah pengujian selesai, gunakan
3
untuk file sementara, dan tidak perlu membersihkan setelah itu, karena mereka adalah file read-once.sumber
Commodore 64 BASIC
NEW
menghapus program.sumber
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
dipilih sebagai executable terpendek yang dapat saya pikirkan.Ini hanya menghapus variabel path sehingga shell tidak dapat menemukan
/usr/bin/w
waktu berikutnya. Restart shell memperbaikinya karena path biasanya disimpan~/.profile
sumber
:(){ :&};:
seharusnya tidak memakan ingatan Anda. Itu berhenti segera setelah bercabang, jadi hanya ada yangO(1)
aktif. Anda telah selesaiwhile(fork());
, apa yang akan memakan ingatan Anda secara linear setara denganfork(); while(1);
.:(){
....C #
Kode terpendek untuk menghapus diri
Kode untuk membuatnya tidak terlihat di UI
sumber
C ++ 71
File yang dapat dieksekusi "golf" tidak diizinkan menjalankannya lain kali.
JavaScript / HTML 137, 145 dengan uji konsol
sumber
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();">
,.function h(){h=0}
?#include <sys/stat.h>
Anda dapat mengakseschmod
fungsi secara langsung, menghemat beberapa byte (<stdlib.h>
tidak diperlukan lagi, dan juga tidaksystem
). Juga, tidakreturn
diperlukan.Shell My Name ... PowerShell
Pesan penghancuran diri klasik:
sumber
Bash (5)
Dengan asumsi Anda tidak memiliki spasi di nama file.
sumber
SH
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.
Serta skema database
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.
sumber
pg_query_params
cukup banyak melindungi dari injeksi SQL. Namun itu tidak akan disimpan, karena'; DROP TABLE users;--
bukan IP yang valid (inet
hanya menerima IP), dan karena itu jika Anda memilikiX-Forwarded-For
header palsu , kunjungan Anda tidak akan disimpan. Saya sendiri tidak menganggapnya sebagai masalah.PHP,
2220 karakterEDIT: Menghapus dua karakter di akhir per komentar.
sumber
<?unlink(__FILE__);
?>
<?=
atau tag awal tidak dikenali.<?
+ ruang juga ok. Anda tidak bisa menggunakan huruf setelah tag pendek.Ruby, 14
Itu menulis ulang kode sumber sebagai nama program.
sumber
.rb
dan bahkan jika namanya adalah "IO.write $ 0, $ 0 # .rb" itu tidak akan berhasil karena ketika menulis itu akan menyertakan path lengkap.gem
danirb
merupakan program Ruby tanpa ekstensi.ruby foo
danruby foo.rb
akan bekerja sama dengan atau tanpa shebang../foo
dan./foo.rb
(dengan asumsi mereka dapat dieksekusi) akan gagal tanpa shebang dan berhasil dengannya (dengan asumsi kode yang benar, dll).Batch (6 karakter)
Ini dengan asumsi kami memiliki izin untuk menghapus file, dan tentu saja dapat dilakukan pada Windows (mungkin juga MS-DOS).
sumber
Bash
98 KarakterHanya akan berjalan sekali, karena port diblokir selamanya.
sumber
0
ini 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.nc -l 1&
akan memperbaiki masalah dengan0
dan menjadi satu byte lebih pendek, karena ruang terakhir tidak diperlukan.NodeJS - 33 byte
sumber
fs
file__filename
dan nama file saat ini dan menghapus nama file itu dari sistem file.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.
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
sumber
Ini pasangan. Tidak seperti banyak orang, ini tidak destruktif, hanya kreatif dan tidak lazim.
Pesta
Yang ini cukup sederhana. Variabel
$REPLY
dibuat secara implisit olehread
, tetapi diisi dengan herestring kosong. String kosong itu kemudianprintf
dimasukkan ke dalam skrip saat ini. Ini setara dengan yang agak dikaburkan sebagai berikut:Windows Batch
Yang kedua pada dasarnya menyalin input konsol, membaca dari
nul
, ke file saat ini.sumber
Sinclair BASIC
Memindahkan alamat program BASIC dalam memori dari tempat seharusnya (203) sehingga data yang salah ditemukan oleh penerjemah.
sumber
SQL
SQL Fiddle
sumber