메타 볼링 골프


22

당신의 임무는 가장 고유 한 바이트를 가진 다른 프로그램 (B)을 출력하는 가장 짧은 프로그램 (A)을 생성하는 것입니다. 본질적으로, 당신은 ouroboros 프로그램 의 한 쌍의 절반 (일명 주기적 반복 퀘인)을 골프 하고 다른 절반을 볼링합니다. A와 B는 다른 언어로되어있을 수 있습니다.

규칙과 채점

최종 점수는 <number of unique bytes in B> / <number of bytes in A>입니다. 최고 점수가 이깁니다. 이론상 최대 점수는 256입니다.

  • 프로그램 A는 1 바이트 이상이어야합니다
  • 프로그램 B는 전적으로 no-ops로 구성 될 수 없습니다. 즉, 하나 이상의 문자가 어떤 식 으로든 출력에 영향을 주어야합니다.
  • 퀴의 표준 규칙은 두 프로그램 모두에 적용 됩니다. 특히, 오류 퀴네는 어느 경우에도 허용되지 않습니다.

답변 형식 일관성을 위해 다음과 같이 답변을 시작하십시오.

# <Language for A> & <Language for B>, Score: <B score> / <A score> = <combined score>

이것이 분명해 지려면 두 번째 글 머리 기호를 약간 명확히해야한다고 생각합니다. 캐릭터가 정확하게 조작이되지 않는다는 것은 무엇을 의미합니까?
밀 마법사

고유 바이트로, 공유 바이트 또는 둘 사이의 유사성을 의미합니까?
KrystosTheOverlord

@KrystosTheOverlord는 프로그램 A와 무관하게 단순히 프로그램 B 내에있을 것입니다. 예를 들어, aaaaa고유 한 바이트는 하나이고 고유 한 바이트 abcde는 5입니다.
Beefster

1
프로그램 A가 단항 또는 언어로되어있는 프로그램을 기다리고 있습니다.
무지의 실시

4
무지의 @Embodimentof 프로그램 A는 고유 바이트가 아닌 바이트 수로 점수가 매겨 집니다. Lenguage / Unary는 끔찍하게 점수를 매길 것입니다
Jo King

답변:


14

JAPTJAPT , 점수 : 38분의 255 = 6.71

프로그램 A :

"iQ ²¯24
G²õ@i'#+Xd"iQ ²¯24
G²õ@i'#+Xd

프로그램 B의 길이가 8kB 이상이므로 링크가 끊어지기 때문에 모든 것을 붙여 넣지 않습니다. 샘플은 다음과 같습니다.

#þ"iQ ²¯24
G²õ@i'#+Xd"iQ ²,#ÿ"iQ ²¯24
G²õ@i'#+Xd"iQ ²,#Ā"iQ ²¯24
G²õ@i'#+Xd"iQ ²

NUL바이트를 작동 시키는 방법을 찾을 수 없으므로 프로그램 B에는 255 개의 고유 문자 만 있습니다. 프로그램 B는 기본적으로 단일 프로그램의 255 개 사본으로 구성되며, 여기서 관련없는 단일 바이트가 변경 될 때마다 처음 254 개의 실행이 무시됩니다.

설명을 위해, 단순화 된 버전의 A 부터 시작 하여 결과 B를보다 쉽게 ​​논의 할 수 있습니다.

"iQ ²¯23
3õ@i'#+Xd"iQ ²¯23
3õ@i'#+Xd

이 프로그램은 기본 페이로드 가능 Japt quine을 기반으로합니다 . 시작 부분의 문자열은 나머지 프로그램의 복제본을 포함하고 iQ ²따옴표를 삽입하여 복제하여 전체 프로그램의 문자열 표현을 작성한 다음 ¯23자체와 그 이후의 모든 항목을 제거합니다. 결과 문자열은 프로그램 A를 출력하는 프로그램입니다 .

"iQ ²¯23
3õ@i'#+Xd"iQ ²

이 문자열을이라고 U합니다.

A의 마지막 줄은 U매번 작은 변화로 여러 번 복제 됩니다. 특히, X범위의 각 숫자 에 대해 charcode 문자가있는 위치를 [1...3]출력 합니다. Japt의 기본 동작은 따옴표없이 쉼표로 구분 된 문자열을 출력하는 것이므로 Simplified A의 출력입니다 (각각 과 사이에 인쇄 할 수없는 바이트가 있음에 유의하십시오) ."#c" + UcX#"iQ

#"iQ ²¯23
3õ@i'#+Xd"iQ ²,#"iQ ²¯23
3õ@i'#+Xd"iQ ²,#"iQ ²¯23
3õ@i'#+Xd"iQ ²

이것을 Simplified B 라고합니다 .

단순화 B는 교대로, 구조가 간단 #c하고 U. 다행히이 답변을 위해, 각 #c과는 U쉼표 (,)로 구분으로 처리하고, 아주 마지막을 제외하고이 상황에서 그의 행동이 전부입니다 U출력에 영향을주지 않습니다. 출력에 영향을주는 Simplified B의 유일한 부분은 다음과 같습니다.

"iQ ²¯23
3õ@i'#+Xd"iQ ²

U우리는 이미 출력 단순화 A를 알고있는 것과 동일합니다 .

Simplified A와 Program A의 유일한 차이점은 범위에 [1...3]대한 사본을 생성하는 대신 실제 프로그램 이 범위에 대한 사본을 생성한다는 것입니다 [1...256]. 256 버전에서 그 결과 #c각각의 마지막 버전 "A"는 고유 바이트를 추가하지 않도록 멀티 바이트 문자가 있지만, 마지막 제외한 모든는하지만, 다른 문자가 U여전히 무시됩니다.


겠습니까는 :) 아주 좋은 38 바이트를 사용할 수 있습니까?
얽히고 설킨

@Shaggy 27바이트가 저장 될 때마다 조정해야하지만 그 외에는 작동하는 것처럼 보입니다.
카밀 드라 카리

1
@Shaggy 스코어링은 B의 고유 바이트 수를 기반으로하며 256 개의 가능한 바이트 만 있습니다. 내가 아는 한, 새로운 버전의 B조차도 Null 바이트를 포함하지 않습니다.
카밀 드라 카리

그런데 null 바이트로 작업하기 위해 몇 가지를 시도했지만 모두 실패했습니다.
얽히고 설킨

5

프로그램 A, Gol> <> , 256/20 바이트 = 12.8

"44XFL|r2ssl3%Q4s]|H

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

프로그램 B, 골> <>

"44XFL|r2ssl3%Q4s]|H	

 !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~€‚ƒ„…†‡ˆ‰Š‹ŒŽ‘’“”•–—˜™š›œžŸ ¡¢£¤¥¦§¨©ª«¬­®¯°±²³´µ¶·¸¹º»¼½¾¿ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖ×ØÙÚÛÜÝÞßàáâãäåæçèéêëìíîïðñòóôõö÷øùúûüýþÿ

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

프로그램은 출력 자체와 모든 바이트를 번갈아 가며 출력하는 것 사이를 번갈아 가며 보여줍니다.

설명:

"            Wrapping string literal pushes the first line to the stack backwards
 44X         Push 256
    FL|      Push the range from 0 to 255
       r                  Reverse the stack
        2ss               Push a quote
           l3%            If the stack length is divisible by 3
              Q4s]|       Only take the top 20 characters
                   H      And output the stack

1

프로그램 A : 05AB1E , 점수 : 256/41 256/31 바이트 = 8.258 ...

0"D34çý₅Ýç'q†22ǝ"D34çý₅Ýç'q†22ǝ

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

프로그램 B : 05AB1E

0"D34çý₅Ýç'q†22ǝ"D34çýq 

 !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnoprstuvwxyz{|}~ ¡¢£¤¥¦§¨©ª«¬­®¯°±²³´µ¶·¸¹º»¼½¾¿ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖ×ØÙÚÛÜÝÞßàáâãäåæçèéêëìíîïðñòóôõö÷øùúûüýþÿÝç'q†22ǝ

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

설명:

최단 : 05AB1E 대한이 하나 0"D34çý"D34çý( 14 바이트 ) 에 의해 제공 @OliverNi . 내 대답은을 추가하여 해당 quine의 수정 된 버전을 사용합니다 ₅Ýç'q†vy27ǝD}J.

0            # Push a 0 to the stack
             #  STACK: [0]
 "D34çý₅Ýç'q†vDy27ǝ}J"
             # Push the string "D34çý₅Ýç'q†vDy27ǝ}J" to the stack
             #  STACK: [0,"D34çý₅Ýç'q†vDy27ǝ}J"]
  D          # Duplicate the string
             #  STACK: [0,"D34çý₅Ýç'q†vDy27ǝ}J","D34çý₅Ýç'q†vDy27ǝ}J"]
   34çý      # Join the stack by '"'
             #  STACK: ['0"D34çý₅Ýç'q†vDy27ǝ}J"D34çý₅Ýç'q†vy27ǝD}J']
₅Ý           # Push a list in the range [0,255]
  ç          # Convert each integer to an ASCII character
   'q†      '# Filter the "q" to the front
      22ǝ    # Insert it at index 22 in the string (replacing the second '₅')
             # (and output the result implicitly)

프로그램 B는에 도달하자마자 종료 q되므로 실제 프로그램 B는 다음과 같습니다.

0"D34çý₅Ýç'q†22ǝ"D34çýq

그 이후의 모든 것은 무시되고 스택의 맨 위 ( 0"D34çý₅Ýç'q†22ǝ"D34çý₅Ýç'q†22ǝ)가 암시 적으로 출력됩니다.

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