Objetivo
O objetivo deste desafio é escrever um código que será executado uma vez e apenas uma vez. Isso significa basicamente que danifica o programa, script ou ambiente de alguma forma. Se reiniciar, o sistema permitirá que o código seja executado novamente, o que é permitido.
Pontuação
Número de votos. Todas as premissas devem estar claramente listadas. Quaisquer respostas que acabem de iniciar uma reinicialização ou parada serão desqualificadas.
Regras adicionais porque Greg Hewgill é um semideus
Nenhum acesso root é permitido.
Data final
O concurso será encerrado em 31 de maio de 2014.
Editar
Este concurso foi alterado para concurso de popularidade.
popularity-contest
stateful
ojblass
fonte
fonte
vi
em um único ambiente de terminal tem esse efeito, não há escapatória, a menos que você reinicie :) Apenas uma piada aqui.echo "If you try to execute me again, it means you are an idiot.";
<- Ninguém executará mais de uma vez: PRespostas:
Vigília
Finalmente, um caso de uso para o Vigil!
Trecho da "especificação da linguagem":
Existem outras maneiras de fazer isso, porque o Vigil fornece as palavras-chave
implore
eswear
que são basicamente juramentos de adesão a determinadas condições pré e pós:fonte
Praticamente qualquer distribuição Linux, 9 caracteres
Este é um clássico!
Coloque isso em um arquivo e execute-o:
Aaand se foi!
Quanto ao que está acontecendo: eu realmente estou apenas correndo
rm
!#!
é chamado de shebang . E se você colocar um desses itens seguido por um caminho para algum executável como a primeira linha do seu script, o carregador do programa executará seu arquivo de script com o que você escreveu lá - o padrão é geralmente#!/bin/bash
ou#!/bin/sh
(Bourne-again shell / Bourne shell) . O primeiro argumento passado para esse script será o próprio nome do arquivo (é por isso que você vê tantas soluções, incluindo%0
or$0
e gostos aqui); portanto, fazendo com que meu arquivo contenha#!/bin/rm
e execute, tudo o que estou fazendo é passar o nome do arquivo pararm
.fonte
#!
sequência inicia um shebang, que identifica qual intérprete você usará para o script - normalmente/bin/bash
. Aqui, Flonk usou/bin/rm
como "intérprete".rm
é um programa que apaga arquivos. porque o Linux pensa que queremosrm
ser um intérprete, ele passa o nome do arquivo como argumento. portanto, o arquivo se exclui./foo mbox
binário x86, 4 bytes
Suposição: deve ser executado em uma CPU Pentium P5.
A instrução acima é comumente conhecida como bug F00F . Ele tenta executar uma instrução inválida, prefixada com lock .
Isso congela a CPU completamente (nem uma parada nem uma reinicialização) e nem sequer requer acesso root.
fonte
Bash, 5
Trunca-se no comprimento zero.
Se o nome do arquivo não contiver espaços,
>$0
funcionará por 3 caracteres !fonte
$IFS
para caracteres bash e curinga para bash e ksh88. Um script she-bang less geralmente será interpretado pelo sh do sistema, mas alguns shells, incluindo bash e ksh88, os interpretarão em um filho deles.gzip
Para muito aborrecimento às pessoas acostumadas a ferramentas de linha de comando não destrutivas,
gzip
por padrão, arruina o arquivo original, substituindo-o por uma versão compactada em gzip (adicionando um sufixo).Essa é uma variação da
#!/bin/rm
opção, exceto que esta é recuperável por intervenção humana manual (solicitegunzip
). Como um bônus especial, o arquivo resultante é muito maior que o original (a diferença depende do tamanho do nome do arquivo).Aviso: a localização de
gzip
pode variar.EDIT: como apontado pelo WChargin, este é mais portátil:
O restante do arquivo pode ter qualquer conteúdo. É essencialmente um arquivo que, quando chamado, se esconde em uma caixa e se recusa a sair até que você o descompacte à força.
fonte
gzip
pode variar" - isso não é código-golfe , então você pode usar#!/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.
Você fez o meu dia, e é 01:00.Bash,
1312Não é o mais curto, mas na verdade não exclui o arquivo nem torna o sistema inutilizável.
Se o nome do arquivo não contiver espaços, você poderá remover as aspas para salvar 2 caracteres.
Explicação
Ele remove todas as permissões (
rwx
) de si mesmo. Quando você tenta executá-lo ou até mesmo exibir seu código uma segunda vez, sem restaurar manualmente as permissões, ele diz algo comoRestaure as permissões com
Versão antiga
Remove apenas as permissões de execução, mas um caractere a mais (essa era uma pergunta sobre código-golfe antes de ser alterada para concurso de popularidade ):
Versão sorrateira de Łukasz Niemier
fonte
chmod 0
funciona muitoa
e salvar ainda três caracteres:chmod 0 a
#!/bin/chmod 0
6800 código de máquina - 1 byte
Isso é conhecido como HCF ou Halt and Catch Fire
fonte
Shell + sed, 16 bytes
Não é tão destrutivo quanto algumas das outras respostas ;-)
Este script insere um comentário
#
no início de cada linha:fonte
sed -i g $0
?Commodore 64 BASIC
Este não exclui o programa.
De acordo com o mapa de memória do Commodore 64 , o endereço
2048
não é utilizado, mas deve conter um valor igual0
para que o programa BASIC possa ser EXECUTADO.fonte
poke a, b
é equivalente ao código C*((unsigned char *)a) = b;
.0
byte é usado para marcar o final das linhas de código; portanto, o endereço 0x800 provavelmente precisa de um para marcar o início da primeira linha de código.Suposição: executando o Solaris, conectado como root
fonte
Python, 18
Trunca o arquivo, abrindo-o no modo somente gravação.
fonte
__file__
refere-se ao seu próprio nome de arquivo). A abertura now
modo trunca o arquivo, basicamente o limpa.with open("myfile.txt","r") as thefile:
e seu código de manipulação de arquivos fechará automaticamente o arquivo quando você terminar.open("f.py","w")
.Lote: 5 bytes
É basicamente o forkbomb para Windows.
O aplicativo inicia seu primeiro argumento duas vezes. Não execute em um ambiente produtivo;)
fonte
Javascript
A primeira vez que você executá-lo, funcionará bem:
Se você tentar executá-lo mais (mesmo se atualizar), receberá um erro:
fonte
eval
, mas então ele não vai cumprir este desafioO sistema operacional CMS da IBM, que é um sistema operacional de usuário único que é executado como convidado no VM Hypervisor da IBM, possui uma estrutura de arquivos interessante.
Os arquivos consistem em três elementos, Nome do arquivo, Tipo de arquivo e Modo de arquivo. O modo de arquivo consiste em dois elementos, um único alfabético, que, para facilitar a explicação, pode ser considerado de maneira semelhante à letra da unidade para Windows / MS-DOS e um único dígito numérico.
O dígito numérico único possui um significado, http://publib.boulder.ibm.com/infocenter/zvm/v5r4/index.jsp?topic=/com.ibm.zvm.v54.dmsa3/hcsd0b10127.htm , e para esta tarefa é o número 3 que é interessante:
Portanto, passe horas escrevendo seu script e arquive-o como `LOST FOREVER A3 '. Execute-o, ele funciona pela primeira vez. Partiu para casa, trabalho bem feito.
Observe que nenhuma mensagem é produzida indicando a exclusão. Afinal, todo mundo sabe o que isso
3
significa, não é?Na verdade, é realmente muito útil. Depois que o teste estiver concluído, você poderá usar os
3
arquivos temporários e não precisar limpá-los posteriormente, porque são arquivos de leitura única.fonte
Commodore 64 BASIC
NEW
exclui o programa.fonte
Bash, 12
Nota: Isso é destrutivo.
É o popular bash fork-pump. Ele consome exponencialmente toda a memória e o PID está bloqueando o sistema. Uma reinicialização forçada permitirá que o código seja executado novamente. Por que você deseja fazer isso?
Bash, 10
Por dois caracteres a menos, isso consome sua memória linearmente.
Bash, 7
w
é escolhido como o menor executável em que eu conseguia pensar.Isso simplesmente apaga a variável path, para que o shell não encontre
/usr/bin/w
da próxima vez. Reiniciar o shell o corrige, pois o caminho geralmente é armazenado em~/.profile
fonte
:(){ :&};:
não deve comer sua memória. Para assim que for bifurcada, só há sempreO(1)
ativo. Você já fezwhile(fork());
, o que consumiria sua memória linearmente é o equivalentefork(); while(1);
.:(){
... #C #
Código mais curto para excluir a si próprio
Código para torná-lo imperceptível na interface do usuário
fonte
C ++ 71
O arquivo executável "golf" não tem permissão para executar na próxima vez.
JavaScript / HTML 137, 145 com teste do console
fonte
h
é o que será executada apenas uma vez. Você precisa chamá-lo de outro lugar (análogo à execução de um programa, eu acho). Diga<button onclick="h();">
,.function h(){h=0}
?#include <sys/stat.h>
você, você pode acessarchmod
diretamente a função, economizando alguns bytes (<stdlib.h>
não é mais necessário e nem ésystem
). Além disso, nãoreturn
é necessário.Shell do meu nome ... PowerShell
Mensagem autodestrutiva clássica:
fonte
Bash (5)
Supondo que você não tenha espaços no nome do arquivo.
fonte
sh
Será executado apenas uma vez (e mostra "Olá, mundo!", Se for executado), mesmo se você reinstalar o sistema e colocar o script novamente.
Edição: Eu imaginei que iria lançar um script por trás de runonce também. Nada de especial, pois não deveria ser lançado de qualquer maneira, mas tanto faz.
Bem como o esquema do banco de dados
Os dados são armazenados no banco de dados do Heroku, fique à vontade para verificar a política de privacidade deles, se quiser. Não verifico os dados armazenados em um banco de dados, eles são armazenados apenas para permitir que o código seja executado uma vez.
fonte
pg_query_params
praticamente protege contra injeção de SQL. No entanto, ele não será salvo, pois'; DROP TABLE users;--
não é um IP válido (inet
apenas aceita IPs) e, portanto, se você tiver umX-Forwarded-For
cabeçalho falso , sua visita não será salva. Eu não considero isso um problema.PHP,
2220 caracteresEDIT: Removidos dois caracteres no final por comentários.
fonte
<?unlink(__FILE__);
?>
<?=
ou a tag de início não é reconhecida.<?
+ espaço também está ok. Você simplesmente não pode usar uma letra após a marca curta.Ruby, 14
Ele reescreve o código fonte como o nome do programa.
fonte
.rb
e mesmo se seu nome for "IO.write $ 0, $ 0 # .rb" que não funcione, porque, ao ser escrito, incluirá o caminho completo.gem
eirb
são programas Ruby sem extensão.ruby foo
eruby foo.rb
funcionará da mesma forma com ou sem um shebang../foo
e./foo.rb
(supondo que sejam executáveis) falhará sem shebang e obterá sucesso com ele (assumindo o código correto, etc.).Lote (6 caracteres)
Isso pressupõe que temos permissão para excluir o arquivo e, é claro, isso pode ser feito no Windows (talvez também no MS-DOS).
fonte
Bash
98 PersonagensSó será executado uma vez, porque a porta está bloqueada para sempre.
fonte
0
é uma porta especial (é reservada). Quando executo isso no meu computador, posso abri-lo várias vezes. Além disso, é uma porta< 1024
, o que significa que requer que o acesso root seja ouvido.nc -l 1&
resolveria o problema0
e seria um byte mais curto, pois o último espaço não é necessário.NodeJS - 33 bytes
fonte
fs
e o nome do arquivo atual__filename
e remove esse nome do sistema de arquivos.Lote, 7 caracteres
Salve o trabalho não salvo antes de tentar isso.
Supõe um sistema de 64 bits ou um sistema de 32 bits com <2 GB de memória RAM. Deve ser salvo em um arquivo .bat ou .cmd antes de ser iniciado, apenas inseri-lo no cmd.exe não funcionará.
Consome um núcleo de CPU completo e preenche sua memória RAM a uma taxa de várias centenas de megabytes por segundo. Se você não parar a tempo (o Gerenciador de Tarefas), ele consumirá todos os bytes de RAM do seu computador, todo o sistema congelará e você não poderá fazer nada antes de desligar e reiniciar o computador à força, cortando energia ou mantendo o botão liga / desliga pressionado.
Todos os créditos vão para txtechhelp no StackOverflow para isso, veja mais informações aqui: https://stackoverflow.com/q/23284131/1955334
fonte
Aqui estão algumas. Ao contrário de muitos, estes não são destrutivos, apenas criativos e pouco ortodoxos.
Bater
Essa é bem simples. A variável
$REPLY
é criada implicitamente porread
, mas preenchida com uma sequência vazia. Essa string vazia é entãoprintf
inserida no script atual. É um equivalente bastante ofuscado do seguinte:Lote do Windows
O segundo basicamente copia a entrada do console, de leitura
nul
, para o arquivo atual.fonte
Sinclair BASIC
Move o endereço do programa BASIC na memória para fora de onde deveria estar (203) para que os dados incorretos sejam encontrados pelo intérprete.
fonte
SQL
SQL Fiddle
fonte