Golf de bolos

22

Su tarea es crear el programa más corto (A) que genera otro programa (B) con los bytes más únicos, que a su vez genera el programa original (A). Esencialmente, estás jugando a la mitad de un par de programas de ouroboros (también conocido como quine iterativo periódico) y jugando boliche a la otra mitad. A y B pueden estar en diferentes idiomas.

Reglas y puntuación

Tu puntaje final es <number of unique bytes in B> / <number of bytes in A>. La puntuación más alta gana. Cabe señalar que la puntuación máxima teórica es 256.

  • El programa A debe tener al menos un byte de longitud
  • El programa B no puede consistir completamente en no-ops, es decir, al menos un carácter debe afectar la salida de alguna manera.
  • Las reglas estándar de quines se aplican a ambos programas. En particular, las cuotas de error no están permitidas en ninguno de los casos.

En aras de la coherencia del formato de respuesta, comience su respuesta con algo como esto:

# <Language for A> & <Language for B>, Score: <B score> / <A score> = <combined score>
Carne de res
fuente
Para que esto sea claro, creo que tendrá que aclarar un poco el segundo punto. ¿Qué significa para un personaje ser un no-op exactamente?
Wheat Wizard
Por bytes únicos, ¿quiere decir bytes compartidos o similitud entre los dos?
KrystosTheOverlord
@KrystosTheOverlord, sería simplemente dentro del programa B, sin relación con el programa A. Por ejemplo, aaaaatiene un byte único y abcdetiene 5 bytes únicos.
Beefster
1
Solo estoy esperando los programas en los que el programa A está en unario o en lenguaje
Encarnación de la ignorancia
44
@EmbodimentofIgnorance El programa A se califica en términos de número de bytes, no bytes únicos . Lenguage / Unary marcaría horriblemente
Jo King

Respuestas:

14

Japt y Japt , Puntuación: 255/38 = 6.71

Programa A :

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

El programa B tiene más de 8kB de longitud, tanto que el enlace se rompe, por lo que no pegaré todo. Aquí hay una muestra:

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

No pude encontrar una manera de hacer que un NULbyte funcione, por eso el programa B solo tiene 255 caracteres únicos. El programa B consiste esencialmente en 255 copias de un solo programa, donde se cambia un solo byte irrelevante cada vez, y se ignoran las primeras 254 ejecuciones.

Para la explicación, comenzaré con esta versión simplificada de A para que la B resultante sea más fácil de discutir.

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

Este programa se basa en la quine Japt básica con capacidad de carga útil . La cadena al comienzo contiene un duplicado del resto del programa, iQ ²inserta una cita y duplica para crear una representación de cadena de todo el programa, y ​​luego se ¯23recorta a sí mismo y todo lo que sigue. La cadena resultante es un programa que genera el Programa A :

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

Me referiré a esta cadena como U.

La última línea de A se duplica Uvarias veces con un pequeño cambio cada vez. Específicamente, para cada número Xen el rango [1...3], genera "#c" + Udónde cestá el carácter con charcode X. El comportamiento predeterminado de Japt es generar esas cadenas sin comillas y separadas por comas, por lo que esta es la salida de nuestra A simplificada (tenga en cuenta que hay un byte no imprimible entre cada uno #y "iQ:

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

Llamaremos a esto B simplificado .

B simplificado tiene una estructura simple, alternando entre #cy U. Afortunadamente para esta respuesta, cada uno #c, y Use trata como separados por una coma, y en esta situación el comportamiento de que es todo excepto el último Uno tiene ningún efecto en la salida. La única porción de B simplificado que afecta la salida es esta:

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

Lo cual es idéntico al Uque ya conocemos salidas A. simplificada

La única diferencia entre A simplificado y Programa A es que, en lugar de generar copias para el rango, [1...3]el programa real genera copias para el rango [1...256]. Eso da como resultado 256 versiones de #ccada una de las cuales tiene un carácter diferente, aunque la última versión "Ā" es un carácter de varios bytes, por lo que no agrega bytes únicos, pero todo, excepto el último, Uaún se ignora.

Kamil Drakari
fuente
Muy agradable :) Sin este trabajo de 38 bytes?
Shaggy
@Shaggy Se 27necesita ajustar cada vez que se guardan bytes, pero aparte de eso parece que funciona.
Kamil Drakari
1
@Shaggy La puntuación se basa en el número de bytes únicos en B, y solo hay 256 bytes posibles. Que yo sepa, incluso la nueva versión de B no contiene el byte nulo.
Kamil Drakari
Intenté algunas cosas para que funcione con el byte nulo, por cierto, pero todos fallaron.
Shaggy
5

Programa A, Gol> <> , 256/20 bytes = 12.8

"44XFL|r2ssl3%Q4s]|H

Pruébalo en línea!

Programa B, Gol> <>

"44XFL|r2ssl3%Q4s]|H	

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

Pruébalo en línea!

El programa alterna entre la salida de sí mismo seguido de cada byte y solo la salida.

Explicación:

"            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
fuente
1

Programa A: 05AB1E , puntaje: 256/41 256/31 bytes = 8.258 ...

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

Pruébalo en línea.

Programa B: 05AB1E

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

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

Pruébalo en línea.

Explicación:

La más corta para 05AB1E es esta: 0"D34çý"D34çý( 14 bytes ) proporcionada por @OliverNi . Mi respuesta usa una versión modificada de ese quine agregando ₅Ýç'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)

El programa B terminará tan pronto como llegue al q, por lo que el programa B real es:

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

Todo después de eso se ignora, y la parte superior de la pila ( 0"D34çý₅Ýç'q†22ǝ"D34çý₅Ýç'q†22ǝ) se emite implícitamente.

Kevin Cruijssen
fuente