Golf meta-bowling

22

Tugas Anda adalah membuat program terpendek (A) yang menampilkan program lain (B) dengan byte paling unik, yang pada gilirannya menghasilkan program asli (A). Pada dasarnya, Anda bermain golf setengah dari sepasang program ouroboros (alias quine iterating periodik) dan bowling setengah lainnya. A dan B mungkin dalam berbagai bahasa.

Aturan dan Penilaian

Skor akhir Anda adalah <number of unique bytes in B> / <number of bytes in A>. Kemenangan skor tertinggi. Perlu dicatat bahwa skor maksimum teoritis adalah 256.

  • Program A harus panjangnya paling tidak satu byte
  • Program B tidak dapat sepenuhnya terdiri dari no-ops, yaitu setidaknya satu karakter harus mempengaruhi output dalam beberapa cara.
  • Aturan standar quine berlaku untuk kedua program. Khususnya, kueri kesalahan tidak diizinkan dalam kedua kasus.

Demi konsistensi format jawaban, mulailah jawaban Anda dengan sesuatu seperti ini:

# <Language for A> & <Language for B>, Score: <B score> / <A score> = <combined score>
Beefster
sumber
Agar ini menjadi jelas, saya pikir Anda harus sedikit memperjelas poin kedua. Apa artinya sebenarnya bagi karakter untuk menjadi no-op?
Wheat Wizard
Bytes unik, maksud Anda byte bersama, atau kesamaan antara keduanya?
KrystosTheOverlord
@KrystosTheOverlord, itu hanya di dalam program B, tanpa ada hubungannya dengan program A. Misalnya, aaaaamemiliki satu byte unik dan abcdememiliki 5 byte unik.
Beefster
1
Saya hanya menunggu program di mana program A berada di unary atau bahasa
Perwujudan Ketidaktahuan
4
@EmbodimentofIgnorance Program A diberi skor dalam hal jumlah byte, bukan byte unik . Bahasa / Unary akan mencetak skor yang sangat buruk
Jo King

Jawaban:

14

Japt & Japt , Score: 255/38 = 6.71

Program A :

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

Program B lebih dari 8kB, sangat lama sehingga tautannya terputus, jadi saya tidak akan menempel semuanya. Berikut ini contohnya:

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

Saya tidak dapat menemukan cara untuk mendapatkan NULbyte untuk bekerja, itulah sebabnya program B hanya memiliki 255 karakter unik. Program B pada dasarnya terdiri dari 255 salinan dari satu program, di mana satu byte yang tidak relevan diubah setiap kali, dan 254 eksekusi pertama diabaikan.

Untuk penjelasannya, saya akan mulai dengan versi A yang disederhanakan ini sehingga B yang dihasilkan lebih mudah untuk dibahas.

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

Program ini didasarkan pada quine Japt payload-mampu dasar . String pada awalnya berisi duplikat dari sisa program, iQ ²menyisipkan kutipan dan duplikat untuk membuat representasi string dari seluruh program, dan kemudian ¯23memotong sendiri dan semuanya setelahnya. String yang dihasilkan adalah program yang menghasilkan Program A :

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

Saya akan menyebut string ini sebagai U.

Baris terakhir A menduplikasi Ubeberapa kali dengan perubahan kecil setiap kali. Khususnya, untuk setiap angka Xdalam rentang [1...3]itu menghasilkan di "#c" + Umana ckarakter dengan kode sandi X. Perilaku default Japt adalah untuk mengeluarkan string tersebut tanpa tanda kutip dan dipisahkan dengan koma, jadi ini adalah output dari A Sederhana kami (perhatikan bahwa ada byte yang tidak diinginkan antara masing #- masing dan "iQ:

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

Kami akan menyebutnya B Sederhana .

B Sederhana memiliki struktur sederhana, bergantian antara #cdan U. Untungnya untuk jawaban ini, masing #c- masing dan Udiperlakukan sebagai dipisahkan oleh koma, dan dalam situasi ini perilaku itu adalah segalanya kecuali yang terakhir Utidak berpengaruh pada output. Satu-satunya bagian dari B Sederhana yang mempengaruhi output adalah ini:

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

Yang identik dengan Uyang kita sudah tahu output A. Sederhana

Satu-satunya perbedaan antara A Sederhana dan Program A adalah bahwa alih-alih menghasilkan salinan untuk rentang [1...3]program nyata menghasilkan salinan untuk rentang [1...256]. Yang menghasilkan 256 versi yang #cmasing - masing memiliki karakter yang berbeda, meskipun versi terakhir "Ā" adalah karakter multi-byte sehingga tidak menambahkan byte unik, tetapi semuanya kecuali yang terakhir Umasih diabaikan.

Kamil Drakari
sumber
Sangat bagus :) Apakah ini berfungsi selama 38 byte?
Shaggy
@ Shaggy 27Perlu di-tweak kapan saja byte disimpan, tetapi selain itu sepertinya berfungsi.
Kamil Drakari
1
@Shaggy Penilaian didasarkan pada jumlah byte unik di B, dan hanya ada 256 byte yang mungkin. Sejauh yang saya ketahui, bahkan versi baru B tidak mengandung byte Null.
Kamil Drakari
Mencoba beberapa hal untuk membuatnya bekerja dengan byte nol, omong-omong, tetapi semua gagal.
Shaggy
5

Program A, Gol> <> , 256/20 byte = 12.8

"44XFL|r2ssl3%Q4s]|H

Cobalah online!

Program B, Gol> <>

"44XFL|r2ssl3%Q4s]|H	

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

Cobalah online!

Program bergantian antara keluaran itu sendiri diikuti oleh setiap byte dan hanya keluaran itu sendiri.

Penjelasan:

"            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
Jo King
sumber
1

Program A: 05AB1E , skor: 256/41 256/31 byte = 8,258 ...

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

Cobalah online.

Program B: 05AB1E

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

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

Cobalah online.

Penjelasan:

terpendek untuk 05AB1E adalah ini: 0"D34çý"D34çý( 14 byte ) disediakan oleh @OliverNi . Jawaban saya menggunakan versi modifikasi dari quine itu dengan menambahkan ₅Ýç'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)

Program B akan berakhir segera setelah mencapai q, sehingga program B yang sebenarnya adalah:

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

Segala sesuatu setelah itu diabaikan, dan bagian atas tumpukan ( 0"D34çý₅Ýç'q†22ǝ"D34çý₅Ýç'q†22ǝ) adalah keluaran secara implisit.

Kevin Cruijssen
sumber