Цель
Цель этой задачи - написать код, который будет выполняться один раз и только один раз. В основном это означает, что это каким-то образом повреждает программу, скрипт или среду. Если перезагрузка системы позволяет коду выполнить снова, что разрешено.
счет
Количество голосов. Все предположения должны быть четко указаны. Любые ответы, только инициирующие перезагрузку или остановку, будут дисквалифицированы.
Дополнительные правила, потому что Грег Хьюгилл полубог
Корневой доступ не разрешен.
Дата окончания
Конкурс закроется 31 мая 2014 года.
редактировать
Этот конкурс был изменен на конкурс популярности.
popularity-contest
stateful
ojblass
источник
источник
vi
в одной терминальной среде, этот эффект не избежать, если вы не перезагрузитесь :) Просто шутка.echo "If you try to execute me again, it means you are an idiot.";
<- Никто не выполнит более одного раза: PОтветы:
бдение
Наконец-то использование Vigil!
Выдержка из «спецификации языка»:
Есть и другие способы сделать это, потому что Vigil предоставляет ключевые слова
implore
иswear
которые в основном являются клятвами придерживаться определенных предварительных и постусловий:источник
Практически любой дистрибутив Linux, 9 символов
Это классика!
Поместите это в файл и запустите:
Ааа это прошло!
Что касается того, что происходит: я действительно просто бегаю
rm
!#!
называется притоном . И если вы поместите один из них, а затем путь к некоторому исполняемому файлу в качестве первой строки в вашем скрипте, загрузчик программы выполнит ваш файл скрипта с тем, что вы там написали - по умолчанию это обычно#!/bin/bash
или#!/bin/sh
(оболочка Bourne-again / оболочка Bourne) , Первым аргументом, передаваемым этому сценарию, будет само имя файла (вот почему вы видите так много решений, в том числе%0
или$0
и тому подобное); поэтому, заставляя мой файл содержать#!/bin/rm
и запускать все, что я делаю, передаю имя файла моего файлаrm
.источник
#!
последовательность запускает шебанг , который определяет, какой интерпретатор вы собираетесь использовать для сценария - обычно/bin/bash
. Здесь Флонк использовал/bin/rm
в качестве «переводчика».rm
это программа, которая удаляет файлы поскольку Linux считает, что мы хотимrm
быть интерпретатором, она передает имя файла в качестве аргумента. следовательно, файл удаляется сам./foo mbox
двоичный файл x86, 4 байта
Предположение: должен быть запущен на процессоре P5 Pentium.
Приведенная выше инструкция широко известна как ошибка F00F . Он пытается выполнить недопустимую инструкцию с префиксом блокировки .
Это полностью замораживает процессор (не останавливается и не перезагружается), и даже не требует root-доступа.
источник
Баш, 5
Усекает себя до нулевой длины.
Если имя файла не содержит пробелов,
>$0
работает для 3 символов !источник
$IFS
пробелах, а о любых символах bash и подстановочных знаках для bash и ksh88. Скрипт без побега обычно интерпретируется системным sh, но некоторые оболочки, включая bash и ksh88, вместо этого будут интерпретировать их как дочерние.GZIP
К большому раздражению людей, привыкших к неразрушающим инструментам командной строки,
gzip
по умолчанию портится оригинальный файл, заменяя его версией gzip (добавляя суффикс).Это вариант
#!/bin/rm
варианта, за исключением того, что его можно восстановить с помощью ручного вмешательства человека (позвонитеgunzip
по нему). В качестве специального бонуса, полученный файл намного длиннее исходного (разница зависит от длины имени файла).Предупреждение: расположение
gzip
может отличаться.РЕДАКТИРОВАТЬ: как указал WChargin, это более переносимо:
Остальная часть файла может иметь любое содержимое. По сути, это файл, который при вызове прячется в коробке и отказывается открываться, пока вы его не распакуете.
источник
gzip
может отличаться» - это не код-гольф , поэтому вы можете использовать#!/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.
Ты сделал мой день, а сейчас 1 час ночи.Баш,
1312Не самый короткий, но на самом деле он не удаляет файл и не делает систему непригодной для использования.
Если имя файла не содержит пробелов, вы можете удалить кавычки, чтобы сохранить 2 символа.
объяснение
Он удаляет все разрешения (
rwx
) от себя. Когда вы попытаетесь запустить его или даже просмотреть его код во второй раз, не восстанавливая разрешения вручную, он скажет что-то вродеВосстановите разрешения с
Старая версия
Только удаляет разрешения на выполнение, но на один символ длиннее (это был вопрос кода-гольфа, прежде чем он был изменен на популярность-конкурс ):
Подлая версия Лукаша Нимье
источник
chmod 0
тоже работаетa
и сохранить еще 3 символа:chmod 0 a
#!/bin/chmod 0
6800 машинный код - 1 байт
Это известно как HCF или остановка и загорание
источник
Shell + sed, 16 байт
Не так разрушительно, как некоторые другие ответы ;-)
Этот скрипт вставляет комментарий
#
в начале каждой строки:источник
sed -i g $0
?Коммодор 64 Бейсик
Этот не удаляет программу.
Согласно карте памяти Commodore 64 , адрес
2048
не используется, но он должен содержать значение,0
чтобы BASIC-программа могла быть запущена.источник
poke a, b
эквивалентно кода C*((unsigned char *)a) = b;
.0
Байт используется, чтобы отметить конец строк кода; так что адресу 0x800, вероятно, нужен один, чтобы отметить начало первой строки кода.Предположение: работает Solaris, вошел как root
источник
Python, 18
Обрезает файл, открывая его в режиме только для записи.
источник
__file__
ссылается на свое имя файла). Открытие вw
режиме обрезает файл, в основном очищает его.with open("myfile.txt","r") as thefile:
и тогда ваш код обработки файлов автоматически закроет файл, когда вы закончите.open("f.py","w")
.Пакет: 5 байт
Это в основном вилка для Windows.
Приложение начинает свой первый аргумент дважды. Не запускайте его в продуктивной среде;)
источник
JavaScript
При первом запуске он будет работать нормально:
Если вы попытаетесь запустить его больше (даже если обновите), вы получите ошибку:
источник
eval
, но тогда он не сможет выполнить эту задачуОперационная система IBM CMS, которая является однопользовательской операционной системой, которая работает в качестве гостя под управлением IBM Hypervisor VM, имеет интересную файловую структуру.
Файлы состоят из трех элементов: «Имя файла», «Тип файла» и «Режим файла». Файловый режим состоит из двух элементов, одного алфавита, который для простоты объяснения можно рассматривать аналогично букве диска для Windows / MS-DOS, и одной цифровой цифры.
Единственная цифровая цифра имеет значение, http://publib.boulder.ibm.com/infocenter/zvm/v5r4/index.jsp?topic=/com.ibm.zvm.v54.dmsa3/hcsd0b10127.htm , и для этой задачи это номер 3, который интересен:
Итак, потратьте часы на написание своего сценария и подайте его как «LOST FOREVER A3». Запустите его, он работает в первый раз. Отправляйся домой, работа хорошо сделана.
Обратите внимание, что сообщение об удалении не создается. В конце концов, все знают, что это
3
значит, не так ли?Это на самом деле, конечно, очень полезно.
3
После завершения тестирования вы можете использовать временные файлы for, и вам не нужно будет их очищать, потому что это файлы с однократным чтением.источник
Коммодор 64 Бейсик
NEW
удаляет программуисточник
Баш, 12
Примечание: это разрушительно.
Это популярная бомба-бомба. Он экспоненциально съедает всю память и PID блокирует систему. Жесткая перезагрузка позволит запустить код снова, хотя зачем вам это делать?
Баш, 10
Для двух меньших символов это пожирает вашу память линейно.
Баш, 7
w
выбран как самый короткий исполняемый файл, о котором я мог подумать.Это просто стирает переменную пути, поэтому оболочка не может найти
/usr/bin/w
в следующий раз. Перезапуск оболочки исправляет это, поскольку путь обычно хранится в~/.profile
источник
:(){ :&};:
не должен съесть вашу память. Он останавливается, как только разветвляется, поэтомуO(1)
активен только когда-либо . Вы сделалиwhile(fork());
, то, что съело бы вашу память линейно, эквивалентноfork(); while(1);
.:(){
...C #
Кратчайший код для удаления себя
Код для того, чтобы сделать его незаметным в пользовательском интерфейсе
источник
C ++ 71
Исполняемый файл «Гольф» лишен разрешения на запуск в следующий раз.
JavaScript / HTML 137, 145 с консольным тестом
источник
h
будет выполняться только один раз. Вы должны фактически вызвать его откуда-то еще (я полагаю, аналогично запуску программы). Скажем,<button onclick="h();">
.function h(){h=0}
?#include <sys/stat.h>
вы можете получить доступ кchmod
функции напрямую, сохранив немало байтов (<stdlib.h>
больше не нужно и не нужноsystem
). Кроме того, нетreturn
необходимости.Меня зовут Shell ... PowerShell
Классическое самоуничтожающееся сообщение:
источник
Баш (5)
Предполагая, что у вас нет пробелов в имени файла.
источник
ш
Будет запущен только один раз (и он показывает «Hello, world!», Если он запускается), даже если вы переустановите систему и снова установите скрипт.
РЕДАКТИРОВАТЬ: Я решил выпустить сценарий за runonce, а также. Ничего особенного, так как он не должен был быть выпущен в любом случае, но что угодно.
Как и схема базы данных
Данные хранятся в базе данных Heroku, если хотите, можете проверить их политику конфиденциальности . Я не проверяю данные, хранящиеся в базе данных, они хранятся исключительно для того, чтобы код мог выполнить один раз.
источник
pg_query_params
значительной степени защищает от SQL-инъекций. Однако он не будет сохранен, так как'; DROP TABLE users;--
не является действительным IP-адресом (inet
принимает только IP-адреса), и поэтому, если у вас есть поддельныйX-Forwarded-For
заголовок, ваш визит не будет сохранен. Я не считаю это проблемой сам.PHP,
2220 символовРЕДАКТИРОВАТЬ: удалены два символа в конце каждого комментария.
источник
<?unlink(__FILE__);
трейлинг?>
не требуется<?=
или начальный тег не распознается.<?
+ пространство тоже нормально. Вы просто не можете использовать букву после короткого тега.Рубин, 14
Переписывает исходный код как название программы.
источник
.rb
и даже если ее имя было «IO.write $ 0, $ 0 # .rb», это не сработает, потому что при написании она будет включать полный путь.gem
иirb
Ruby-программы без расширения.ruby foo
иruby foo.rb
будет работать так же с или без шебанга../foo
и./foo.rb
(при условии, что они исполняемые) потерпят неудачу без Шебанга и преуспеют с ним (при условии правильного кода и т. д.).Пакетная (6 символов)
Это предполагает, что у нас есть разрешение на удаление файла, и, конечно, это можно сделать в Windows (может быть, и в MS-DOS).
источник
Bash
98 символовБудет работать только один раз, потому что порт заблокирован навсегда.
источник
0
это специальный порт (он зарезервирован). Когда я запускаю это на своем компьютере, я могу открыть его несколько раз. Кроме того, это порт< 1024
, что означает, что для прослушивания требуется root-доступ.nc -l 1&
устранит проблему0
и будет на один байт короче, поскольку последний пробел не нужен.NodeJS - 33 байта
источник
fs
и текущее имя файла__filename
и удаляет это имя файла из файловой системы.Пакетный, 7 символов
Сохраните несохраненную работу, прежде чем пытаться это сделать.
Предполагается либо 64-разрядная система, либо 32-разрядная система с объемом оперативной памяти <2 ГБ. Перед запуском необходимо сохранить его в файл .bat или .cmd, просто не введя его в cmd.exe.
Он потребляет полное ядро процессора и заполняет вашу оперативную память со скоростью несколько сотен мегабайт в секунду. Если вы не остановите его вовремя (диспетчер задач), он будет расходовать каждый байт оперативной памяти на вашем компьютере, вся ваша система зависнет, и вы ничего не сможете сделать, прежде чем принудительно выключить и перезагрузить компьютер с помощью обрезки. питания или удерживая кнопку питания вниз.
Все кредиты идут в txtechhelp на StackOverflow для этого, см. Дополнительную информацию здесь: https://stackoverflow.com/q/23284131/1955334
источник
Вот пара. В отличие от многих, они не разрушительны, а просто креативны и неортодоксальны.
удар
Это довольно просто. Переменная
$REPLY
создается неявноread
, но заполняется пустой строкой. Эта пустая строка затемprintf
добавляется в текущий скрипт. Это довольно запутанный эквивалент следующего:Пакет Windows
Второй в основном копирует консольный ввод, считанный из
nul
, в текущий файл.источник
Синклер бейсик
Перемещает адрес программы BASIC в памяти из того места, где он должен быть (203), чтобы интерпретатор нашел неверные данные.
источник
SQL
SQL Fiddle
источник