Nous avons tous entendu parler de tests de compilateurs utilisant des entrées générées aléatoirement. Votre tâche consiste à écrire un programme pour générer un programme valide (y compris aucun comportement indéfini) dans votre langue préférée. Le langage de programme générateur ne doit pas nécessairement être le même que le langage de programme généré.
Votre programme recevra un entier comme argument que vous pouvez utiliser comme graine pour votre générateur de nombres aléatoires. Les programmes générés doivent être structurellement différents (avec des graines différentes) et pas seulement des noms de variables ou des constantes différents.
Exemples:
$ ./generate 1
int main() { return 0; }
$ ./generate 2
#include <math.h>
int main() { return (int) pow(4, 3); }
Veuillez inclure quelques sorties dans vos réponses.
La solution la plus courte l'emporte. Je donnerai un petit bonus basé sur le nombre de votes, alors votez pour les solutions les plus créatives.
la source
main(seed) { return 4; // Chosen by dice roll - Guaranteed to be random }
RéférenceRéponses:
Python → Brainf * ck (185
223233255285287303caractères)Code
math.ceil
(ce n'est pas vraiment nécessaire).Exemples
En fait comprendre ce que les programmes de BF résultants n'est laissé en exercice au lecteur.
la source
if o: s+=0(NL)else: s+='['+b()+']'
Python -> Piet,
385345 carIl est possible de générer n'importe quel programme Piet avec cela. J'aurais pu m'arrêter à des pixels aléatoires, mais je voulais créer des programmes "intéressants". La fonction
m
peint un pixel une couleur et pénètre récursivement dans chacun de ces pixels voisins. Il existe de meilleures façons de dessiner des blobs aléatoires, mais cela est réglé pour se terminer en un nombre raisonnable d'étapes, donc c'est assez bon pour le golf. La fonction desR(w,h,n)
jeux n blobs aléatoires sur une ( w x h ) image blanche, et affiche le résultat en format PPM.Je suis particulièrement fier de la façon dont je génère les couleurs - pour un choix aléatoire de
0 <= c < 20
,est le code décimal d'une couleur valide dans la palette Piet au moyen d'un code Gray à piste unique . Autrement dit, chaque couleur est représentée par 3 bits adjacents, et chaque tranche
'0003...0'[c:c+3]
représente une couleur différente. Comme ce n'est pas la liste complète de 27 mots sur 3 lettres, j'ai vraiment eu de la chance de trouver le code Gray.Exemple de sortie, généré par la commande
R(30,40,500)
Sans l'importation, je peux également l'écrire en tant que 1 ligne (sans point-virgule):
mais c'est ridiculement lent (et près de 100 caractères de plus) ... même si je ne sais pas vraiment pourquoi (et pas terriblement enclin à le découvrir).
la source
Python -> Python, 135 caractères
Génère de petites évaluations d'expression aléatoire, comme ceci:
la source
Python -> HQ9 +: 108 caractères
la source
PHP, 352 caractères
Génère du code PHP en PHP.
J'ai décidé que je ne me souciais pas autant de la longueur, mais je voulais plutôt un ensemble de solutions intéressant et diversifié. Voici ma réponse à cela.
Code
Non golfé
Exemple
la source
scala: 1543 (scala => scala)
J'ai des variables (x, y, z), des fonctions (mul, add, neg, abs), des valeurs et des parenthèses équilibrées.
Comme vous le voyez, ce n'est pas très golfé. Parce que cela ne me rapprochera pas des autres solutions, mais un problème est que plus de variation coûte plus cher. Par exemple, 3 variables, 4 fonctions peuvent être facilement réduites à deux.
Génération de quelques échantillons:
Test du plus long:
res6: Int = -5425
la source
Perl -> shell: 66 caractères
Peut-être un peu hors sujet, mais peut-être que oui.
la source
Ruby → Brainfuck (
110107 caractères)Usage
Produit un programme exécutable de brainfuck.
Une sorte d'escroquerie éhontée de ESultanik, donc je lui attribuerai l'idée.
la source
Javascript -> Brainf * ck: 119 caractères
Exemple d'E / S:
Le code pourrait certainement être plus court, mais certaines choses, à mon humble avis, le rendraient moins intéressant. Mais si quelqu'un d'autre propose un programme plus court, je réduirai davantage.
la source
Python -> Python, 148 caractères
Plus long que les autres entrées Python au détriment d'être (subjectivement) un peu plus intéressant.
Cela imprime un attribut profondément imbriqué d'un objet intégré.
la source
PowerShell, génération de PowerShell - 43
Dans l'esprit de la solution de Keith:
génère des expressions aléatoires d'additions et de soustractions:
la source
gcm|random -c @args|% na*
:)Python -> Fractran (117)
la source
Langue Game Maker -> Arduino ou Ti84-Basic, 6 3 caractères
Explication:
a=argument0
Met l'entrée en variablea
if a mod 2
Fondamentalement, la moitié des chances que le programme soit Arduino, la moitié Ti-Basic 84Le programme Arduino génère des éléments aléatoires à des intervalles aléatoires, en sautant au hasard des choses aléatoires.
Le programme Ti-Basic dessine des lignes horizontales comme un fou.
De plus, il y a un bonus - les programmes générés sont déjà joués! Je ne sais pas si cela serait utile ...
la source
Perl -> HQ9 + (42 caractères)
Exemple d'entrée
Production
la source
JavaScript -> Javascript (44 caractères)
Et avec 43 caractères, il peut exécuter le programme généré au lieu d'afficher sa source:
Exemples:
Graine: 5
Exécuté 3 fois:
la source