Golf meta-bowling


21

Nhiệm vụ của bạn là tạo ra chương trình ngắn nhất (A) tạo ra chương trình khác (B) với các byte duy nhất, lần lượt xuất ra chương trình gốc (A). Về cơ bản, bạn đang chơi golf một nửa của một cặp chương trình ouroboros (còn gọi là quine lặp lại định kỳ) và chơi bowling nửa còn lại. A và B có thể bằng các ngôn ngữ khác nhau.

Quy tắc và chấm điểm

Điểm cuối cùng của bạn là <number of unique bytes in B> / <number of bytes in A>. Điểm số cao nhất chiến thắng. Cần lưu ý rằng điểm tối đa theo lý thuyết là 256.

  • Chương trình A phải dài ít nhất một byte
  • Chương trình B không thể bao gồm hoàn toàn các lệnh không hoạt động, tức là ít nhất một ký tự phải ảnh hưởng đến đầu ra theo một cách nào đó.
  • Quy tắc chuẩn của quines áp dụng cho cả hai chương trình. Đáng chú ý, các lỗi không được phép trong cả hai trường hợp.

Để đảm bảo tính nhất quán của câu trả lời, hãy bắt đầu câu trả lời của bạn bằng một cái gì đó như thế này:

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

Để làm cho điều này trở nên rõ ràng, tôi nghĩ rằng bạn sẽ phải làm rõ điểm đạn thứ hai một chút. Điều đó có nghĩa gì với một nhân vật chính xác là không-op?
Thuật sĩ lúa mì

Theo các byte duy nhất, bạn có nghĩa là các byte được chia sẻ hoặc sự tương đồng giữa hai byte?
KrystosTheOverlord

@KrystosTheOverlord, nó sẽ chỉ đơn giản là trong chương trình B, không liên quan đến chương trình A. Ví dụ: aaaaacó một byte duy nhất và abcdecó 5 byte duy nhất.
Beefster

1
Tôi chỉ chờ đợi các chương trình mà chương trình A ở trạng thái đơn phương hoặc kéo dài
Hiện thân của sự thiếu hiểu biết vào

4
@EmbodimentofIgnorance Chương trình A được tính theo số byte, không phải byte duy nhất . Lenguage / Unary sẽ ghi điểm khủng khiếp
Jo King

Câu trả lời:


14

Japt & Japt , Điểm: 255/38 = 6,71

Chương trình A :

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

Chương trình B dài hơn 8kB, lâu đến nỗi liên kết bị đứt, vì vậy tôi sẽ không dán toàn bộ. Đây là một mẫu:

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

Tôi không thể tìm ra cách để một NULbyte hoạt động, đó là lý do tại sao chương trình B chỉ có 255 ký tự duy nhất. Chương trình B về cơ bản bao gồm 255 bản sao của một chương trình, trong đó một byte không liên quan duy nhất được thay đổi mỗi lần và 254 lần thực thi đầu tiên bị bỏ qua.

Để giải thích, tôi sẽ bắt đầu với phiên bản A đơn giản hóa này để kết quả B dễ thảo luận hơn.

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

Chương trình này dựa trên quine Japt có khả năng tải trọng cơ bản . Chuỗi khi bắt đầu chứa một bản sao của phần còn lại của chương trình, iQ ²chèn một trích dẫn và sao chép để tạo một chuỗi đại diện cho toàn bộ chương trình, sau đó ¯23cắt bỏ chính nó và mọi thứ sau nó. Chuỗi kết quả là một chương trình xuất ra Chương trình A :

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

Tôi sẽ đề cập đến chuỗi này như U.

Dòng cuối cùng của A nhân đôi Umột loạt các thay đổi nhỏ mỗi lần. Cụ thể, đối với mỗi số Xtrong phạm vi [1...3]nó ra "#c" + Unơi clà nhân vật với charCode X. Hành vi mặc định của Japt là xuất ra các chuỗi không có dấu ngoặc kép và được phân tách bằng dấu phẩy, vì vậy đây là đầu ra của A Đơn giản hóa của chúng tôi (lưu ý rằng có một byte không thể in được giữa mỗi #"iQ:

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

Chúng tôi sẽ gọi đây là B Đơn giản hóa .

Đơn giản hóa B có cấu trúc đơn giản, xen kẽ giữa #cU. May mắn cho câu trả lời này, mỗi #cUđược xử lý như được phân tách bằng dấu phẩy và trong tình huống này, hành vi của đó là tất cả mọi thứ ngoại trừ cuối cùng Ukhông có ảnh hưởng đến đầu ra. Phần duy nhất của B được đơn giản hóa ảnh hưởng đến đầu ra là:

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

Điều này giống hệt với Uđiều chúng ta đã biết đầu ra Đơn giản hóa A.

Sự khác biệt duy nhất giữa Đơn giản A và Chương trình A là thay vì tạo các bản sao cho phạm vi [1...3], chương trình thực sẽ tạo các bản sao cho phạm vi [1...256]. Điều đó dẫn đến 256 phiên bản của #cmỗi phiên bản có một ký tự khác nhau, mặc dù phiên bản cuối cùng "" là một ký tự nhiều byte nên nó không thêm bất kỳ byte duy nhất nào, nhưng mọi thứ trừ cái cuối cùng Uvẫn bị bỏ qua.


Rất đẹp :) Điều này sẽ làm việc cho 38 byte?
Xù xì

@Shaggy 27Cần phải điều chỉnh bất cứ khi nào byte được lưu, nhưng ngoài ra nó có vẻ như nó hoạt động.
Kamil Drakari

1
@Shaggy Việc chấm điểm dựa trên số byte duy nhất trong B và chỉ có 256 byte có thể. Theo như tôi biết, ngay cả phiên bản B mới cũng không chứa byte Null.
Kamil Drakari

Nhân tiện, đã thử một vài thứ để làm cho nó hoạt động với byte null, nhưng tất cả đều thất bại.
Xù xì

5

Chương trình A, Gol> <> , 256/20 byte = 12.8

"44XFL|r2ssl3%Q4s]|H

Hãy thử trực tuyến!

Chương trình B, Gol> <>

"44XFL|r2ssl3%Q4s]|H	

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

Hãy thử trực tuyến!

Chương trình xen kẽ giữa đầu ra chính nó theo sau bởi mỗi byte và chỉ xuất ra chính nó.

Giải trình:

"            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

Chương trình A: 05AB1E , điểm: 256/41 256/31 byte = 8.258 ...

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

Hãy thử trực tuyến.

Chương trình B: 05AB1E

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

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

Hãy thử trực tuyến.

Giải trình:

Ngắn nhất cho 05AB1E là một trong những điều này: 0"D34çý"D34çý( 14 byte ) được cung cấp bởi @OliverNi . Câu trả lời của tôi sử dụng một phiên bản sửa đổi của quine đó bằng cách thêm ₅Ýç'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)

Chương trình B sẽ chấm dứt ngay khi đạt đến q, vì vậy chương trình B thực tế là:

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

Mọi thứ sau đó được bỏ qua và đỉnh của ngăn xếp ( 0"D34çý₅Ýç'q†22ǝ"D34çý₅Ýç'q†22ǝ) là đầu ra ngầm.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.