1-up Quine to program, który jest bardzo podobny do Quine'a. Jedną z głównych różnic jest to, że zamiast drukować się raz, kiedy n kopii programu jest konkatenowanych, wynik drukuje oryginalny program n + 1 razy.
Przykład
Jeśli twój program to Abc123
:
Abc123 -> Abc123Abc123
Abc123Abc123 -> Abc123Abc123Abc123
Abc123Abc123Abc123 -> Abc123Abc123Abc123Abc123
Wyzwanie
Twoim wyzwaniem jest stworzenie najkrótszej ważnej 1-up quine w dowolnym języku. Obowiązują zwykłe zasady dotyczące quine, więc nie możesz:
- Prześlij pusty program.
- Przeczytać bezpośrednio lub pośrednio 1 kod źródłowy.
- Użyj wbudowanych quiningu.
To jest golf golfowy, więc wygrywa najkrótszy kod w bajtach.
1 Nie obejmuje to użycia zakodowanego ciągu lub bloku kodu jako części programu.
code-golf
quine
code-generation
ETHprodukcje
źródło
źródło
n
jest ograniczone przez pewne ograniczenia typu danych (maksymalny rozmiar liczby całkowitej itp.)?Odpowiedzi:
GolfScript, 12 bajtów
Wypróbuj online!
Wyjaśnienie
Łączy to pomysły ze standardowego quinu GolfScript:
I mój niedawno odkryty quine :
Główną ideą jest ponowne użycie,
n
które jest drukowane niejawnie na końcu programu, aby uzyskać dodatkową kopię quine. Ponieważ przypisanie zmiennej nic nie zmienia, gdy zostanie powtórzone w kolejnych kopiach, spowoduje to dodanie tylko jednej kopii. Oto podział kodu:źródło
GolfScript, 12 bajtów
Wypróbuj online!
Jak działa kod źródłowy
Jeśli powyższy kod źródłowy zostanie wykonany raz, stos zakończy się jako
gdzie pusty ciąg na początku odpowiada początkowemu stanowi stosu (puste wejście).
Dwie kopie kodu źródłowego pozostawiałyby końcowy stan
trzy kopie ostatecznego stanu
i tak dalej.
Co się potem dzieje
Po wykonaniu kodu źródłowego interpreter wykonuje następujące czynności.
Zawija cały stos w tablicę i wypycha tę tablicę na stos.
Dla dwóch kopii kodu źródłowego stos zawiera teraz
Wykonano go
puts
z zamiarem wydrukowania owiniętego stosu, a następnie podania linii.puts
jest zdefiniowany jako{print n print}
, więc wykonuje następujące czynności.print
drukuje zawiniętą kopię stosu bez sprawdzania go (tzn. bez konwertowania go do reprezentacji ciągu). To wysyła(kod źródłowy) do STDOUT i wyrzuca kopię stosu z góry stosu.
Stos zawiera teraz
wykonuje zdefiniowany wcześniej blok kodu.
:
zaczyna się od zapisania[{: ".~"][} ".~"]
znaku spacji, a następnie".~"
przesuwa się,]
otacza".~"
tablicę i[
ustawia nowy znacznik tablicy.n
wypycha ciąg składający się z pojedynczego kanału.Stos zawiera teraz
jest wykonywany ponownie. Zostało jednak na nowo zdefiniowane, gdy wywołaliśmy go po raz pierwszy i teraz zawiera tablicę, a nie blok kodu.
W rzeczywistości pcha
[{: ".~"][} ".~"]
, pozostawiając stos jakoNa koniec
print
drukuje najwyższy element stosu bez sprawdzania go, wysyłającdo STDOUT, 1-up up kodu źródłowego.
źródło
JavaScript ES6 (REPL), 55 bajtów
Zaoszczędzono 2 bajty dzięki @ user81655!
Wyjaśnienie
Oto standardowe ramy quine:
Powinieneś być w stanie zobaczyć te ramy w zgłoszeniu. Więcej wyjaśnień poniżej.
Jest to licznik, domyślnie ustawiony na 1. Zasadniczo mówi nam, ile powtarzać quine i przyrostów w tym samym czasie.
To jest część quine. Zasadniczo powtarzamy ciąg znaków quine przez licznik + 1. Kolejne wywołania funkcji zastąpią dane wyjściowe.
źródło
a
).var
CJam, 14 bajtów
Wypróbuj online!
Jak to działa
Po wykonaniu ostatniej kopii programu tablica zawierająca blok i ciąg znaków nadal znajduje się na stosie, więc jest drukowana niejawnie.
źródło
Groovy, 83 bajty
Jest jeden osadzony i nie ma końca nowej linii. To drukuje:
Funkcja
f()
drukuje jedną kopię quine. Początkowy program wywołuje go dwukrotnie. Pierwszy wiersz dołączonego kodu staje się komentarzem i wykonywane jest tylko drugie wywołanie dof()
.źródło
Rubinowy, 43 bajty
Sama drukuje się sama
2-0
lub2
razy. Po skonkatenowaniu z inną kopią samego siebie wygląda następująca instrukcja print$><<s%s*n=2-01
, co oznacza, że wysyła się tylko raz (01
ósemkowa 1). Tak więc tylko ostatnia kopia łańcucha jest drukowana dwa razy, a pozostałe drukowane jeden raz.Inline przypisanie do
n
jest po prostu, aby kolejność operacji działała poprawnie; stan nie jest przekazywany z jednej kopii do następnej.źródło
NodeJS,
63616055 bajtówzadziała to również w JavaScript (ES6), jeśli weźmiesz pod uwagę, że wiele komunikatów konsoli jest oddzielonych znakami nowej linii (nie wymaga REPL)
Zaoszczędzono 2 bajty dzięki @ dev-null
zwróć uwagę, że na końcu kodu znajduje się nowa linia.
To był interesujący, zdecydowanie jak dotąd jeden z moich ulubionych na tej stronie.
Jestem całkiem pewny, że nie da się więcej grać w golfa. (może
print
funkcja SpiderMonkey ...)Wyjaśnienie
źródło
(f=_=
Mogę być trochę zbyt zmęczony.Rubinowy, 55 bajtów
Nic bardzo interesującego tutaj, jest to po prostu zwykły rubinowy quine z ladą.
źródło
JavaScript (ES6), 164 bajty
Działa na dowolnej stronie testowej JS lub konsoli w Firefoksie, przy założeniu, że spacja między dwoma komunikatami konsoli liczy się jako nowa linia.
źródło
window
dothis
.Perl 6 ,
5853 bajtówDzięki Jo King za -5 bajtów.
Na podstawie quina Jo Kinga .
Wypróbuj online!
źródło
Japt, 40 bajtów
Przetestuj online! Wyjaśnienie, które nastąpi.
źródło
Y
Niekonkurencyjne, 6 bajtów
Y to działka na głowę, którą miałem od dłuższego czasu, i to zainspirowało mnie do napisania tego. Przeznaczony jest do wyzwań, w których sekwencjonowanie ma kluczowe znaczenie, takich jak to. Kod jest podzielony na linki za pomocą znaków „węzła”. W tym przypadku nasz kod jest umieszczony w dwóch łańcuchach (pierwotnie), przy czym węzeł jest
C
.U
rejestruje łańcuch transcendentalny, tzn. taki, który obejmuje linki. Nagrywa, dopóki nie spotka innegoU
. Jeśli aU
nie zostanie spełnione na końcu ciągu, zostanie ono zawinięte. Jest równieżU
domyślnie zawarty w ciągu. Po zarejestrowaniu ciągu przechodzimy do węzłaC
, który po prostu przenosi nas do następnego łącza.n
przesuwa liczbę łańcuchów. W naszym przypadku podstawowym to 2. Dla sekwencjiK
łańcuchów istniejąK+2
łańcuchy, podobnie jakK
węzły.*
to przekazywanie ciągu.p
wypisuje cały stos (w tym przypadku jeden ciąg) ix
kończy działanie programu.W tekście:
Wypróbuj tutaj!
źródło
U
oprócz quiningu? (Gratulacje za 7k, btw)Brachylog , 20 bajtów
Wypróbuj online!
Zmodyfikowany z tego quine.
Kiedy jest to konkatenowane ze sobą, każda trasa oprócz ostatniej kończy się niepowodzeniem, a program przechodzi do następnej, wykonując każdą
w₃
i cofając się za każdymw₅
z wyjątkiem ostatniej.Wypróbuj online!
Wypróbuj online!
Wypróbuj online!
źródło