Tente escrever algum código em sua linguagem e faça com que não satisfaça mais nossos critérios de ser uma linguagem de programação .
Uma linguagem satisfaz nossos critérios (versão simplificada para este desafio) de ser uma linguagem de programação se:
- Ele pode ler a entrada do usuário representando tuplas de números inteiros positivos de alguma forma.
- Pode gerar pelo menos dois resultados possíveis diferentes, dependendo da entrada.
- É possível pegar dois números inteiros positivos e adicioná-los (e o resultado pode afetar a saída).
- Ele pode pegar um número inteiro positivo e decidir se é um primo (e o resultado pode afetar a saída).
- Para os fins deste desafio, qualquer tipo de saída que não seja um método de saída permitido para um desafio normal é ignorado. Portanto, não importa se o programa também pode tocar uma música ou postar via HTTP, etc.
- Atualização: Você também pode escolher um ou alguns dos métodos de saída permitidos e ignorar todos os outros. Mas você deve usar a mesma definição em todos os lugares nos seguintes critérios. E se o seu programa pode desativar mais de um método de saída - isso vale mais votos.
Exemplos como impossibilidade de saída ou desativação de todas as construções de loop, para que não seja possível fazer o teste de primalidade e garantir que o usuário não possa reativá-las.
Você deve deixar um local para inserir um novo código. Por padrão, está no final do seu código. Se considerarmos colocar o código-fonte nesse local na sua resposta e executar o código completo como um programa completo, o intérprete de um novo idioma, esse idioma não deve atender aos critérios.
Mas o código inserido deve ser executado de maneira semelhante a uma linguagem que atenda aos critérios:
- O código inserido deve ser gramaticalmente o mesmo que algo (digamos, é um bloco de código nos seguintes critérios) que geralmente satisfaz os critérios, da perspectiva de quem deseja escrever um marcador de sintaxe. Portanto, não pode estar em uma sequência, comentário, etc.
- O código inserido deve ser realmente executado, de forma a satisfazer os critérios. Portanto, ele não pode estar em uma função não utilizada ou
sizeof
em C, você não pode apenas executar apenas uma parte não funcional no código e não pode colocá-lo após um loop infinito, etc. - Você não pode limitar o número de possíveis programas gramaticalmente corretos possíveis gerados dessa maneira. Se já existe algo como um limite de comprimento no idioma que você está usando, ele não deve atender aos critérios, mesmo que esse limite seja removido.
- Você não pode modificar ou "esgotar" o conteúdo da entrada / saída, mas pode impedir que eles sejam acessados.
- Esses critérios geralmente se aplicam apenas a idiomas sem E / S explícita:
- Seu código deve redirecionar a entrada do usuário (que contém informações de tamanho arbitrário) para o código inserido, se um bloco de código normalmente não conseguir obter a entrada do usuário direta / explicitamente no idioma que você está usando.
- Seu código deve imprimir o valor retornado do código inserido, se um bloco de código normalmente não é capaz de produzir coisas direta / explicitamente no idioma que você está usando.
- Caso você imprima o valor retornado e ele seja digitado no idioma que você está usando, o tipo retornado deverá ter 2 valores praticamente possíveis possíveis. Por exemplo, você não pode usar o tipo
struct {}
oustruct {private:int x;}
em C ++.
Este é um concurso de popularidade. A resposta válida mais votada (para que ninguém tenha detectado um erro ou todos os erros sejam corrigidos) vence.
Esclarecimentos
- Você não deve modificar o código no formato de texto, mas pode alterar a sintaxe antes que o código seja interpretado ou compilado.
- Você pode fazer outras coisas enquanto o código estiver em execução. Mas a razão de não atender aos critérios deve estar dentro do próprio código inserido. Pode ocorrer um erro devido à interferência de outro encadeamento, mas não apenas ser morto por outro encadeamento.
- Todas as especificações basicamente significam que deve ser gramaticalmente provável que satisfaça os critérios se todos os embutidos não forem alterados, mas não o fizerem realmente. Tudo bem se você encontrar soluções alternativas não gramaticais, como passar os parâmetros para o bloco de código corretamente, mas torná-los incapazes de serem usados de alguma maneira.
- Novamente, o código inserido deve ser realmente executado. O código após um loop infinito ou falha é considerado "realmente não executado", portanto, não é válido . Essas respostas podem ser interessantes, mas já existem outras perguntas infinitas ou repetidas neste site, e você pode encontrar uma resposta mais apropriada. Caso contrário, considere fazer uma nova pergunta. Exemplos dessas perguntas são:
Entre os melhores
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>
fonte
Respostas:
Shell JavaScript
Isso tornará o idioma completamente inutilizável.
Não é legal como o JavaScript tem uma função tão boa para se destruir?
Isso é bastante simples, a
clear
função esvazia completamente um objeto.this
refere-se ao objeto global que limpa tudo, incluindo construtores e funções.Porque isso limpa tudo , fazer qualquer coisa , até definir um literal gera um erro, tornando a linguagem completamente inútil: * O ambiente REPL não é necessário. Usa o mecanismo SpiderMonkey (shell, não navegador), o mecanismo JS original.
fonte
clear
função parece ser uma adição específica do shell do SpiderMonkey, não uma coisa genérica do JavaScript. Certamente não aparece na especificação do ES5 § Propriedades da Função do Objeto Global . Eu tentei issonode
e recebi um "ReferenceError: clear não está definido". No console do Chrome e do Firefox, aclear
função apenas limpa o console, independentemente de quais argumentos são passados. Ou talvez a ferramenta que você usou esteja em conformidade com uma versão do ECMAScript anterior à 5.1?Emmental
Eu sei que isso não é código de golfe, mas a ferramenta certa para o trabalho, você sabe ...
O código do usuário pode ser inserido após o
!
.Emmental é um esolang interessante, baseado na reescrita do intérprete. Cada símbolo único (incluindo os embutidos) pode ser redefinido como um programa Emmental arbitrário. A linguagem depende tanto desse recurso que não fornece nenhuma construção de loop. Em vez disso, você define comandos recursivos que aparecem em suas próprias definições.
Essa redefinição acontece via
!
, que lê um caractere da pilha e, em seguida, lê uma string da pilha até encontrar a;
. O caractere é redefinido para significar o programa representado por essa sequência.Isso significa que podemos desativar os recursos de loop do Emmental, redefinindo-
!
se como o programa vazio. Embora todo o outro código Emmental ainda funcione perfeitamente, e muitos dos critérios de uma linguagem de programação ainda sejam cumpridos, é impossível redefinir mais símbolos. Sem esse recurso (e, portanto, sem poder fazer um loop), o Emmental não pode mais testar se um número é primo.fonte
PHP
Pode-se matar completamente o PHP definindo o limite de memória como 1.
Ele morrerá completamente.
Tente o seguinte:
Isso não deve gerar nenhum erro, pois não há memória suficiente para isso.
Você pode ler mais sobre a
memory_limit
diretivaSe o anterior for inválido, pode-se usar buffers de saída:
Isso remove completamente qualquer saída. Como o buffer de saída ainda está aberto, outras coisas deixadas acidentalmente após o código também não serão mostradas.
Usando a idéia de @fschmengler :
Isso evitará o problema de excluir o buffer de saída iniciado automaticamente, usado para capturar a saída a ser compactada.
Isso também evita que o buffer de saída seja excluído ou liberado (enviado ao navegador). Para reforçar isso, um manipulador de saída é adicionado, que sempre retorna uma string vazia.
Correr
ob_end_flush(); echo "Hello, world!";
não produzirá nada, mas enviará a saída com uma planícieob_start();
.Agradecemos a @LucasTrzesniewski por expor esse problema!
fonte
while(ob_get_level()) ob_end_flush();
é usado em estruturas para liberar todos os buffers de saída que podem ter sido deixados abertos acidentalmente.ob_end_flush(); echo "Hello, world!";
This shouldn't even throw any error, since there isn't enough memory for that.
LOL'ed nisso :)código de máquina x86 em modo real (=> quase qualquer programa DOS)
ie
Espero que você não esteja muito apegado à sua mesa de interrupção.
fonte
cli
, e então eu corrijo a tabela de interrupção e continuo calculando alguns números primos, etc.?cli
(inp
eoutp
apenas por uma boa medida), mas não sei se isso seria permitido pelas regras.clear(this);
, o limite de memória no PHP, a recursão limite em Python, o ambiente de área restrita em Python e muitos outros), eu não veria isso como um problema.Java
Edit: Contra-contramedidas estão fazendo este gigante :(
Redireciona stdin e stdout para fluxos nulos e substitui args por uma matriz vazia. Também usa enormes quantidades de hacks de reflexão para garantir que o IO padrão esteja realmente oculto. Por fim, define um gerenciador de segurança para garantir que o IO padrão não possa ser recriado e que os programas não possam definir o código de saída.
fonte
Lua
Em Lua,
_ENV
é o ambiente em que todas as variáveis globais, funções, tabelas, etc. são armazenadas. Definir como uma string vazia significa que você não pode definir nada de novo, e todas as funções e variáveis são apagadas. Isso significa que você não pode produzir nada, receber informações ou praticamente fazer qualquer coisa.fonte
_ENV=5
? Nesse caso, é um personagem mais curto.Linguagem de programação de Shakespeare
No SPL, o analisador embutido que é baixado com o programa segue regras muito específicas sobre o que pode acontecer no script. Uma dessas regras é que apenas dois personagens podem estar no palco ao mesmo tempo. Além disso, fazer um personagem sair do palco que nunca esteve no palco irá confundi-lo. O mesmo vale para adicionar um personagem ao palco que já está no palco. Quando o analisador recebe um erro, ele se recusará a fazer QUALQUER COISA; você literalmente precisa desligar completamente o programa e o analisador e, em seguida, reiniciar tudo.
PS Se você não tem idéia de como esse idioma funciona, pesquise no Google. É incrivel.
fonte
Conversa fiada
Não tenho certeza se isso se qualifica:
Isso exclui todo o ambiente de tempo de execução, interrompendo o mecanismo de objetos. A única maneira de corrigir isso é forçar o encerramento do processo e reiniciar a partir do backup.
Para quem não sabe, o modo como o [Visual Works] Smalltalk funciona é um pouco estranho. É como um mini-OS. Ao iniciar o Smalltalk, você carrega uma "imagem de memória" na RAM e ela continua sendo executada de onde parou. Todo o IDE do Smalltalk é escrito em Smalltalk e é dinamicamente modificável.
Em particular,
Smalltalk
é um dicionário que contém todas as variáveis globais. Mais particularmente, toda vez que você declara uma nova classe, uma variável global com esse nome é criada, apontando para oClass
objeto da sua nova classe. Portanto, definirSmalltalk
comoNil
(basicamente nulo) exclui todas as classes em todo o sistema. Até os manipuladores de eventos da GUI ficam loucos.Não faço ideia por que essa variável é gravável. Provavelmente porque é uma variável global e, portanto, existe como uma entrada dentro de si. (Sua cabeça ainda está doendo? Eu mencionei que todo objeto tem uma classe e classes são objetos, então toda classe tem uma classe? A classe de uma classe é chamada de metaclasse, mas uma metaclasse também é um objeto, o que, portanto, tem uma aula...)
Você provavelmente poderia obter um efeito semelhante limpando o dicionário em vez de substituí-lo por nulo. De fato, há várias coisas que você pode codificar para excluir todas as classes do sistema, deixando-o incapaz de fazer qualquer coisa. Mas como o compilador Smalltalk real também é uma classe ... qualquer coisa que quebra a linguagem também quebra todo o IDE, então ...
fonte
nil
vez deNil
em Pharo.true become: false
, mas acho que isso não funciona nas versões mais recentes do idioma. Você pode matar o SmallTalk / V 286 dessa maneira.Haskell
Existem algumas possibilidades aqui.
Idéia chata # 1: defina
main
para não fazer nada. Agora, independentemente do outro código que você escreve, ele nunca pode ser executado. (A menos que você o execute manualmente a partir do REPL.)Idéia chata nº 2: defina um módulo sem exportações públicas. Agora, independentemente do outro código que você escreve, ele nunca pode ser executado.
Ideia interessante: desative todas as importações.
Agora você pode definir funções que são visíveis e podem ser executadas ... mas elas não podem fazer nada. Todos os tipos e funções padrão de Haskell agora estão ocultos. (Com exceção de algumas coisas realmente profundamente conectadas ao idioma.)
Mais particularmente, você não pode executar nenhuma E / S. Você também não pode fazer aritmética de precisão da máquina. (Como
Int
,Double
etc, agora estão indefinidos.)Você ainda pode escrever funções de cálculo lambda que realizam algum cálculo real. Você simplesmente não consegue obter ou retirar dados da coisa. Mas é claro que você poderia escrever outro módulo separado que chame o
Fubar
módulo acima e faça E / S em seu nome (provando assim que o código é executado e faz coisas).Algumas sutilezas:
A
foo = foo
declaração fictícia é necessária para impedir que alguém adicione importações adicionais. (As importações não podem aparecer após as declarações.)Existem várias extensões de idioma Haskell não padrão que permitem sair dessa situação. Mas as extensões de idioma precisam ser ativadas com um pragma do compilador na parte superior do arquivo. (Ou com uma opção de linha de comando para o compilador. Na verdade, não posso impedir isso!)
fonte
foobar
, a ortografia que você usou tem algumas ... conotações não intencionais.PostScript
Sim, PostScript é uma linguagem de programação. Além disso, é uma linguagem de programação em que todas as construções de linguagem são funções definidas pelo sistema, que podem ser redefinidas ...
Em inglês:
Magic
.systemdict
, adicione a mesma chave aMagic
, com uma definição vazia ("{}
").Magic
para o topo da pilha do dicionário.A partir deste momento, todo comando da linguagem PostScript é definido para não fazer nada. AFAIK, é impossível escapar dessa condição.
(Tecnicamente, você não está "destruindo" as definições antigas, apenas as obscurece. Se você ainda pudesse executá-las
end
, isso sairiaMagic
da pilha do dicionário, desprotegendo todos os comandos e devolvendo sua vida a você.end
em si também é sombreado ... não fará nada agora.)Observe que todos os comandos ainda serão executados ... é que agora eles estão definidos para não fazer nada. Você não receberá nenhum tipo de erro, apenas nada acontecerá. (Bem, suponho que o estouro da pilha acabe por acontecer ...)
fonte
Qualquer programa em execução no Linux / x86 (-64)
Este programa é escrito em C, mas pode interromper a execução de qualquer programa em execução no Linux / x86 (-32 ou -64). Você o anexa à chamada de linha de comando do programa que deseja interromper.
Ele usa a API do depurador para impedir que o programa de destino produza qualquer saída. Especificamente, todas as chamadas do sistema que podem comunicar algo ao mundo fora do processo (obviamente
write
, é claro, mas tambémopen
ao criar um arquivo, a maior parte da API do soquete,kill
quando aplicada a outro processo, ...) falhará como se não estivessem implementados._exit
é permitido, mas o código de saída é substituído por um zero.Diferentemente da edição anterior desta resposta, muitos programas podem ser executados quase sob essas condições; é que todo o trabalho deles é desperdiçado. Por exemplo, se você o fizer
./no-syscalls /bin/ls
(assumindo o GNU coreutilsls
), ele lê o diretório inteiro e o formata e, em seguida, todas aswrite
chamadas para produzir saída falham. (Qualquer coisa que precise abrir um canal de comunicação bidirecional, no entanto, como todos os clientes X11, falhará nesse ponto. Pensei em permitir,socket
mas nãosend
, mas parecia muito provável abrir brechas.)Existem várias opções de linha de comando para ajustar o comportamento;
Programas vinculados dinamicamente nem sairão do vinculador dinâmico no
-e
modo.-S
obviamente, abre um enorme buraco na política, mas pode ser divertido assistir a programas queixam-se de nada funcionar, por exemploVocê precisa ler a saída do log com
/usr/include/asm*/unistd.h
abrir em outra janela, porque isso já é bastante longo.Infelizmente, as interfaces do depurador que isso usa são fracamente consistentes nas implementações do Unix e são intrinsecamente específicas da CPU. Seria relativamente simples portá-lo para outras arquiteturas de CPU (basta adicionar definições apropriadas de
SYSCALL_*_REG
) e provavelmente é possível portá-lo para qualquer Unix que possuaptrace
, mas talvez você precise mexer com a lista branca do syscall extensivamente, além de lidar com divergências noptrace
.fonte
-DNO_EXIT
modo é para pessoas que se sentem como você. Nenhuma saída significativa é possível nesse modo.strace
?TeX
Não tenho certeza se isso realmente funcionará, mas, em teoria, isso deve se
\
transformar em um caractere de escape, deixando você sem maneira de corrigi-lo. Normalmente, o TeX pode ler e gravar arquivos, agora não pode escrever nada que dependa da lógica. Portanto, o idioma agora está quebrado, conforme definido pelo OP.EDIT: Outros comandos kill retirados dos comentários (embora ambos possam violar a regra de código deve ser executado):
\def\fi{}\iffalse
por smpl cria um ramo que não pode ser fechado\catcode13=9%
por iwillnotexist idonotexist cria um comentário sem fimfonte
\def\fi{}\iffalse
. Não posso postar respostas sobre isso, pois requer pelo menos 10 representantes obtidos neste site, mas isso também não permitirá mais a saída.\fi
seu significado original, certo? Assim, o idioma não está quebrado além de qualquer reparo.\fi
é um primitivo TeX. E não, você não pode redefinir nada neste momento,\iffalse
foi chamado.\catcode13=9%
iria quebrar completamente o idioma (tudo depois%
é comentado e as novas linhas (ASCII, caractere 13) são ignoradas, então o comentário se estende até o infinito), eu queria publicá-lo aqui. Mas você já tem um comando um pouco mais longo aqui.coçar, arranhão
Ele
when [timer v] > (0)
será executado assim que o código for inicializado, o que, se você estiver no editor, é antes mesmo de iniciar o código. Owhen I receive (join[][])
causará um erro para ser jogado a cada hora é transmitido qualquer coisa, parando a execução de código se tiver a versão desenvolvedor do Flash. Abreak
função criará clones e acionará o erro de transmissão. Cada clone único dura dois segundos e se exclui, pressionando a pilha. E todo clone responderá àwhen [timer v] > (0)
, executando abreak
sub - rotina e redefinindo o timer, o que faz com que o código do timer seja executado novamente. Além disso, cada clone também responderá a todos os erros de transmissão, significando que o número de erros por avaliaçãobreak
é o número de clones ao quadrado. Esqueci de mencionar que abreak
função temrun without screen refresh
verificado, fazendo com que o editor congele, sacudir e atrasar, além de capturar e alocar memória. E maximizando a CPU.Qualquer código adicionado em qualquer lugar com essa execução não será capaz de criar clones (limite de 300 clones ultrapassado), além de aquecer e travar o computador que a executa. E pegar memória até que não haja mais nada para pegar, deixando as variáveis se comportando mal.
E, depois que houver muito atraso para acionar o
when [timer v] > (0)
bloco, ele ainda estará em execuçãobreak
.Obrigado a @towerofnix por me lembrar sobre a
when I receive
falha que encontrei há um tempo e por me dar a ideiarun without screen refresh
. Se você gostou, aqui está o original: https://codegolf.stackexchange.com/a/61357/43394fonte
stop this script
ele: Pwhen I receive
falha" funciona?when I receive
bloco de chapéu foi projetado apenas para receber informações da lista suspensa. Ojoin[][]
bloco retorna um tipo de dados que owhen I recieve
bloco não foi projetado para aceitar. Toda vez que algo é transmitido, todos os blocos de chapéu verificam e avaliam o valor de retorno do bloco, gerando umincorrect type
erro.join
bloco lá.n
" pode ser usado para dizer(n-1)
trabalhos com valores positivosn
<3, mas como isso é baseado em algoritmos, um bom algoritmo deve ser capaz de aumentar on
tamanho suficiente para ser capaz de ignorar esse argumento. Não tenho certeza se uma máquina mais rápida ou mais lenta a tornaria mais utilizável. No entanto, concordo que esta solução pode ser contornada. Não é um policial e ladrão , mas bem feito de qualquer maneira.Linguagem Mathematica / Wolfram
O Mathematica é uma linguagem interpretada na qual os nomes de comandos são símbolos que podem ser manipulados pelo programador. Você não pode excluir operadores internos, mas pode sobrecarregá-los ou modificar sua função. A seguir, embaralha o comando "Com", necessário para atribuir às variáveis mesmo internamente. Essa alteração evita que o kernel mantenha os argumentos sem avaliação até a conclusão da atribuição e mata o idioma completamente.
Se esse comando for executado em uma sessão interativa ou dentro de um bloco de código, o Mathematica nem poderá adicionar
1+1
(a mensagem de erro resultante tem cerca de uma página, por isso não a incluirei aqui).fonte
PHP
Estou surpreso que ele realmente funcione, mas feche
STDOUT
eSTDERR
suprima toda a saída. Para garantir que eles não serão abertos novamente, abrimos/dev/null
três vezes para reatribuir os descritores de arquivo 0, 1 e 2:Mais sobre isso: https://stackoverflow.com/questions/937627/how-to-redirect-stdout-to-a-file-in-php
fonte
Lote DOS (antes do Windows 95, acredito)
Emitido sem argumentos, isso desconecta a linha de comando do terminal. Qualquer tentativa adicional de ler entrada ou gerar saída não faz nada.
Caso você queira saber como usar o CTTY corretamente:
Um arquivo em lotes um pouco mais poderoso pode até atender o modem e conectar o que for discado ao CTTY.
fonte
Lisp comum
Espero que você não precise desses parênteses de abertura.
Essa é uma macro do leitor que informa ao Lisp Reader para substituir cada instância de
(
por uma chamada para(lambda (x y) ())
, uma função que recebe dois argumentos e não retorna nada. Assim, por exemplo, seria lido(foo)
comofoo)
, interpretadofoo
como uma variável e, em seguida, lançado um erro de parêntese inigualável0
.fonte
)
como algo instável! Dessa forma, haverá menos erros.coçar, arranhão
Aqui está um exemplo bastante simples que irá travar seu navegador (e, em teoria, seu computador):
Deixei isso em execução por cerca de vinte segundos e perdi 2,65 GB de memória para o Scratch. Apenas um momento depois e 5 GB se foram.
Eu sugiro que você tenha um meio de forçar a saída do Adobe Flash ou do seu navegador antes de executar isso!
Eu realmente queria dar uma resposta legal como a
clear(this)
JS, mas, infelizmente, o Scratch não tem maneiras de fazer isso. Sinta-se livre para atualizar este post (ou criar o seu próprio) se você encontrar outra maneira de tornar o Scratch inutilizável!fonte
Qui
Com uma nova linha no final
A linguagem thue depende da definição de conjuntos de regras e a
::=
denota o final do conjunto de regras. É impossível fazer QUALQUER COISA sem definir regras que o façam, portanto, independentemente do que você colocar depois::=
, nada pode acontecer.Resposta alternativa
(e assim por diante para todos os caracteres em todo o Unicode, incluindo aqueles antes do
A
caractere e caracteres não imprimíveis). Isso requer a opção de linha de comando-r
.fonte
MATLAB
O seguinte trecho de código torna o ambiente completamente inutilizável 1 :
Isso substitui a
builtin
função e aclear
função por novas alças de função anônimas que simplesmente retornamfalse
toda vez que você tenta chamar essas funções. Abuiltin
função garante que se houver quaisquer funções personalizadas que você escreve no MATLAB que são o mesmo nome que aqueles que são internos para MATLAB (coisas comosum
,max
,min
, etc.), que são capazes de chamar estes de forma inequívoca, em vez das funções sobrecarregadas . Da mesma forma,clear
permite limpar todas as variáveis declaradas no momento, para que você possa começar novamente. Ao remover esses recursos, não há como você usar o MATLAB, a menos que reinicie o programa.No MATLAB R2015a, também recebo a seguinte mensagem:
O Espaço de Trabalho são as variáveis atualmente declaradas no ambiente para que você possa usá-las para mais tarde. Isso desativa permanentemente o espaço de trabalho, portanto, quaisquer variáveis que você tentar criar não serão salvas e, portanto, nenhum progresso poderá ser feito ao executar linhas de código no MATLAB.
1: O crédito é destinado ao usuário Dev-iL, que originalmente descobriu a ideia.
fonte
feval('clear')
para corrigi-lo. Ou:s=str2func('clear'); s()
.///
A única operação em /// é a substituição repetida de strings, assim:
/pattern/replacement/
.Esse código remove todos
/
, dessa forma, você não pode usar a substituição repetida de cadeias, então basicamente tudo o que você escreve depois disso será impresso (exceto/
s).Você ainda pode usar
\
s, mas isso não ajudará muito.fonte
Befunge-96
O código do usuário pode seguir em qualquer lugar após essa sequência, desde que esses sejam os três primeiros caracteres da fonte.
O
'
comando (modo de seqüência única) envia o valor ASCII~
para a pilha (ou seja, 126), e oh
comando define o que é conhecido como Delta Holístico com esse valor. Para quem não conhece o Befunge-96, o Delta Holístico é um deslocamento que é adicionado ao valor de cada byte de comando que o intérprete encontra.Depois que o delta é definido como 126, o único comando válido que pode ser gerado é
~
(entrada de caractere), por meio de um byte nulo na fonte. Qualquer coisa que não seja um byte nulo seria traduzido para um valor maior que 126 e nenhum desses valores seriam comandos válidos do Befunge.Eu acho que é seguro dizer que isso tornaria inelegível a qualificação como uma linguagem de programação.
fonte
Vaia
E então, em outro lugar do projeto,
Uma macro simples com um nome inofensivo, mas com um efeito surpreendentemente frustrante. O compilador Boo usa um pipeline de várias etapas que começa com a análise da fonte em um AST e termina com a geração de código. (Geralmente. Ele pode ser reconfigurado para vários aplicativos.) Cada etapa intermediária executa várias operações no AST.
No meio, está o estágio de expansão da macro, no qual as macros são executadas no contexto do compilador. Lembre-se da parte do último parágrafo, sobre o pipeline sendo reconfigurável? Se, durante a expansão da macro, você chamar uma macro que limpa o pipeline, nenhum erro será exibido ao usuário, mas todas as etapas após a expansão da macro (incluindo a geração de código) não estarão mais lá. Então você acaba com algo que parece uma compilação bem-sucedida - nenhuma mensagem de erro é exibida - mas, por alguma razão, não há binário produzido! Garantido para conduzir até os melhores solucionadores de problemas, se você ocultar bem a macro e a invocação.
fonte
NGN / APL
O NGN / APL permite redefinir as primitivas, portanto, redefinir (
←
) todas as funções primitivas para⊢
("passar": ambas⊢3
e2⊢3
doações3
) torna a linguagem completamente inútil:Experimente aqui.
fonte
Ruby (29 caracteres)
Como 'send' é usado internamente sempre que um método é chamado dentro do Ruby e como todos os objetos são herdados da classe Object. Isso deve interromper a execução de qualquer método.
Curiosidade: Isso é perfeitamente correto em teoria. Mas parece, por alguma razão, não prejudicar a linguagem Ruby. Não faço ideia por que é possível executar esse código e ainda usar um ambiente Ruby aberto.
fonte
Tcl
Isso remove todas as palavras-chave do idioma, exceto
if
erename
.O código acima causaria qualquer erro no novo código. Portanto, é discutível se o novo código inserido é realmente "executado". Abaixo está uma versão que executa o novo código, mas não faz nada porque altera todas as palavras-chave (exceto
if
eproc
) para uma não operação:Em vez de excluir palavras-chave, esse código as substitui por uma função que não faz nada.
(Nota: estou usando "palavras-chave" muito livremente aqui porque o Tcl não possui palavras-chave, apenas funções)
fonte
if
erename
após o loop. Na segunda versão, você também deve fazerproc
uma exceção.proc
aparece na lista anteriorputs
. Tecnicamente, o código também deve funcionar sem,rename
mas comandos internos parecem protegidos de outra forma. Não tenho certeza do que está acontecendo, mas o código é testado e funciona como anunciado.rename
. Foi peido da minha parte - eu esqueci de excluirproc
.if
porque poder fazerif
sozinho é praticamente inútil se você deseja gerar saída.Hoon
Hoon é um estranho. É praticamente totalmente diferente de outras linguagens de programação, não apenas na sintaxe, mas na semântica. Ao contrário de idiomas como o Hexagony, no entanto, não foi feito para ser propositadamente esotérico.
Hoon compila para Nock , uma VM baseada em combinador mínimo. Nock é estúpido: a especificação pode ser compactada em 340 bytes. A única operação matemática está aumentando. Tudo é um substantivo: um átomo (bignum) ou uma célula (par de substantivos), com todo o modelo de memória disposto em uma árvore binária acíclica imutável. A única saída é o substantivo ao qual sua expressão se reduz.
Por causa do alvo de compilação estranho, Hoon também é estranho: é completamente puro. Hoon compila até uma expressão Nock que é avaliada em um "contexto". Todo o kernel e stdlib, junto com todas as variáveis, são passados implicitamente para o programa pelo contexto.
Para tornar Hoon inutilizável, apenas usamos
=<
, que é "avaliar a no contexto de b". Estamos sempre avaliando~
, que é zero. Não importa o queb
faça, ele não pode alterar o valor a que se reduz e, como não pode ter efeito colateral, não pode fazer entrada ou saída.Nota lateral: Como você não pode realmente solicitar a entrada de Hoon (pureza!), Pelas regras não é realmente uma linguagem de programação. A entrada é via argumentos de função, a saída é via valores de retorno (ou
~&
, que é mais um recurso de depuração printf e é transparente para o programa).Para um programa obter entrada no Urbit, você realmente escreve um programa que retorna uma função que aceita entrada, e o shell pergunta em seu nome e passa para o retorno de chamada.
fonte
Táxi, 2354 bytes.
Este pequeno programa simplesmente dirige o táxi em um grande passeio de alegria por Townsburg, ficando sem combustível. Qualquer código que você executar após isso irá rapidamente erro com
error: out of gas
. E mesmo que você pudesse chegar a um posto de gasolina, o que eu acho que não é possível, você não conseguiria gasolina, pois nenhum dinheiro foi coletado, já que não há passageiros.fonte
JavaScript no navegador
Bem, pelo menos no IE11.
Desativa a gravação no documento, a gravação na variável global e o retorno da função.
Comente se perdi um método de saída!
fonte
window.addEventListener('error',function(){});
document
ainda deve estar acessível a partir do escopo externo no código inserido e não deve ser substituído até depois que o código inserido terminar a execução.Python 2, incrivelmente grande
Essa quantidade insanamente grande de código é um renascimento do
rexec
módulo antigo (abandonado no python 2.3) com um monte de novos módulos adicionados à lista "ok" e um monte de pontos fracos corrigidos (incluindo oobject.__subclasses__()
método que criou pelo menos dois outros python respostas inválidas).Um pouco desse código (o
__init__
método daRExec
classe e de toda aModuleImporter
classe) é copiado da biblioteca padrão do python com pequenas modificações.fonte
8064 bytes
a propósito