Kolmogorov Flexibilidade. AKA Sale!

12

Esse é um desafio de , com , para produzir uma saída fixa sem entrada.

O formato de saída, no entanto, é flexível - pode ser impresso em padrão, em erro padrão, retornado como uma lista de caracteres, retornado como uma lista de bytes ou retornado como uma lista de números inteiros. Se você acha que algo mais parece razoável, basta perguntar nos comentários!

Aqui está um CODEGOLF de arte ASCII simples e em letras grandes :

 CCCC   OOO   DDDD   EEEEE   GGG    OOO   L      FFFFF
C      O   O  D   D  E      G      O   O  L      F
C      O   O  D   D  EEE    G  GG  O   O  L      FFF
C      O   O  D   D  E      G   G  O   O  L      F
 CCCC   OOO   DDDD   EEEEE   GGGG   OOO   LLLLL  F

Sem novas linhas (ou espaços à direita em nenhuma linha), ele tem 256 caracteres:

 CCCC   OOO   DDDD   EEEEE   GGG    OOO   L      FFFFFC      O   O  D   D  E      G      O   O  L      FC      O   O  D   D  EEE    G  GG  O   O  L      FFFC      O   O  D   D  E      G   G  O   O  L      F CCCC   OOO   DDDD   EEEEE   GGGG   OOO   LLLLL  F

Os índices (com base em 0) dos caracteres não espaciais são:

1, 2, 3, 4, 8, 9, 10, 14, 15, 16, 17, 21, 22, 23, 24, 25, 29, 30, 31, 36, 37, 38, 42, 49, 50, 51, 52, 53, 54, 61, 65, 68, 72, 75, 82, 89, 93, 96, 103, 104, 111, 115, 118, 122, 125, 126, 127, 132, 135, 136, 139, 143, 146, 153, 154, 155, 156, 163, 167, 170, 174, 177, 184, 188, 191, 195, 198, 205, 207, 208, 209, 210, 214, 215, 216, 220, 221, 222, 223, 227, 228, 229, 230, 231, 235, 236, 237, 238, 242, 243, 244, 248, 249, 250, 251, 252, 255

Você não pode usar nenhum desses 97 bytes em seu código, mas deve produzir uma lista (ou saída semelhante) desses bytes, nesta ordem, com os bytes ausentes substituídos pelo 32º byte na página de código que você está usando (em muitos, muitos páginas de código um caractere de espaço).

Você pode incluir as novas linhas de impressão bonita * (mas sem espaços à direita nas linhas), se isso ajudar.

Por exemplo, usando a página de códigos Jelly, esta saída é aceitável:

 ¢£¤¥   ®µ½   ÇÐÑ×   ßæçðı   øœþ    $%&   *      12345
6      =   A  D   H  K      R      Y   ]  `      g
h      o   s  v   z  }~¶    ⁴  ⁷⁸  ⁻   Ɓ  Ƒ      ƲȤɓ
ƈ      ɲ   ʂ  ȥ   Ẹ  Ḳ      Ṭ   Ỵ  Ḃ   Ḟ  İ      Ṡ
 ẆẊẎŻ   ẹḥị   ṇọṛṣ   ẉỵẓȧḃ   ḟġḣŀ   ṗṙṡ   ẏż«»‘  ”

... mas também é:

 ¢£¤¥   ®µ½   ÇÐÑ×   ßæçðı   øœþ    $%&   *      123456      =   A  D   H  K      R      Y   ]  `      gh      o   s  v   z  }~¶    ⁴  ⁷⁸  ⁻   Ɓ  Ƒ      ƲȤɓƈ      ɲ   ʂ  ȥ   Ẹ  Ḳ      Ṭ   Ỵ  Ḃ   Ḟ  İ      Ṡ ẆẊẎŻ   ẹḥị   ṇọṛṣ   ẉỵẓȧḃ   ḟġḣŀ   ṗṙṡ   ẏż«»‘  ”

... e assim é:

[32, 1, 2, 3, 4, 32, 32, 32, 8, 9, 10, 32, 32, 32, 14, 15, 16, 17, 32, 32, 32, 21, 22, 23, 24, 25, 32, 32, 32, 29, 30, 31, 32, 32, 32, 32, 36, 37, 38, 32, 32, 32, 42, 32, 32, 32, 32, 32, 32, 49, 50, 51, 52, 53, 54, 32, 32, 32, 32, 32, 32, 61, 32, 32, 32, 65, 32, 32, 68, 32, 32, 32, 72, 32, 32, 75, 32, 32, 32, 32, 32, 32, 82, 32, 32, 32, 32, 32, 32, 89, 32, 32, 32, 93, 32, 32, 96, 32, 32, 32, 32, 32, 32, 103, 104, 32, 32, 32, 32, 32, 32, 111, 32, 32, 32, 115, 32, 32, 118, 32, 32, 32, 122, 32, 32, 125, 126, 127, 32, 32, 32, 32, 132, 32, 32, 135, 136, 32, 32, 139, 32, 32, 32, 143, 32, 32, 146, 32, 32, 32, 32, 32, 32, 153, 154, 155, 156, 32, 32, 32, 32, 32, 32, 163, 32, 32, 32, 167, 32, 32, 170, 32, 32, 32, 174, 32, 32, 177, 32, 32, 32, 32, 32, 32, 184, 32, 32, 32, 188, 32, 32, 191, 32, 32, 32, 195, 32, 32, 198, 32, 32, 32, 32, 32, 32, 205, 32, 207, 208, 209, 210, 32, 32, 32, 214, 215, 216, 32, 32, 32, 220, 221, 222, 223, 32, 32, 32, 227, 228, 229, 230, 231, 32, 32, 32, 235, 236, 237, 238, 32, 32, 32, 242, 243, 244, 32, 32, 32, 248, 249, 250, 251, 252, 32, 32, 255]

(Este último é uma saída de lista válida em qualquer idioma com qualquer página de código e pode-se também usar qualquer formatação razoável de lista.)


Aqui está o código Python 3 que mostra os bytes ASCII indisponíveis.

* Embora a impressão em si possa não ser tão bonita assim!

Jonathan Allan
fonte
Você não pode usar nenhum desses 97 bytes no seu código. Isso significa que não posso usar esses caracteres ASCII: $%&*123456=ADHKRY]``ghosvz}~e nenhuma nova linha?
Titus
1
@Titus Se a sua página de código estiver alinhada com ASCII, então sim - ou uma guia ou qualquer outro caractere no intervalo especificado, por exemplo, os não imprimíveis ou estendidos. (Também - ver o script Python ligada à TIO)
Jonathan Allan
2
Para o que vale, aqui está um validador de código (assumindo que não haja uma página de códigos especial).
Arnauld
Eu quase o tenho em PHP ... só preciso de uma maneira de array_map(function($n){return sprintf("%6b",$n);},...)sem um $(eu poderia fazer isso) E sem }(nenhuma idéia). Sim; Eu quero empacotar os dados!
Titus

Respostas:

7

Python 2 , 321 203 bytes

print map(lambda(i,x):(x>'0'and i-8-8-8-8)+8+8+8+8,enumerate(bin(int(reduce(lambda x,y:x+repr('abcdefijkl'.find(y)),'cfjdbljcibkeajjejiljjlcbjddlafklebajjlceljdeadficijflealkeklkljadfbbckjebclkf','')))))

Experimente online!


Explicação:

de dentro para fora:

cfjdbljcibkeajjejiljjlcbjddlafklebajjlceljdeadficijflealkeklkljadfbbckjebclké o número 25731972618407747697792173390589410779249734035626759409848989703511287412985codificado com caracteres permitidos. (Não 123456é permitido)

reduce(lambda x,y:x+repr('abcdefijkl'.find(y)),'cfjdbl..bclkf','') mapeia a string para sua string decimal:

  • reduce(lambda x,y:x+y,'..','')é o mesmo que ''.join('..')(não oé permitido)
  • repr('..')em vez de str('..')(não sé permitido)
  • 'abcdefijkl'.find(y) mapeia um caractere para um dígito.

enumerate(bin(int(...)))converte a sequência numérica em uma sequência binária e enumera. Isso dá aos pares[(0,0), (1,b), (2,1), (3,1), ...]

map(lambda(i,x):(x>'0'and i-8-8-8-8)+8+8+8+8, ... ) converte a lista enumerada no resultado final.

  • map(lambda(i,x):.. , .. )em vez de [... for(i,x)in ...](não o]é permitido)
  • lambda(i,x): ..converte cada par (índice, valor) no índice ou 32.
  • (x>'0'and i-8-8-8-8)+8+8+8+8 é o mesmo que:
    • x>'0'and i or 8+8+8+8, (Não oé permitido)
    • [8+8+8+8,i][x>'0']ou [8<<9-7,i][x>'0'](não ]é permitido)
  • 8+8+8+8= 32(Não 23é permitido)

Isso significa que o programa é essencialmente o mesmo que:

print[[32,i][x>'0']for i,x in enumerate(bin(25731972618407747697792173390589410779249734035626759409848989703511287412985))]
TFeld
fonte
Algum trabalho agradável de golfe lá: D
Jonathan Allan
7

C (gcc) , 318 bytes

main(_){--_<88+80+88?printf((int[:>){77707-989908070??>,((int[:>){0xE8E8C79E^0xB0B0080,0xC07E0870^0xE0000C00,0xCC08099C^0xEE0C008E,0xE8888989^0xCC00808,0x9E088990^0x800C0000,0x990C8888^0x080ECC00,0xF9C7a088^0x080000C0,0x9F8C78F8^0x900000??>[_>>(0xC^0x9):>>>(_<<9+9+9>>9+9+9))<<(70^89)>>(70^89)?_:' '),main(_+9-7):0;??>

Experimente online!

Este é um pouco de uma jornada ...

1. Comprimindo a lista

De alguma forma, precisaremos verificar se um número inteiro é um dos pontos de código especiais. Qualquer lista 'nua' será muito longa, então usamos uma lista de verificação. Esta lista tem um valor diferente de zero em pontos de código 'restritos' e um valor zero naqueles que não são.

Infelizmente, isso ainda leva 512 bytes apenas para ter a lista (parece 0,0,7,7,0,7,0,...). Isso pode ser reduzido com uma máscara de bits.

Para fazer uso da máscara de bits, dividiremos cada byte em duas partes. Os primeiros 3 bits selecionam uma máscara de uma matriz, enquanto os últimos 5 selecionam um pouco na matriz. Não podemos reduzir ainda mais a matriz porque os números inteiros de 32 bits usados ​​por padrão não suportam mais que 2 ^ 5 = 32 bits.

Usando uma implementação de referência, escrevi:

int main() {
    int i;
    int vals[] = {1, 2, 3, 4, 8, 9, 10, 14, 15, 16, 17, 21, 22, 23, 24, 25, 29, 30, 31, 36, 37, 38, 42, 49, 50, 51, 52, 53, 54, 61, 65, 68, 72, 75, 82, 89, 93, 96, 103, 104, 111, 115, 118, 122, 125, 126, 127, 132, 135, 136, 139, 143, 146, 153, 154, 155, 156, 163, 167, 170, 174, 177, 184, 188, 191, 195, 198, 205, 207, 208, 209, 210, 214, 215, 216, 220, 221, 222, 223, 227, 228, 229, 230, 231, 235, 236, 237, 238, 242, 243, 244, 248, 249, 250, 251, 252, 255, 0};

    for (i = 0; i <= 0xFF; ++i) {
        int j,f;
        f = 0;
        for (j = 0; vals[j]; ++j)
            if (vals[j] == i)
                f = 1;
        if (f)
            printf("1");
        else
            printf("0");

        if (i%32 == 31)
            printf("\n");
    }

    return 0;
}

Eu era capaz de gerar os valores apropriados para essa nova matriz usando o comando echo "obase=16;ibase=2;$(./a.out | rev)" | bc. Isso passa a saída do programa acima ( ./a.out) para o revprograma, que inverte cada linha. Ele imprime isso junto com um cabeçalho para bc que define a base de saída como 16 e a base de entrada como 2. Assim, bc converte os dígitos binários em uma máscara de bits hexadecimal.

A matriz resultante pode ser vista nesta solução 'beta':

f(){
    int x;
    int arr[] = {0xE3E3C71E, 0x207E0470, 0x22040912, 0xE4488181, 0x1E048990, 0x91024488, 0xF1C7A048, 0x9F1C78F8};
    for (x=0; x<=0xFF; ++x) {
        int mask = arr[x >> 5];
        int bit = mask >> (x & 0x1F);

        if (bit & 1)
            printf("%c", x);
        else
            printf(" ");
    }
}

2. Lidando com as restrições

Há muitas restrições que precisam ser colocadas no código acima. Aqui eu passo por cada um deles 1 por 1.

  1. Nenhuma atribuição

Isso também é percebido por outros idiomas; sem a atribuição em C, é muito difícil obter valores garantidos em variáveis. A maneira mais fácil para nós é escrever nossa função como um programa completo. O primeiro argumento de mainserá passado, cujo valor argcserá 1 se chamado sem argumentos.

  1. Sem loop

As construções única looping em C são for, whilee gototodas as quais contêm caracteres restritos. Isso nos deixa usando a recursão. A função principal iniciará em 1 e será repetida até que o argumento seja> 256, enquanto isso diminuirá o argumento internamente para usar um valor indexado em 0.

  1. Valores hexadecimais

Os valores na matriz acima são hexadecimais, mesmo quando convertidos em decimal, eles contêm alguns símbolos restritos, principalmente 123456 (o AD pode ser em minúsculas). Para contornar isso, cada constante é XORed com outra, para que os caracteres restritos sejam removidos. 1 se torna 9 ^ B, 2 se torna C ^ E, 3 se torna B ^ 8, 4 se torna 8 ^ C, 5 se torna 9 ^ C e 6 se torna 9 ^ F (há mais maneiras de fazer isso, eu escolhi esse caminho) .

  1. Impressão

As restrições não deixam muitas funções de impressão para nós. putchare putssão ambos restritos, saindo printf. Infelizmente, temos que enviar printfuma string de formato, idealmente "% c". Todas essas cadeias têm esse sinal de porcentagem traquina que queremos remover. Felizmente, assumimos uma máquina little-endian (porque aparentemente é isso que o TIO usa, e isso é bastante típico). Ao construir o número inteiro cujos bytes na memória são 0x25 (%), 0x63 (c), 0x00 (\ 0), qualquer coisa (não importa, é depois do terminador nulo), podemos apenas passar seu endereço printfe ele assumirá é uma string. Um desses números que funciona é -989830363 (0xC5006325). É fácil criar com as restrições 77707-989908070.

Ainda existe o problema de que não podemos fazer referência a nenhum valor (porque não podemos atribuí-los e porque não podemos usar &); portanto, temos que usar uma matriz literal (int []) {...}. Na verdade, usamos isso também para a matriz de máscaras de bits acima.

  1. Suportes de fechamento

Não podemos usar ']' ou '}' para fechar nossas matrizes ou funções. Felizmente, C tem dígrafos e trigramas que funcionam. :>se tornará ], enquanto ??>se tornará }. Isso exige que o gcc aceite o -trigraphsswitch, pois ignora os trigramas por padrão (em violação do padrão).

  1. Operações bit a bit

Não podemos usar &para mascarar bits do nosso índice, nem podemos %chegar lá da maneira antiga. Portanto, confiamos no comportamento específico da implementação. Em particular, deslocamos nossos números inteiros de 32 bits o suficiente para a esquerda para perder bits e depois para a direita. Por exemplo, para obter os últimos 5 bits do nosso número, primeiro deslocamos para a esquerda 27 bits (saindo abcde00000...) e depois voltamos para a direita em 27 bits (saindo ...00000abcde).

  1. Valores diversos

Precisamos de mais alguns valores literais em todo o código - esses são extraídos da resposta JS de Arnauld, mais 27 (pelo motivo acima) são adicionados por mim como 9+9+9.

3. Juntando

Aqui está a descrição da fonte com todas essas alterações juntas.

main(_){                // This is our main entry point
--_<88+80+88            // This subtracts 1 from the argument (_) and checks if it is less than 256
    ?                   // If it is less than 256 we 'continue'
printf(                 // first we call printf with...
    (int[:>){           // An integer array that will be interpreted as a string
    77707-989908070     // With the value we determined above, to represent "%c\0\xC5"
    ??>,                // This is a trigraph for }, just as the :> above is a digraph for ]
    ((int[:>){          // We immediately create another integer array
0xE8E8C79E^0xB0B0080,   // Each row is the bit-mask for 32 characters
0xC07E0870^0xE0000C00,
0xCC08099C^0xEE0C008E,
0xE8888989^0xCC00808,
0x9E088990^0x800C0000,
0x990C8888^0x080ECC00,
0xF9C7a088^0x080000C0,
0x9F8C78F8^0x900000??>
[_>>(0xC^0x9):>         // This is {arr}[_>>5] just in a roundabout way
>>(_<<9+9+9>>9+9+9))    // Similarly this is (...)>>(_&0x1F)
<<(70^89)>>(70^89)      // This is <<31>>31 or &1, to check the last bit
?_:' ')                 // If its 1, we print the character, otherwise we print a space
,main(_+9-7):0;         // We recurse, the :0 is the other branch of the if, it terminates execution
??>
LambdaBeta
fonte
Bom trabalho! Boa explicação também. (Eu não estou 100%, mas acredito que o cabeçalho deve ser "C (gcc) -trigraphs")
Jonathan Allan
1
Está em debate. O código não é específico do gcc, não é totalmente compatível com os padrões, mas na minha máquina o cc o compila sem argumentos. Não há nenhum compilador interno no TIO que esteja em conformidade com o padrão por padrão, se houvesse (ou uma compilação mais antiga do gcc) os trigrafs gerariam apenas avisos.
LambdaBeta
Usando g ++ ?:extensão, abuso bit a bit mudança módulo 32, 273 bytes
user202729
Isso é esperto. No entanto, vou mantê-lo como está, pois esta versão não precisa da -trigraphsopção em alguns compiladores C, enquanto ?:requer o gcc que requer -trigraphs.
LambdaBeta
6

brainfuck , 635 bytes

++++++++++++++++++++++++++++++++.>+.+.+.+.<...>++++.+.+.<...>++++.+.+.+.<...>++++.+.+.+.+.<...>++++.+.+.+....++++.+.+.<...>++++.<......>+++++++.+.+.+.+.+.<......>+++++++.<...>++++.<..>+++.<...>++++.<..>+++.<......>+++++++.<......>+++++++.<...>++++.<..>+++.<......>+++++++.+.<......>+++++++.<...>++++.<..>+++.<...>++++.<..>+++.+.+.<....>+++++.<..>+++.+.<..>+++.<...>++++.<..>+++.<......>+++++++.+.+.+.<......>+++++++.<...>++++.<..>+++.<...>++++.<..>+++.<......>+++++++.<...>++++.<..>+++.<...>++++.<..>+++.<......>+++++++.<.>++.+.+.+.<...>++++.+.+.<...>++++.+.+.+.<...>++++.+.+.+.+.<...>++++.+.+.+.<...>++++.+.+.<...>++++.+.+.+.+.<..>>-.

Experimente online!

Em resposta a finalmente ser derrotado por Javascript, joguei o que posso com isso:

1 byte economizado por ter 32 na célula 0 e incrementar a célula 1 (a única razão pela qual eu o tinha inicialmente da outra maneira foi por causa de uma solução rápida quando OrjanJohansen apontou que eu não podia usar ])

1 byte salvo diminuindo uma terceira célula (inicialmente em 0) para gerar 255=-1

2 bytes salvos imprimindo espaços entre os caracteres 31 e 36 sem usar, <>mas simplesmente parando em 32 para imprimir da célula 0 ao aumentar de 31 a 33.

brainfuck , 639 bytes

>++++++++++++++++++++++++++++++++.<+.+.+.+.>...<++++.+.+.>...<++++.+.+.+.>...<++++.+.+.+.+.>...<++++.+.+.>....<+++++.+.+.>...<++++.>......<+++++++.+.+.+.+.+.>......<+++++++.>...<++++.>..<+++.>...<++++.>..<+++.>......<+++++++.>......<+++++++.>...<++++.>..<+++.>......<+++++++.+.>......<+++++++.>...<++++.>..<+++.>...<++++.>..<+++.+.+.>....<+++++.>..<+++.+.>..<+++.>...<++++.>..<+++.>......<+++++++.+.+.+.>......<+++++++.>...<++++.>..<+++.>...<++++.>..<+++.>......<+++++++.>...<++++.>..<+++.>...<++++.>..<+++.>......<+++++++.>.<++.+.+.+.>...<++++.+.+.>...<++++.+.+.+.>...<++++.+.+.+.+.>...<++++.+.+.+.>...<++++.+.+.>...<++++.+.+.+.+.>..<+++.

Experimente online!

Primeiro, geramos o número 32. Depois, apenas aumentamos uma célula e alternamos a impressão entre essa célula e a que contém 32. Números cada vez maiores são algo que Brainfuck faz bem.

É bom vencer o Javascript com o Brainfuck, isso não acontece com frequência!

Level River St
fonte
Desculpe, mas ]não é um personagem permitido. Embora você ainda possa consertar isso e vencer o Javascript. :)
Ørjan Johansen
@ ØrjanJohansen corrigido
Level River St
Desculpe, você perdeu o Javascript.
user202729
@ user202729 muito bom! ainda assim, eu venci o Javascript por 3 dias. Como não posso usar loops porque ]não é permitido, acho que minha resposta BF provavelmente está ótima agora.
Level River St
5

JavaScript (SpiderMonkey) , 1918 1598 1487 1431 bytes

Guardado 56 bytes graças a @ user202729

print(8<<98,7/7,9-7,7>>97,8>>97,8<<98,8<<98,8<<98,8,9,0xa,8<<98,8<<98,8<<98,0xe,0xf,7+9,8+9,8<<98,8<<98,8<<98,7+0xe,7+0xf,8+0xf,9+0xf,78^87,8<<98,8<<98,8<<98,77^80,70^88,70^89,8<<98,8<<98,8<<98,8<<98,9<<98,70^99,77>>97,8<<98,8<<98,8<<98,98-070,8<<98,8<<98,8<<98,8<<98,8<<98,8<<98,9^070,80^98,80^99,87^99,87^98,9^077,8<<98,8<<98,8<<98,8<<98,8<<98,8<<98,70-9,8<<98,8<<98,8<<98,7^70,8<<98,8<<98,9^77,8<<98,8<<98,8<<98,7^79,8<<98,8<<98,70^0xd,((8<<98)+' ').repeat(8^0xe)+(8^90),((8<<98)+' ').repeat(8^0xe)+89,8<<98,8<<98,8<<98,7^90,8<<98,8<<98,7+89,((8<<98)+' ').repeat(8^0xe)+(7|97),7+97,((8<<98)+' ').repeat(8^0xe)+(77|98),8<<98,8<<98,8<<98,80|99,8<<98,8<<98,8^0x7e,8<<98,8<<98,8<<98,0x7a,8<<98,8<<98,0x7d,0x7e,0x7f,8<<98,8<<98,8<<98,8<<98,7+0x7d,8<<98,8<<98,0x87,0x88,8<<98,8<<98,0x8b,8<<98,8<<98,8<<98,0x8f,8<<98,8<<98,7+0x8b,((8<<98)+' ').repeat(8^0xe)+0x99,0x9a,0x9b,0x9c,((8<<98)+' ').repeat(8^0xe)+(7+0x9c),8<<98,8<<98,8<<98,0xa7,8<<98,8<<98,0xaa,8<<98,8<<98,8<<98,0xae,8<<98,8<<98,78+99,((8<<98)+' ').repeat(8^0xe)+0xb8,8<<98,8<<98,8<<98,0xbc,8<<98,8<<98,0xbf,8<<98,8<<98,8<<98,97+98,8<<98,8<<98,99+99,((8<<98)+' ').repeat(8^0xe)+0xcd,8<<98,0xcf,0xd0,7+0xca,7+0xcb,8<<98,8<<98,8<<98,7+0xcf,0xd7,0xd8,8<<98,8<<98,8<<98,0xdc,0xdd,0xde,0xdf,8<<98,8<<98,8<<98,7+0xdc,7+0xdd,7+0xde,7+0xdf,0xe7,8<<98,8<<98,8<<98,0xeb,0xec,0xed,0xee,8<<98,8<<98,8<<98,7+0xeb,7+0xec,7+0xed,8<<98,8<<98,8<<98,0xf8,0xf9,0xfa,0xfb,0xfc,8<<98,8<<98,0xff)

Experimente online!

Quão?

O fato de que isso =não é permitido é um extermínio em JS. Não podemos fazer nenhuma atribuição de variável e também não podemos usar nenhuma função de seta.

0789+-/|^<<>>

  1 = 7/7     |   50 = 80^98   |  136 = 0x88    |  216 = 0xd8
  2 = 9-7     |   51 = 80^99   |  139 = 0x8b    |  220 = 0xdc
  3 = 7>>97   |   52 = 87^99   |  143 = 0x8f    |  221 = 0xdd
  4 = 8>>97   |   53 = 87^98   |  146 = 7+0x8b  |  222 = 0xde
  8 = 8       |   54 = 9^077   |  153 = 0x99    |  223 = 0xdf
  9 = 9       |   61 = 70-9    |  154 = 0x9a    |  227 = 7+0xdc
 10 = 0xa     |   65 = 7^70    |  155 = 0x9b    |  228 = 7+0xdd
 14 = 0xe     |   68 = 9^77    |  156 = 0x9c    |  229 = 7+0xde
 15 = 0xf     |   72 = 7^79    |  163 = 7+0x9c  |  230 = 7+0xdf
 16 = 7+9     |   75 = 70^0xd  |  167 = 0xa7    |  231 = 0xe7
 17 = 8+9     |   82 = 8^90    |  170 = 0xaa    |  235 = 0xeb
 21 = 7+0xe   |   89 = 89      |  174 = 0xae    |  236 = 0xec
 22 = 7+0xf   |   93 = 7^90    |  177 = 78+99   |  237 = 0xed
 23 = 8+0xf   |   96 = 7+89    |  184 = 0xb8    |  238 = 0xee
 24 = 9+0xf   |  103 = 7|97    |  188 = 0xbc    |  242 = 7+0xeb
 25 = 78^87   |  104 = 7+97    |  191 = 0xbf    |  243 = 7+0xec
 29 = 77^80   |  111 = 77|98   |  195 = 97+98   |  244 = 7+0xed
 30 = 70^88   |  115 = 80|99   |  198 = 99+99   |  248 = 0xf8
 31 = 70^89   |  118 = 8^0x7e  |  205 = 0xcd    |  249 = 0xf9
 32 = 8<<98   |  122 = 0x7a    |  207 = 0xcf    |  250 = 0xfa
 36 = 9<<98   |  125 = 0x7d    |  208 = 0xd0    |  251 = 0xfb
 37 = 70^99   |  126 = 0x7e    |  209 = 7+0xca  |  252 = 0xfc
 38 = 77>>97  |  127 = 0x7f    |  210 = 7+0xcb  |  255 = 0xff
 42 = 98-070  |  132 = 7+0x7d  |  214 = 7+0xcf  |
 49 = 9^070   |  135 = 0x87    |  215 = 0xd7    |

32

Seja shiftCount o resultado de mascarar todos, exceto os 5 bits menos significativos de rnum , ou seja, computar rnum e 0x1F.

8<<988<<232

Arnauld
fonte
32como 8<<9-7salva um byte para cada um 32.
precisa saber é o seguinte
1
32 = 8<<98982(mod32)
3
"assassino de espetáculos" ou "criador de diversão"?
Jonathan Allan
2
@JonathanAllan ;-) O último sai do primeiro!
Arnauld
Desculpe se estou sendo estúpido, mas por que você está vinculando a uma versão antiga do SpiderMonkey?
Solomon Ucko 21/11
4

Haskell, 623 617 614 594 360 342 bytes

Edit: -234 bytes graças a @Lynn, encontrando uma codificação padrão como uma string. -18 bytes graças a @ Ørjan Johansen.

map(\i->cycle(8+8+8+8:filter(\_->" XXXX   XXX   XXXX   XXXXX   XXX    XXX   X      XXXXXX      X   X  X   X  X      X      X   X  X      XX      X   X  X   X  XXX    X  XX  X   X  X      XXXX      X   X  X   X  X      X   X  X   X  X      X XXXX   XXX   XXXX   XXXXX   XXXX   XXX   XXXXX  X"!!i>' ')(pure i))!!9)(take(0xf8+8)(iterate(9-8+)0))

Experimente online!

Como funciona

map(\i->    )                   -- map the lambda over the
        (take(0xf8+8)           -- first 256 elements of
           (iterate(9-8+)0))    -- the list [0,1,2,....]

                                -- the lambda is:

    cycle                       -- make an infinite list by repeating the list
      8+8+8+8:                  -- wih element 32 followed by
                  pure i        -- the singleton list with 'i'
       filter                   -- but keep 'i' only if
          \_->" XXXX..."!!i>' ' -- the pattern has an 'X' at index 'i', else
                                -- remove it to make an empty list
                                -- i.e. the cycled list is, if the pattern is
                                -- a space: [32,32,32,32,32,32,32,32,32,32,...]
                                -- an 'X':  [32, i,32, i,32, i,32, i,32, i,...]
                                --                                       ^
                                --                        9th element ---/ 
                      !!9       -- pick the 9th element which is the result
                                -- of the lambda
nimi
fonte
3
Você pode indexar (id:pure(\_->8+8+8+8))por until((||" XXXX XXX XXXX XXXXX XXX XXX X XXXXXX X X X X X X X X X XX X X X X XXX X XX X X X XXXX X X X X X X X X X X X XXXX XXX XXXX XXXXX XXXX XXX XXXXX X"!!i<'X').(<1))pred 1 e guardar um monte de bytes.
21418 Lynn
1
342 bytes com em filtervez de untilramificar (e cyclepara evitar um extra ++pure(...)).
Ørjan Johansen
3

Brain-Flak -r, 4190 4188 bytes

(()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()())((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((())())())())()<(((()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()())))>()()())())())()<(((()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()())))>()()())())())())()<(((()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()())))>()()())())())())())()<(((()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()())))>()()())())())())()<(((()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()())))>()()())())())()<(((()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()())))>()()())()<((((((()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()))))))>()()()()()())())())())())())()<((((((()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()))))))>()()()()()())()<(((()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()())))>()()())()<((()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()))>()())()<(((()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()())))>()()())()<((()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()))>()())()<((((((()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()))))))>()()()()()())()<((((((()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()))))))>()()()()()())()<(((()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()())))>()()())()<((()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()))>()())()<((((((()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()))))))>()()()()()())())()<((((((()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()))))))>()()()()()())()<(((()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()())))>()()())()<((()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()))>()())()<(((()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()())))>()()())()<((()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()))>()())())())()<((((()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()))))>()()()())()<((()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()))>()())())()<((()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()))>()())()<(((()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()())))>()()())()<((()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()))>()())()<((((((()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()))))))>()()()()()())())())())()<((((((()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()))))))>()()()()()())()<(((()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()())))>()()())()<((()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()))>()())()<(((()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()())))>()()())()<((()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()))>()())()<((((((()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()))))))>()()()()()())()<(((()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()())))>()()())()<((()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()))>()())()<(((()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()())))>()()())()<((()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()))>()())()<((((((()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()))))))>()()()()()())()<(()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()())>())())())())()<(((()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()())))>()()())())())()<(((()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()())))>()()())())())())()<(((()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()())))>()()())())())())())()<(((()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()())))>()()())())())())()<(((()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()())))>()()())())())()<(((()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()())))>()()())())())())())()<((()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()))>()())

Experimente online!

Este é um pouco difícil para o Brain-flak, já que não podemos usar ]ou }. Significando que os únicos caracteres úteis são <>().

Aqui está um programa Haskell que me ajudou a escrever isso

Apenas conta pular onde os espaços precisam estar e empurrá-los individualmente.

Post Rock Garf Hunter
fonte
Isso é comprovadamente ideal?
user202729
@ user202729 Suspeito que não. Poderia ser embora. Não há muito espaço de manobra, mas estou longe de poder provar que é o ideal. Embora, como não temos {}uma pesquisa por computador, possamos encontrar o ideal em tempo finito.
Post Rock Garf Hunter
Acabo escrevendo um programa que gera a solução ideal, no entanto, é um pouco mais lento do que o esperado.i Ainda rápido o suficiente para executar.
user202729
@ user202729 Bem, não foi o ideal. Encontrei um mais curto.
Post Rock Garf Hunter
3

JavaScript (SpiderMonkey) , 1001 919 789 441 bytes

print(/u/.exec().map.call('0777700077700077770007777700077700007770007000000777777000000700070070007007000000700000070007007000000770000007000700700070077700007007700700070070000007777000000700070070007007000000700070070007007000000707777000777000777700077777000777700077700077777007',''.repeat.bind(Number)).map(/u/.exec().find.bind(/()/.exec().fill(Number.bind(0,88-070)).fill(/u/.exec().fill,!0),''.indexOf)).map(Map.call.bind(Map.call)))

Experimente online!

Finalmente bate BF !!!

Ideia geral

Converta cada caractere da cadeia longa em seu índice ou 32, dependendo do valor.

Array.prototype.map? Como obter matriz

Força bruta para ver quais objetos são acessíveis acessando as propriedades do objeto (porque ]não é permitido, apenas as propriedades com nome correspondente a um identificador são acessíveis).

RegExp.prototype.execretorna um objeto do tipo matriz quando há uma correspondência. Quando nenhum argumento é fornecido, o argumento é padronizado como undefined, então /u/.exec()corresponde e retorna uma matriz.

Obtenha 2 valores distintos arbitrários em 2 caracteres diferentes

Queremos ter (x,y)=>x=='0'?32:y, mas não podemos usar =.

Em vez disso, vamos fazer

new Array(a)
    .map(x=>x=='0'?()=>32:function()this)
    .map((x,y,z)=>x.call(y,z))

Podemos colocar mapa string sobre alguma função, mas =>não é permitido, portanto, apenas algumas funções podem ser usadas. Pode ter thisargumentos vinculados e alguns vinculados (portanto, tem o formato (x,y,z)=>pre_filled_function.call(pre,filled,args,etc,x,y,z))

Depois de considerar uma lista de funções ( repeat exec bind create map indexOf replace fill find reduce filter findIndex call bind apply), decido que as seguintes funções serão usadas (depois de considerar todas as outras combinações)

  • repeat: number -> strings diferentes.
  • find: thisArg -> primeiro elemento na correspondência de matriz.

A ideia geral seria:

[].map.call('07070707...', (x,y,z)=>[elem1,elem2].find(somefunction,x,y,z)

onde somefunctionconsidera o thisargumento ( x) e o primeiro argumento ( elem1ou elem2) e retorna se ele corresponde.

A última função de seta é reescrita para [].find.bind([elem1,elem2],somefunction).

Matriz literal

Podemos usar regex exec para obter uma matriz, e fillcom valores diferentes. Por exemplo, /()/.exec()retorna uma matriz de comprimento 2, então podemos preenchê-la conforme necessário.

De que somefunctionprecisamos?

Precisamos de um que retorne um valor de verdade / falsidade depende this(que é uma das 2 funções que retornaremos) e o primeiro argumento (deve ser uma string ou matriz).

Para isso, usei indexOf- ele retorna valor falso se o primeiro argumento for um prefixo do thisargumento.

Representam os literais da função

user202729
fonte
1
tropeça fora de final de explicação e acaba pendurado um ramo
Ørjan Johansen
2

TI-Basic (série 83), 578 bytes

8XFact8-ΔTbl
seq(X and XX≤8+8 or 8≤X and X≤Xmax or 7+7≤X and X<9+9 or 7+7+7≤X and X<8π or 9π<X and X<πXmax or 9 nCr 7≤X and X+X<77 or X=7²-7 or 7²≤X and X≤7*9-9 or X=70-9 or X=8²+ΔTbl or X=78-Xmax or X=9*8 or X=89-7-7 or X=89-7 or X=89 or X=900-807 or X=88+8 or 809-707<X and X≤97+77-70 or 9X=999 or 8X=990-70 or X=888-770 or X=899-777 or 8*7+77-8≤X and X+X<Ans or 7²X/77=77+7 or 999+77<8X and 7X<970-9-7 or 8²X=8888+8 or X+X=99+99+88 or 7X=9099-8077 or 9+8≤X/9 and X<997-770-70 or X=99+8² or X=87+80 or X=80+90 or X=87+87 or X=87+90 or X=87+97 or X=98+90 or X=999-808 or X=97+98 or X=99+99 or X=99+99+7 or 9²8<πX and X+X+X≤70*9 or 70π-π-π<Xand X+X+X≤9²8 or 70π<X and X<70π+π or 997-770≤X and X+X+X≤99*7 or 77+79+79≤X and X+8+9≤Ans or 77π<X and X<Ans-Xmax or 7*8*9-8≤X+X and X+X≤7*8*9 or X=Ans,X,0,Ans
8XFact+Ansseq(X,X,⁻8XFact,70π+π

O TI-Basic possui sua própria "página de códigos" muito especial, com opções de design estranhas, como mover o caractere de espaço para 0x29, para que 0x20 possa ser o randM(comando.

É complicado descobrir como fazer com que o TI-Basic produza o tipo certo de objeto. Strings não funcionariam por várias razões: não há como referenciar um token sem usar o token, e também não temos permissão para o "personagem. Não podemos simplesmente escrever uma lista, porque {e }são proibidos. Nós somos permitidos os caracteres [e ]para matrizes, mas uma matriz de 1 por 256 não funciona, pois as matrizes são permitidas no máximo 99 linhas e colunas. Nós não podemos usar para atribuir a variáveis, e não podemos chegar às variáveis de lista ʟou L₁através L₆de qualquer maneira.

Então, aqui, escrevemos uma fórmula lógica complicada com desigualdades que diz quando um caractere é um dos que queremos exibir. Em seguida, usamos o seq(comando para gerar uma lista 1nessas posições e em 0outros lugares. A partir daí, outro seq(comando e alguma aritmética terminam o trabalho.

Essa foi a parte emocionante; o resto é jogar golfe nas constantes e eu provavelmente não fiz isso o máximo possível. Um dos truques que uso é que, por padrão, Xmaxé 10, XFacté 4 e ΔTblé 1.

Misha Lavrov
fonte
Embora uma matriz 1 * 256 não funcione, você pode criar algo como uma matriz 3 * 99 e usar div / mod para indexar a matriz?
user202729
Ah, também não podemos indexar as coisas, porque (é proibido.
Misha Lavrov
Existe expressão condicional (se a então b else c) ou floor ou mod? A precisão numérica é de ~ 15 dígitos decimais, certo?
user202729
Tudo isso existe. Nós simplesmente não conseguimos chegar a uma entrada da matriz [A](I,J)e, pelo que entendi, você deseja fazer algo como [A](int(I/99),I-99int(I/99))ler todos os elementos da matriz [A]- também não podemos fazer isso. (By the way, )também é proibido Felizmente, não temos para fechar terminando parênteses, mas limita como podemos usar muitos comandos..)
Misha Lavrov
Estou pensando em usar um número para codificar uma matriz, semelhante a uma máscara de bits. Como (123456789 >> X) e 1 em Python.
user202729
1

Brain-Flak -r, 3894 bytes

(((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()())<((())((()())()))>)))(((((((()()()()()()()())(()()()()()()()()())(()()()()()()()()()())()()()()())))<((((((((()()()()()()()()()()()()()())((((((((((()()()()()()()()()()()()()()())((()()()()()()()()()()()()()()()())()))))<((((((((((((()()()()()()()()()()()()()()()()()()()()())())())())())()()()()()()())))<((((((((((()()()()()()()()()()()()()()()()()()()()()()()()()()()()())())())()))))()()()())())())>)))()()()()()()()()()())>))))))()()())())())())())())<((((((()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()))))))>()()()()()()())>)))())<((()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()))>()()())<(((()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()())))>()()()())<((()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()))>()()())<((((((()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()))))))>()()()()()()())<((((((()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()))))))>()()()()()()())<(((()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()())))>()()()())<((()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()))>()()())<((((((()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()))))))>()()()()()()())())<((((((()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()))))))>()()()()()()())<(((()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()())))>()()()())<((()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()))>()()())<(((()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()())))>()()()())<((()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()))>()()())())())<((((()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()))))>()()()()())<((()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()))>()()())())<((()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()))>()()())<(((()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()())))>()()()())<((()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()))>()()())<((((((()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()))))))>()()()()()()())())())())<((((((()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()))))))>()()()()()()())<(((()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()())))>()()()())<((()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()))>()()())<(((()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()())))>()()()())<((()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()))>()()())<((((((()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()))))))>()()()()()()())<(((()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()())))>()()()())<((()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()))>()()())<(((()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()())))>()()()())<((()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()))>()()())<((((((()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()))))))>()()()()()()())<(()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()())>()())())())())<(((()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()())))>()()()())())())<(((()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()())))>()()()())())())())<(((()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()())))>()()()())())())())())<(((()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()())))>()()()())())())())<(((()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()())))>()()()())())())<(((()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()())))>()()()())())())())())<((()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()))>()()())

Experimente online!

Eu escrevi um programa para gerar o programa Brain-Flak ideal para qualquer saída. Assuma isso:

  • <> não é usado
  • Meu programa está correto

, então esta solução é ideal.

O(n5)

user202729
fonte
1

Python 2 , 162 157 bytes

Aviso : caracteres imprimíveis à frente!

print map(lambda(i,x):(x>'0'and i-0xe0/7)+0xe0/7,enumerate(bin(reduce(lambda x,y:(x<<0xd-7)-x+y,bytearray('7?QcZ;+BqiQJUS!?B0W![<LBU7X!frQd(SQdB\0')))))

Experimente online!

Com base na resposta existente do TFeld , mas com algumas alterações:

A bytearrayé semelhante ao strque é iterável, no entanto, a iteração fornece números inteiros, não caracteres. Podemos usá-lo para codificar um literal base-N e reduce(lambda x,y: x*N+y, my_bytearray)decodificá-lo.

Como os arquivos Python 2 não têm uma codificação por padrão, apenas caracteres em ASCII (0..127) podem ser usados. Byte nulo, novas linhas, barras invertidas e aspas levam mais 1 byte.

Além disso, não é possível usar todas as bases.

Eu escrevi um programa para encontrar a menor representação de n, dadas essas restrições.

user202729
fonte