증가하는 크기로 프로그램 생성


21

이 도전에서는 원래 프로그램 길이의 두 배인 프로그램을 출력하는 프로그램을 작성하게 됩니다. 출력 된 프로그램은 출력 새로운 프로그램이 프로그램은 두 배로해야 길이를.

내 프로그램이 a다음과 같은 경우 :

< a
> aa

< aa
> aaaa

< aaaa
> aaaaaaaa

규칙

  • 퀴인 내장 없음
  • 원래 프로그램은 1 바이트 이상이어야합니다.
  • 시퀀스는 이론적으로 무한히 작동해야합니다
  • 귀하의 프로그램은 무엇이든 읽을 수 없습니다 (파일, stdio)

당신의 점수는 원래 프로그램의 크기입니다.


파일을 읽거나 코드가 포함 된 장소에 액세스하여 파일에 액세스하는 것은 어떻습니까?
코너 오브라이언

@ CᴏɴᴏʀO'Bʀɪᴇɴ 그것은 내가 믿는 규칙을 위반하기 때문에 허용되지 않습니다.
Downgoat

2
@ Doᴡɴɢᴏᴀᴛ 태그 규칙 위키에서 quine 규칙을 권장하지만 자동으로 적용되지 않습니다
Martin Ender


답변:



8

자바 스크립트, 62 61 37 바이트


도움을 주신 @ Doᴡɴɢᴏᴀᴛ에 감사드립니다!


원본 [37 바이트] :

f=_=>'f='+'_'.repeat((10+f).length)+f

자식 [74 바이트] :

f=______________________________________=>'f='+'_'.repeat((10+f).length)+f

손자 [148 바이트] :

f=________________________________________________________________________________________________________________=>'f='+'_'.repeat((10+f).length)+f


대체 (콘솔에 인쇄 및 전체 프로그램) :

원본 [61 바이트] :

f=_=>console.log(`f=${'_'.repeat((0+f).length+5)+f};f()`);f()

자식 [122 바이트] :

f=______________________________________________________________=>console.log(`f=${'_'.repeat((0+f).length+5)+f};f()`);f()

손자 [244 바이트] :

f=________________________________________________________________________________________________________________________________________________________________________________________=>console.log(`f=${'_'.repeat((0+f).length+5)+f};f()`);f()



작동 원리!

1.   f=_=>   함수 f를 다음과 같이 정의하십시오.console.log(...)

2.   ;f()   기능을 실행합니다. f.

3.   (기능 f)  

  • console.log(...)   다음을 인쇄하십시오.

    • f=   리터럴 텍스트 "f ="
    • ${'_'.repeat((0+f).length+5)   f의 길이에 대해 "_"반복, f의 문자열 화에 포함되지 않은 문자를 설명하도록 변경됨
    • +f}   함수 f의 스트링 화
    • ;f()   리터럴 텍스트 "; f ()"

노트

  • console.log필요가 대신 alert하기 때문에 alert(내 컴퓨터 / 브라우저 구성에 적어도) 정말 긴 문자열로 잘 작동하지 않는 것
  • _의 그들이 F의 문자열 화 (stringification)에 포함되도록하여, 함수 f의 (미사용) 파라미터의 이름에 삽입된다.
  • console.log두 번째 솔루션에 대한 첫 번째 솔루션의 주요 개선 사항 (을 제거하는 것 제외 ) : 문자열로 캐스팅하는 10대신 함수를 추가 0하면 1 바이트가 길어지고 길이에 1을 더할 필요가 없으므로 바이트가 절약됩니다.

0+f함수를 문자열로 캐스트하기 위해
노력해야

48 바이트 :(f=_=>`(f=${'_'.repeat((0+f).length+5)+f})()`)()
Downgoat

@ Doᴡɴɢᴏᴀᴛ 결과를 반환하는 것이 일반적으로 허용됨을 잊었습니다. 업데이트됩니다.
jrich

@ Doᴡɴɢᴏᴀᴛ 사실, 함수로 답변을 작성하는 것이 일반적으로 받아 들여지기 때문에 솔루션이 함수를 호출해야합니까?
jrich

확실히, 당신은 할 수
Downgoat

6

Minkolang 0.15 , 19 14 바이트

"66*2-rIDdr$O.

원래 , 아이 , 손자 .

설명

"66*2-      $O.    Standard quine formulation

      r            Reverse stack
       I           Push length of stack
        D          Pop n and duplicate top of stack n times
         d         Duplicate top of stack
          r        Reverse stack

rs 사이 의 비트 는 두 배의 기준을 충족시키기에 충분한 시간을 종료 기간에 복제합니다. ."프로그램 중지"문자이므로 마지막에 많은 기간이 있어야합니다.



2

파이썬 3, 51 바이트

x=r"print('x=r\"'+x+'\"'+';exec(x*2)');";exec(x*2)

여기에는 후행 줄 바꿈이 포함됩니다.

어떤 출력 :

x=r"print('x=r\"'+x+'\"'+';exec(x*2)');";exec(x*2)
x=r"print('x=r\"'+x+'\"'+';exec(x*2)');";exec(x*2)

2

GolfScript, 11 바이트

{: ".~"]}.~

온라인으로 사용해보십시오!

소스 코드 작동 방식

{: ".~"]}.~

{       }    Define and push a code block.
         .~  Push a copy and execute it.
 :           Save the code block in the space character.
             Every subsequent space will now execute the code block.
   ".~"      Push that string.
       ]     Wrap the entire stack in an array.

위의 소스 코드가 한 번 실행되면 스택은

["" {: ".~"]} ".~"]

여기서 시작시 빈 문자열은 스택의 초기 상태 (빈 입력)에 해당합니다.

소스 코드의 두 복사본은 최종 상태를 유지합니다.

[["" {: ".~"]} ".~"] {: ".~"]} ".~"]

등등.

다음에 일어날 일

소스 코드를 실행 한 후 인터프리터는 다음을 수행합니다.

  1. 전체 스택을 배열로 감싸고 해당 배열을 스택에 푸시합니다.

    소스 코드의 단일 사본의 경우 이제 스택에

    ["" {: ".~"]} ".~"] [["" {: ".~"]} ".~"]]
    
  2. puts랩핑 된 스택을 인쇄하고 라인 피드를 인쇄하기 위해 실행 되었습니다.

    puts로 정의 {print n print}되므로 다음을 수행합니다.

    1. print검사하지 않고 스택의 사본을 인쇄합니다 (즉, 문자열 표현으로 변환하지 않고). 이것은 보낸다

      {: ".~"]}.~
      

      STDOUT에 스택 스택 상단에서 스택 사본을 팝합니다.

      이제 스택에

      ["" {: ".~"]} ".~"]
      
    2. 이전에 정의한 코드 블록을 실행합니다.

      :["" {: ".~"]} ".~"]공백 문자 를 저장 하여 시작한 다음 ".~"자신 을 밀어 ]스택에서 배열로 래핑합니다.

    3. n 단일 줄 바꿈으로 구성된 문자열을 푸시합니다.

      이제 스택에

      [["" {: ".~"]} ".~"] ".~"] "\n"
      
    4. 한 번 더 실행됩니다. 그러나 처음 호출했을 때 재정의되었으며 코드 블록이 아닌 배열을 포함합니다.

      실제로 ["" {: ".~"]} ".~"]스택을

      [["" {: ".~"]} ".~"] ".~"] "\n" ["" {: ".~"]} ".~"]
      
    5. 마지막으로, print검사하지 않고 맨 위 스택 항목을 인쇄하여 전송

      {: ".~"]}.~
      

      STDOUT에


1

𝔼𝕊𝕄𝕚𝕟, 26 자 / 36 바이트

⟮ô`\u27ee⦃ᶈ0}\u27ef
`ď2)⟯

Try it here (Firefox only).

후행 줄 바꿈이 있습니다.

설명

표준 퀴네 : ⟮ⒸⅩ222+ᶈ0

수정 :

  • 용도 ô함수를 하여 모든 결과를 Quies 대신 마지막 결과를 출력하십시오 (암시 적 출력을 사용하여 수행됨)
  • 용도 \u27ee⦃ᶈ0}\u27ef\n이후의 복사 블록과 충돌을 방지하기 위해 복사 블록을 하고 닫습니다.
  • ď2문자열을 두 번 반복하는 데 사용하십시오 .
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.