Quining, pero con archivos de Windows!

9

Escriba una quine que, cuando se ejecute, se cree en el directorio actual, en un archivo fuente llamado a sí mismo. Usaremos Windows en esto, por lo que el nombre del archivo (y por lo tanto quine) debe tener las siguientes limitaciones:

  • Ninguno de estos personajes \ / : ? * < > |
  • Menos de 211 255 caracteres

Limitaciones y suposiciones.

  • Su código debe ser un programa completo (después de todo, se ejecutará).

  • Sin copia del archivo fuente.

  • Puede suponer que no hay otro archivo con su Quine como nombre (ya que produciría Quine (1)).

  • Se permiten errores (siempre que no entren en el código fuente

Este es el , ¡el código más corto en bytes gana!

Editar

Tal vez no estaba claro, el archivo con el nombre de la quine realmente debe contener la quine. Culpa mía.

Thunda
fuente
¿Cuáles son las limitaciones de los caracteres no ASCII en el programa? (En Windows, esto podría muy posiblemente depende de lo que está instalada la versión de idioma de Windows; me olvido de las reglas exactas y si han cambiado con el tiempo.)
¿Por qué menos de 211 bytes? Eso es algo de una restricción arbitraria ...
mbomb007
@ mbomb007 Tamaño máximo de nombre de archivo, creo.
Addison Crump
1
@VoteToClose Son 255. stackoverflow.com/a/265782/2415524
mbomb007
@ mbomb007 Typo, tal vez?
Addison Crump

Respuestas:

6

Vitsy, 10 27 bytes

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

Si :se permitiera, podría acortar esto a 11 bytes. :(

Explicación:

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

Las dos pilas serán idénticas al final. En algunas versiones de Java, esto puede FileNotFoundExceptiondeberse a diferentes implementaciones de la FileInputStreamclase.

Respuesta anterior antes de editar:

&'rddd++}.

Explicación:

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

Porque también podría hacerlo, aquí hay un diagrama de los pasos que ocurren dentro de las pilas (cada pila está representada por []):

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

En realidad no estoy seguro de cómo funciona esto bien; cambios mínimos hacen que esto se rompa. Por ejemplo, colocar el &en varias otras ubicaciones debería funcionar igual de bien, pero causa ClassCastExceptions, IOExceptionsy ArrayOutOfBoundsExceptions dependiendo de dónde lo coloque. Puede que tenga que hacer algunas correcciones de errores.

Addison Crump
fuente
1
+1 paraPush a new stack to the stack stack.
Pavel
1
+1 de mi parte si puedes empujar una pila de pila nueva a una pila de pila de pila, ¡de lo contrario olvídalo! ... Bromeando +1, también me reí.
Urna de pulpo mágico
2
@carusocomputing ¿Qué pasa si te digo que puedo o? ;)
Addison Crump
Suspiro descomprimir ...
Urna de pulpo mágico
1
Uhm ... creo que se supone que el archivo generado contiene el código (es decir, su contenido debe ser igual a su nombre de archivo)
Leo
5

Node.js, 56 52 bytes

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

Esto imprime la advertencia

DeprecationWarning: la llamada a una función asincrónica sin devolución de llamada está en desuso.

Si desea el todo verde, cuesta 4 bytes cambiar writeFilea writeFileSync.

Patrick Roberts
fuente
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)

Escribí esto en mi teléfono, debería funcionar, pero lo probaré cuando llegue a una computadora.

Un taco
fuente
12
Creo que al menos tendrás que cambiar sting.formata string.formatdos veces.
Peter Taylor
@PeterTaylor, no te gusta Sting, ¿verdad?
KeyWeeUsr
55
@KeyWeeUsr, no tengo nada en contra de él personalmente, y de hecho ayudó a pagar mi educación, pero creo que la biblioteca estándar de Lua probablemente fue diseñada para su uso general por personas familiarizadas con API similares en lugar de específicamente para los fanáticos de la Policía.
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);}
MD XF
fuente
La fuente aquí contiene, *por lo que no parece que esté permitido de acuerdo con las reglas.
Value Ink
@ValueInk Fixed. ¡Gracias por señalar eso!
MD XF