Quining, aber mit Windows-Dateien!


9

Schreiben Sie eine Quine, die sich beim Ausführen im aktuellen Verzeichnis in einer Quelldatei mit dem Namen selbst erstellt. Wir werden hier Windows verwenden, daher muss der Dateiname (und damit Quine) die folgenden Einschränkungen aufweisen:

  • Keines dieser Zeichen \ / : ? * < > |
  • Weniger als 211 255 Zeichen

Einschränkungen und Annahmen

  • Ihr Code muss ein vollständiges Programm sein (es wird schließlich ausgeführt).

  • Kein Kopieren aus der Quelldatei.

  • Sie können davon ausgehen, dass es keine andere Datei mit Ihrem Quine als Namen gibt (da dies Quine (1) erzeugen würde ).

  • Fehler sind zulässig (solange sie nicht in den Quellcode gelangen

Dies ist , kürzester Code in Bytes gewinnt!

Bearbeiten

Vielleicht war mir nicht klar, die Datei mit dem Namen des Quines muss tatsächlich das Quine enthalten. Mein Fehler.


Was sind die Einschränkungen für Nicht-ASCII-Zeichen im Programm? (Unter Windows hängt dies möglicherweise davon ab, welche Sprachversion von Windows installiert ist. Ich vergesse die genauen Regeln und ob sie sich im Laufe der Zeit geändert haben.)

Warum weniger als 211 Bytes? Das ist eine Art willkürliche Einschränkung ...
mbomb007

@ mbomb007 Maximale Dateinamengröße, glaube ich.
Addison Crump

1
@ VoteToClose Es ist 255. stackoverflow.com/a/265782/2415524
mbomb007

@ mbomb007 Tippfehler vielleicht?
Addison Crump

Antworten:


6

Vitsy, 10 27 Bytes

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

Wenn :erlaubt, könnte ich dies auf 11 Bytes verkürzen. :(

Erläuterung:

'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".

Die beiden Stapel sind am Ende identisch. In einigen Java-Versionen kann dies FileNotFoundExceptionaufgrund unterschiedlicher Implementierungen der FileInputStreamKlasse zu einem Fehler führen.

Vorherige Antwort vor dem Bearbeiten:

&'rddd++}.

Erläuterung:

&           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)

Da ich genauso gut könnte, ist hier ein Diagramm der Schritte, die innerhalb der Stapel auftreten (jeder Stapel wird durch dargestellt []):

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).

Ich bin mir eigentlich nicht sicher, wie das richtig funktioniert. winzige Änderungen führen dazu, dass dies unterbrochen wird. Zum Beispiel sollte das Platzieren &an verschiedenen anderen Orten genauso gut funktionieren, aber es verursacht ClassCastExceptions, IOExceptions und ArrayOutOfBoundsExceptions, je nachdem, wo Sie es platzieren. Möglicherweise muss ich einige Fehlerbehebungen vornehmen.


1
+1 fürPush a new stack to the stack stack.
Pavel

1
+1 von mir, wenn du einen neuen Stapelstapel auf einen Stapelstapelstapel schieben kannst, sonst vergiss es! ... Scherz +1, ich habe auch gelacht.
Magic Octopus Urn

2
@carusocomputing Was wäre, wenn ich dir sagen würde, dass ich mit kann o? ;)
Addison Crump

Sigh unzip ...
Magie Octopus Urn

1
Ähm ... Ich denke, dass die generierte Datei den Code enthalten soll (dh ihr Inhalt sollte dem Dateinamen entsprechen)
Leo

5

Node.js, 56 52 Bytes

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

Dies gibt die Warnung aus

DeprecationWarning: Das Aufrufen einer asynchronen Funktion ohne Rückruf ist veraltet.

Wenn Sie das All-grün wollen, es kostet 4 Bytes zu ändern writeFilezu writeFileSync.


2

Lua, 96 Bytes.

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)

Tippte dies auf meinem Telefon, sollte funktionieren, aber ich werde es testen, wenn ich an einen Computer komme.


12
Ich denke , zumindest Sie ändern müssen werden sting.formatzu string.formatzweimal.
Peter Taylor

@ PeterTaylor du magst Sting nicht, oder?
KeyWeeUsr

5
@KeyWeeUsr, ich habe nichts gegen ihn persönlich, und tatsächlich hat er mir geholfen, meine Erziehung zu bezahlen, aber ich denke, dass die Lua-Standardbibliothek wahrscheinlich für die allgemeine Benutzerfreundlichkeit von Personen konzipiert wurde, die mit ähnlichen APIs vertraut sind, und nicht speziell für Polizeifans.
Peter Taylor

1

C 134 Bytes

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);}

Die Quelle hier enthält, *so dass es nicht so aussieht, als wäre es gemäß den Regeln erlaubt.
Value Ink

@ValueInk behoben. Vielen Dank für den Hinweis!
MD XF
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.