Para comemorar o lançamento público do Stack Overflow, qual é o código mais curto para causar um estouro de pilha? Qualquer idioma é bem-vindo.
ETA: Só para esclarecer essa questão, já que sou um usuário ocasional do Scheme: "recursão" de chamada de cauda é realmente iteração, e qualquer solução que possa ser convertida em uma solução iterativa relativamente trivialmente por um compilador decente não será ser contado. :-P
ETA2: Eu selecionei agora a “melhor resposta”; veja este post para justificativa. Obrigado a todos que contribuíram! :-)
fonte
"
Carrega 79 cópias do número 32 a cada duas vezes que envolve em torno de, em vez de 2 cópias do número 1.Leia esta linha e faça o que diz duas vezes .
fonte
Você também pode tentar isso em c # .net
fonte
Nemerle :
Isso trava o compilador com uma StackOverflowException:
fonte
Meu melhor atual (na montagem x86) é:
o que resulta em 3 bytes de código do objeto (
50 EB FD
). Para código de 16 bits, isso também é possível:o que também resulta em 3 bytes (
E8 FD FF
).fonte
PIC18
A resposta PIC18 dada por TK resulta nas seguintes instruções (binárias):
No entanto, CALL sozinho executará um estouro de pilha:
PIC18 menor e mais rápido
Mas o RCALL (chamada relativa) ainda é menor (não a memória global, portanto, não há necessidade de 2 bytes extras):
Portanto, o menor do PIC18 é uma única instrução, 16 bits (dois bytes). Isso levaria 2 ciclos de instrução por loop. Em 4 ciclos de relógio por ciclo de instrução, você tem 8 ciclos de relógio. O PIC18 possui uma pilha de 31 níveis, portanto, após o 32º loop, ela excederá a pilha, em 256 ciclos de clock. Em 64MHz, você sobrecarregaria a pilha em 4 microssegundos e 2 bytes .
PIC16F5x (ainda menor e mais rápido)
No entanto, a série PIC16F5x usa instruções de 12 bits:
Novamente, dois ciclos de instrução por loop, 4 relógios por instrução e 8 ciclos de clock por loop.
No entanto, o PIC16F5x possui uma pilha de dois níveis; portanto, no terceiro loop, ela excederá em 24 instruções. A 20MHz, ele transbordaria em 1,2 microssegundos e 1,5 bytes .
Intel 4004
O Intel 4004 possui uma instrução de sub-rotina de chamada de 8 bits:
Para os curiosos que correspondem a um ascii 'P'. Com uma pilha de 3 níveis que leva 24 ciclos de relógio para um total de 32,4 microssegundos e um byte . (A menos que você faça um overclock no seu 4004 - vamos lá, você sabe que deseja).
Que é tão pequeno quanto a resposta do befunge, mas muito, muito mais rápido que o código do befunge executado nos intérpretes atuais.
fonte
C #:
fonte
Estouro de buzina!
fonte
Toda tarefa precisa da ferramenta certa. Conheça a linguagem SO Overflow , otimizada para produzir estouros de pilha:
fonte
TeX:
Resulta em:
Látex:
Resulta em:
fonte
~
está ativo, pode ser usado no lugar de\a
. E eu descobri o código LaTeX completamente por acidente. :)Montador Z-80 - no local da memória 0x0000:
um byte - 0xC7 - loop infinito de empurrar o PC atual para a pilha e pular para o endereço 0x0000.
fonte
Em inglês:
fonte
Outro exemplo de PHP:
fonte
Que tal o seguinte no BASIC:
(Eu não tenho um intérprete BASIC, receio, então isso é um palpite).
fonte
GOSUB
, não umGOTO
. ComoRETURN
é de onde foi chamado, certamente está usando uma pilha?Eu amei as respostas de Cody, então aqui está minha contribuição semelhante, em C ++:
Não é uma entrada de código de golfe, por qualquer meio, mas ainda assim, qualquer coisa para um estouro de meta stack! :-P
fonte
Aqui está a minha contribuição C, com 18 caracteres:
É muito mais difícil otimizar a chamada final! :-P
fonte
Usando o arquivo em lotes de uma janela chamado "s.bat":
fonte
Javascript
Para aparar mais alguns caracteres e ser expulso de mais lojas de software, vamos com:
fonte
Groovy:
$ groovy stack.groovy:
fonte
Por favor, diga-me o que significa o acrônimo " GNU ".
fonte
Aqui está esperando por nenhuma recursão da cauda!
fonte
C - Não é o mais curto, mas é livre de recursão. Também não é portátil: trava no Solaris, mas algumas implementações alloca () podem retornar um erro aqui (ou chamar malloc ()). A chamada para printf () é necessária.
fonte
perl em 12 caracteres:
bash em 10 caracteres (o espaço na função é importante):
fonte
tente colocar mais de 4 hambúrgueres em um único hambúrguer. estouro de pilha.
fonte
Python :
Alternativamente:
E se o Python otimizou as chamadas de cauda ...:
fonte
Estou selecionando a "melhor resposta" após este post. Mas primeiro, gostaria de reconhecer algumas contribuições muito originais:
Por mais que eu goste do exposto acima, o desafio é fazer golfe com códigos e, para ser justo com os entrevistados, tenho que conceder a "melhor resposta" ao código mais curto, que é a entrada do Befunge; Eu não acredito que alguém será capaz de superar isso (embora Konrad certamente tenha tentado), então parabéns Patrick!
Vendo o grande número de soluções de pilha a transbordar por recursão, estou surpreso que ninguém (até o momento da redação atual) tenha apresentado o combinador Y (veja o ensaio de Dick Gabriel, O porquê de Y , para uma cartilha). Eu tenho uma solução recursiva que usa o combinador Y, bem como a abordagem f (f (x)) de aku. :-)
fonte
Aqui está outro interessante do Scheme:
fonte
Java
Versão ligeiramente mais curta da solução Java.
fonte
fonte
3 bytes:
Atualizar
De acordo com a documentação (antiga?) Intel (?) , Também são 3 bytes:
fonte