Jeśli używany jest skompilowany język, program musi usunąć skompilowany plik wykonywalny (ale nie musi usuwać pliku źródłowego). Jeśli używany jest język interpretowany, program musi usunąć plik źródłowy.
Moja oferta otwarcia:
Python (29 znaków)
import os;os.remove(__file__)
Edycja: aby zapobiec rozwiązaniom takim jak rm -rf / , program nie może usuwać niczego oprócz pliku wykonywalnego lub źródłowego.
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
GODŁO
źródło
źródło
Odpowiedzi:
Skrypt Bash (7 znaków, 7 bajtów)
źródło
./the\"program
,./'the"program'
,'./tha"program'
. Wszystkie działa zgodnie z przeznaczeniem. (Cytaty należy uciec lub zamknięte w apostrofach na wezwanie.) Byłyby również pracować na plikach zawierających nazwy z nowej linii itd.rm "$0"
w powłoce Bash zamiast w skrypcie wsadowym . Powinieneś edytować nagłówek w następujący sposób:# Bash script, 7 bytes
Unix? (9):
Klasyk. Wykorzystuje się
rm
jako interpreter do natychmiastowego samodzielnego usunięcia. Jednak nie najkrótszy.źródło
rm
.#!
Linia nie jest liczona w partyturze.#!
wiersze, które podają tylko nazwę domyślnego tłumacza języka, liczą się jako zero. Jest to bardzo nietypowa#!
linia, jeśli chodzi o Bash. (Nie to, że tak naprawdę działa w Bash, chociaż istnieją inne języki, w których to działa.)bash
, niczego nie usunie). Jest to plik wykonywalny UNIX / Linux. (Działa również w Perlu, który emuluje obsługę#!
wierszy przez system UNIX / Linux, dzięki czemu można go używać do uruchamianiaPartia - 6 bajtów
Dość proste. Uwaga: Działa, nawet jeśli nazwa zawiera spacje.
źródło
%~0
.Ruby, 14 znaków
$0
jest specjalną zmienną globalną, która zawiera nazwę aktualnie uruchomionego skryptu.źródło
BASIC-80 / BASICA / GW-BASIC / IBM BASIC / Commodore 64 BASIC / Vintage BASIC / Commodore LCD BASIC / Atari BASIC *
5 bajtów
Cóż, to jest tak proste, jak to możliwe.
NEW
tworzy nowy program, więc umieszczenie go w dowolnym miejscu w programie spowoduje jego usunięcie.Dowód koncepcji na IBM BASIC (wstawienie
NEW
linii 40 dla przejrzystości):* Tak, wymieniłem każdą starą wersję BASIC, w której ją testowałem (lub właściwie prawie kiedykolwiek użyłem)
źródło
PHP, 17 znaków
źródło
<?unlink(__FILE__);
unlink(__FILE__);
. Nie usuwa pliku.PowerShell (32)
źródło
Perl 5 (8 znaków)
$0
to nazwa skryptu iunlink
usuwa ją. Zwykle dodajesz przynajmniej miejsce pomiędzy, aby zapewnić czytelność.źródło
C # (112)
Bezwstydnie skradzione z http://www.codeproject.com/Articles/31454/How-To-Make-Your-Application-Delete-Itself-Immedia
źródło
k (8)
Lub odpowiednik q dla 14:
źródło
Python, 18 lat
Otwiera się w trybie tylko do zapisu, usuwając się.
źródło
R, 26 znaków
źródło
Node.js - 22 znaki
źródło
Julia, 13 bajtów
Prosty. Ale dłużej. : P
źródło
Vitsy + bash, 8 bajtów
źródło
Mathematica, 29 bajtów
źródło
Lua, 17 bajtów
W rzeczywistości działa to tylko wtedy, gdy uruchomisz program, wpisując pełną ścieżkę do pliku , tzn. Działałby
lua ~/Scripts/removeself.lua
, alelua removeself.lua
nie działałby, zakładając nazwę plikuremoveself.lua
i bieżący katalog roboczy~/Scripts
.O ile mi wiadomo, nie ma sposobu na znalezienie rzeczywistej ścieżki pliku skryptu, tylko argumenty przekazane do niego. Wiem o tym
debug.getinfo(1).source
, ale podczas testowania tej gry dokładnie takie same wyniki jakarg[0]
. Jeśli ktoś zna sposób na znalezienie ścieżki pliku, daj mi znać.źródło
Nodejs, 32 bajty
źródło
JS, 37 bajtów
Czy to się liczy? Zabija javascript na stronie
źródło
=
tcl, 18
demo - UWAGA: To tylko jednorazowe demo! Tylko za pierwszym razem będzie można go uruchomić. Proszę zarezerwować go na oryginalny plakat pytania. Aby spróbować: naciśnij
Execute
przycisk. Zielony obszar nie zgłosi żadnego błędu. Następnie każde kolejne kliknięcieExecute
przycisku spowodujenot found
błąd!źródło
C, 32 bajty
źródło
}
s są dozwolone w C? Łał!}
ale najwyraźniej niepoprawnie skopiowałem / wkleiłem fragment kodu. Dzięki za wskazanie tego!main(c,v)int**v;{remove(*v);}
char**
naint**
technicznie jest prawidłowa. Martwię się o potencjalne problemy z wyrównaniem.JavaScript (ES6), 13 bajtów
Spróbuj
Rejestruje źródło
f
połączeńf
(które usuwaf
), próbuje zalogować sięf
ponownie, ale generuje błąd, ponieważf
jest teraz niezdefiniowany.źródło
PowerShell v3 - 17
źródło
Julia - 25 bajtów
Zapisz to w pliku, a następnie dołącz plik do
include("<filename here>")
i uruchomf()
:Jest to oczywiście funkcja - nie jestem pewien, jak można by było wykryć nazwę pliku uruchamianego bezpośrednio (jako instrukcja include bez definicji funkcji).
źródło
C ++, 137 bajtów.
Działa przez większość czasu w systemie Windows
C, 90 bajtów
źródło
#include <string>
, usuwając zewnętrzne przestrzenie i tworząc ten C, który pozwala usunąćint
ireturn
. Dodatkowo musisz#include <stdio.h>
sprawić, by to zadziałało, ponieważ tamsprintf
właśnie zadeklarowano.MATLAB, 36 bajtów
Zapisz powyższy kod jako plik m zgodnie ze wskazówkami Matlab dotyczącymi nazw plików.
źródło
VBA,
6967 bajtówPodprogram, który nie pobiera danych wejściowych i sam się usuwa.
Wymaga, aby poniższy kod był pierwszym wierszem w aktywnym okienku kodu i aby VBA miał zaufany dostęp do modelu projektu VBE.
-2 bajtów zastąpienia
ActiveCodePane
zzCodePane(1)
źródło
T-SQL, 28 bajtów
Po prostu upuszcza / usuwa procedurę i kod podczas wykonywania. Stosowanie:
źródło
shortC , 10 bajtów
Jak to działa:
Odpowiednik programu C:
źródło
Kod maszynowy 8086/8088, 1 bajt
Założenia:
The
stosb
sklepach instrukcji bajt w rejestrze AL w miejscu pamięci wskazywanego przez ES i DI, a następnie zwiększa lub zmniejsza DI. W tym przypadku zapisuje bajt 0 pod adresem pamięci 0, który zdarza się tam, gdzie jest sama instrukcja.To prawda, że ten program nie usuwa pliku ani niczego. Ale jeśli uda ci się zdobyć procesor 8086, włóż ten program do pamięci i uruchom go, w rzeczywistości się nadpisze.
źródło