Wir alle haben davon gehört, Compiler mit zufällig generierten Eingaben zu testen. Ihre Aufgabe ist es, ein Programm zu schreiben, um ein gültiges Programm (einschließlich kein undefiniertes Verhalten) in Ihrer Lieblingssprache zu generieren. Die erzeugende Programmsprache muss nicht mit der erzeugten Programmsprache übereinstimmen.
Ihr Programm erhält eine Ganzzahl als Argument, das Sie als Ausgangswert für Ihren Zufallsgenerator verwenden können. Die generierten Programme sollten strukturell unterschiedlich sein (bei unterschiedlichen Seeds), nicht nur unterschiedliche Variablennamen oder Konstanten.
Beispiele:
$ ./generate 1
int main() { return 0; }
$ ./generate 2
#include <math.h>
int main() { return (int) pow(4, 3); }
Bitte fügen Sie Ihren Antworten einige Ergebnisse bei.
Die kürzeste Lösung gewinnt. Ich werde einen kleinen Bonus geben, basierend auf der Anzahl der Stimmen, also stimmen Sie bitte über die kreativsten Lösungen ab.
quelle
main(seed) { return 4; // Chosen by dice roll - Guaranteed to be random }
ReferenzAntworten:
Python → Brainf * ck (185
223233255285287303Zeichen)Code
math.ceil
(nicht wirklich notwendig).Beispiele
Eigentlich , herauszufinden , was die resultierenden BF Programme haben für den Leser als Übung überlassen.
quelle
if o: s+=0(NL)else: s+='['+b()+']'
Python -> Piet,
385345 ZeichenEs ist möglich, ein beliebiges Piet-Programm damit zu generieren. Ich hätte einfach bei zufälligen Pixeln stehen bleiben können, aber ich wollte "interessante" Programme machen. Die Funktion
m
malt ein Pixel in eine Farbe und springt rekursiv in jedes der Nachbarpixel. Es gibt bessere Möglichkeiten, um zufällige Blobs zu zeichnen, aber dies ist so abgestimmt, dass es in einer angemessenen Anzahl von Schritten endet, also ist es gut genug für Golf. Die FunktionR(w,h,n)
zeichnet n zufällige Blobs auf ein ( B x H ) weißes Bild und druckt das Ergebnis im PPM-Format.Ich bin besonders stolz darauf, wie ich die Farben generiere - für eine zufällige Auswahl von
0 <= c < 20
,ist der Dezimalcode für eine gültige Farbe in der Piet-Palette über einen einspurigen Gray-Code . Das heißt, jede Farbe wird durch 3 benachbarte Bits dargestellt, und jeder Schnitt
'0003...0'[c:c+3]
repräsentiert eine andere Farbe. Da dies nicht die vollständige Liste von 27 Wörtern in 3 Buchstaben ist, habe ich wirklich Glück gehabt, den Gray-Code zu finden.Beispielausgabe, die vom Befehl generiert wird
R(30,40,500)
Ohne den Import kann ich es auch als richtigen (Semikolon-freien) 1-Liner schreiben:
aber es ist lächerlich langsam (und fast 100 Zeichen länger) ... obwohl ich nicht ganz sicher bin warum (und nicht schrecklich geneigt, es herauszufinden).
quelle
Python -> Python, 135 Zeichen
Erzeugt kleine zufällige Ausdrucksauswertungen wie folgt:
quelle
Python -> HQ9 +: 108 Zeichen
quelle
PHP, 352 Zeichen
Generiert PHP-Code in PHP.
Ich entschied, dass mir die Länge nicht so wichtig war, sondern ich wollte eine interessante und vielfältige Reihe von Lösungen. Das ist meine Antwort darauf.
Code
Ungolfed
Beispiel
quelle
scala: 1543 (scala => scala)
Ich habe Variablen (x, y, z), Funktionen (mul, add, neg, abs), Werte und ausgeglichene Klammern.
Wie Sie sehen, ist es nicht sehr golfen. Weil es mich nicht in die Nähe der anderen Lösungen bringt, aber ein Problem ist, dass mehr Variation mehr kostet. 3 Variablen, 4 Funktionen könnten zum Beispiel leicht auf zwei reduziert werden.
Einige Beispiele generieren:
Den längsten testen:
res6: Int = -5425
quelle
Perl -> Shell: 66 Zeichen
Möglicherweise ein wenig falsches Thema, aber vielleicht auch.
quelle
Ruby → Brainfuck (
110107 Zeichen)Verwendung
Erzeugt ein ausführbares Brainfuck-Programm.
Irgendwie eine schamlose Abzocke von ESultanik, also werde ich ihm die Idee zuschreiben.
quelle
Javascript -> Brainf * ck: 119 Zeichen
Beispiel-E / A:
Der Code könnte definitiv kürzer sein, aber einige Dinge würden ihn meiner Meinung nach weniger interessant machen. Aber wenn jemand anderes ein kürzeres Programm entwickelt, werde ich mehr einsparen.
quelle
Python -> Python, 148 Zeichen
Länger als die anderen Python-Einträge auf Kosten von (subjektiv) etwas interessanter.
Dies gibt ein tief verschachteltes Attribut eines eingebauten Objekts aus.
quelle
PowerShell, PowerShell generieren - 43
Im Geiste von Keiths Lösung:
generiert zufällige Ausdrücke von Additionen und Subtraktionen:
quelle
gcm|random -c @args|% na*
:)Python -> Fractran (117)
quelle
Game Maker Language -> Arduino oder Ti84-Basic, 6 3 Zeichen
Erläuterung:
a=argument0
Setzt die Eingabe in eine Variablea
if a mod 2
Grundsätzlich ist die Hälfte der Wahrscheinlichkeit, dass das Programm Arduino ist, die Hälfte Ti-Basic 84Das Arduino-Programm gibt in zufälligen Intervallen zufällige Daten aus und überspringt zufällige Daten.
Das Ti-Basic-Programm zeichnet horizontale Linien wie verrückt.
Außerdem gibt es einen Bonus - die generierten Programme sind bereits golfen! Ich bin mir nicht sicher, ob das hilfreich wäre ...
quelle
Perl -> HQ9 + (42 Zeichen)
Beispiel Eingabe
Ausgabe
quelle
JavaScript -> Javascript (44 Zeichen)
Und mit 43 Zeichen kann es das generierte Programm ausführen, anstatt seine Quelle anzuzeigen:
Beispiele:
Samen: 5
3-mal ausgeführt:
quelle