순환 레 벤퀸


45

배경

대부분의 PPCG 단골 알 수로서, 실행하면 자신의 소스 코드를 출력하는 프로그램입니다; 두 문자열 사이 의 Levenshtein 거리는 한 문자열을 다른 문자열로 변경하는 데 필요한 삽입, 삭제 및 편집의 최소 수입니다. 이 과제에서 우리는 두 가지 개념을 "레 벤퀸 (levenquine)"으로 결합하고 있습니다. 자체 소스 코드를 출력하지만 한 문자의 인스턴스 하나만 삽입, 삭제 또는 다른 문자로 대체하는 프로그램입니다. 즉, 프로그램과 출력 사이의 Levenshtein 거리는 1입니다.

작업

레 벤퀸을 출력하여 레 벤퀸, 해당 프로그램의 출력도 레 벤퀸 등으로 작성하십시오. 또한 어느 시점에서 프로그램을 반복적으로 실행하고 출력을 실행하고 출력 출력을 실행하는 순서는 결국 원래 프로그램으로 돌아와야합니다.

일을 훨씬 더 어렵게 만드는 한 가지 추가 제한 사항이 있습니다.이주기 내에 공통적 인 문자가없는 두 개의 개별 프로그램이 있어야합니다 (즉, 한 프로그램 내에 존재하고 다른 프로그램 내에 존재하는 문자가 없습니다). 따라서 프로그램은 점차적으로 다른 문자 세트로 다시 전환해야합니다.

출력을 생성하는 모든 프로그램에 필연적으로 상용구가 필요한 프로그래밍 언어를 사용하는 경우 (예 : print명령문 을 작성하는 한 가지 방법 만 있고 다른 유용한 출력 형식은 없음) 해당 상용구를 목적에 따라 존재하지 않는 것으로 취급 할 수 있습니다 두 프로그램의 공통 문자를 결정합니다. 그러나 코드의 Levenquine 속성을 결정하기 위해 상용구를 계산해야합니다.

설명

  • 사이클의 각 "프로그램"은 전체 프로그램 또는 기능 일 수 있습니다. 그것들이 모두 같을 필요는 없습니다. 예를 들어 일부는 전체 프로그램 일 수도 있고 일부는 기능 일 수도 있습니다.
  • 사이클의 모든 프로그램이 동일한 형식의 출력을 사용할 필요는 없습니다. 예를 들어, 일부는 표준 출력을 통해 출력하고 일부는 표준 오류를 통해 출력 할 수 있습니다.
  • 프로그램은 입력없이 실행됩니다 (또는 가장 간단한 입력을 수행하기 위해 입력이 필요한 언어로).
  • 적절한 퀴니 규칙이 적용됩니다. Levenquine은 진정한 quine이 아니지만, 올바른 quine을 작성할 때 불법적 인 일은 할 수 없습니다. 특히, 널 (null) 프로그램은 적절한 레 벤퀸 (Levenquine)의 출력이 유효하지 않으므로 사이클의 일부가 될 수 없습니다.
  • Levenquine 제한은 바이트가 아닌 문자로 측정됩니다 (예 : ê소스가 UTF-8로 인코딩 된 경우에도 한 문자 임). 비 공통 문자 제한도 문자로 측정됩니다. 그러나 승리 조건은 바이트 단위로 계산됩니다.

승리 조건

주기에서 최소한 다음 세 가지 프로그램을 제출하십시오. 가장 짧은 프로그램 (바이트 단위); 그리고 공통의 문자가없는 사이클의 두 프로그램. 이 중 두 개가 동일 할 수 있으며 세 개 모두가 다를 수도 있습니다. 점수는 가장 짧은 프로그램의 길이 (바이트)를 기준으로하며 짧을수록 좋습니다. 따라서 경쟁이됩니다.


삭제 된 게시물을 볼 수있는 사용자의 경우 : 샌드 박스 게시물이 여기 있었습니다.

나는 또한주기의 길이를 포함하는 답이 좋을 것이라고 생각한다.
mbomb007

예를 들어, 언어에 출력을 수행하기위한 여러 기능이 있지만 모두 쌍으로 문자를 공유하면 어떻게됩니까?
Ørjan Johansen

2
@ ØrjanJohansen : 나는 그중 하나를 고르고 그 경우에 고집하는 것에 너무 반대하지 않을 것입니다. 그러나 논란의 여지가 없다. 나는 규칙이 객관적이기를 원했습니다. 그렇지 않으면 사람들이 허점을 찌르려고하는 경향이 있기 때문에 규칙을 너무 복잡하게 만들면 그것이 의미하는 바에 대해 논쟁하는 경향이 있습니다.

비트 단위의 레벤 퀸일 수 있습니까? 원래 소스 코드와의 거리에서 1 바이트가 떨어져 있습니까?
매직 문어 Urn

답변:


34

GOL> <> , 252 167 바이트

1>'r&ff9++r}}r&f*bc++1z.r}r6=z?Hzznr6rHr}r:ee+6+=z9*5c*+1z . }&z+5c*&H}rebe*b+ke++rHS6PWSb`S6P$$1W5/11b6W6EE/W6EE`S6P$$W61`S6P5W6$5_61P1WW_b_

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

그리고 서로 다른 ( 확인 ) 프로그램 :

0<CŽB‚‚UGGŽ™™ŽB‚F~GGM–JŽ™ŽRY–[d––ŠŽRŽdŽ™ŽVGRGY–UFQFGM–<J<™B–GQFBd™Ž~F~G‡GGŽd;oRl-7-7so~|;oRl@@-Ms7QKMM3-3-3~R-4sRaaK-3sRaa|;oRl@@sR43M|;oRlQ-sR43@Q{RMlMss3{~{"

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

이것은 대부분 Mutually Exclusive Quines 챌린지에 대한 나의 대답에서 영감을 얻었 으며 kudos는 Bubbler 's Gol> <> answer에도 있습니다.

다음은 실행할 수 있는 확인 프로그램 입니다. 불행히도 시간이 초과되지만 코드의 한 섹션이 다른 섹션을 작성하는 방법을 볼 수 있으며 인쇄 된 마지막 버전을 복사하여 입력에 붙여 넣어 계속할 수 있습니다. 결국, 당신은 당신이 넣은 첫 번째 프로그램에 도달하게됩니다.

설명

코드의 두 섹션은 실제 실행 부분과 다른 코드 섹션을 포함하는 데이터의 두 섹션으로 구성됩니다. 둘 다 실질적으로 동일하게 작동합니다.

플래그 ( 1또는 코드의 첫 문자)에 의존합니다 0. 플래그가 설정되면 252 번째 문자를 가져 와서 코드 28에서 더하거나 빼서 코드에 다른 코드 섹션을 작성 하기 시작합니다.

예를 들어, 위의 첫 번째 프로그램 이후 코드의 처음 두 반복은 다음과 같습니다.

1>'r&ff9++r}}r&f*bc++1z.r}r6=z?Hzznr6rHr}r:ee+6+=z9*5c*+1z . }&z+5c*&H}rebe*b+ke++rHS6PWSb`S6P$$1W5/11b6W6EE/W6EE`S6P$$W61`S6P5W6$5_61P1WW_b_C

1>'r&ff9++r}}r&f*bc++1z.r}r6=z?Hzznr6rHr}r:ee+6+=z9*5c*+1z . }&z+5c*&H}rebe*b+ke++rHS6PWSb`S6P$$1W5/11b6W6EE/W6EE`S6P$$W61`S6P5W6$5_61P1WW_b_CŽ

그것은 현재 구역의 끝에 도달 결국 때, (부호의 두 번째 문자 뒤집 <>다른 부분에 포인트와 다시 참조).

여기에 두 섹션이 모두 있습니다. 첫 번째 섹션 실행에서 두 번째 섹션 실행으로 전환하려고합니다.

1>'r&ff9++r}}r&f*bc++1z.r}r6=z?Hzznr6rHr}r:ee+6+=z9*5c*+1z . }&z+5c*&H}rebe*b+ke++rHS6PWSb`S6P$$1W5/11b6W6EE/W6EE`S6P$$W61`S6P5W6$5_61P1WW_b_CŽB‚‚UGGŽ™™ŽB‚F~GGM–JŽ™ŽRY–[d––ŠŽRŽdŽ™ŽVGRGY–UFQFGM–<J<™B–GQFBd™Ž~F~G‡GGŽd;oRl-7-7so~|;oRl@@-Ms7QKMM3-3-3~R-4sRaaK-3sRaa|;oRl@@sR43M|;oRlQ-sR43@Q{RMlMss3{~{"

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

플래그는 각 섹션의 반대이므로 새로 실행중인 섹션은 자체 코드에 도달 할 때까지 다른 코드 섹션을 삭제하기 시작합니다. 이 시점에서 플래그가 반전되고 사이클이 다시 반복됩니다.

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