Todos escuchamos sobre probar compiladores utilizando entradas generadas aleatoriamente. Su tarea es escribir un programa para generar un programa válido (incluido ningún comportamiento indefinido) en su idioma favorito. El lenguaje del programa generador no tiene que ser el mismo que el lenguaje del programa generado.
Su programa recibirá un número entero como argumento que puede usar como semilla para su generador de números aleatorios. Los programas generados deben ser estructuralmente diferentes (dados diferentes semillas) no solo diferentes nombres de variables o constantes.
Ejemplos:
$ ./generate 1
int main() { return 0; }
$ ./generate 2
#include <math.h>
int main() { return (int) pow(4, 3); }
Incluya un par de resultados en sus respuestas.
La solución más corta gana. Daré un pequeño bono basado en el número de votos, así que vote las soluciones más creativas.
fuente
main(seed) { return 4; // Chosen by dice roll - Guaranteed to be random }
ReferenciaRespuestas:
Python → Brainf * ck (185
223233255285287303caracteres)Código
math.ceil
(no es realmente necesario).Ejemplos
En realidad averiguar lo que los programas de BF resultantes no se deja como ejercicio para el lector.
fuente
if o: s+=0(NL)else: s+='['+b()+']'
Python -> Piet,
385345 charEs posible generar cualquier programa Piet con esto. Podría haberme detenido en píxeles aleatorios, pero quería hacer programas "interesantes". La función
m
pinta un píxel por color, y recursivamente pasa a cada uno de esos píxeles vecinos. Hay mejores formas de dibujar blobs aleatorios, pero esto está ajustado para terminar en un número razonable de pasos, por lo que es lo suficientemente bueno para el golf. La funciónR(w,h,n)
dibuja n blobs aleatorios en una imagen blanca ( w x h ) e imprime el resultado en formato PPM.Estoy especialmente orgulloso de cómo genero los colores, para una elección aleatoria de
0 <= c < 20
,es el código decimal para un color válido en la paleta Piet a través de un código gris de una sola pista . Es decir, cada color está representado por 3 bits adyacentes, y cada corte
'0003...0'[c:c+3]
representa un color diferente. Como esta no es la lista completa de 27 palabras en 3 letras, realmente tuve la suerte de encontrar el código Gray.Salida de muestra, generada por el comando
R(30,40,500)
Sin la importación, también puedo escribirlo como un 1-liner adecuado (sin punto y coma):
pero es ridículamente lento (y casi 100 caracteres más largos) ... aunque no estoy completamente seguro de por qué (y no estoy terriblemente inclinado a averiguarlo).
fuente
Python -> Python, 135 caracteres
Genera pequeñas evaluaciones de expresiones aleatorias, como esta:
fuente
Python -> HQ9 +: 108 caracteres
fuente
PHP, 352 caracteres
Genera código PHP en PHP.
Decidí que no me importaba mucho la longitud, sino que quería un conjunto de soluciones interesante y diverso. Esta es mi respuesta a eso.
Código
Sin golf
Ejemplo
fuente
scala: 1543 (scala => scala)
Tengo variables (x, y, z), funciones (mul, add, neg, abs), valores y paréntesis balanceados.
Como ves, no es muy golf. Porque no me acercará a las otras soluciones, pero un problema es que más variación cuesta más. 3 variables, 4 funciones podrían reducirse fácilmente a dos, por ejemplo.
Generando algunas muestras:
Probar el más largo:
res6: Int = -5425
fuente
Perl -> caparazón: 66 caracteres
Posiblemente un poco fuera de tema, pero tal vez sea así.
fuente
Rubí → Brainfuck (
110107 caracteres)Uso
Produce un programa ejecutable brainfuck.
Una especie de estafa desvergonzada de ESultanik, así que le atribuiré la idea.
fuente
Javascript -> Brainf * ck: 119 caracteres
Muestra de E / S:
El código definitivamente podría ser más corto, pero algunas cosas, en mi humilde opinión, lo harían menos interesante. Pero si a alguien más se le ocurre un programa más corto, reduciré más.
fuente
Python -> Python, 148 caracteres
Más largo que las otras entradas de Python a costa de ser (subjetivamente) un poco más interesante.
Esto imprime un atributo profundamente anidado de un objeto incorporado.
fuente
PowerShell, generando PowerShell - 43
En el espíritu de la solución de Keith:
genera expresiones aleatorias de sumas y restas:
fuente
gcm|random -c @args|% na*
:)Python -> Fractran (117)
fuente
Idioma de Game Maker -> Arduino o Ti84-Basic, 6 3 caracteres
Explicación:
a=argument0
Pone la entrada en variablea
if a mod 2
Básicamente, la mitad de posibilidades de que el programa sea Arduino, la mitad de Ti-Basic 84El programa Arduino genera cosas aleatorias a intervalos aleatorios, omitiendo aleatoriamente cosas aleatorias.
El programa Ti-Basic dibuja líneas horizontales como locos.
Además, hay una bonificación: ¡los programas generados ya están jugando al golf! No estoy seguro si eso sería útil ...
fuente
Perl -> HQ9 + (42 caracteres)
Entrada de ejemplo
Salida
fuente
JavaScript -> Javascript (44 caracteres)
Y con 43 caracteres, puede ejecutar el programa generado en lugar de mostrar su fuente:
Ejemplos:
Semilla: 5
Ejecutada 3 veces:
fuente