Rosyjski Nesting Quine

18

Rosyjska lalka gniazdująca, bardziej znana jako lalka Matryoshka , to lalka, która zawiera mniejszą wersję siebie, która następnie zawiera kolejną mniejszą wersję siebie, która zawiera mniejszą wersję siebie, która zawiera mniejszą wersję siebie, która zawiera mniejszą wersję siebie ... - aż w końcu ostatnia jest pusta. Przykład:

Lalki Matryoshka <3

Dzisiaj Twoim celem jest naśladowanie rosyjskiej tradycji, pisząc program lub funkcję, która, gdy będzie zawierała N razy, wydrukuje się zawierająca N-1 swoich kopii.

Na przykład program lalki abcdbędzie miał program N = 3 abababcdcdcd, który wydrukuje program N = 2 ababcdcd, który drukuje oryginalny program N = 1 abcd, który w końcu wypisuje N = 0, który jest pusty. Powinno to teoretycznie działać dla każdej rozsądnej wartości N.

Zasady:

  • Oto program TIO, który pomaga generować programy dla lalek na podstawie Twojego programu
  • Obowiązują standardowe zasady Quine
  • Obowiązują standardowe luki
  • „Zawiera” oznacza bezpośrednio w centrum poprzedniej wersji, więc twoje rozwiązanie musi mieć dodatnią liczbę parzystą bajtów. Program o długości 10 będzie miał kopię oryginału wstawioną po piątym bajcie, a następnie kolejną po dziesiątym bajcie itp.
  • Wyjściowe pojedyncze spacje są dozwolone
  • Ponieważ jest to , Twoim celem jest, aby Twój program N = 1 był jak najkrótszy.
  • Dziękujemy za wyjaśnienie twojego kodu
Jo King
źródło
Wpis w piaskownicy (usunięty)
Jo King
Do czego Nzmierzony jest rozmiar kodu?
flawr
@flawr N = 1 .....
Jo King
12
Czy ta animacja jest naprawdę konieczna ?!
Kudłaty

Odpowiedzi:

9

JavaScript, 36 32 bajtów

Wykorzystuje fakt, że Function.prototype.toString()nie przyjmuje żadnych argumentów i dlatego zignoruje wszelkie przekazane mu argumenty.

Częściowo zainspirowany rozwiązaniem user202729 .

f=_=>f.toString( ).slice(14,-16)

Spróbuj

o.innerHTML=["<span>Five</span>",(f=_=>f.toString(f=_=>f.toString(f=_=>f.toString(f=_=>f.toString(f=_=>f.toString( ).slice(14,-16) ).slice(14,-16) ).slice(14,-16) ).slice(14,-16) ).slice(14,-16))(),"<span>Four</span>",(f=_=>f.toString(f=_=>f.toString(f=_=>f.toString(f=_=>f.toString( ).slice(14,-16) ).slice(14,-16) ).slice(14,-16) ).slice(14,-16))(),"<span>Three</span>",(f=_=>f.toString(f=_=>f.toString(f=_=>f.toString( ).slice(14,-16) ).slice(14,-16) ).slice(14,-16))(),"<span>Two</span>",(f=_=>f.toString(f=_=>f.toString( ).slice(14,-16) ).slice(14,-16))(),"<span>One</span>",(f=_=>f.toString( ).slice(14,-16))(),"<span>Thunderbirds Are Go!</span>"].join`\n`
span{font-weight:bold;font-size:16px;line-height:1.5em;text-transform:uppercase;}span:last-child{font-size:8px;}
<pre id=o></pre>

Kudłaty
źródło
5

Galaretka , 16 bajtów

Ṿḣ-9Ḋð}“““““““““

Wypróbuj online!

Podwojony: wypróbuj online!

Trzykrotnie: wypróbuj online!


Galaretka nie ma żadnej zagnieżdżonej struktury, ale jej literały łańcuchowe są automatycznie kończone.


Ṿḣ-9Ḋ    First chain. (monadic)
Ṿ        Uneal. (to string)
 ḣ-9     Take the ead, ends at the -9'th character.
    Ḋ    equeue, remove the first character.

     ð             Terminate the first chain, start a new one.
      }            Convert the last monadic chain to a dyadic one.
       “““““““““   String literal.
                   This matches the pattern <dyad> <nilad>, so applies
                   the the corresponding rules. This way a link can take data
                   to the right of it.

Spróbuje różnych podejść, aby sprawdzić, czy mogą być krótsze.

użytkownik202729
źródło
2

dc , 4 bajty

 []p

Podobnie do niektórych innych odpowiedzi, ponieważ ciągi znaków dcmają ograniczniki start ( [) i end ( ]) (tzn. "Nie wykonuje obu obowiązków itp.), Można je zagnieżdżać bez żadnego wysiłku. pdrukować.

N = 1: Wypróbuj online!

N = 2: Wypróbuj!

N = 3: Wypróbuj nesteder!

brhfl
źródło