Quining, ale z plikami Windows!

9

Napisz quine, która po uruchomieniu tworzy się w bieżącym katalogu, w pliku źródłowym o nazwie sama. Będziemy używać w tym systemie Windows, więc nazwa pliku (a zatem quine) musi mieć następujące ograniczenia:

  • Żadna z tych postaci \ / : ? * < > |
  • Mniej niż 211 255 znaków

Ograniczenia i założenia

  • Twój kod musi być pełnym programem (w końcu zostanie uruchomiony).

  • Brak kopiowania z pliku źródłowego.

  • Możesz założyć, że nie ma innego pliku z twoją nazwą Quine (ponieważ tworzyłby Quine (1)).

  • Błędy są dozwolone (o ile nie dostają się do kodu źródłowego)

To jest , najkrótszy kod w bajtach wygrywa!

Edytować

Może nie byłem jasny, plik z nazwą quine musi faktycznie zawierać quine. Mój błąd.

Thunda
źródło
Jakie są ograniczenia dotyczące znaków spoza ASCII w programie? (W systemie Windows może to prawdopodobnie zależeć od zainstalowanej wersji językowej systemu; nie pamiętam dokładnych zasad i tego, czy zmieniły się one z czasem).
Dlaczego mniej niż 211 bajtów? To rodzaj arbitralnego ograniczenia ...
mbomb007
@ mbomb007 Maksymalny rozmiar pliku, tak mi się wydaje.
Addison Crump,
1
@VoteToClose It's 255. stackoverflow.com/a/265782/2415524
mbomb007
@ mbomb007 Typo, być może?
Addison Crump,

Odpowiedzi:

6

Vitsy, 10 27 bajtów

'rddd++&"rdd8++a[v}v1-D);].

Jeśli :pozwolono mi, mogłem skrócić to do 11 bajtów. :(

Wyjaśnienie:

'rddd++&"rdd8++a[v}v1-D);].
'                           Capture all instructions as a string until encountering
                              ' again, looping if necessary.
 r                          Reverse the current stack (output is top-down).
  ddd++                     Push char literal ' to the stack.
       &                    Push a new stack to the stack stack.
        "                   Same as ', but " specific.
         r                  Reverse the current stack.
          dd8++             Push char literal " to the stack.
               a            Push 10 to the stack.
                [        ]  Loop forever.
                 v          Capture the top value as a variable.
                  }         Take the bottom item of the stack and put it on the top.
                   v        Dump the variable to the stack.
                    1-      Subtract 1.
                      D     Duplicate the top item.
                       );   Pop n; if n is 0, exit the loop.
               a[v v1-D);]  This is a makeshift for loop with 10 iterations.
                          . Pop the top stack as n, and the second stack as o. 
                              Write a file called "n" with the contents of "o".

Dwa stosy będą identyczne na końcu. W niektórych wersjach języka Java może to FileNotFoundExceptionspowodować z powodu różnych implementacji FileInputStreamklasy.

Poprzednia odpowiedź przed edycją:

&'rddd++}.

Wyjaśnienie:

&           Push a new stack to the stack stack.
 'rddd++    Modified standard quine.
        }   Move the ' to the right place.
         .  Pop the top stack as n, and the second stack as o. Write a file called
                 "n" with the contents of "o". (Quine name, no content)

Ponieważ równie dobrze mogę, oto schemat kroków, które występują w stosach (każdy stos jest reprezentowany przez []):

Initial state: [[]]

&              [[], []]
                  Push a new stack to the stack stack.

 '             [[], ["r", "d", "d", "d", "+", "+", "}", ".", "&"]]
                  This stack state occurs because ' will loop around the line
                    until finding the next '.

  r            [[], ["&", ".", "}", "+", "+", "d", "d", "d", "r"]]
                  Reverses the top (last) stack.

   ddd         [[], ["&", ".", "}", "+", "+", "d", "d", "d", "r", 13, 13, 13]
                  Push thirteen thrice.

      ++       [[], ["&", ".", "}", "+", "+", "d", "d", "d", "r", "'"]
                  Because char ' is 39 = 13 + 13 + 13.

        }      [[], [".", "}", "+", "+", "d", "d", "d", "r", "'", "&"]]
                  Takes the bottom item, then puts it on the top.

         .     []
                  Writes a file with content from the second-to-top stack and the
                    name as the concatenation of all elements in the top stack,
                    with top member priority (backwards from my representation).

Nie jestem pewien, jak to działa poprawnie; drobne zmiany powodują uszkodzenie. Na przykład umieszczenie &w różnych innych lokalizacjach powinno równie dobrze działać, ale powoduje ClassCastExceptions, IOExceptions i ArrayOutOfBoundsExceptions w zależności od tego, gdzie je umieścisz. Może być konieczne naprawienie błędu.

Addison Crump
źródło
1
+1 zaPush a new stack to the stack stack.
Pavel
1
+1 ode mnie, jeśli możesz przesunąć nowy stos stosu na stos stosu, w przeciwnym razie zapomnij! ... Żartuję +1, ja też się śmiałem.
Magic Octopus Urn
2
@carusocomputing Co jeśli powiedziałbym ci, że mogę o? ;)
Addison Crump
Westchnij rozpakuj ...
Magiczna ośmiornica Urn
1
Uhm ... Myślę, że wygenerowany plik powinien zawierać kod (tzn. Jego zawartość powinna być równa nazwie pliku)
Leo
5

Node.js, 56 52 bajtów

function f(){require('fs').writeFile(f+='f()',f)}f()

Spowoduje to wydrukowanie ostrzeżenia

DeprecationWarning: Wywołanie funkcji asynchronicznej bez wywołania zwrotnego jest nieaktualne.

Jeśli chcesz całkowicie zielony, zmiana writeFilena 4 kosztuje 4 bajty writeFileSync.

Patrick Roberts
źródło
2

Lua, 96 bajtów.

s="s=%qs=string.format(s,s)f=io.open(s)f.write(f,s)"s=string.format(s,s)f=io.open(s)f.write(f,s)

Wpisałem to na moim telefonie, powinno działać, ale przetestuję to, gdy dojdę do komputera.

ATaco
źródło
12
Myślę, że przynajmniej musisz zmienić się sting.formatna string.formatdwa razy.
Peter Taylor,
@PeterTaylor nie lubisz Stinga, prawda?
KeyWeeUsr
5
@KeyWeeUsr, nie mam nic przeciwko niemu osobiście, i faktycznie pomógł mi zapłacić za moje wychowanie, ale myślę, że standardowa biblioteka Lua prawdopodobnie została zaprojektowana dla ogólnej użyteczności przez osoby znające podobne API, a nie specjalnie dla fanów policji.
Peter Taylor,
1

C, 134 bajty

s[255];fd;char p[255]="s[255];fd;char p[255]=%c%s%c;main(){sprintf(s,p,34,p,34);creat(s,0);}";main(){sprintf(s,p,34,p,34);creat(s,0);}
MD XF
źródło
Źródło tutaj zawiera, *więc nie wygląda na to, aby było dozwolone zgodnie z regułami.
Wartość tuszu
@ValueInk Naprawiono. Dzięki za zwrócenie na to uwagi!
MD XF