Wszyscy słyszeliśmy o testowaniu kompilatorów przy użyciu losowo generowanych danych wejściowych. Twoim zadaniem jest napisanie programu do wygenerowania prawidłowego programu (w tym braku niezdefiniowanego zachowania) w ulubionym języku. Generujący język programu nie musi być taki sam jak generowany język programu.
Twój program otrzyma liczbę całkowitą jako argument, którego możesz użyć jako źródła dla generatora liczb losowych. Wygenerowane programy powinny być strukturalnie różne (biorąc pod uwagę różne nasiona), a nie tylko różne nazwy zmiennych lub stałe.
Przykłady:
$ ./generate 1
int main() { return 0; }
$ ./generate 2
#include <math.h>
int main() { return (int) pow(4, 3); }
Podaj kilka odpowiedzi w swoich odpowiedziach.
Najkrótsze rozwiązanie wygrywa. Dam niewielką premię na podstawie liczby głosów, więc proszę głosować na najbardziej kreatywne rozwiązania.
źródło
main(seed) { return 4; // Chosen by dice roll - Guaranteed to be random }
OdniesienieOdpowiedzi:
Python → Brainf * ck (185
223233255285287303znaków)Kod
math.ceil
(nie jest to naprawdę konieczne).Przykłady
Dowiedzieć się, co faktycznie powstałe programy BF nie pozostawiamy jako ćwiczenie dla czytelnika.
źródło
if o: s+=0(NL)else: s+='['+b()+']'
Python -> Piet,
385345 znakówDzięki temu można wygenerować dowolny program Piet. Mogłem po prostu zatrzymać losowe piksele, ale chciałem tworzyć „ciekawe” programy. Funkcja
m
maluje piksel kolorem i rekurencyjnie wkracza w każdy z sąsiadujących pikseli. Istnieją lepsze sposoby rysowania losowych obiektów blob, ale są one dostrojone tak, aby kończyły się w rozsądnej liczbie kroków, więc są wystarczająco dobre dla golfa. FunkcjaR(w,h,n)
rysuje n losowych plam na białym obrazie ( szer x wys ) i drukuje wynik w formacie PPM.Jestem szczególnie dumny z tego, jak generuję kolory - dla przypadkowego wyboru
0 <= c < 20
,jest dziesiętnym kodem prawidłowego koloru w palecie Piet za pomocą jednościeżkowego kodu Graya . Oznacza to, że każdy kolor jest reprezentowany przez 3 sąsiednie bity, a każdy plasterek
'0003...0'[c:c+3]
reprezentuje inny kolor. Ponieważ nie jest to pełna lista 27 słów na 3 literach, naprawdę udało mi się znaleźć kod Graya.Przykładowe dane wyjściowe wygenerowane przez polecenie
R(30,40,500)
Bez importu mogę też napisać go jako odpowiedni (bez średnika) 1-liniowy:
ale jest absurdalnie powolny (i prawie 100 znaków dłużej) ... chociaż nie jestem do końca pewien, dlaczego (i nie jestem strasznie skłonny się dowiedzieć).
źródło
Python -> Python, 135 znaków
Generuje małe oceny losowych wyrażeń, takie jak to:
źródło
Python -> HQ9 +: 108 znaków
źródło
PHP, 352 znaków
Generuje kod PHP w PHP.
Uznałem, że nie dbam tak bardzo o długość, ale zamiast tego chciałem interesującego i różnorodnego zestawu rozwiązań. To jest moja odpowiedź na to.
Kod
Nie golfił
Przykład
źródło
scala: 1543 (scala => scala)
Mam zmienne (x, y, z), funkcje (mul, add, neg, abs), wartości i zrównoważony nawias.
Jak widać, nie jest bardzo golfowy. Ponieważ nie zbliży mnie to do innych rozwiązań, ale problemem jest to, że więcej wariantów kosztuje więcej. Na przykład 3 zmienne, 4 funkcje można łatwo zredukować do dwóch.
Generowanie niektórych próbek:
Testowanie najdłuższego:
res6: Int = -5425
źródło
Perl -> shell: 66 znaków
Być może trochę nie na temat, ale może tak.
źródło
Ruby → Brainfuck (
110107 znaków)Stosowanie
Tworzy wykonywalny program pieprzenia mózgu.
Coś w rodzaju bezwstydnego wydzierżawienia ESultanika, więc przypisuję mu pomysł.
źródło
JavaScript -> Brainf * ck: 119 znaków
Przykładowe I / O:
Kod może być zdecydowanie krótszy, ale niektóre rzeczy, IMHO, sprawią, że będzie mniej interesujący. Ale jeśli ktoś wymyśli krótszy program, ograniczę więcej.
źródło
Python -> Python, 148 znaków
Dłuższy niż inne wpisy w Pythonie kosztem bycia (subiektywnie) nieco bardziej interesującym.
Spowoduje to wydrukowanie głęboko zagnieżdżonego atrybutu obiektu wbudowanego.
źródło
PowerShell, generujący PowerShell - 43
W duchu rozwiązania Keitha:
generuje losowe wyrażenia dodawania i odejmowania:
źródło
gcm|random -c @args|% na*
:)Python -> Fractran (117)
źródło
Game Maker Language -> Arduino lub Ti84-Basic, 6 3 znaków
Wyjaśnienie:
a=argument0
Umieszcza dane wejściowe w zmienneja
if a mod 2
Zasadniczo połowa szansy na program to Arduino, połowa Ti-Basic 84Program Arduino generuje losowe rzeczy w losowych odstępach czasu, losowo pomijając losowe rzeczy.
Program Ti-Basic rysuje poziome linie jak szalone.
Jest też bonus - wygenerowane programy są już zagrane w golfa! Nie jestem pewien, czy byłoby to pomocne ...
źródło
Perl -> HQ9 + (42 znaków)
Przykładowe dane wejściowe
Wydajność
źródło
JavaScript -> JavaScript (44 znaki)
Za pomocą 43 znaków może uruchomić wygenerowany program zamiast wyświetlać jego źródło:
Przykłady:
Ziarno: 5
Wykonano 3 razy:
źródło