Napisz program o długości n, który wypisze inny program, którego długość jest następną liczbą Fibonacciego po n. Nowy program musi zrobić to samo - wypisać inny program, którego długość jest następną liczbą Fibonacciego itp.
N sam (długość oryginalnego programu) nie musi być liczbą Fibonacciego, chociaż byłoby miło, gdyby tak było.
Najkrótszy kod wygrywa.
Brak zasobów zewnętrznych, tylko ASCII, wymagany bezpłatny kompilator / interpreter.
Jeśli twój wynik kończy się na nowej linii, jest również liczony.
code-golf
quine
fibonacci
code-generation
aditsu zrezygnowało, ponieważ SE jest ZŁEM
źródło
źródło
int
lubBigInteger
)Odpowiedzi:
CJam,
2623Właśnie spróbowałem z twoim językiem.
9 jest
(22*0.618 + 0.5 - 1)/1.618 + 1
.Oblicza własną długość
*1.618
zamiast wielokrotnie dodawać dwie liczby. W pierwszej wersji wypełni dane wyjściowe przed{
polubieniem1)))))))))
, co zlicza same postacie. Powiedz wynikn
. Całkowita długość jestn+22
, a nowa długość{
powinna być(n+22)*1.618-22
zaokrąglona. Zmniejsz go o jeden, aby policzyć liczbę)
. Wtedy będzie w przybliżeniu równy(n+8)*1.618
.Starsza wersja:
Liczba 14 to
24*0.618 + 0.5 - 1
.źródło
Python 2, 160 bajtów
To jest prawdziwa quasi-quine; nie odczytuje własnego źródła, ale je generuje. Pierwsze wyjście (ma końcowy znak nowej linii):
Druga:
Edycja: Ups. Zapomniałem zmienić ciąg, kiedy zmieniłem
;
s na1
s, więc drugie wyjście wyświetlało dodatkowe średniki (których Python nie obsługuje). Naprawionyźródło
CJam,
4131 bajtówWypróbuj online.
Wynik
Jak to działa
źródło
Python - 89
Moja idealna liczba postaci zniknęła . ; _; Dzięki TheRare za wskazanie nowej linii i Quincunx za zasugerowanie, że używam Pythona 2, goląc 2 znaki.
EDYCJA : Teraz używa więcej
#
s zamiast1
s; 12 znaków krótszy.EDYCJA 2 : 94 znaków! Wyeliminowano niektóre powtórzenia. >: 3
EDYCJA 3 : Krótsza repr alternatywa dla Python 2.
EDYCJA 4 : Wyjście jest teraz postacią krótszą.
EDYCJA 5 : Zastosowanie
%r
skrótu zostało zaczerpnięte z odpowiedzi na inne pytanie @primo.EDYCJA 6 : Krótsza. :RE
Oto wersja Python 3:
Ta odpowiedź jest podobna do tej udzielonej przez @Quincunx.
źródło
print
zawsze dodaje nowy wiersz, chyba że podaszend=''
argument.s,a,b="s,a,b=%s,%i,%i;o=s%%(`s`,b,a+b)+'#';print o+(b-len(o)-1)*'1'",89,144;o=s%(`s`,b,a+b)+'#';print o+(b-len(o)-1)*'1'
JavaScript, 94
Oparty na dobrze znanej Quinie JavaScript , zwraca prawie tę samą funkcję, po której następuje tylko liczba ukośników, tak że sumuje się do 144, co jest kolejną liczbą Fibonacciego po N. I tak dalej ...
N nie jest liczbą Fibonacciego, ale było tylko „miło mieć”.
źródło
p = (my answer)
, a następniep = eval(p)
kilka razy i dostał aż 196418 ... potem był czas obróbki> 1sek więc rzuciłem testowania: P Ale myślę, że może kontynuować nawet więcej.p=eval(p)
, sprawdź takżep.length
. Po osiągnięciu 987 otrzymuję długość 1598, a nie liczbę Fibonacciego.Matematyka
Jest to bardzo prosta implementacja (tzn. Brak zaciemnienia tutaj). Jest to anonimowa funkcja, która zwraca się z odrobiną dopełnienia, aby osiągnąć odpowiednią długość. Mathematica jest homoikoniczna: zarówno kod, jak i dane są reprezentowane jako wyrażenia Mathematica, co sprawia, że naprawdę łatwo jest modyfikować / generować kod w locie. Oznacza to również, że liczba znaków nie jest naturalną miarą długości kodu. Rozmiar epxresji ( „liczba liści” ) wynosi. Ta wersja opiera się na liczeniu liści jako miary długości kodu.
Jeśli przypiszemy tę anonimową funkcję do zmiennej
f
(abym mógł pokazać, co dzieje się w czytelny sposób) i będziemy ją wywoływać 1, 2, 3, ... razy, za każdym razem mierząc długość zwracanej wartości, to jest to, co otrzymujemy:Jeśli chodzi o wymóg bezpłatnego tłumacza: Mathematica jest darmowa dla Raspberry Pi. W przeciwnym razie kod ten powinien być prosty do przeniesienia do Mathics (open source) . Brakuje tylko matematyki
InverseFunction
, którą można wymienić tak jak tutaj (ale jestem leniwy :).źródło
LeafCount
wydawało się o wiele bardziej interesujące niż liczenie znaków (co oznaczałoby nudną manipulację kodem jako manipulację ciągiem znaków). :-) Nie zamierzam go zmieniać, aby używać liczby znaków, ale mogę go usunąć bez żadnych złych uczuć, jeśli chcesz.Python 3.8 (wersja wstępna) , 78 bajtów
Wypróbuj online!
Python 2 , 79 bajtów
Wypróbuj online!
źródło