Quining, 그러나 Windows 파일!


9

실행할 때 quine을 작성하여 현재 디렉토리의 자체 파일에 자신을 작성하십시오. 여기서는 Windows를 사용하므로 파일 이름 (및 quine)에는 다음과 같은 제한이 있어야합니다.

  • 이 문자들 중 어느 것도 \ / : ? * < > |
  • 미만 (211) 255 자

한계와 가정

  • 코드는 전체 프로그램이어야합니다 (결국 실행됩니다).

  • 소스 파일에서 복사하지 않습니다.

  • Quine을 이름으로하는 다른 파일이 없다고 가정 할 수 있습니다 ( Queen (1)을 생성 할 때 ).

  • 소스 코드에 들어 가지 않는 한 오류가 허용됩니다.

이것은 바이트 단위의 가장 짧은 코드가 승리합니다!

편집하다

어쩌면 나는 명확하지 않았지만 quine의 이름을 가진 파일은 실제로 quine을 포함해야합니다. 내 잘못이야.


프로그램에서 비 ASCII 문자에 대한 제한은 무엇입니까? (Windows의 경우, 이것은 설치된 언어 버전의 Windows에 따라 달라질 수 있습니다. 정확한 규칙과 시간에 따른 변경 여부를 잊어 버렸습니다.)

왜 211 바이트 미만입니까? 그것은 일종의 자의적인 제한입니다 ...
mbomb007

@ mbomb007 최대 파일 이름 크기라고 생각합니다.
애디슨 크럼

1
@VoteToClose 255입니다. stackoverflow.com/a/265782/2415524
mbomb007

아마 @ mbomb007 오타?
애디슨 크럼

답변:


6

Vitsy, 10 27 바이트

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

:허용 된 경우 이를 11 바이트로 줄일 수 있습니다. :(

설명:

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

두 스택은 끝에서 동일합니다. 일부 Java 버전에서는 클래스의 FileNotFoundException구현이 다르기 때문에이 문제가 발생할 수 있습니다 FileInputStream.

편집 전의 이전 답변 :

&'rddd++}.

설명:

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

내가 할 수도 있기 때문에 스택 내에서 발생하는 단계의 다이어그램이 있습니다 (각 스택은로 []표시됨).

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

실제로 이것이 어떻게 작동하는지 잘 모르겠습니다. 미세한 변경으로 인해이 문제가 발생합니다. 예를 들어, &다른 여러 위치에 배치하면 잘 작동하지만 배치 위치 에 따라 ClassCastExceptions, IOExceptions 및 ArrayOutOfBoundsExceptions가 발생합니다. 몇 가지 버그 수정이 필요할 수 있습니다.


1
+1Push a new stack to the stack stack.
Pavel

1
새 스택 스택을 스택 스택 스택으로 푸시 할 수 있으면 +1하고 그렇지 않으면 잊어 버리십시오! ... 키딩 +1, 나도 웃었다.
매직 문어 Urn

2
@carusocomputing 내가 할 수 있다고 말하면 어떻게 o됩니까? ;)
Addison Crump

한숨 푼다 ...
Magic Octopus Urn

1
음 ... 생성 된 파일에 코드가 포함되어 있다고 생각합니다 (예 : 내용이 파일 이름과 같아야 함)
Leo

5

Node.js, 56 52 바이트

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

이것은 경고를 인쇄합니다

DeprecationWarning : 콜백없이 비동기 함수 호출은 더 이상 사용되지 않습니다.

모두 녹색을 원하면로 변경하는 데 4 바이트가 소요 writeFile됩니다 writeFileSync.


2

루아, 96 ​​바이트

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)

전화로 이것을 입력하면 작동하지만 컴퓨터에 도착하면 테스트하겠습니다.


12
나는 적어도 당신이 변화해야합니다 생각 sting.formatstring.format두 번.
피터 테일러

@PeterTaylor 당신은 스팅을 좋아하지 않습니까?
KeyWeeUsr

5
@KeyWeeUsr, 나는 개인적으로 그에 대해 아무것도 없으며, 실제로 그는 내 육성을 위해 돈을 지불하는 데 도움이되었지만 Lua 표준 라이브러리는 아마도 경찰 팬을 위해보다는 비슷한 API에 익숙한 사람들이 일반적으로 유용하게 사용할 수 있다고 생각합니다.
피터 테일러

1

C, 134 바이트

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

여기에 소스가 포함되어 *있어 규칙에 따라 허용 된 것처럼 보이지 않습니다.
Value Ink

@ValueInk 수정. 지적 해 주셔서 감사합니다!
MD XF
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.