Biorąc pod uwagę dodatni poziom zagnieżdżenia liczb całkowitych n
i ciąg znaków s
drukowalnych ascii ( do
~
, wypisuje program, który po uruchomieniu w tym samym języku, wypisuje program, który wypisuje program ... który wypisuje ciąg s
.
n
Należy wygenerować w sumie programy, z których wszystkie powinny być uruchomione w tym samym języku, co twoja odpowiedź.
Uwaga: możesz wyprowadzać programy lub funkcje - wszystko jest dozwolone domyślnie jako przesłanie.
Możesz wprowadzać s
znaki zmiany znaczenia, w jaki sposób program lub funkcja w twoim języku zwykle wprowadza ciąg znaków.
Przykład
Na przykład podany n=1
i s="recursion"
program w języku Python 2 może wyświetlać:
print "recursion"
Uruchomienie tego spowoduje wyjście:
recursion
Biorąc pod uwagę n=2
is = "PPCG", program Python 2 może wypisać:
print "print \"PPCG\" "
Uruchamianie tych wyjść:
print "PPCG"
Uruchamianie tych wyjść:
PPCG
Powiązane (+ inspiracja do tytułu): Jeszcze jeden LUL i nie ma mnie
Również powiązane (w piaskownicy - teraz usunięte, ale nadal można je oglądać z wystarczającą reputacją): Rekursja kodu źródłowego
Przypadki testowe
Upewnij się, że kod działa w następujących przypadkach testowych (jeden w wierszu):
n s
2 PPCG
4 Robert'); DROP TABLE Students;--
17 Deep
2 Spaces In Here
3 "Don't forget quotes!"
5 'Backt`cks might be a h`tch'
6 5%s
8 [Brackets]<Are>(Great){Usually}
3 !"#$%&'()*+,-./ 0123456789:;<=>?@ABCDEFGHIJKLMN
6 OPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~
7 THE QUICK BROWN FOX JUMPS OVER THE LAZY DOG
3 the quick brown fox jumps over the lazy dog
źródło
0
?Odpowiedzi:
Galaretka , 2 bajty
Wypróbuj online!
hehe wbudował
źródło
'"hi"'
aby zobaczyć oczekiwany wynikJavaScript (ES6),
4744 bajtówZaoszczędź 3 bajty dzięki @HermanLauenstein
Pobiera dane wejściowe w składni curry
(n)(s)
.Przykład
Wyjdzie:
Który wydrukuje:
Który wydrukuje:
Próbny
Bardziej złożony przykład, w którym
alert()
został zastąpiony, aby wyniki pośrednie były drukowane na konsoli i automatycznie wykonywane.Pokaż fragment kodu
Alternatywna wersja, 40 bajtów
Sugerowane przez @Shaggy
Ten zwraca anonimową funkcję zamiast pełnego programu.
źródło
alert
? 41 bajtówn=>g=s=>BTalert(atob("${btoa(--n?g(s):s)}"))BT
(zamień BT na backsticks)sh + coreutils, 31 bajtów
Pobiera
n
jako parametr wiersza polecenia is
STDIN.źródło
yes
wielokrotnie wypisuje swój wiersz poleceń, który jestexec sed 1d $0
($
jest metaznakiem powłoki, więc należy go zacytować).sed $1q
przestaje drukować po$1
(tj.n
) wierszach.cat
następnie kopiuje ciąg wejściowy. Plik wynikowy jestsh
skryptem, który każe powłoce zastąpić się kopiąsed
parametrów1d
i nazwą pliku skryptu.sed
następnie pomija pierwszy wiersz pliku i wypisuje resztę. Każdy skrypt ma jeden mniejexec sed 1d $0
prefiksu, dopóki pon
wykonaniu nie zostanie wydrukowane tylko oryginalne wejście.Python 2 , 40 bajtów
Wypróbuj online!
-4 bajty dzięki xnor
źródło
Haskell, 17 bajtów
Na dzień, w którym to piszę, jest to najkrótsza odpowiedź dla języka niezwiązanego z golfem .
Jest to funkcja, która przyjmuje
s
iwn
tej kolejności i zwraca wynik lub kod źródłowy wyrażenia, które po ocenie zwraca następny kod źródłowy.Argument, dlaczego to się liczy:
Jeśli
f
podanoPPCG
i2
jako jego parametry, wynikiem jest tekst"\"PPCG\""
(pierwsza wygenerowana funkcja), który po ocenie zwraca tekst"PPCG"
(druga generowana funkcja), a gdy jest oceniany, zwracaPPCG
.Dzięki Nimi dla sugerując skrócenie.
źródło
APL (Dyalog) ,
2423 bajty-1 dzięki ngn.
Jest to pełny program, który monituje,
s
a następnie wyświetlan
i drukuje do STDOUT.Wypróbuj online! (17 Deep case jest pomijany, ponieważ przekracza limit wyjściowy TIO - działa offline)
⍞
monit os
⊢
dają to (do rozdzielenia⎕
i⍞
)''''{
…}⍣⎕
Pytajn
i zastosuj tę lambda za jednym cytatem jako lewy argument, że wiele razy.⍺
oznacza lewy argument (cytat) i⍵
oznacza prawy argument (tekst wejściowy):⍵=⍺
Boolean, w którym tekst jest równy cytatowi1+
Dodaj jeden⍵/⍨
powtórz każdy znak argumentu odpowiednią liczbę razy⍺,
zrób wycenę⍺,⍨
dołączyć wycenęDziała to, ponieważ ciągi znaków w APL są
'
rozdzielane, a pojedyncze cudzysłowy w ciągach znaków są podwajane, podczas gdy inne znaki nie wymagają ucieczki.Dyalog APL jest również dostarczany z narzędziem (
⎕SE.Dyalog.Utils.repObj
), które generuje wyrażenie APL, które ocenia jego argument (podobnie jak nierówność Jelly ). Poniższy program jest zatem równoważny powyższemu, ale działa dla wszystkich tablic:Wypróbuj online!
źródło
⍺
- co oszczędza (przynajmniej) bajt.Firefox JavaScript,
4135 bajtówFirefox ma fajny
uneval
, który działa tak, jak to brzmi - nierówności danego obiektu, w tym przypadku - ciąg znaków.źródło
Java 8,
9593 bajtów-2 bajty dzięki @Lynn .
Ucieczka od znaków specjalnych jest tak irytująca w Javie ..
Wypróbuj tutaj i wypróbuj wynikową metodę tutaj .
Wyjaśnienie:
Dodatkowe wyjaśnienie zastępowania wyrażenia regularnego:
Skąd te wszystkie cięcia?
źródło
"
w klasie wyrażeń regularnych, więc\\\\\"
(pięć odwrotnych ukośników) powinno być w porządku.Niedociążenie , 11 bajtów
Wypróbuj online!
Dane wejściowe muszą zaczynać się od stosu, z liczbą na górze w postaci cyfr kościelnych . Nie wiem, czy jest to poprawna metoda wprowadzania danych, ale specyfikacja nie zawiera danych wejściowych, a umieszczanie danych wejściowych na górze stosu wydaje się być linkową metodą stosowaną w takich językach.
źródło
GolfScript , 5 bajtów
Wypróbuj online!
źródło
QuadR , 8 bajtów
Proste tłumaczenie odpowiedzi ngn .
Przyjmuje
n
jako argument is
jako dane wejściowe.Wypróbuj online!
PCRE R EUmieãæ wszystkie przypadki
^|'|$
Początek linii LUB Cytat LUB Koniec linii'&
z cytatem i całym dopasowaniemArgument określa, ile razy powtórzyć transformację.
źródło
R , 62 bajty
Wypróbuj online!
Nazwij to tak:
f(n,s)
następnien
kopie()
Nazwana funkcja; zwraca anonimową funkcję. Wszystko robi to zmodyfikować domyślne wartości
formals
zf
, pozwalając wynikające funkcja do wywołania (i wtedy wynik tego nazywa,n
razy). kiedyn
osiągnie0
, wracas
.R nie jest wcale taki zły w ucieczce! Używa stylu C ucieczki, więc po prostu trzeba wziąć wejście, wymienić
"
z\"
i\
z\\
, a następnie owinąć w całość" "
.źródło
Pyth, 21 bajtów
Wypróbuj tutaj.
Niestety funkcja rekurencyjna (nie pełny program jak wyżej) jest dłuższa (24 bajty):
źródło
APL (Dyalog Classic) , 19 bajtów
Wypróbuj online!
źródło
Rubin , 34 bajty
%p
jest specyficzną dla Ruby flagą printf, która pobierainspect
wartość swojego argumentu, podobnie jak%r
w Pythonie.$><<
oznacza druk.Wypróbuj online!
źródło
Excel VBA (32-bit), 67 bajtów
Wersja ograniczona do 32-bitowej wersji Excel VBA, ponieważ
2^i
ocenia bez błędów w 32-bitowym VBA, ale nie w 64-bitowym VBAAnonimowa funkcja bezpośredniego okna VBE, która pobiera dane wejściowe
n
is
zakresy[A1]
oraz[B1]
wysyła anonimową funkcję, która po ocenie do samego terminala (pon
iteracjach) wyprowadza tylkos
jako ten terminalPrzykładowe wejście / wyjście
źródło