Essayez d’écrire du code dans votre langue et faites en sorte qu’il ne réponde plus à notre critère de langage de programmation .
Un langage répond à nos critères (version simplifiée pour ce défi) d’être un langage de programmation si:
- Il peut lire les entrées utilisateur représentant des nuplets d’entiers positifs d’une certaine manière.
- Il peut générer au moins deux résultats possibles différents en fonction de l'entrée.
- Il peut prendre deux entiers positifs et les ajouter (et le résultat peut affecter la sortie).
- Il peut prendre un entier positif et décider s’il s’agit d’un nombre premier (et le résultat peut affecter la sortie).
- Aux fins de ce défi, tout type de sortie qui n'est pas une méthode de sortie autorisée pour un défi normal est ignoré. Donc, peu importe que le programme puisse aussi jouer un morceau de musique, ou poster via HTTP, etc.
- Mise à jour: vous pouvez également choisir une ou plusieurs des méthodes de sortie autorisées et ignorer toutes les autres. Mais vous devez utiliser la même définition partout dans les critères suivants. Et si votre programme peut désactiver plusieurs méthodes de sortie, cela vaut plus de votes positifs.
Des exemples tels que le rendre impossible à sortir ou la désactivation de toutes les constructions de boucle afin qu'il ne puisse pas effectuer de test de primalité et s'assurer que l'utilisateur ne peut pas les réactiver.
Vous devriez laisser une place pour insérer un nouveau code. Par défaut, c'est à la fin de votre code. Si nous envisageons de placer le code source à cet endroit dans votre réponse et d'exécuter le code complet en tant que programme complet interprétant une nouvelle langue, cette langue ne devrait pas satisfaire aux critères.
Mais le code inséré doit être exécuté comme un langage répondant aux critères:
- Le code inséré doit être grammaticalement identique à quelque chose (disons qu'il s'agit d'un bloc de code dans les critères suivants) qui satisfait généralement les critères, du point de vue de quiconque veut écrire un surligneur de syntaxe. Donc, cela ne peut pas être dans une chaîne, un commentaire, etc.
- Le code inséré doit être réellement exécuté, de manière à répondre aux critères. Donc, cela ne peut pas être dans une fonction non utilisée ou
sizeof
en C, vous ne pouvez pas exécuter seulement une partie non fonctionnelle du code, et vous ne pouvez pas la mettre après une boucle infinie, etc. - Vous ne pouvez pas limiter le nombre de programmes grammaticalement corrects générés de cette manière. S'il existe déjà quelque chose comme une limite de longueur dans la langue que vous utilisez, cela ne devrait pas satisfaire aux critères même si cette limite est supprimée.
- Vous ne pouvez pas modifier ou "utiliser" le contenu des entrées / sorties, mais vous pouvez empêcher leur accès.
- Ces critères ne s'appliquent généralement qu'aux langues sans I / O explicite:
- Votre code doit rediriger la saisie de l'utilisateur (qui contient des informations de longueur arbitraire) vers le code inséré, si un bloc de code n'est généralement pas en mesure d'obtenir la saisie de l'utilisateur directement / explicitement dans la langue que vous utilisez.
- Votre code doit imprimer la valeur renvoyée du code inséré, si un bloc de code n'est généralement pas en mesure de produire des éléments directement / explicitement dans la langue que vous utilisez.
- Si vous imprimez la valeur renvoyée et que celle-ci est saisie dans la langue que vous utilisez, le type renvoyé devrait pouvoir avoir 2 valeurs pratiquement possibles. Par exemple, vous ne pouvez pas utiliser le type
struct {}
oustruct {private:int x;}
en C ++.
C'est un concours de popularité. La réponse valide la plus votée (personne n'a donc repéré une erreur ou toutes les erreurs sont corrigées) gagne.
Des clarifications
- Vous ne devez pas modifier le code dans le formulaire texte, mais vous pouvez modifier la syntaxe avant que le code ne soit interprété ou compilé.
- Vous pouvez faire d'autres choses pendant que le code est en cours d'exécution. Mais la raison pour laquelle il ne répond pas aux critères devrait être dans le code inséré lui-même. Cela peut provoquer des erreurs à cause de l'interférence d'un autre thread, mais pas seulement être tué par un autre thread.
- Toutes les spécifications signifient fondamentalement qu'il devrait être grammaticalement conforme aux critères si toutes les fonctions intégrées ne sont pas modifiées mais ne le sont pas réellement. C'est bien si vous trouvez des solutions de contournement non grammaticales, telles que le fait de transmettre correctement les paramètres au bloc de code, mais ne les utilisez pas d'une manière ou d'une autre.
- Encore une fois, le code inséré doit être réellement exécuté. Le code après une boucle infinie ou un crash est considéré comme "non réellement exécuté", donc non valide . Ces réponses pourraient être intéressantes, mais il existe déjà une autre boucle infinie ou des questions bloquantes sur ce site, et vous en trouverez peut-être une plus appropriée. Sinon, envisagez de poser une nouvelle question. Voici des exemples de ces questions:
Classement
var QUESTION_ID=61115/*,OVERRIDE_USER=8478*/;function answersUrl(e){return"https://api.stackexchange.com/2.2/questions/"+QUESTION_ID+"/answers?page="+e+"&pagesize=100&order=desc&sort=creation&site=codegolf&filter="+ANSWER_FILTER}function commentUrl(e,s){return"https://api.stackexchange.com/2.2/answers/"+s.join(";")+"/comments?page="+e+"&pagesize=100&order=desc&sort=creation&site=codegolf&filter="+COMMENT_FILTER}function getAnswers(){jQuery.ajax({url:answersUrl(answer_page++),method:"get",dataType:"jsonp",crossDomain:!0,success:function(e){answers.push.apply(answers,e.items),answers_hash=[],answer_ids=[],e.items.forEach(function(e){e.comments=[];var s=+e.share_link.match(/\d+/);answer_ids.push(s),answers_hash[s]=e}),e.has_more||(more_answers=!1),comment_page=1,/*getComments()*/(more_answers?getAnswers():process())}})}/*function getComments(){jQuery.ajax({url:commentUrl(comment_page++,answer_ids),method:"get",dataType:"jsonp",crossDomain:!0,success:function(e){e.items.forEach(function(e){e.owner.user_id===OVERRIDE_USER&&answers_hash[e.post_id].comments.push(e)}),e.has_more?getComments():more_answers?getAnswers():process()}})}*/function getAuthorName(e){return e.owner.display_name}function process(){var e=[];answers.forEach(function(s){var r=s.body;s.comments.forEach(function(e){OVERRIDE_REG.test(e.body)&&(r="<h1>"+e.body.replace(OVERRIDE_REG,"")+"</h1>")});var a=r.match(SCORE_REG);a&&e.push({user:getAuthorName(s),score:s.score,language:a[1],lang:jQuery('<div>').html(a[1]).text(),link:s.share_link})}),e.sort(function(e,s){var r=e.score,a=s.score;return a-r});var s={},r=1,a=null,n=1;e.forEach(function(e){e.score!=a&&(n=r),a=e.score,++r;var t=jQuery("#answer-template").html();t=t.replace("{{PLACE}}",e.n=n+".").replace("{{NAME}}",e.user).replace("{{LANGUAGE}}",e.language).replace("{{SIZE}}",e.score).replace("{{LINK}}",e.link),t=jQuery(t),jQuery("#answers").append(t);var o=e.language;/<a/.test(o)&&(o=jQuery(o).text())/*,s[o]=s[o]||{lang:e.language,user:e.user,size:e.size,link:e.link}*/});var t=e/*[];for(var o in s)s.hasOwnProperty(o)&&t.push(s[o])*/;t.sort(function(e,s){return (e.lang.toUpperCase()>s.lang.toUpperCase())-(e.lang.toUpperCase()<s.lang.toUpperCase())||(e.lang>s.lang)-(e.lang<s.lang)});for(var c=0;c<t.length;++c){var i=jQuery("#language-template").html(),o=t[c];i=i.replace("{{PLACE}}",o.n).replace("{{LANGUAGE}}",o.language).replace("{{NAME}}",o.user).replace("{{SIZE}}",o.score).replace("{{LINK}}",o.link),i=jQuery(i),jQuery("#languages").append(i)}}var ANSWER_FILTER="!t)IWYnsLAZle2tQ3KqrVveCRJfxcRLe",COMMENT_FILTER="!)Q2B_A2kjfAiU78X(md6BoYk",answers=[],answers_hash,answer_ids,answer_page=1,more_answers=!0,comment_page;getAnswers();var SCORE_REG=/<(?:h\d|(?!.*<h\d>)p)>\s*((?:[^,;(\s]| +[^-,;(\s])+)(?=(?: *(?:[,;(]| -).*?)?\s*<\/(h\d|p)>)/,OVERRIDE_REG=/^Override\s*header:\s*/i;
body{text-align:left!important}#answer-list,#language-list{padding:10px;float:left}table{width:250px}table thead{font-weight:700}table td{padding:5px}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> <link rel="stylesheet" type="text/css" href="https://cdn.sstatic.net/Sites/codegolf/all.css?v=7509797c03ea"> <div id="answer-list"> <h2>Leaderboard</h2> <table class="answer-list"> <thead> <tr><td></td><td>Author</td><td>Language</td><td>Score</td></tr></thead> <tbody id="answers"> </tbody> </table> </div><div id="language-list"> <h2>Sorted by Language</h2> <table class="language-list"> <thead> <tr><td></td><td>Language</td><td>User</td><td>Score</td></tr></thead> <tbody id="languages"> </tbody> </table> </div><table style="display: none"> <tbody id="answer-template"> <tr><td>{{PLACE}}</td><td>{{NAME}}</td><td>{{LANGUAGE}}</td><td>{{SIZE}}</td><td><a href="{{LINK}}">Link</a></td></tr></tbody> </table> <table style="display: none"> <tbody id="language-template"> <tr><td>{{PLACE}}</td><td>{{LANGUAGE}}</td><td>{{NAME}}</td><td>{{SIZE}}</td><td><a href="{{LINK}}">Link</a></td></tr></tbody> </table>
la source
Réponses:
JavaScript shell
Cela rendra la langue complètement inutilisable.
N'est-ce pas gentil de voir que JavaScript a une telle fonction pour se détruire?
C'est assez simple, la
clear
fonction vide complètement un objet.this
fait référence à l'objet global qui efface tout, y compris les constructeurs et les fonctions.Parce que cela efface tout , faire quoi que ce soit , même de définir un littéral jetteront une erreur, ce qui rend la langue complètement inutile: * environnement REPL pas nécessaire. Utilise le moteur SpiderMonkey (shell non navigateur), le moteur JS d'origine.
la source
clear
fonction semble être un ajout spécifique à SpiderMonkey-shell, pas un JavaScript générique. Cela n'apparaît certainement pas dans la spécification ES5 § Propriétés de la fonction de l'objet global . J'ai essayé ceci avecnode
et j'ai eu un "ReferenceError: clear n'est pas défini". Dans les consoles de Chrome et de Firefox, laclear
fonction efface simplement la console, quels que soient les arguments transmis. Ou peut-être que l'outil que vous avez utilisé était conforme à une version d'ECMAScript antérieure à la version 5.1?Emmental
Je sais que ce n'est pas du code golf, mais le bon outil pour le travail, vous savez ...
Le code de l'utilisateur peut être inséré après le
!
.L'Emmental est un esolang intéressant basé sur la réécriture de l'interprète. Chaque symbole (y compris ceux intégrés) peut être redéfini comme un programme Emmental arbitraire. Le langage repose tellement sur cette fonctionnalité qu'elle ne fournit aucune construction en boucle. Au lieu de cela, vous définissez des commandes récursives qui apparaissent dans leurs propres définitions.
Cette redéfinition se produit via
!
, qui lit un caractère de la pile, puis lit une chaîne de la pile jusqu'à ce qu'il rencontre un;
. Le caractère est ensuite redéfini pour désigner le programme représenté par cette chaîne.Cela signifie que nous pouvons désactiver les fonctions de boucle d’Emmental en se redéfinissant
!
en tant que programme vide. Bien que tous les autres codes de l'Emmental fonctionnent encore parfaitement et que bon nombre des critères d'un langage de programmation soient toujours remplis, il est impossible de redéfinir d'autres symboles. Sans cette fonctionnalité (et donc sans pouvoir boucler), Emmental ne peut plus vérifier si un nombre est premier.la source
PHP
On peut complètement tuer PHP en fixant la limite de mémoire à 1.
Il mourra complètement.
Essaye ça:
Cela ne devrait même pas générer d'erreur, car il n'y a pas assez de mémoire pour cela.
Vous pouvez en savoir plus sur la
memory_limit
directiveSi le précédent est invalide, on peut utiliser des tampons de sortie:
Cela supprime complètement toute sortie. Étant donné que le tampon de sortie est toujours ouvert, certaines autres choses laissées accidentellement après le code ne seront pas affichées.
En utilisant l’idée de @fschmengler :
Cela évitera le problème de suppression du tampon de sortie démarré automatiquement, utilisé pour intercepter la sortie à compresser.
Cela évite également que le tampon de sortie ne soit supprimé ou vidé (envoyé au navigateur). Pour ré-imposer cela, un gestionnaire de sortie est ajouté, qui renvoie toujours une chaîne vide.
Courir
ob_end_flush(); echo "Hello, world!";
ne produira rien, mais enverrait la sortie en clairob_start();
.Merci à @LucasTrzesniewski pour avoir exposé ce problème!
la source
while(ob_get_level()) ob_end_flush();
est utilisé dans les frameworks pour vider tous les tampons de sortie éventuellement laissés ouverts par inadvertance.ob_end_flush(); echo "Hello, world!";
This shouldn't even throw any error, since there isn't enough memory for that.
LOL'ed at that :)Code machine x86 en mode réel (=> presque tous les programmes DOS)
c'est à dire
J'espère que vous n'étiez pas trop attaché à votre table d'interruption.
la source
cli
, puis je répare la table d’interruptions, puis je calcule des nombres premiers, etc.?cli
(inp
etoutp
juste pour faire bonne mesure), mais je ne sais pas si cela serait autorisé. par les règlesclear(this);
, la limite de mémoire en PHP, la récursivité). limite en Python, l’environnement en bac à sable en Python et beaucoup d’autres), je ne verrais pas cela comme un problème.Java
Edit: les contre-mesures font de ce géant :(
Redirige stdin et stdout vers des flux null et remplace les arguments par un tableau vide. Utilise également d’énormes quantités de piratages de réflexion pour s’assurer que l’IO standard est réellement caché. Enfin, il définit un gestionnaire de sécurité pour s'assurer que l'IO standard ne peut pas être recréé, ce qui empêche les programmes de définir le code de sortie.
la source
Lua
En Lua,
_ENV
est l’environnement dans lequel toutes les variables globales, fonctions, tables, etc. sont stockés. Défini comme chaîne vide, vous ne pouvez rien définir de nouveau et toutes les fonctions et variables sont effacées. Cela signifie que vous ne pouvez rien produire, prendre en entrée ou presque rien faire.la source
_ENV=5
marche? Si c'est le cas, c'est un caractère plus court.Langage de programmation Shakespeare
Dans SPL, l'analyseur intégré téléchargé avec le programme suit des règles très spécifiques concernant ce qui peut se produire dans le script. L'une de ces règles est que seuls deux personnages peuvent être sur scène à la fois. De plus, faire sortir un personnage de la scène qui n’a jamais été sur scène le confondra. Il en va de même pour l'ajout d'un personnage à la scène qui est déjà sur scène. Lorsque l'analyseur reçoit une erreur, il refusera de FAIRE TOUT autre chose; vous devez littéralement arrêter complètement le programme et l'analyseur, puis tout redémarrer.
PS Si vous ne savez pas comment cette langue fonctionne, cherchez-la sur Google. C'est génial.
la source
Petite conversation
Je ne suis pas sûr que cela soit admissible:
Cela supprime tout l'environnement d'exécution en suspendant le moteur d'objet. Le seul moyen de résoudre ce problème consiste à forcer la fin du processus et à redémarrer à partir de la sauvegarde.
Pour ceux qui ne le savent pas, le fonctionnement de [Visual Works] Smalltalk est légèrement étrange. C'est comme un mini-OS. Lorsque vous démarrez Smalltalk, vous chargez une "image de mémoire" dans la RAM et il continue de s'exécuter là où il s'était arrêté. L'ensemble de l'EDI Smalltalk est écrit en Smalltalk et est modifiable de manière dynamique.
En particulier,
Smalltalk
est un dictionnaire contenant toutes les variables globales. Plus particulièrement, chaque fois que vous déclarez une nouvelle classe, une variable globale portant ce nom est créée, pointant vers l'Class
objet de votre nouvelle classe. Ainsi, la définitionSmalltalk
deNil
(essentiellement nul) supprime toutes les classes de l’ensemble du système. Même les gestionnaires d'événements de l'interface graphique vont poof.Je n'ai aucune idée pourquoi cette variable est même accessible en écriture. Probablement parce que c'est une variable globale, et existe donc comme une entrée à l'intérieur de lui-même. (Avez-vous déjà mal à la tête? Ai-je déjà mentionné que chaque objet a une classe et que les classes sont des objets; chaque classe a donc une classe? La classe d'une classe s'appelle une métaclasse, mais une métaclasse est aussi un objet, qui a donc une classe...)
Vous pourriez probablement obtenir un effet similaire en effaçant le dictionnaire plutôt que de le remplacer par null. En effet, vous pouvez coder pour supprimer toutes les classes du système, ce qui vous empêche de faire quoi que ce soit. Mais puisque le compilateur Smalltalk est aussi une classe ... tout ce qui casse le langage casse aussi l’ensemble de l’IDE, alors ...
la source
nil
place deNil
Pharo.true become: false
, mais je pense que cela ne fonctionne pas dans les versions plus récentes du langage. Vous pourriez tuer SmallTalk / V 286 de cette façon.Haskell
Il y a deux possibilités ici.
Idée ennuyeuse n ° 1: Définir
main
pour ne rien faire. Maintenant, quel que soit le code que vous écrivez, il ne pourra jamais être exécuté. (Sauf si vous l'exécutez manuellement à partir de la réplique.)Idée ennuyeuse n ° 2: Définir un module sans exportation publique. Maintenant, peu importe le code que vous écrivez, il ne pourra jamais être exécuté.
Idée intéressante: Désactivez toutes les importations.
Maintenant , vous pouvez définir des fonctions qui sont visibles et peuvent être exécutés ... mais ils ne peuvent rien faire. Tous les types et fonctions Haskell standard sont maintenant masqués. (À l'exception de quelques éléments très liés à la langue.)
Plus particulièrement, vous ne pouvez effectuer aucune E / S. Vous ne pouvez pas non plus faire d'arithmétique de précision machine. (Depuis
Int
,Double
etc ne sont plus définis.)Vous pouvez toujours écrire des fonctions lambda-calcul qui effectuent des calculs réels. Vous ne pouvez pas obtenir de données dans ou hors de la chose. Mais vous pouvez bien sûr écrire un autre module séparé qui appelle le
Fubar
module ci-dessus et effectue des E / S en son nom (prouvant ainsi que le code s'exécute et fait des choses).Quelques subtilités:
La
foo = foo
déclaration fictive est nécessaire pour empêcher quiconque d'ajouter des importations supplémentaires. (Les importations ne peuvent pas apparaître après les déclarations.)Il existe différentes extensions de langage Haskell non standard qui vous permettraient de sortir de cette situation. Mais les extensions de langage doivent être activées avec un pragma de compilation en haut du fichier. (Ou avec un commutateur de ligne de commande pour le compilateur. Je ne peux pas vraiment empêcher cela!)
la source
foobar
, l'orthographe que vous avez utilisée a des ... connotations non voulues.PostScript
Oui, PostScript est un langage de programmation. De plus, c'est un langage de programmation où toutes les constructions de langage sont des fonctions définies par le système, qui peuvent être redéfinies ...
En anglais:
Magic
.systemdict
, ajoutez la même clé àMagic
, avec une définition vide ("{}
").Magic
sur le haut de la pile de dictionnaires.À partir de ce moment, chaque commande en langage PostScript est définie pour ne rien faire. Autant que je sache, il est impossible d'échapper à cette condition.
(Techniquement, vous ne "détruisez" pas les anciennes définitions, vous ne faites que les observer. Si vous pouviez quand même exécuter
end
, cela sortiraitMagic
de la pile de dictionnaires, effacerait toutes les commandes et vous redonnerait la vie. Mais depuisend
lui-même est également ombragé ... il ne fera rien maintenant.)Notez que toutes les commandes seront toujours exécutées ... c'est juste qu'elles sont maintenant définies pour ne rien faire. Vous n'obtiendrez aucune erreur, c'est que rien ne se passera. (Et bien, je suppose que le débordement de pile finira par arriver ...)
la source
Tout programme s’exécutant sous Linux / x86 (-64)
Ce programme est écrit en C, mais il peut perturber l'exécution de tout programme exécuté sous Linux / x86 (-32 ou -64). Vous l'ajoutez à l'invocation de ligne du programme que vous souhaitez interrompre.
Il utilise l’API du débogueur pour empêcher le programme cible de produire une sortie. Plus précisément, tous les appels système pouvant communiquer avec le monde en dehors du processus (le plus évidemment
write
, bien sûr, mais aussiopen
lors de la création d'un fichier, la majeure partie de l'API de socket,kill
lorsqu'il est appliqué à un autre processus, ...) échoueront. comme s'ils n'étaient pas implémentés._exit
est autorisé, mais le code de sortie est écrasé par un zéro.Contrairement à l'édition précédente de cette réponse, de nombreux programmes peuvent être presque terminés dans ces conditions; c'est juste que tout leur travail est gaspillé. Par exemple, si vous le faites
./no-syscalls /bin/ls
(en supposant que GNU coreutilsls
), il lit tout le répertoire et le formate, puis tous leswrite
appels destinés à produire une sortie échouent. (Cependant, tout ce qui doit ouvrir un canal de communication bidirectionnel, comme tous les clients X11, échouera à ce moment-là. Je pensais autorisersocket
mais passend
, mais il semblait trop probable que des échappatoires soient créées.)Il existe plusieurs options de ligne de commande pour modifier le comportement;
Les programmes liés dynamiquement ne sortiront même pas de l'éditeur de liens dynamique en
-e
mode.-S
ouvre évidemment un énorme trou dans la politique, mais il peut être amusant de regarder des programmes se plaindre de rien fonctionner, par exempleVous devez lire la sortie du journal avec
/usr/include/asm*/unistd.h
open dans une autre fenêtre, car c'est déjà assez long.Malheureusement, les interfaces de débogueur utilisées par cette dernière ne sont que faiblement cohérentes entre les implémentations Unix et sont intrinsèquement spécifiques au processeur. Il serait relativement simple de le porter sur d'autres architectures de CPU (ajoutez juste les définitions appropriées de
SYSCALL_*_REG
), et il est probablement possible de le porter sur n'importe quel système Unixptrace
, mais vous devrez peut-être utiliser la liste blanche syscall de manière exhaustive, ainsi que gérer les divergences. dansptrace
.la source
-DNO_EXIT
mode s'adresse aux personnes qui se sentent comme vous. Aucune sortie significative n'est possible dans ce mode.strace
?Texas
Je ne suis pas sûr que cela fonctionnera réellement, mais en théorie, cela devrait être considéré
\
comme un personnage d'évasion ne vous laissant aucun moyen de le réparer. Normalement TeX peut lire et écrire des fichiers, maintenant il ne peut rien écrire qui dépende de la logique. Ainsi, le langage est maintenant cassé comme défini par OP.EDIT: Autres commandes kill issues des commentaires (même si les deux peuvent enfreindre la règle code-must-be-execute):
\def\fi{}\iffalse
par smpl crée une branche non fermable si\catcode13=9%
par iwillnotexist idonotexist crée un commentaire sans finla source
\def\fi{}\iffalse
. Je ne peux pas poster de réponses à ce sujet car il faut au moins 10 représentants de ce site, mais cela ne permettra plus la sortie.\fi
sa signification d'origine, non? Ainsi, la langue n'est pas cassé au-delà de toute réparation.\fi
est une primitive TeX. Et non, vous ne pouvez rien redéfinir à ce stade,\iffalse
a été appelé.\catcode13=9%
que casserait complètement le langage (tout ce qui suit%
est commenté et les nouvelles lignes (ASCII char 13) sont ignorées, le commentaire s'étend donc à l'infini), je voulais le poster ici. Mais vous avez déjà une commande légèrement plus longue ici.Rayure
Le
when [timer v] > (0)
sera exécuté dès que le code est initialisé, ce qui, si vous êtes dans l'éditeur, est avant même de commencer le code. Lewhen I receive (join[][])
provoquera une erreur d'être jeté chaque fois que quelque chose est diffusé, une pause exécution de code si vous avez la version Developer de Flash. Labreak
fonction créera des clones et déclenchera l'erreur de diffusion. Chaque clone durera deux secondes, puis se supprimera lui-même, mettant la pile à rude épreuve. Et chaque clone répondra àwhen [timer v] > (0)
, en exécutant lebreak
sous - programme et en réinitialisant le chronomètre, ce qui entraînera la réexécution du code du chronomètre. En outre, chaque clone répondra également à chaque erreur de diffusion, ce qui signifie que le nombre d'erreurs par évaluationbreak
est le nombre de clones au carré. Ai-je oublié de mentionner que labreak
fonction arun without screen refresh
coché, ce qui a pour effet de geler, secouer et retarder l’éditeur, ainsi que de saisir et d’allouer de la mémoire. Et maximiser le CPU.Tout code ajouté n'importe où avec cette exécution se trouvera dans l'impossibilité de créer des clones (limite de 300 clones dépassée), ainsi que de chauffer et de planter l'ordinateur en cours d'exécution. Et saisir la mémoire jusqu'à ce qu'il n'y ait plus rien à saisir, laissant les variables se comporter mal.
Et, après un délai trop long pour déclencher le
when [timer v] > (0)
blocage, il fonctionnera toujoursbreak
.Merci à @towerofnix de m'avoir rappelé le
when I receive
problème que j'ai constaté il y a un certain temps et de m'avoir donné l'idée de le fairerun without screen refresh
. Si vous avez aimé ceci, voici l'original: https://codegolf.stackexchange.com/a/61357/43394la source
stop this script
: Pwhen I receive
pépin"?when I receive
bloc chapeau est uniquement conçu pour prendre des entrées dans la liste déroulante. Lejoin[][]
bloc renvoie un type de données que lewhen I recieve
bloc n'est pas conçu pour accepter. Chaque fois que quelque chose est diffusé, tous les blocs du chapeau vérifient et évaluent la valeur de retour du bloc, générant uneincorrect type
erreur.join
bloc.n
(n-1)
n
n
Mathematica / Wolfram Language
Mathematica est un langage interprété dans lequel les noms de commande sont des symboles pouvant être manipulés par le programmeur. Vous ne pouvez pas supprimer les opérateurs intégrés, mais vous pouvez les surcharger ou modifier leur fonction. Ce qui suit brouille la commande "Avec", nécessaire pour l'affectation de variables même en interne. Cette modification empêche le noyau de conserver les arguments non évalués jusqu'à la fin de l'affectation et tue la langue complètement morte.
Si cette commande est exécutée dans une session interactive ou dans un bloc de code, Mathematica ne pourra même pas l'ajouter
1+1
(le message d'erreur résultant concerne une page, donc je ne l'inclurai pas ici).la source
PHP
Je suis surpris que cela fonctionne réellement, mais la fermeture
STDOUT
etSTDERR
supprime toutes les sorties. Pour être sûr qu'ils ne seront pas rouverts, nous avons ouvert/dev/null
trois fois pour réaffecter les descripteurs de fichier 0, 1 et 2:Plus à ce sujet: https://stackoverflow.com/questions/937627/how-to-redirect-stdout-to-a-file-in-php
la source
Lot DOS (avant Windows 95, je crois)
Émis sans argument, cela déconnecte la ligne de commande du terminal. Toute autre tentative de lire une entrée ou de générer une sortie ne fait rien.
Si vous voulez savoir comment utiliser correctement CTTY:
Un fichier de commandes légèrement plus puissant pourrait même répondre au modem et connecter tout ce qui a été appelé à CTTY.
la source
Common Lisp
J'espère que vous n'avez pas besoin de ces parenthèses d'ouverture.
Il s'agit d'une macro de lecteur qui demande au lecteur Lisp de remplacer chaque instance de
(
avec un appel à(lambda (x y) ())
, une fonction qui prend deux arguments et ne retourne rien. Ainsi, par exemple, il se lirait(foo)
commefoo)
, interpréterfoo
comme une variable et ensuite lancer une erreur de parenthèse sans correspondance0
.la source
)
comme quelque chose de breaky! De cette façon, il y aura moins d'erreurs.Rayure
Voici un exemple assez simple qui va bloquer votre navigateur (et, en théorie, votre ordinateur):
Je l'ai laissé fonctionner pendant environ vingt secondes, puis j'ai perdu 2,65 Go de mémoire pour Scratch. Seulement un moment plus tard et 5 Go étaient partis.
Je suggère fortement que vous ayez un moyen de forcer Adobe Flash ou votre navigateur Web à quitter Adobe Flash avant de lancer ceci!
Je voulais vraiment faire une bonne réponse comme celle de
clear(this)
JS, mais malheureusement, Scratch n’a aucun moyen de le faire. N'hésitez pas à mettre à jour ce post (ou à créer le vôtre) si vous trouvez un autre moyen de rendre Scratch inutilisable!la source
Thue
Avec une nouvelle ligne à la fin
Le langage thue repose sur la définition de jeux de règles et un
::=
indique la fin du jeu de règles. Il est impossible de faire RIEN dans Thue sans définir des règles qui le font, donc peu importe ce que vous mettez après::=
, rien ne peut arriver.Réponse alternative
(et ainsi de suite pour tous les caractères de l’Unicode, y compris ceux précédant le
A
caractère et les caractères non imprimables). Cela nécessite l'option de ligne de commande-r
.la source
MATLAB
Le code suivant rend l'environnement complètement inutilisable 1 :
Cela remplace la
builtin
fonction et laclear
fonction avec les nouvelles poignées de fonction anonymes qui reviennent simplement àfalse
chaque fois que vous essayez et appelez ces fonctions. Labuiltin
fonction garantit que s'il y a des fonctions personnalisées que vous écrivez dans Matlab qui sont le même nom que ceux qui sont intégrés à Matlab ( des choses commesum
,max
,min
, etc.), vous êtes en mesure d'appeler ceux - ci sans ambiguïté au lieu des fonctions surchargées . De même,clear
vous donne la possibilité d'effacer toutes les variables actuellement déclarées pour pouvoir recommencer à zéro. En supprimant ces fonctionnalités, vous ne pouvez utiliser MATLAB que si vous redémarrez le programme.Dans MATLAB R2015a, je reçois également le message suivant:
L'espace de travail sont les variables actuellement déclarées dans l'environnement afin que vous puissiez les utiliser pour plus tard. Ceci désactive de manière permanente l'espace de travail. Ainsi, les variables que vous essayez de créer ne seront pas enregistrées. Par conséquent, aucun progrès ne peut être réalisé lors de l'exécution de lignes de code dans MATLAB.
1: le crédit va à l'utilisateur Dev-iL qui a découvert l'idée à l'origine.
la source
feval('clear')
réparer. Ou:s=str2func('clear'); s()
.///
La seule opération est répétée /// substitution de chaîne, comme ceci:
/pattern/replacement/
.Ce code supprime tous les cas
/
. De cette manière, vous ne pouvez pas utiliser la substitution de chaînes répétée. Ainsi, tout ce que vous écrivez après sera imprimé (à l'exception de/
s).Vous pouvez toujours utiliser
\
s, mais cela ne vous aidera pas beaucoup.la source
Befunge-96
Le code de l'utilisateur peut suivre n'importe où après cette séquence, à condition qu'il s'agisse des trois premiers caractères de la source.
La
'
commande (mode chaîne à une séquence) insère la valeur ASCII de l'~
icône dans la pile (c.-à-d. 126),h
puis définit ce que l'on appelle le delta holistique avec cette valeur. Pour ceux qui ne sont pas familiers avec Befunge-96, le Delta holistique est un décalage qui est ajouté à la valeur de chaque octet de commande rencontré par l'interpréteur.Une fois que le delta est défini sur 126, la seule commande valide pouvant être générée est
~
(saisie de caractères), via un octet nul dans la source. Toute valeur autre qu'un octet nul se traduirait par une valeur supérieure à 126 et aucune de ces valeurs ne serait une commande Befunge valide.Je pense qu'il est prudent de dire que cela rendrait inéligible le qualificatif de langage de programmation.
la source
Huer
Et puis, quelque part dans le projet,
Une simple macro avec un nom qui sonne bien, mais dont l’effet est incroyablement frustrant. Le compilateur Boo utilise un pipeline en plusieurs étapes qui commence par l’analyse de la source dans un AST et se termine par la génération de code. (En général. Il peut être reconfiguré pour diverses applications.) Chaque étape intermédiaire effectue diverses opérations sur l'AST.
La phase d'expansion des macros est en cours d'exécution, au cours de laquelle les macros sont exécutées dans le contexte du compilateur. Rappelez-vous le bit dans le dernier paragraphe, à propos de la reconfiguration du pipeline? Si, lors du développement d'une macro, vous appelez une macro qui efface le pipeline, aucune erreur ne sera affichée à l'utilisateur, mais toutes les étapes après le développement de la macro (y compris la génération de code) n'y sont plus. Vous obtenez donc quelque chose qui ressemble à une compilation réussie - aucun message d'erreur ne s'affiche - mais pour une raison quelconque, aucun fichier binaire n'est généré! Garanti de conduire même les meilleurs dépanneurs sur le mur, si vous cachez bien la macro et l'invocation.
la source
NGN / APL
NGN / APL permet de redéfinir les primitives, donc redéfinir (
←
) toutes les fonctions primitives en⊢
("passer à travers": les deux⊢3
et2⊢3
donne3
) rend le langage complètement inutile:Essayez ici.
la source
Ruby (29 caractères)
As 'send' est utilisé en interne à chaque fois qu'une méthode est appelée dans Ruby et que tous les objets héritent de la classe Object. Cela devrait arrêter toute méthode en cours d'exécution.
Fait amusant: Ceci est parfaitement valable en théorie. Mais il semble, pour une raison quelconque, ne pas entraver le langage Ruby. Je ne sais pas pourquoi il est possible d'exécuter ce code et d'utiliser tout de même un environnement Ruby ouvert.
la source
Tcl
Cela supprime tous les mots-clés de la langue sauf
if
etrename
.Le code ci-dessus entraînerait la sortie de tout nouveau code. Il est donc discutable de savoir si le nouveau code inséré est "exécuté". Ci-dessous, une version qui exécute le nouveau code mais ne fait rien car elle modifie tous les mots-clés (à l'exception de
if
etproc
) en une opération non-exécutable:Au lieu de supprimer des mots-clés, ce code les remplace par une fonction qui ne fait rien.
(Remarque: j'utilise très vaguement les "mots-clés" parce que Tcl n'a pas de mots-clés, seulement des fonctions)
la source
if
etrename
après la boucle. Dans la deuxième version, vous devriez également faireproc
une exception.proc
apparaît dans la liste avantputs
. Techniquement, le code devrait également fonctionner sans,rename
mais les commandes intégrées semblent être protégées autrement. Je ne sais pas ce qui se passe, mais le code est testé et fonctionne comme annoncé.rename
. C'était un brainfart de ma part - j'ai oublié d'exclureproc
.if
car être capable de le faireif
seul est quasiment inutile si vous voulez générer une sortie.Hoon
Hoon est un étrange. C'est à peu près tout à fait différent des autres langages de programmation, pas seulement en syntaxe mais en sémantique. Contrairement à des langues comme Hexagony, cependant, ce n'était pas fait pour être ésotérique à dessein.
Hoon compile to Nock , une VM virtuelle basée sur un combinateur minimal. Nock est stupide: la spécification peut être compressée à 340 octets. La seule opération mathématique est l'incrémentation. Tout est un nom: un atome (bignum) ou une cellule (paire de noms), le modèle de mémoire entier étant organisé dans un arbre binaire acyclique immuable. La seule sortie est le nom que votre expression se réduit à.
En raison de la cible de compilation étrange, Hoon est aussi étrange: c'est complètement pur. Hoon compile jusqu'à une expression Nock évaluée sur un "contexte". Le noyau entier et stdlib, ainsi que toutes les variables, sont transmis implicitement au programme par le contexte.
Pour rendre Hoon inutilisable, nous utilisons simplement
=<
"évaluer a dans le contexte de b". Nous évaluons toujours~
ce qui est zéro. Quoi qu’il en soitb
, il ne peut pas changer la valeur à laquelle il se réduit, et comme il ne peut avoir d’effet secondaire, il ne peut pas faire d’entrée ou de sortie.Note latérale: Comme vous ne pouvez pas réellement demander à Hoon (pureté!), Selon les règles, il ne s'agit pas d'un langage de programmation. L'entrée s'effectue via les arguments de la fonction, la sortie via les valeurs de retour (ou
~&
, qui est davantage une fonctionnalité de débogage de printf et est transparente pour le programme).Pour qu’un programme reçoive une entrée dans Urbit, vous écrivez en fait un programme qui renvoie une fonction qui accepte une entrée, et le shell vous demande en votre nom et le transmet au rappel.
la source
Taxi, 2354 octets.
Ce petit programme consiste simplement à faire rouler le taxi dans une grande balade à travers Townsburg, en panne d’essence. Tout code que vous exécutez après cela provoquera rapidement une erreur
error: out of gas
. Et même si vous pouviez atteindre une station-service, ce que je ne pense pas possible, vous ne pourriez pas obtenir d'essence car aucun argent n'a été collecté, car il n'y a pas de passagers.la source
JavaScript dans le navigateur
Eh bien, au moins dans IE11.
Désactive l'écriture dans le document, l'écriture dans la variable globale et le renvoi depuis la fonction.
Commentez si j'ai raté une méthode de sortie!
la source
window.addEventListener('error',function(){});
document
doit toujours être accessible depuis la portée externe dans le code inséré et ne doit pas être remplacé avant que l'exécution du code inséré ne soit terminée.Python 2, incroyablement grand
Cette quantité incroyablement grande de code est une renaissance du
rexec
module ancien (abandonné dans Python 2.3) avec un groupe de nouveaux modules ajoutés à la liste "ok" et un groupe de faiblesses corrigées (y compris laobject.__subclasses__()
méthode qui a créé au moins deux autres logiciels python. réponses invalides).Une bonne partie de ce code (la
__init__
méthode de laRExec
classe et laModuleImporter
classe entière ) est copiée à partir de la bibliothèque standard Python avec de petites modifications.la source
8064 bytes
à propos