거의 졸다


12

나는 그에게 제공하여 친구를 속일 원 quine 것을 거의 일을하지만, sloppier 및 sloppier되었다.

실행될 때 프로그램을 출력하지만 하나의 문자는 제거하는 프로그램을 작성하십시오. 하나의 문자를 추가, 제거 또는 둘 다 할 수 있습니다 (한 문자 변경). 그러나 하나의 캐릭터 만 .

당신의 점수는 (length of your program) / floor(sqrt(number of times the program almost quines))( / 0무한대)

number of times the program almost quinesstdout에서 한 문자 만 변경하면서 프로그램이 몇 번이나 실행되는지입니다. 프로그램이 입력을받지 못할 수 있습니다. 이미 인쇄 된 프로그램을 인쇄하지 못할 수도 있습니다.

이전에 추가 한 문자를 추가하거나 동일한 색인에서 문자를 제거 할 수도 없습니다 . 예를 들어, 1이전에 추가 한 1후 다시 추가 하면 그 지점이 number of times the program almost quines멈 춥니 다. 첫 번째 문자를 제거하면 첫 번째 문자를 다시 제거 할 수 없습니다. 세 번째 문자를로 변경 한 경우 세 번째 문자를 2추가 2하거나 제거 할 수 없습니다 .


quine는 무엇입니까?
Abr001am

@ Agawa001 quine 있는 프로그램 인쇄 자체가.

답변:


7

CJam, 0.000884

{_,6/[{64md}6*](124+\+'�f++`"1$~"}""1$~

여기서 는 코드 포인트 128의 인쇄 할 수없는 문자를 나타냅니다 . 온라인으로 사용해보십시오.

생각

이 방법은 U + 4000000에서 U + 7FFFFFFF 사이의 코드 포인트가있는 모든 UCS 문자 (원본 사양)를 코드 블록 다음에 오는 초기 빈 문자열에 추가합니다.

UTF-8을 선택 하면 다음과 같이 6 바이트 문자열을 사용하여 이러한 각 문자를 인코딩합니다.

1111110u₂     10vvvvvv₂     10wwwwww₂     10xxxxxx₂     10yyyyyy₂     10zzzzzz₂

252 + u       128 + vvvvvv  128 + wwwwww  128 + xxxxxx  128 + yyyyyy  128 + zzzzzz

따라서 우리는 기본 64에서 6 자리의 최하위 자릿수를 계산하고 252 개를 최상위 자릿수에, 128을 나머지 자릿수에 더하여이 범위 의 n 번째 문자를 인코딩 할 수 있습니다.

채점

있다 2 ** 31 = 2,147,483,6486 바이트 UTF-8 문자와 점수가 그래서 원래 코드의 길이는 39입니다 39 / floor(2 ** 15.5) = 39 / 46340 = 0.0008416055243849806.

작동 원리

{                                }""    e# Push the code block and an empty string.
                                    1$~ e# Execute a copy of the code block.
 _,                                     e# Push the length of the string.
   6/                                   e# Divide by 6 to get the number of chars.
      {64md}6*                          e# Perform modular division six times.
     [        ]                         e# Collect the results in an array.
               (124+\+                  e# Add 124 to the first element.
                      '�f+              e# Add 128 to all and cast each to Char.
                          +             e# Concatenate the strings.
                           `            e# Push a string representation.
                            "1$~"       e# Push '1$~' to complete the quine.

첫 번째 (낮은) 점수 때문에이 점을 받아들 입니다. 허용하겠습니다.

6

CJam, 46 바이트, 65504 추가, 65505 del, 점수 0.127424

{`-2<_0c#)!{'#/~(_)\+\+S+]'#*}*W<"
}_~"e# 
}_~

여기에서 테스트하십시오.

기본 형태는 표준 일반 CJam quine입니다. "거의 quine" e#을하기 위해 quine 블록의 끝에 주석 이 있습니다. 여기서 코드에 영향을주지 않고 자유롭게 문자를 추가 할 수 있습니다. 주석에는 처음에 단일 공백이 포함되어 있습니다.

프로그램은 계속해서 주석 앞에 문자를 추가 !하고 ASCII 값 순서대로 시작 합니다. CJam의 문자 코드는 2 16 이후에 줄 바꿈 되므로 어느 시점에서 널 바이트가 추가됩니다. 그런 다음 프로그램 은 주석이 비워 질 때까지 주석 에서 바이트를 제거하기 시작 합니다 (제거 된 문자의 위치가 항상 다름).


5

CJam, 19 바이트, 65536 추가, 0 del, 점수 0.074219

"a"{\)_)++`\"_~"}_~

간단할수록 좋습니다.

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