Cel
Celem tego wyzwania jest napisanie kodu, który wykona się tylko raz. Oznacza to w zasadzie, że w jakiś sposób uszkadza program, skrypt lub środowisko. Ponowne uruchomienie systemu pozwala na ponowne uruchomienie kodu, co jest dozwolone.
Punktacja
Liczba głosów Wszystkie założenia muszą być wyraźnie wymienione. Wszelkie odpowiedzi inicjujące ponowne uruchomienie lub zatrzymanie zostaną zdyskwalifikowane.
Dodatkowe zasady, ponieważ Greg Hewgill jest półbogiem
Nie można uzyskać dostępu do katalogu głównego.
Data końcowa
Konkurs zakończy się 31 maja 2014 r.
Edytować
Ten konkurs został zmieniony na konkurs popularności.
popularity-contest
stateful
ojblass
źródło
źródło
vi
w jednym środowisku terminalowym ma taki efekt, nie ma przed nim ucieczki, chyba że uruchomisz się ponownie :) Żart tutaj.echo "If you try to execute me again, it means you are an idiot.";
<- Nikt nie wykona więcej niż raz: POdpowiedzi:
Czuwanie
Nareszcie przypadek użycia Czuwania!
Fragment „specyfikacji języka”:
Istnieją inne sposoby, aby to zrobić, ponieważ Vigil zapewnia słowa kluczowe
implore
iswear
które są w zasadzie przysięgi na przestrzeganie pewnych przed i po warunków:źródło
Prawie każda dystrybucja Linuksa, 9 znaków
Ten jest klasykiem!
Umieść to w pliku i uruchom:
Aa i już go nie ma!
Jeśli chodzi o to, co się dzieje: tak naprawdę po prostu biegam
rm
!#!
nazywa się shebang . A jeśli umieścisz jedną z nich, a następnie ścieżkę do jakiegoś pliku wykonywalnego jako pierwszą linię w skrypcie, moduł ładujący program wykona plik skryptu z tym, co tam napisałeś - domyślnie jest to (#!/bin/bash
lub#!/bin/sh
powłoka Bourne-ponownie shell / Bourne) . Pierwszym argumentem przekazanym do tego skryptu będzie sama nazwa pliku (dlatego widzisz tutaj tak wiele rozwiązań, w tym%0
lub$0
i podobnych); więc tworząc mój plik#!/bin/rm
i uruchamiając go, wszystko, co robię, to przekazanie do niego nazwy plikurm
.źródło
#!
sekwencja rozpoczyna shebang, który identyfikuje interpretera, którego będziesz używać dla skryptu - normalnie/bin/bash
. W tym przypadku Flonk był używany/bin/rm
jako „tłumacz”.rm
to program, który usuwa pliki. ponieważ Linux uważa, że chcemyrm
być tłumaczem, przekazuje nazwę pliku jako argument. dlatego plik sam się usuwa./foo mbox
binarny x86, 4 bajty
Założenie: Musi być uruchomiony na procesorze Pentium P5.
Powyższa instrukcja jest powszechnie znana jako błąd F00F . Próbuje wykonać niepoprawną instrukcję poprzedzoną blokadą .
Powoduje to całkowite zawieszenie procesora (ani zatrzymanie, ani ponowne uruchomienie) i nie wymaga nawet dostępu do roota.
źródło
Bash, 5
Obcina się do zerowej długości.
Jeśli nazwa pliku nie zawiera spacji,
>$0
działa dla 3 znaków !źródło
$IFS
dla bash i symbole wieloznaczne dla bash i ksh88. Skrypt bez szarpania będzie zwykle interpretowany przez sh systemu, ale niektóre powłoki, w tym bash i ksh88, zinterpretują je w sobie.gzip
Zbyt irytujące osoby przyzwyczajone do nieniszczących narzędzi linii poleceń,
gzip
domyślnie rujnuje oryginalny plik, zastępując go wersją spakowaną gzip (dodanie sufiksu).Jest to odmiana
#!/bin/rm
opcji, z wyjątkiem tego, że można ją odzyskać przez ręczną interwencję człowieka (połączeniegunzip
). Jako specjalny bonus wynikowy plik jest znacznie dłuższy niż oryginał (różnica zależy od długości nazwy pliku).Ostrzeżenie: lokalizacja
gzip
może się różnić.EDYCJA: jak wskazał WChargin, jest to bardziej przenośne:
Reszta pliku może mieć dowolną treść. Zasadniczo jest to plik, który po wywołaniu ukrywa się w pudełku i odmawia wyjścia, dopóki siłą go nie rozpakujesz.
źródło
gzip
może się różnić” - to nie jest golf golfowy , więc możesz użyć#!/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.
Ciebie stworzyło mój dzień, i jest 1 w nocy.Bash,
1312Nie najkrótszy, ale tak naprawdę nie usuwa pliku ani nie czyni systemu bezużytecznym.
Jeśli nazwa pliku nie zawiera spacji, możesz usunąć cudzysłowy, aby zapisać 2 znaki.
Wyjaśnienie
Usuwa wszystkie uprawnienia (
rwx
) z siebie. Gdy spróbujesz go uruchomić, a nawet wyświetlić jego kod, po raz drugi, bez ręcznego przywracania uprawnień, powie coś w rodzajuPrzywróć uprawnienia za pomocą
Stara wersja
Usuwa tylko uprawnienia do wykonywania, ale o jeden znak dłużej (było to pytanie do golfa, zanim zmieniło się w konkurs popularności ):
Podstępna wersja autorstwa Łukasza Niemiera
źródło
chmod 0
też działaa
i zapisać jeszcze 3 znaki:chmod 0 a
#!/bin/chmod 0
Kod maszynowy 6800 - 1 bajt
Jest to znane jako HCF lub Halt and Catch Fire
źródło
Shell + sed, 16 bajtów
Nie tak destrukcyjne jak niektóre inne odpowiedzi ;-)
Ten skrypt wstawia komentarz
#
na początku każdej linii:źródło
sed -i g $0
?Commodore 64 BASIC
Ten nie usuwa programu.
Zgodnie z mapą pamięci Commodore 64 adres
2048
jest nieużywany, ale musi zawierać wartość,0
aby program BASIC mógł być uruchomiony.źródło
poke a, b
odpowiada kodowi C*((unsigned char *)a) = b;
.0
bajt służy do oznaczenia końca linii kodu; więc adres 0x800 prawdopodobnie potrzebuje jednego, aby zaznaczyć początek pierwszej linii kodu.Założenie: działający system Solaris, zalogowany jako root
źródło
Python, 18 lat
Obcina plik, otwierając go w trybie tylko do zapisu.
źródło
__file__
odnosi się do własnej nazwy pliku). Otwarcie ww
trybie obcina plik, w zasadzie go usuwa.with open("myfile.txt","r") as thefile:
a następnie kod obsługi pliku automatycznie zamknie plik po zakończeniu.open("f.py","w")
.Partia: 5 bajtów
Zasadniczo jest to widebomb dla systemu Windows.
Aplikacja rozpoczyna swój pierwszy argument dwa razy. Nie uruchamiaj go w produktywnym środowisku;)
źródło
JavaScript
Przy pierwszym uruchomieniu będzie działał dobrze:
Jeśli spróbujesz uruchomić go więcej (nawet po odświeżeniu), pojawi się błąd:
źródło
eval
, ale nie spełni tego wyzwaniaSystem operacyjny CMS firmy IBM, który jest systemem operacyjnym dla jednego użytkownika działającym jako gość w ramach VM Hypervisor IBM, ma ciekawą strukturę plików.
Pliki składają się z trzech elementów: nazwy pliku, typu pliku i trybu pliku. Tryb pliku składa się z dwóch elementów, jednego alfabetu, które dla ułatwienia wyjaśnienia można traktować podobnie do litery dysku dla systemu Windows / MS-DOS i jednej cyfry.
Pojedyncza cyfra ma znaczenie, http://publib.boulder.ibm.com/infocenter/zvm/v5r4/index.jsp?topic=/com.ibm.zvm.v54.dmsa3/hcsd0b10127.htm i dla tego zadania interesująca jest liczba 3:
Poświęć godziny na pisanie skryptu i zapisanie go jako „LOST FOREVER A3”. Uruchom to, działa po raz pierwszy. Wyrusz do domu z dobrze wykonaną pracą.
Uwaga: nie jest wyświetlany żaden komunikat wskazujący na usunięcie. W końcu wszyscy wiedzą, co to
3
znaczy, prawda?Jest to oczywiście bardzo przydatne. Po zakończeniu testowania można użyć
3
plików tymczasowych i nie trzeba ich później czyścić, ponieważ są to pliki jednorazowe.źródło
Commodore 64 BASIC
NEW
usuwa program.źródło
Bash, 12
Uwaga: jest to destrukcyjne.
To popularna bomba typu widelec. Wykładniczo zjada całą pamięć i PID blokuje system. Twardy restart pozwoli na ponowne uruchomienie kodu, ale dlaczego miałbyś to zrobić?
Bash, 10
W przypadku dwóch mniej znaków, to zjada pamięć liniowo.
Bash, 7
w
jest wybierany jako najkrótszy plik wykonywalny, jaki mogłem wymyślić.To po prostu usuwa zmienną ścieżki, aby powłoka nie mogła znaleźć
/usr/bin/w
następnym razem. Ponowne uruchomienie powłoki naprawia to, ponieważ ścieżka jest zwykle przechowywana~/.profile
źródło
:(){ :&};:
nie powinienem jeść swojej pamięci. Zatrzymuje się, gdy tylko rozwinie się, więc jest zawszeO(1)
aktywny. Zrobiłeś towhile(fork());
, co zjadłoby twoją pamięć liniowo, jest odpowiednikiemfork(); while(1);
.:(){
....DO#
Najkrótszy kod do usuwania siebie
Kod powodujący, że staje się niezauważalny w interfejsie użytkownika
źródło
C ++ 71
Plik wykonywalny „golf” nie ma pozwolenia na uruchomienie następnym razem.
JavaScript / HTML 137, 145 z testem konsoli
źródło
h
zostanie wykonana tylko raz. Musisz go wywołać skądinąd (jak sądzę, analogicznie do uruchamiania programu). Powiedzieć<button onclick="h();">
.function h(){h=0}
?#include <sys/stat.h>
możesz uzyskaćchmod
bezpośredni dostęp do funkcji, oszczędzając sporo bajtów (<stdlib.h>
nie jest już potrzebne i nie jestsystem
). Również niereturn
jest potrzebne.Nazywam się Shell ... PowerShell
Klasyczny komunikat autodestrukcyjny:
źródło
Bash (5)
Zakładając, że nie masz spacji w nazwie pliku.
źródło
sh
Uruchomi się tylko raz (i wyświetli „Witaj, świecie!”, Jeśli działa), nawet jeśli ponownie zainstalujesz system i ponownie umieścisz skrypt.
EDYCJA: Pomyślałem, że wydam również skrypt za runonce. Nic specjalnego, ponieważ nie miało być wydane w żaden sposób, ale cokolwiek.
Jak również schemat bazy danych
Dane są przechowywane w bazie danych Heroku, możesz je sprawdzić , jeśli chcesz. Nie sprawdzam danych przechowywanych w bazie danych, są one przechowywane wyłącznie w celu umożliwienia wykonania kodu raz.
źródło
pg_query_params
prawie chroni przed wstrzyknięciem SQL. Nie zostanie on jednak zapisany, ponieważ'; DROP TABLE users;--
nie jest prawidłowym adresem IP (inet
akceptuje tylko adresy IP), a zatem jeśli masz fałszywyX-Forwarded-For
nagłówek, twoja wizyta nie zostanie zapisana. Nie uważam tego za problem.PHP,
2220 znakówEDYCJA: Usunięto dwa znaki na końcu na komentarze.
źródło
<?unlink(__FILE__);
trailing?>
nie jest wymagany<?=
lub tag początkowy nie został rozpoznany.<?
+ spacja jest również w porządku. Po krótkim tagu nie można użyć litery.Ruby, 14 lat
Przepisuje kod źródłowy jako nazwę programu.
źródło
.rb
a nawet jeśli jego nazwa to „IO.write $ 0, $ 0 # .rb”, to nie zadziała, ponieważ podczas pisania będzie zawierać pełną ścieżkę.gem
iirb
są programami Ruby bez rozszerzenia.ruby foo
iruby foo.rb
będzie działać tak samo z shebang lub bez../foo
oraz./foo.rb
(zakładając, że są one wykonywalne) zarówno zakończy się niepowodzeniem bez shebang, jak i odniesie sukces (przy założeniu poprawnego kodu itp.).Partia (6 znaków)
Zakłada się, że mamy pozwolenie na usunięcie pliku, i oczywiście można to zrobić w systemie Windows (może także MS-DOS).
źródło
Bash
98 znakówUruchomi się tylko raz, ponieważ port jest zablokowany na zawsze.
źródło
0
jest to specjalny port (jest zarezerwowany). Po uruchomieniu tego na komputerze mogę otworzyć go wiele razy. Jest to również port< 1024
, co oznacza, że wymaga dostępu do konta root, aby można go było słuchać.nc -l 1&
rozwiąże problem0
i będzie o jeden bajt krótszy, ponieważ ostatnie miejsce nie jest potrzebne.NodeJS - 33 bajty
źródło
fs
i bieżącą nazwę pliku__filename
oraz usuwa tę nazwę pliku z systemu plików.Partia, 7 znaków
Zapisz niezapisaną pracę przed wypróbowaniem tego.
Przyjmuje system 64-bitowy lub 32-bitowy z pamięcią RAM <2 GB. Należy go zapisać w pliku .bat lub .cmd przed uruchomieniem, samo wpisanie go w cmd.exe nie będzie działać.
Zużywa pełny rdzeń procesora i wypełnia pamięć RAM z szybkością kilkuset megabajtów na sekundę. Jeśli nie zatrzymasz go na czas (Menedżer zadań), zajmie on każdy bajt pamięci RAM na twoim komputerze, cały system zamrozi się i nie będziesz mógł nic zrobić, zanim wymusisz zamknięcie i ponowne uruchomienie komputera przez cięcie zasilanie lub przytrzymanie przycisku zasilania.
Wszystkie kredyty trafiają do txtechhelp na StackOverflow. Zobacz więcej informacji tutaj: https://stackoverflow.com/q/23284131/1955334
źródło
Oto kilka. W przeciwieństwie do wielu, nie są one destrukcyjne, tylko kreatywne i niekonwencjonalne.
Grzmotnąć
Ten jest dość prosty. Zmienna
$REPLY
jest tworzona niejawnie przezread
, ale wypełniona pustym ciągiem znaków. Ten pusty ciąg jest następnieprintf
zapisywany w bieżącym skrypcie. Jest to raczej zaciemniony odpowiednik:Pakiet Windows
Drugi w zasadzie kopiuje dane wejściowe konsoli, odczytane z
nul
, do bieżącego pliku.źródło
Sinclair BASIC
Przenosi adres programu BASIC w pamięci poza miejsce, w którym powinien być (203), aby tłumacz znalazł nieprawidłowe dane.
źródło
SQL
SQL Fiddle
źródło