Objectif
Le but de ce défi est d’écrire du code qui ne s’exécutera qu’une fois. Cela signifie fondamentalement que cela endommage le programme, le script ou l'environnement d'une manière ou d'une autre. Si le redémarrage du système permet au code de s'exécuter à nouveau, cela est autorisé.
Notation
Nombre de voix Toutes les hypothèses doivent être clairement énumérées. Toute réponse qui déclenche un redémarrage ou une interruption sera disqualifiée.
Règles additionnelles parce que Greg Hewgill est un demi-dieu
Aucun accès root n'est autorisé.
Date de fin
Le concours se terminera le 31 mai 2014.
Modifier
Ce concours a été changé en concours de popularité.
popularity-contest
stateful
ojblass
la source
la source
vi
dans un environnement de terminal unique, cet effet est impossible, sauf si vous redémarrez :) Juste une blague ici.echo "If you try to execute me again, it means you are an idiot.";
<- Personne ne va exécuter plus d'une fois: PRéponses:
Veillée
Enfin un cas d'utilisation pour Vigil!
Extrait de la "spécification du langage":
Il existe d'autres moyens de le faire, car Vigil fournit les mots-clés
implore
etswear
constitue essentiellement le serment de respecter certaines conditions préalables et postérieures:la source
Pratiquement toutes les distributions Linux, 9 caractères
Celui-ci est un classique!
Mettez ceci dans un fichier et lancez-le:
Aaand c'est parti!
Quant à ce qui se passe: je cours vraiment
rm
!#!
s'appelle un shebang . Et si vous mettez l'un de ceux-ci suivi d'un chemin d'accès à un exécutable comme première ligne de votre script, le programme chargera votre fichier de script avec tout ce que vous avez écrit - la valeur par défaut est habituellement#!/bin/bash
ou#!/bin/sh
(shell Bourne-again / Bourne) . Le premier argument transmis à ce script sera le nom du fichier lui-même (c'est pourquoi vous voyez tant de solutions, y compris%0
ou$0
et j'aime dans ce domaine); Ainsi, en faisant en sorte que mon fichier soit contenu#!/bin/rm
et en l'exécutant, je ne fais que transmettre le nom de fichier de mon fichierrm
.la source
#!
séquence commence un shebang, qui identifie quel interprète vous allez utiliser pour le script - normalement/bin/bash
. Ici, Flonk a utilisé/bin/rm
comme "interprète".rm
est un programme qui supprime des fichiers. Parce que Linux pense que nous voulonsrm
être un interprète, il lui passe le nom du fichier comme argument. par conséquent, le fichier se supprime lui./foo mbox
binaire x86, 4 octets
Hypothèse: doit être exécuté sur un processeur P5 Pentium.
L'instruction ci-dessus est communément appelée le bogue F00F . Il tente d'exécuter une instruction non valide, préfixée par lock .
Cela gèle complètement le processeur (pas d'arrêt ni de redémarrage) et ne nécessite même pas d'accès root.
la source
Bash, 5
Se tronque à zéro.
Si le nom de fichier ne contient pas d'espaces,
>$0
fonctionne pour 3 caractères !la source
$IFS
bash et de joker pour bash et ksh88. Un script de moins-que-rien sera généralement interprété par le système sh, mais certains shells, y compris bash et ksh88, les interpréteront à la place.gzip
Trop d'ennuis pour les personnes habituées aux outils de ligne de commande non destructifs, détruit
gzip
par défaut le fichier d'origine en le remplaçant par une version gzippée (ajout d'un suffixe).Ceci est une variante de l'
#!/bin/rm
option, sauf que celle-ci est récupérable par une intervention humaine manuelle (appelezgunzip
-la). En prime, le fichier résultant est beaucoup plus long que l'original (la différence dépend de la longueur du nom du fichier).Attention: l'emplacement de
gzip
peut varier.EDIT: comme l'a souligné WChargin, c'est plus portable:
Le reste du fichier peut avoir n'importe quel contenu. C'est essentiellement un fichier qui, lorsqu'il est appelé, se cache dans une boîte et refuse de sortir jusqu'à ce que vous le décompressiez de force.
la source
gzip
peut varier" - ce n'est pas du code-golf , vous pouvez donc l'utiliser#!/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.
You made my day, et il est 1h du matin.Bash,
1312Pas le plus court, mais il ne supprime pas le fichier et ne rend pas le système inutilisable.
Si le nom de fichier ne contient pas d'espaces, vous pouvez supprimer les guillemets pour enregistrer 2 caractères.
Explication
Il supprime toutes les autorisations (
rwx
) de lui-même. Lorsque vous essayez de l'exécuter, ou même d'afficher son code, une seconde fois, sans restaurer manuellement les autorisations, il affichera quelque chose comme:Restaurez les autorisations avec
Ancienne version
Supprime seulement les permissions d'exécution, mais un caractère plus long (c'était une question de code-golf avant qu'elle ne soit modifiée en popularité-contest ):
Version sournoise de Łukasz Niemier
la source
chmod 0
travaille aussia
et économiser encore 3 caractères:chmod 0 a
#!/bin/chmod 0
Code machine 6800 - 1 octet
Ceci est connu comme HCF ou Halt and Catch Fire
la source
Shell + sed, 16 octets
Pas aussi destructeur que certaines des autres réponses ;-)
Ce script insère un commentaire
#
au début de chaque ligne:la source
sed -i g $0
vousCommodore 64 BASIC
Celui-ci ne supprime pas le programme.
Selon la mappe de mémoire du Commodore 64 , l'adresse
2048
est inutilisée, mais elle doit contenir une valeur0
telle que le programme BASIC puisse être exécuté.la source
poke a, b
est équivalent au code C*((unsigned char *)a) = b;
.0
octet est utilisé pour marquer la fin des lignes de code; donc l'adresse 0x800 en a probablement besoin pour marquer le début de la première ligne de code.Hypothèse: exécuter Solaris, connecté en tant que root
la source
Python, 18 ans
Tronque le fichier en l'ouvrant en mode écriture seule.
la source
__file__
fait référence à son propre nom de fichier). L'ouverture enw
mode tronque le fichier, le supprime fondamentalement.with open("myfile.txt","r") as thefile:
et ensuite votre code de gestion de fichier fermera automatiquement le fichier lorsque vous aurez terminé.open("f.py","w")
.Lot: 5 octets
C'est fondamentalement le forkbomb pour Windows.
L'application commence son premier argument deux fois. Ne l'exécutez pas dans un environnement productif;)
la source
JavaScript
La première fois que vous l'exécutez, tout se passera bien:
Si vous essayez de l'exécuter davantage (même si vous actualisez), vous obtiendrez une erreur:
la source
eval
, mais il ne remplira pas ce défiLe système d'exploitation CMS d'IBM, qui est un système d'exploitation mono-utilisateur qui s'exécute en tant qu'invité sous le VM Hypervisor d'IBM, possède une structure de fichier intéressante.
Les fichiers se composent de trois éléments: nom de fichier, type de fichier et mode de fichier. Le mode de fichier est constitué de deux éléments, un seul alphabétique, qui, pour faciliter l’explication, peut être considéré de la même manière que la lettre de lecteur pour Windows / MS-DOS, ainsi qu’un seul chiffre.
Le chiffre numérique unique a une signification, http://publib.boulder.ibm.com/infocenter/zvm/v5r4/index.jsp?topic=/com.ibm.zvm.v54.dmsa3/hcsd0b10127.htm , et pour cette tâche c'est le chiffre 3 qui est intéressant:
Passez donc des heures à rédiger votre script et à le classer sous «LOST FOREVER A3». Exécutez-le, cela fonctionne la première fois. Partis à la maison, travail bien fait.
Remarque, aucun message indiquant l’effacement n’est produit. Après tout, tout le monde sait ce que cela
3
signifie, n'est-ce pas?C’est bien sûr très utile. Une fois les tests terminés, vous pouvez utiliser le
3
pour les fichiers temporaires sans avoir à nettoyer, car ce sont des fichiers à lecture unique.la source
Commodore 64 BASIC
NEW
supprime le programme.la source
Bash, 12
Note: Ceci est destructif.
C'est la populaire bombe à la fourche. Il consomme de manière exponentielle toute la mémoire et les PID bloquant le système. Un redémarrage brutal permettra de réexécuter le code, mais pourquoi voudriez-vous le faire?
Bash, 10
Pour deux caractères en moins, cela consomme votre mémoire linéairement.
Bash, 7
w
est choisi comme l'exécutable le plus court auquel je pouvais penser.Cela efface simplement la variable de chemin afin que le shell ne puisse pas trouver
/usr/bin/w
la prochaine fois. Le redémarrage du shell le corrige car le chemin est généralement stocké dans~/.profile
la source
:(){ :&};:
ne devrait pas manger votre mémoire. Il s’arrête dès que la fourche est lancée, ce qui fait qu’il n’ya que de l’O(1)
activité. Vous avez faitwhile(fork());
, ce qui mangerait votre mémoire linéairement équivaut àfork(); while(1);
.:(){
....C #
Code le plus court pour se supprimer
Code pour le rendre invisible dans l'interface utilisateur
la source
C ++ 71
Le fichier exécutable "golf" se voit refuser l'autorisation de s'exécuter la prochaine fois.
JavaScript / HTML 137, 145 avec test de la console
la source
h
est ce qui ne sera exécuté qu'une fois. Vous devez en fait l'appeler ailleurs (comme si vous exécutiez un programme, je suppose). Dis<button onclick="h();">
.function h(){h=0}
?#include <sys/stat.h>
vous, vous pouvez accéderchmod
directement à la fonction en économisant quelques octets (<stdlib.h>
plus nécessaire, ni plussystem
). En outre, nonreturn
est nécessaire.Mon nom est Shell ... PowerShell
Message classique autodestructeur:
la source
Bash (5)
En supposant que vous n'avez pas d'espaces dans le nom du fichier.
la source
sh
Ne fonctionnera qu'une seule fois (et le message "Hello, world!" S’il fonctionne), même si vous réinstallez le système et remettez le script à nouveau.
EDIT: Je pensais publier un script derrière runonce également. Rien de spécial, car ce n'était pas censé être publié de toute façon, mais peu importe.
Ainsi que le schéma de base de données
Les données sont stockées dans la base de données Heroku, n'hésitez pas à consulter leur politique de confidentialité si vous le souhaitez. Je ne vérifie pas les données stockées dans une base de données, elles le sont uniquement pour permettre au code de s'exécuter une fois.
la source
pg_query_params
protège assez bien de l'injection SQL. Toutefois, il ne sera pas enregistré, car il'; DROP TABLE users;--
ne s'agit pas d'une adresse IP valide (inet
accepte uniquement les adresses IP). Par conséquent, si vous avez un faux en-X-Forwarded-For
tête, votre visite ne sera pas enregistrée. Je ne considère pas cela comme un problème moi-même.PHP,
2220 caractèresEDIT: Suppression de deux caractères à la fin par commentaires.
la source
<?unlink(__FILE__);
la traîne?>
n'est pas nécessaire<?=
ou la balise de début n'est pas reconnue.<?
+ l'espace est également ok. Vous ne pouvez pas utiliser une lettre après la balise courte.Ruby, 14 ans
Il réécrit le code source sous le nom du programme.
la source
.rb
et même si son nom est "IO.write $ 0, $ 0 # .rb", cela ne fonctionnera pas car lors de l'écriture, il inclura le chemin d'accès complet.gem
etirb
sont des programmes Ruby sans extension.ruby foo
etruby foo.rb
travaillera la même chose avec ou sans shebang../foo
et./foo.rb
(en supposant qu’ils soient exécutables) échouera sans shebang et réussira (en supposant que le code soit correct, etc.).Lot (6 caractères)
En supposant que nous ayons la permission de supprimer le fichier, nous pouvons bien entendu le faire sous Windows (peut-être aussi MS-DOS).
la source
Bash
98 personnagesNe fonctionnera qu'une fois, car le port est bloqué pour toujours.
la source
0
c'est un port spécial (c'est réservé). Lorsque je lance ceci sur mon ordinateur, je peux l'ouvrir plusieurs fois. De plus, c'est un port< 1024
, ce qui signifie qu'il nécessite un accès root pour être écouté.nc -l 1&
résoudrait le problème avec0
un octet plus court, car le dernier espace n’est pas nécessaire.NodeJS - 33 octets
la source
fs
et le nom de fichier actuel,__filename
puis le supprime du système de fichiers.Lot, 7 caractères
Enregistrez le travail non enregistré avant d'essayer cela.
Suppose un système 64 bits ou un système 32 bits avec <2 Go de mémoire RAM. Doit être enregistré dans un fichier .bat ou .cmd avant son lancement. Il ne suffit pas de le saisir dans cmd.exe.
Il consomme un cœur de processeur complet et remplit votre mémoire RAM à une vitesse de plusieurs centaines de mégaoctets par seconde. Si vous ne l'arrêtez pas à temps (Gestionnaire des tâches), il utilisera chaque octet de RAM de votre ordinateur, tout votre système se figera et vous ne pourrez rien faire avant de forcer votre ordinateur à s'arrêter et à le redémarrer par découpage. alimentation ou en maintenant le bouton d'alimentation enfoncé.
Tous les crédits vont à txtechhelp sur StackOverflow, voir plus d’informations ici: https://stackoverflow.com/q/23284131/1955334
la source
Voici un couple. Contrairement à beaucoup, ceux-ci ne sont pas destructifs, juste créatifs et peu orthodoxes.
Frapper
Celui-ci est assez simple. La variable
$REPLY
est créée implicitement parread
, mais remplie d'une chaîne vide. Cette chaîne vide est ensuiteprintf
insérée dans le script en cours. C'est un équivalent assez obscur de ce qui suit:Lot Windows
La seconde copie essentiellement l’entrée de la console, lue depuis
nul
, dans le fichier actuel.la source
Sinclair BASIC
Déplace l'adresse du programme BASIC en mémoire loin de l'endroit où elle devrait se trouver (203) afin que l'interpréteur trouve les données erronées.
la source
SQL
Violon SQL
la source