Wyzwanie
W tym wyzwaniu napiszesz pierwszy program, p 1 , o nieskończonej sekwencji programów, w którym uruchomienie p n wyprowadza / generuje program p n + 1 . Podczas łączenia pierwszych n> = 2 programów sekwencja powinna zostać wyprowadzona n
.
Przykład
Powiedzmy, że pierwsze 4 programy to:
p1 p2 p3 p4
Gdybym miał uruchomić p1
, powinien wypisać:
p2
Gdybym miał uruchomić p1p2
, powinien wypisać:
2
Gdybym miał uruchomić p1p2p3p4
, powinien wypisać:
4
Gdybym miał uruchomić p4
, powinien wygenerować następny program w sekwencji:
p5
Punktacja
Twój wynik to liczba bajtów pierwszych 10
programów.
code-challenge
code-generation
Downgoat
źródło
źródło
p1p2p3...
zawsze będą od p1 do pn ?Odpowiedzi:
Pyth, 12
p1:
p2:
1
p3:
1
itp..
p1p2p3:
Wydajność:
3
Wyjaśnienie:
Na pierwszym biegu, to wyprowadza długość pojedynczego ciągu znaków,
1
. Zdarza się również, że jest to poprawny program Pyth, generujący1
ponownie. Dlatego pn + 1 jest zawsze1
. Gdy programy są powiązane,p1
wyświetla długość połączonych programów, która będzien
.źródło
Lua,
950900 bajtówNie golfowany:
Wyjaśnienie:
Pierwszy wiersz pobiera całe źródło programu. Następnie porównujemy długość całego programu do 1 + długości jednego pojedynczego programu. Jeśli rozmiar bieżącego programu jest mniejszy niż ta wartość, drukowane jest źródło, czyli następny program, p2, i wychodzimy. Każda iteracja jest tylko quine. Po połączeniu kilku z nich warunek kończy się niepowodzeniem i wypisujemy długość konkatenowanego programu podzieloną przez długość jednego programu, czyli liczbę konkatenowanych programów, n.
źródło
Vitsy , 19 bajtów
Nie zajmuje się tutaj łańcuchami, ale używa sztuczek metod.
p1
p2
p3
Tak dalej.
Objaśnienie poniżej:
Wypróbuj online!
źródło
Vitsy , 14 bajtów
Podobnie do odpowiedzi Pyth i Jolf, mapuję ciągi. Jedyną różnicą jest to, że korzystam z funkcji owijania linii, aby mieć pewność, że zawsze otrzymam odpowiednią długość.
p1
p2
Zamień 1 na dowolny pojedynczy numer.
p3 i tak dalej pasują do tego wzorca i możesz to zrobić, aż
Integer.MAX_VALUE
do całkowitego ograniczenia języka.Wyjaśnienie:
Wypróbuj online!
źródło
Poważnie, 15 bajtów
Pierwszy program, 6 bajtów (zawiera niedrukowalne):
Hex Dump:
Ten program drukuje
1
: Wypróbuj onlineWszystkie pozostałe programy to
1
poprawny program, który drukuje się tak samo jak odpowiedź Pyth. Oryginalny program wypisuje długość kodu źródłowego minus 5 i natychmiast się kończy.1
s dołączane na końcu zwiększają długość kodu źródłowego o 1 bajt za każdym razem, ale nigdy nie są wykonywane.źródło
Jolf , 14 bajtów
Wypróbuj tutaj!
Po uruchomieniu drukuje się
1
. Tak więcp2 = 1
. Wykonywaniep2
plonów1
. Więc dla wszystkichN > 1
,pN = 1
.Przestrzegać
p1p2
:a-1q41
. Przenosi to na:Ponieważ niejawne drukowanie jest wyłączone po pierwszym wydruku, drukuje się
2
, ponieważ długość kodu źródłowego minus 4 wynosi 2. I tak dalej i dalej.źródło
Rubinowy, 318 bajtów
p 1 :
Każdy program oddzielny p i wyprowadza tę jedną linię Quine'a:
_="_=%p;puts _%%_";puts _%_
.Kiedy dodasz te quiny na końcu p 1 , kończą się one liniami w
DATA
obiekcie, ponieważ znajdują się poniżej magii__END__
.Oto test:
Dziesięć pierwszych połączonych programów wygląda następująco (318 bajtów):
źródło
C #, 2099 + 7 = 2106 bajtów
Pierwszy program (używa flagi kompilatora
/main:A
):Drugi program:
Trzeci program:
Masz pomysł.
źródło
JavaScript ES6, wynik
483455Program 1, 77 bajtów:
Program 2 i kolejne, każdy 42 bajty:
źródło
PHP, 1470 bajtów
Program 1: 219 bajtów:
progam 2 i ponad 139 bajtów:
użyj jak:
Używa nieco golfowej wersji techniki php quine opisanej tutaj: http://10types.co.uk/the-lab/a-minimal-php-quine/
źródło