Todos nós ouvimos falar de compiladores usando entradas geradas aleatoriamente. Sua tarefa é escrever um programa para gerar um programa válido (incluindo nenhum comportamento indefinido) no seu idioma favorito. A linguagem de programa geradora não precisa ser a mesma que a linguagem de programa gerada.
Seu programa receberá um número inteiro como argumento que você pode usar como semente para o seu gerador de números aleatórios. Os programas gerados devem ser estruturalmente diferentes (dadas sementes diferentes) e não apenas nomes de variáveis ou constantes diferentes.
Exemplos:
$ ./generate 1
int main() { return 0; }
$ ./generate 2
#include <math.h>
int main() { return (int) pow(4, 3); }
Inclua algumas saídas em suas respostas.
A solução mais curta vence. Darei um pequeno bônus com base no número de votos; portanto, vote nas soluções mais criativas.
fonte
main(seed) { return 4; // Chosen by dice roll - Guaranteed to be random }
ReferênciaRespostas:
Python → Brainf * ck (185
223233255285287303caracteres)Código
math.ceil
(não é realmente necessário).Exemplos
Realmente descobrir o que os programas resultantes de AM fazem é um exercício para o leitor.
fonte
if o: s+=0(NL)else: s+='['+b()+']'
Python -> Piet,
385345 caracteresÉ possível gerar qualquer programa Piet com isso. Eu poderia ter parado em pixels aleatórios, mas queria criar programas "interessantes". A função
m
pinta um pixel a cor e recursivamente entra em cada um desses pixels vizinhos. Existem maneiras melhores de desenhar blobs aleatórios, mas isso é ajustado para terminar em um número razoável de etapas, portanto é bom o suficiente para o golfe. A funçãoR(w,h,n)
desenha n blobs aleatórios em uma imagem branca ( w x h ) e imprime o resultado no formato PPM.Estou especialmente orgulhoso de como eu gero as cores - para uma escolha aleatória de
0 <= c < 20
,é o código decimal para uma cor válida na paleta Piet por meio de um código Gray de faixa única . Ou seja, cada cor é representada por 3 bits adjacentes e cada fatia
'0003...0'[c:c+3]
representa uma cor diferente. Como essa não é a lista completa de 27 palavras em três letras, tive muita sorte em encontrar o código Gray.Saída de amostra, gerada pelo comando
R(30,40,500)
Sem a importação, também posso escrevê-lo como uma linha única (sem ponto e vírgula):
mas é ridiculamente lento (e quase 100 caracteres a mais) ... embora eu não tenha muita certeza do porquê (e não tenha muita vontade de descobrir).
fonte
Python -> Python, 135 caracteres
Gera pequenas avaliações de expressão aleatória, assim:
fonte
Python -> HQ9 +: 108 caracteres
fonte
PHP, 352 caracteres
Gera código PHP em PHP.
Decidi que não me importava tanto com o comprimento, mas queria um conjunto interessante e diversificado de soluções. Esta é a minha resposta para isso.
Código
Ungolfed
Exemplo
fonte
scala: 1543 (scala => scala)
Eu tenho variáveis (x, y, z), funções (mul, add, neg, abs), valores e parênteses balanceados.
Como você vê, não é muito golfe. Porque isso não me aproxima das outras soluções, mas um problema é que mais variação custa mais. 3 variáveis, 4 funções podem ser facilmente reduzidas a duas, por exemplo.
Gerando algumas amostras:
Testando o mais longo:
res6: Int = -5425
fonte
Perl -> shell: 66 caracteres
Possivelmente um pouco fora de tópico, mas talvez seja.
fonte
Rubi → Brainfuck (
110107 caracteres)Uso
Produz um programa executável brainfuck.
Uma espécie de imitação desavergonhada do ESultanik, então vou lhe dar crédito pela ideia.
fonte
Javascript -> Brainf * ck: 119 caracteres
E / S de amostra:
O código poderia definitivamente ser mais curto, mas algumas coisas, IMHO, o tornariam menos interessante. Mas se alguém criar um programa mais curto, reduzirei mais.
fonte
Python -> Python, 148 caracteres
Mais do que as outras entradas do Python à custa de (subjetivamente) um pouco mais interessante.
Isso imprime um atributo profundamente aninhado de um objeto interno.
fonte
PowerShell, gerando PowerShell - 43
No espírito da solução de Keith:
gera expressões aleatórias de adições e subtrações:
fonte
gcm|random -c @args|% na*
:)Python -> Fractran (117)
fonte
Game Maker Language -> Arduino ou Ti84-Basic, 6 3 caracteres
Explicação:
a=argument0
Coloca a entrada na variávela
if a mod 2
Basicamente, metade da chance do programa ser Arduino, metade do Ti-Basic 84O programa Arduino gera coisas aleatórias em intervalos aleatórios, pulando aleatoriamente coisas aleatórias.
O programa Ti-Basic desenha linhas horizontais como um louco.
Além disso, há um bônus - os programas gerados já são jogados no golfe! Não tenho certeza se isso seria útil ...
fonte
Perl -> HQ9 + (42 caracteres)
Exemplo de entrada
Saída
fonte
JavaScript -> Javascript (44 caracteres)
E com 43 caracteres, ele pode executar o programa gerado em vez de exibir sua fonte:
Exemplos:
Semente: 5
Executado 3 vezes:
fonte