Golfe Meta-boliche

22

Sua tarefa é criar o programa mais curto (A) que gera outro programa (B) com os bytes mais exclusivos, o que, por sua vez, gera o programa original (A). Essencialmente, você está jogando metade de um par de nossos programas principais (também conhecido como quine de iteração periódica) e jogando boliche na outra metade. A e B podem estar em diferentes idiomas.

Regras e Pontuação

Sua pontuação final é <number of unique bytes in B> / <number of bytes in A>. Maior pontuação ganha. Note-se que a pontuação máxima teórica é 256.

  • O programa A deve ter pelo menos um byte de comprimento
  • O programa B não pode consistir inteiramente de no-ops, ou seja, pelo menos um caractere deve afetar a saída de alguma forma.
  • Regras padrão de quines se aplicam a ambos os programas. Notavelmente, quines de erro não são permitidos em nenhum dos casos.

Para manter a consistência do formato da resposta, comece sua resposta com algo como isto:

# <Language for A> & <Language for B>, Score: <B score> / <A score> = <combined score>
Beefster
fonte
Para que isso fique claro, acho que você precisará esclarecer um pouco o segundo item. O que significa para um personagem ser exatamente não-op?
Assistente de trigo
Por bytes únicos, você quer dizer bytes compartilhados ou semelhança entre os dois?
KrystosTheOverlord
@KrystosTheOverlord, seria simplesmente dentro do programa B, sem relação com o programa A. Por exemplo, aaaaapossui um byte exclusivo e abcde5 bytes únicos.
Beefster 14/02
1
Estou apenas aguardando os programas em que o programa A é unário ou linguagem
Modalidade de Ignorância
4
O Programa de Ignorância A é pontuado em termos de número de bytes, e não de bytes únicos . Lenguage / Unary seria horrivelmente marcado
Jo King

Respostas:

14

Japt & Japt , pontuação: 255/38 = 6.71

Programa A :

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

O programa B tem mais de 8kB, tanto que o link quebra, para não colar a coisa toda. Aqui está uma amostra:

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

Não consegui encontrar uma maneira de fazer com que um NULbyte funcionasse, e é por isso que o programa B possui apenas 255 caracteres únicos. O programa B consiste essencialmente em 255 cópias de um único programa, onde um único byte irrelevante é alterado a cada vez e as primeiras 254 execuções são ignoradas.

Para a explicação, começarei com esta versão simplificada de A para que o B resultante seja mais fácil de discutir.

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

Este programa é baseado no jine japonês com capacidade de carga útil básica . A string no início contém uma duplicata do restante do programa, iQ ²insere uma cotação e duplicatas para criar uma representação de string de todo o programa e, em seguida, ¯23apara a si mesma e tudo o que está depois. A sequência resultante é um programa que gera o Programa A :

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

Vou me referir a essa string como U.

A última linha de A duplica Uvárias vezes com uma pequena alteração a cada vez. Especificamente, para cada número Xno intervalo, [1...3]ele gera "#c" + Uonde cestá o caractere com o código X. O comportamento padrão do Japt é gerar as strings sem aspas e separadas por vírgulas; portanto, essa é a saída do nosso A simplificado (observe que há um byte imprimível entre cada um #e "iQ:

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

Vamos chamar isso de B simplificado .

B simplificado tem uma estrutura simples, alternando entre #ce U. Felizmente para esta resposta, cada um #ce Ué tratado como separado por vírgula, e nessa situação o comportamento disso é tudo, exceto o último U, não tem efeito na saída. A única parte do B simplificado que afeta a saída é esta:

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

O que é idêntico ao Uque já sabemos saídas A. simplificado

A única diferença entre A simplificado e o programa A é que, em vez de gerar cópias para o intervalo, [1...3]o programa real gera cópias para o intervalo [1...256]. Isso resulta em 256 versões de #ccada uma delas com um caractere diferente, embora a última versão "Ā" seja um caractere de vários bytes, portanto, não adiciona nenhum bytes exclusivo, mas tudo, exceto o último, Uainda é ignorado.

Kamil Drakari
fonte
Very nice :) Será que este trabalho para 38 bytes?
Shaggy
@ Shaggy É 27necessário ajustar os ajustes sempre que os bytes forem salvos, mas fora isso, parece que funciona.
Kamil Drakari 14/02
1
@Shaggy A pontuação é baseada no número de bytes únicos em B, e existem apenas 256 bytes possíveis. Tanto quanto sei, mesmo a nova versão do B não contém o byte nulo.
Kamil Drakari 14/02
A propósito, tentei algumas coisas para fazê-lo funcionar com o byte nulo, mas tudo falhou.
Shaggy
5

Programa A, Gol> <> , 256/20 bytes = 12,8

"44XFL|r2ssl3%Q4s]|H

Experimente online!

Programa B, Gol> <>

"44XFL|r2ssl3%Q4s]|H	

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

Experimente online!

O programa alterna entre a saída em si seguida por cada byte e apenas a saída em si.

Explicação:

"            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
Brincadeira
fonte
1

Programa A: 05AB1E , pontuação: 256/41 256/31 bytes = 8,258 ...

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

Experimente online.

Programa B: 05AB1E

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

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

Experimente online.

Explicação:

A mais curta para 05AB1E é esta: 0"D34çý"D34çý( 14 bytes ) fornecida por @OliverNi . Minha resposta usa uma versão modificada desse quine adicionando ₅Ýç'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)

O programa B será encerrado assim que atingir o q, portanto, o programa B real é:

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

Tudo depois disso é ignorado e a parte superior da pilha ( 0"D34çý₅Ýç'q†22ǝ"D34çý₅Ýç'q†22ǝ) é emitida implicitamente.

Kevin Cruijssen
fonte