Gol
El objetivo de este desafío es escribir código que se ejecutará una vez y solo una vez. Esto significa básicamente que daña el programa, el script o el entorno de alguna manera. Si reiniciar el sistema permite que el código vuelva a ejecutarse, eso está permitido.
Puntuación
Numero de votos. Todos los supuestos deben estar claramente enumerados. Cualquier respuesta que solo inicie un reinicio o detención será descalificada.
Reglas adicionales porque Greg Hewgill es un semidiós
No se permite el acceso de root.
Fecha final
El concurso se cerrará el 31 de mayo de 2014.
Editar
Este concurso ha sido cambiado a concurso de popularidad.
popularity-contest
stateful
ojblass
fuente
fuente
vi
en un solo entorno de terminal tiene este efecto, no hay escapatoria a menos que reinicies :) Solo una broma aquí.echo "If you try to execute me again, it means you are an idiot.";
<- Nadie ejecutará más de una vez: PRespuestas:
Vigilia
¡Finalmente un caso de uso para Vigil!
Extracto de la "especificación del lenguaje":
Hay otras formas de hacer esto, porque Vigil proporciona las palabras clave
implore
yswear
son básicamente juramentos para cumplir ciertas condiciones previas y posteriores:fuente
Casi cualquier distribución de Linux, 9 caracteres
¡Esto es un clásico!
Pon esto en un archivo y ejecútalo:
¡Y se ha ido!
En cuanto a lo que está sucediendo: ¡realmente estoy corriendo
rm
!#!
se llama un tinglado . Y si coloca uno de estos seguido de una ruta a algún ejecutable como la primera línea de su script, el cargador de programas ejecutará su archivo de script con lo que haya escrito allí; el valor predeterminado es usualmente#!/bin/bash
o#!/bin/sh
(Bourne-again shell / Bourne shell) . El primer argumento que se pasa a este script será el nombre del archivo en sí mismo (por lo que verá tantas soluciones incluyendo%0
o$0
y los me gusta aquí); así que al hacer que mi archivo lo contenga#!/bin/rm
y ejecutarlo, todo lo que estoy haciendo es pasar el nombre de archivo de mi archivorm
.fuente
#!
secuencia comienza un shebang, que identifica qué intérprete va a utilizar para el guión, normalmente/bin/bash
. Aquí, Flonk ha utilizado/bin/rm
como "intérprete".rm
es un programa que elimina archivos. porque Linux piensa que queremosrm
ser un intérprete, le pasa el nombre del archivo como argumento. por lo tanto, el archivo se elimina a sí mismo./foo mbox
binario x86, 4 bytes
Supuesto: debe ejecutarse en una CPU Pentium P5.
La instrucción anterior se conoce comúnmente como el error F00F . Intenta ejecutar una instrucción no válida, con el prefijo lock .
Esto congela la CPU por completo (no se detiene ni se reinicia) y ni siquiera requiere acceso a la raíz.
fuente
Bash, 5
Se trunca a la longitud cero.
Si el nombre de archivo no contiene espacios, ¡
>$0
funciona para 3 caracteres !fuente
$IFS
bash y caracteres comodín para bash y ksh88. Una secuencia de comandos sin sheg bang generalmente será interpretada por el sh del sistema, pero algunos shells, incluidos bash y ksh88, los interpretarán en su lugar.gzip
Para mucha molestia para las personas acostumbradas a las herramientas de línea de comandos no destructivas,
gzip
por defecto arruina el archivo original, reemplazándolo con una versión comprimida (agregando un sufijo).Esta es una variación de la
#!/bin/rm
opción, excepto que esta es recuperable por intervención humana manual (llamadagunzip
). Como beneficio especial, el archivo resultante es mucho más largo que el original (la diferencia depende de la longitud del nombre del archivo).Advertencia: la ubicación de
gzip
puede variar.EDITAR: como lo señaló WChargin, esto es más portátil:
El resto del archivo puede tener cualquier contenido. Es esencialmente un archivo que, cuando se llama, se esconde en una caja y se niega a salir hasta que lo desempaquete por la fuerza.
fuente
gzip
puede variar" - esto no es código golf , por lo que puede usarlo#!/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.
Me alegraste el día, y es la 1 de la madrugada.Golpe,
1312No es el más corto, pero en realidad no elimina el archivo ni deja el sistema inutilizable.
Si el nombre de archivo no contiene espacios, puede eliminar las comillas para guardar 2 caracteres.
Explicación
Elimina todos los permisos (
rwx
) de sí mismo. Cuando intente ejecutarlo, o incluso ver su código, una segunda vez, sin restaurar manualmente los permisos, dirá algo comoRestaurar los permisos con
Versión antigua
Solo elimina los permisos de ejecución, pero un char más tiempo (esta fue una pregunta de código de golf antes de que se cambiara a concurso de popularidad ):
Versión furtiva de Łukasz Niemier
fuente
chmod 0
funciona tambiéna
y guardar 3 caracteres:chmod 0 a
#!/bin/chmod 0
Código de máquina 6800 - 1 byte
Esto se conoce como HCF o Halt and Catch Fire
fuente
Shell + sed, 16 bytes
No es tan destructivo como algunas de las otras respuestas ;-)
Este script inserta un comentario
#
al comienzo de cada línea de sí mismo:fuente
sed -i g $0
?Commodore 64 BÁSICO
Este no elimina el programa.
Según el mapa de memoria del Commodore 64 , la dirección
2048
no se utiliza, pero debe contener un valor0
para que el programa BASIC pueda EJECUTARSE.fuente
poke a, b
es equivalente al código C*((unsigned char *)a) = b;
.0
se usa un byte para marcar el final de las líneas de código; entonces la dirección 0x800 probablemente necesita una para marcar el comienzo de la primera línea de código.Supuesto: Ejecución de Solaris, conectado como root
fuente
Pitón, 18
Trunca el archivo abriéndolo en modo de solo escritura.
fuente
__file__
refiere a su propio nombre de archivo). Abrir enw
modo trunca el archivo, básicamente lo borra.with open("myfile.txt","r") as thefile:
y luego su código de manejo de archivos cerrará automáticamente el archivo cuando haya terminado.open("f.py","w")
.Lote: 5 bytes
Básicamente es la bifurcación para Windows.
La aplicación inicia su primer argumento dos veces. No lo ejecute en un entorno productivo;)
fuente
JavaScript
La primera vez que lo ejecutes, funcionará bien:
Si intentas ejecutarlo más (incluso si actualizas), obtendrás un error:
fuente
eval
, pero entonces no cumplirá con este desafíoEl sistema operativo CMS de IBM, que es un sistema operativo de usuario único que se ejecuta como invitado bajo el VM Hypervisor de IBM, tiene una estructura de archivos interesante.
Los archivos constan de tres elementos, Nombre de archivo, Tipo de archivo y Modo de archivo. El modo de archivo consta de dos elementos, un solo alfabético, que para facilitar la explicación puede considerarse de manera similar a la letra de unidad para Windows / MS-DOS, y un solo dígito numérico.
El dígito numérico único tiene significado, http://publib.boulder.ibm.com/infocenter/zvm/v5r4/index.jsp?topic=/com.ibm.zvm.v54.dmsa3/hcsd0b10127.htm , y para esta tarea Es el número 3 lo que es interesante:
Entonces, pasa horas escribiendo tu guión y archívalo como 'PERDIDO PARA SIEMPRE A3'. Ejecútalo, funciona por primera vez. Partió a casa, trabajo bien hecho.
Tenga en cuenta que no se produce ningún mensaje que indique la eliminación. Después de todo, todos saben lo que eso
3
significa, ¿no?En realidad, por supuesto, es muy útil. Puede, una vez que se completen las pruebas, usar los
3
archivos temporales y no tener que limpiarlos después, porque son archivos de lectura única.fuente
Commodore 64 BÁSICO
NEW
elimina el programafuente
Bash, 12
Nota: Esto es destructivo.
Es la popular bomba de bifurcación. Exponencialmente se come toda la memoria y los PID bloquean el sistema. Un reinicio completo permitirá que el código se ejecute nuevamente, ¿por qué querrías hacer eso?
Bash, 10
Por dos caracteres menos, esto consume tu memoria linealmente.
Bash, 7
w
es elegido como el ejecutable más corto que se me ocurre.Esto simplemente borra la variable de ruta para que el shell no pueda encontrar
/usr/bin/w
la próxima vez. Reiniciar el shell lo corrige ya que la ruta generalmente se almacena en~/.profile
fuente
:(){ :&};:
No debería comer tu memoria. Se detiene tan pronto como se bifurca, por lo que solo estáO(1)
activo. Has hechowhile(fork());
, lo que comería tu memoria linealmente es el equivalente defork(); while(1);
.:(){
...C#
Código más corto para eliminar self
Código para que no se note en la interfaz de usuario
fuente
C ++ 71
El archivo ejecutable "golf" no tiene permiso para ejecutarse la próxima vez.
JavaScript / HTML 137, 145 con prueba de consola
fuente
h
es lo que solo se ejecutará una vez. Tienes que llamarlo desde otro lugar (análogo a ejecutar un programa, supongo). Decir<button onclick="h();">
.function h(){h=0}
?#include <sys/stat.h>
usted puede acceder a lachmod
función directamente, ahorrando bastantes bytes (<stdlib.h>
ya no es necesario, y tampoco lo essystem
). Además, noreturn
se necesita.La cáscara de mi nombre ... PowerShell
Mensaje clásico de autodestrucción:
fuente
Golpe (5)
Suponiendo que no tiene espacios en el nombre del archivo.
fuente
sh
Se ejecutará solo una vez (y muestra "¡Hola, mundo!" Si se ejecuta), incluso si reinstala el sistema y vuelve a colocar el script.
EDITAR: Pensé que también lanzaría un script detrás de runonce. Nada especial, ya que no se suponía que fuera lanzado de ninguna manera, pero lo que sea.
Así como el esquema de la base de datos
Los datos se almacenan en la base de datos de Heroku, no dude en consultar su política de privacidad si lo desea. No verifico los datos almacenados en una base de datos, se almacenan únicamente para permitir que el código se ejecute una vez.
fuente
pg_query_params
prácticamente protege de la inyección SQL. Sin embargo, no se guardará, ya'; DROP TABLE users;--
que no es una IP válida (inet
solo acepta IP) y, por lo tanto, si tiene unX-Forwarded-For
encabezado falso , su visita no se guardará. Yo no lo considero un problema.PHP,
2220 caracteresEDITAR: Se eliminaron dos caracteres al final por comentarios.
fuente
<?unlink(__FILE__);
, el arrastre?>
no es necesario<?=
o la etiqueta de inicio no se reconoce.<?
+ espacio también está bien. Simplemente no puede usar una letra después de la etiqueta corta.Rubí, 14
Reescribe el código fuente como el nombre del programa.
fuente
.rb
e incluso si su nombre fuera "IO.write $ 0, $ 0 # .rb", eso no funcionará porque al escribirlo incluirá la ruta completa.gem
yirb
son programas Ruby sin extensión.ruby foo
yruby foo.rb
funcionará igual con o sin shebang../foo
y./foo.rb
(suponiendo que sean ejecutables) fallarán sin shebang y tendrán éxito con él (asumiendo el código correcto, etc.).Lote (6 caracteres)
Esto supone que tenemos permiso para eliminar el archivo y, por supuesto, se puede hacer en Windows (quizás también en MS-DOS).
fuente
Bash
98 PersonajesSolo se ejecutará una vez, porque el puerto está bloqueado para siempre.
fuente
0
es un puerto especial (está reservado). Cuando ejecuto esto en mi computadora, puedo abrirlo varias veces. Además, es un puerto< 1024
, lo que significa que requiere acceso raíz para ser escuchado.nc -l 1&
solucionaría el problema0
y sería un byte más corto, ya que no se necesita el último espacio.NodeJS - 33 bytes
fuente
fs
y el nombre de archivo actual__filename
y elimina ese nombre de archivo del sistema de archivos.Lote, 7 caracteres
Guarde el trabajo no guardado antes de intentar esto.
Asume un sistema de 64 bits o un sistema de 32 bits con <2 GB de memoria RAM. Debe guardarse en un archivo .bat o .cmd antes de iniciarse, simplemente ingresarlo en cmd.exe no funcionará.
Consume un núcleo de CPU completo y llena su memoria RAM a una velocidad de varios cientos de megabytes por segundo. Si no lo detiene a tiempo (Administrador de tareas), consumirá cada byte de RAM en su computadora, todo su sistema se congelará y no podrá hacer nada antes de apagar y reiniciar su computadora por la fuerza. encender o mantener presionado el botón de encendido.
Todos los créditos van a txtechhelp en StackOverflow para esto, vea más información aquí: https://stackoverflow.com/q/23284131/1955334
fuente
Aquí hay una pareja. A diferencia de muchos, estos no son destructivos, solo creativos y poco ortodoxos.
Golpetazo
Este es bastante simple. La variable
$REPLY
se crea implícitamente porread
, pero se llena con una herejía vacía. Esa cadena vacía seprintf
incorpora al script actual. Es un equivalente bastante ofuscado de lo siguiente:Lote de Windows
El segundo básicamente copia la entrada de la consola, leída desde
nul
, en el archivo actual.fuente
Sinclair BASIC
Mueve la dirección del programa BASIC en la memoria lejos de donde debería estar (203) para que el intérprete encuentre los datos incorrectos.
fuente
SQL
Violín de SQL
fuente