Saída da mensagem Arecibo


38

A mensagem de Arecibo é uma mensagem de rádio interestelar de 1974, com informações básicas sobre a humanidade e a Terra, enviadas ao aglomerado de estrelas globulares M13, na esperança de que a inteligência extraterrestre possa recebê-la e decifrá-la ... A mensagem consistia em 1.679 dígitos binários, aproximadamente 210 bytes ...

O número 1.679 foi escolhido por ser um semiprime (o produto de dois números primos), para ser organizado retangularmente como 73 linhas por 23 colunas. O arranjo alternativo, 23 linhas por 73 colunas, produz um conjunto ininteligível de caracteres (assim como todos os outros formatos X / Y).

A mensagem de Arecibo

Esta é a mensagem com cor adicionada para destacar suas partes separadas. A transmissão binária real não carregava informações de cores.

Fonte: Wikipedia


Sua tarefa é gerar a mensagem Arecibo na organização exata de 23x73 mostrada na imagem. Qualquer um desses formatos de saída é aceitável:

  • Texto, usando um caractere para uns e outro para zeros (usando as regras usuais para separação de linhas)
  • Uma matriz 2D de dois valores distintos
  • Uma imagem 23x73 com duas cores distintas
  • Um fluxo ininterrupto de 1679 itens de dois valores distintos (ou seja, qualquer um dos formatos acima, mas simples).
  • Um número inteiro de 1679 bits. Indique a ordem de bits e bytes (endianness) em sua solução.

Para sua comodidade, aqui está uma versão passível de cópia (também um exemplo de saída em formato de texto):

00000010101010000000000
00101000001010000000100
10001000100010010110010
10101010101010100100100
00000000000000000000000
00000000000011000000000
00000000001101000000000
00000000001101000000000
00000000010101000000000
00000000011111000000000
00000000000000000000000
11000011100011000011000
10000000000000110010000
11010001100011000011010
11111011111011111011111
00000000000000000000000
00010000000000000000010
00000000000000000000000
00001000000000000000001
11111000000000000011111
00000000000000000000000
11000011000011100011000
10000000100000000010000
11010000110001110011010
11111011111011111011111
00000000000000000000000
00010000001100000000010
00000000001100000000000
00001000001100000000001
11111000001100000011111
00000000001100000000000
00100000000100000000100
00010000001100000001000
00001100001100000010000
00000011000100001100000
00000000001100110000000
00000011000100001100000
00001100001100000010000
00010000001000000001000
00100000001100000000100
01000000001100000000100
01000000000100000001000
00100000001000000010000
00010000000000001100000
00001100000000110000000
00100011101011000000000
00100000001000000000000
00100000111110000000000
00100001011101001011011
00000010011100100111111
10111000011100000110111
00000000010100000111011
00100000010100000111111
00100000010100000110000
00100000110110000000000
00000000000000000000000
00111000001000000000000
00111010100010101010101
00111000000000101010100
00000000000000101000000
00000000111110000000000
00000011111111100000000
00001110000000111000000
00011000000000001100000
00110100000000010110000
01100110000000110011000
01000101000001010001000
01000100100010010001000
00000100010100010000000
00000100001000010000000
00000100000000010000000
00000001001010000000000
01111001111101001111000

Se o seu idioma, por algum motivo, possuir um built-in para a Mensagem Arecibo, você não poderá usá-lo.

Boa sorte!

ATUALIZAÇÃO: Aceitei a resposta 05AB1E, pois era a primeira a ser mais curta que a mensagem original. Não deixe que isso dissuadi-lo de novas soluções.

ATUALIZAÇÃO 2019-09-09: A resposta aceita foi movida para uma nova resposta 05AB1E, pois obsoleta a resposta 05AB1E anterior. O mesmo ponto vale para a atualização anterior; novas soluções ainda são bem-vindas.


9
Se um idioma foi incorporado à mensagem de Arecibo, posso dizer, com toda certeza, que vi tudo neste mundo c:
Luis felipe De jesus Munoz

6
O Mathematica (IIRC) tem uma imagem embutida para Lena, então não me surpreenderia se também tivesse uma mensagem do Aricebo.
Beefster

@RobertS. não porque existem outros formatos válidos além do texto.
Beefster

4
No espírito do formato original, um resultado / saída simples deve ser permitido. O ponto inteiro de 1679 bits é exatamente que o número adequado de linhas e colunas pode ser inferido a partir do comprimento do sinal.
Adám 9/04

4
@LuisfelipeDejesusMunoz Mathematica tem um builtin para determinar cabras em uma imagem , então uma mensagem embutida Arecibo realmente não iria me surpreender tanto .. Que a linguagem é construído sobre builtins do universo ..>>.
Kevin Cruijssen

Respostas:


2

05AB1E , 182 bytes

•sv¯ö¨₁ÿ.ÛïžôΔ¨γ_Ígv…=Bм„Ð.(ܦi´…ε±G½0^/₃öRÛž¼¤"āêL!ˆ6‘Gā܇ðв₁÷Ã7€₂䬂Cć¨g¾†@÷[_-68¯a∍iG*6ÆîÆ;>éjζãÎÂ+ºžnî¼ć'(ÝÞΔ‹∞ÉݹÕ5λ₆*a|§oÄmôæ¨;—:hž¥ð¢ocË'¨%¡4Ćáß©ìća;FÁ?iˆèεƒʒ•Ž6–FD4‰`3ÊD?i-

Experimente online! (usa 1para 0 e 0para 1, conforme permitido pela pergunta).

Experimente online! (5 bytes a mais, 0para 0 e 1para 1, novas linhas adicionadas para facilitar a leitura).

A maior parte do código é uma constante N de base 255, o restante é um decodificador do Sistema Numérico Assimétrico , usando probabilidades codificadas de 75% / 25% (a frequência real de 0 é 76,35%, o que é tão próximo a 75% que economizaria apenas 1,2 bits na carga, enquanto os 75% agradáveis ​​e redondos nos permitem salvar vários bytes no decodificador).

Ž6–F                  # repeat the following 1679 times:
    D                 #  duplicate N
     4‰`              #  divmod 4: pushes N / 4, N % 4 on the stack
        3Ê            #  is N % 4 != 3 ? (boolean 1 or 0)
          D?          #  print a copy
            i-        #  if it's 1, subtract: N = N - (N / 4)
                      #  (otherwise, N = N / 4, since that's the top of the stack)

Aqui está o codificador ANS que gerou a constante: Experimente online!

Î                          # start from N = 0
 Rv         ]              # for each bit in the reversed input:
   4*                      #  N *= 4
     yi                    #  if the bit is 1:
       3+                  #   N += 3
         ë                 #  else:
          3÷               #   N /= 3 (integer division)
             ₅B'•.ø        # compress N as base-255

Bom trabalho para anular a resposta 05AB1E anterior!
Beefster

13

05AB1E , 215 210 200 bytes

Economizou 15 bytes graças ao Magic Octopus Urn

•cOž¤4é57ñΛ\Ö₃BαöĀíL½₅üBdoÙRθLγ¨G×Tćú$G(˜ƒ¦!€R»SDrµCnJ†d∊ζ·<8‡T@|‹ï=BζćósxG\ÙÎ$¿o₁5/ÔŸÇBûXé-”a::Ž]°∊y;ζ]MÜβ‘иL”β{üÃÇíäc€÷›ÎU=}¨иaŸdY`»¾ÚUβ:ô©¦β†₅DGŠβ3Jêθ,äá!ícqšVÖ›lÈΣ¯pε €êʃDpÙ/¬Žλ8:ãÿ3=€.Þć•3BY¾4×:

Experimente online! ou com formatação adicional

Cadeia de caracteres trinária codificada em Base-255 com ocorrências de 0000substituídas por 2.


@MagicOctopusUrn: Obrigado! Isso torna 210 mesmo :)
Emigna

Na verdade, é ainda melhor se você substituir 0000com 2por mais 9 bytes. - pastebin.com/aZ6tHxjx para 201
Magic Octopus Urn

@MagicOctopusUrn: Sim, achei isso também e estava prestes a publicá-lo :)
Emigna

2
Legal! Como as mensagens do Arecibo têm 210 bytes (23 * 73/8 = 209.875), sua solução (atualmente com 200 bytes) é mais curta que a própria mensagem!
JL

Fui em frente e fiz disso a resposta aceita, pois era a primeira a ser mais curta que a própria mensagem.
Beefster

11

Java, 688 678 590 379 361 bytes

Retorna uma string.

n->new java.math.BigInteger("in95mzupnpa2r0khpoepyql6ioqyn413avucdtfay6indx4wh9dehe3sn18klobtf4z9g9q17umqmwpegr2khb5eqinn7azl4jpfp2a8eui0xfrx5qwrou6gd65jh4ge3ls14k5lu7qrvmg6942ms29u5rb8fa6yrdhfoh5zoi9bdi7uh5ig0u0ff9kounth8sh357x7qox4m3oqviqsbrvakonbka4ahp21bgzi5v1akzzuqoncszhpabbru9q1uo2g11zr73iuyiqr5ikr69zn7cdv7e1lhd6ese9",36).toString(3).replace("2","0000")

-10 bytes retornando o fluxo bruto (resposta antiga)
-88 bytes usando números 10 base (obrigado @ceilingcat!)
-211 bytes (eu sabia que poderia ser jogado golfe!) Usando um BigInteger codificado em base 36 (obrigado @JollyJoker !)
-18 bytes usando um número inteiro codificado diferente (obrigado novamente @JollyJoker)

Experimente online!

Explicação:

n->new java.math.BigInteger("base36 string",36) // Decode the base-36 integer.
   .toString(3)                                 // Re-encode as ternary
   .replace("2","0000")                         // Replace 2 with "0000"
                                                // Implicit return

1
Comentários não são para discussão prolongada; esta conversa foi movida para o bate-papo .
Adam Lear

9

Geléia , 213 bytes

“H²ɓ¶Ṡḷ€ẹ]ƒf*ḳḢ&ƁṇOḥ{ḄṫwỊ+oLạʋߢH9¢¹÷ỴɗÇ⁶ƲƙæḊẋ3³=1!VƇƁ'D⁺3Ỵɱ©⁵%fȯez#ƈjƒżṆo.ZF⁶ċṢ⁶ọṛb9Ȯƒd?ƁUĠt4ẇ,ḞġƒµƭfʠƁP§÷øȤŻPɲẋ(¢ß¢(⁽3¶ṙėɗy@ṁYȮL~e⁷ƤĊ§nỊṅµṠ°@7ẠB>Ġ⁻İ}uy¡½:esOpḢt}qS©HÞṬĖṛṇḣ9÷;ESḢ,Ẉ^ṙpƲ©tṃwçnẒṆ¡⁻Jıƒị£-&Ɱ*ẋʂżoȯÑḢɼ’

Experimente online!

Eu brinquei com a codificação Huffman, mas as melhorias no tamanho dos dados foram superadas pelo código extra. Como tal, esta é simplesmente uma versão codificada na base 250 da saída desejada. A saída consiste em um número inteiro que, quando decodificado como base bijetiva 2, produzirá a lista 1D de 1s e 2s. Obrigado @Emigna por apontar a alteração nas regras.

Experimente online - com mais decodificação para demonstrar a saída!

Se uma codificação binária mais convencional for preferida, aqui está uma que codifica uma representação inteira da mensagem binária invertida. O bit mais significativo do número inteiro representa o início da mensagem.


7

Brainfuck, 2360 2008 1938 bytes

-[>+<-----]>---......+.-.+.-.+.-.+.-............+.-.+.-.....+.-.+.-.......+.-.<++++[->.+.-..<]>+.-.+..-.<+++++++++[->.+.-<]>..+.-..+.-<++++++[->......<]>.+.<++[->.-...................+..-.+<]>.-..................+.-.+.-.+.-..................+.....-<++++++++[->....<]>+..-....+...-...+..-....+..-...+.-.............+..-..+.-....+..-.+.-...+..-...+..-....+..-.+<++++[->.-.+....<]>.-<+++++[->.....<]>.+.-.................+.-............................+.-.................+......-.............+.....-.......................+..-....+..-....+...-...+..-...+.-.......+.-.........+.-....+..-.+.-....+..-...+...-..+..-.+.-.+.....-.+.....-.+.....-.+.....-..........................+.-......+..-.........+.-...........+..-...............+.-.....+..-..........+......-.....+..-......+.....-..........+..-.....<+++[->........+.-<]>.....+.-......+..-.......+.-.......+..-....+..-......+.-..........+..-...+.-....+..-...............+..-..+..-.............+..-...+.-....+..-.........+..-....+..-......+.-.......+.-......+.-........+.-.....+.-<++[->.......+..-........+.-...+.-.<]>........+.-.......+.-<++++[->.....+.-..<]>..........+..-.........+..-........+..-.........+.-...+...-.+.-.+..-...........+.-.......+.-..............+.-.....+.....-............+.-....+.-.+...-.+.-..+.-.+..-.+..-......+.-..+...-..+.-..+.......-.+...-....+...-.....+..-.+...-.........+.-.+.-.....+...-.+..-..+.-......+.-.+.-.....+......-..+.-......+.-.+.-.....+..-......+.-.....+..-.+..-<+++++++[->.....<]>+...-.....+.-..............+...-.+.-.+.-..<++++++[->.+.-<]>..+...-.........+.-.+.-.+.-.+.-................+.-.+.-..............+.....-................+.........-............+...-.......+...-.<++[->........+..-...<]>....+..-.+.-.........+.-.+..-<++[->.....+..-..+..-..<]>..+.-...+.-.+.-.....+.-.+.-...+.-..<+++[->..+.-...+.-<]>........+.-...+.-.+.-...+.-............+.-....+.-.<++[->...+.-.........<]>+.-..............+.-..+.-.+.-...........+....-..+.....-.+.-..+....-...

Experimente online!

Provavelmente vou jogar isso ainda mais em breve.


5

Peixe morto ~ , 1115 1088 1084 bytes

oooooo{i}ooo{d}iod{o}{i}c{d}ooiodoiodoooooiodoiodoooooooiodoo{i}c{ii}is{iiii}doooio{{{d}}}oioodooiodo{i}coooooooo{d}o{{i}}oo{{d}i}c{d}{oo}ooo{i}c{d}{o}ooioodooooooooo{i}c{d}{o}ioodoiodooooooooo{i}c{d}{o}ioodoiodooooooooo{i}c{d}oooooooooiodoiodoiodooooooooo{i}c{d}oooooooooiooooodooooooooo{i}c{d}{oo}ooo{i}c{d}ioodooooiooodoooioodooooioodooo{i}c{d}iod{o}oooioodooiodoooo{i}c{d}ioodoiodoooioodoooioodooooioodoiodo{i}c{d}iooooodoiooooodoiooooodoioooood{i}c{d}{oo}ooo{i}c{d}oooiod{o}oooooooiodo{i}c{d}{oo}ooo{i}c{d}ooooiod{o}oooooooiod{i}c{d}ioooood{o}oooioooood{i}c{d}{oo}ooo{i}c{d}ioodooooioodooooiooodoooioodooo{i}c{d}iodoooooooiodoooooooooiodoooo{i}c{d}ioodoiodooooioodoooiooodooioodoiodo{i}c{d}iooooodoiooooodoiooooodoioooood{i}c{d}{oo}ooo{i}c{d}oooiodooooooioodoooooooooiodo{i}c{d}{o}iood{o}o{i}c{d}ooooiodoooooiood{o}iod{i}c{d}iooooodoooooioodooooooioooood{i}c{d}{o}iood{o}o{i}c{d}ooiodooooooooiodooooooooiodoo{i}c{d}oooiodooooooioodoooooooiodooo{i}c{d}ooooioodooooioodooooooiodoooo{i}c{d}ooooooioodoooiodooooioodooooo{i}c{d}{o}ioodooioodooooooo{i}c{d}ooooooioodoooiodooooioodooooo

Experimente online!

Se alguém tiver paciência para jogar mais, eu saúdo você com antecedência. : P

-27 bytes imprimindo 10s e 100s nos locais onde aplicável.
-4 bytes imprimindo três 1000 e um 1001 na linha 3


4

Piet , 1763 codels

Emite um fluxo de 0s e 1s (sem quebras de linha).

Codel size 1:

Programa de mensagens Arecibo com tamanho de codel 1

Codel tamanho 4, para facilitar a visualização:

Programa de mensagens Arecibo com tamanho de codel 4

Explicação

  • Primeiro, coloque um valor de sentinela -1 na pilha.
  • Em seguida, empurre a mensagem Arecibo, em ordem inversa (porque é uma pilha), usando a codificação de execução.
  • Por fim, alterne entre dois loops, um para zerar e outro para impressão.
    • O contador do loop é o valor atual da pilha, decrementado até chegar a zero, quando é descartado e passamos para o outro loop.
    • Entre o loop zero e o loop ones, verifique o valor da sentinela, saindo se for encontrado.

Notas

O programa segue um caminho em espiral, no sentido horário, da parte superior esquerda para o centro. Os blocos pretos dispersos que seguem aproximadamente as diagonais são o controle de fluxo. Aqui está o rastreio do NPiet .

Estou trabalhando nisso desde o dia em que esse desafio surgiu, mas demorou um pouco para que a mensagem fosse "gravada" na imagem! Escrevi os loops finais e o valor da sentinela primeiro e depois construí a mensagem do centro para o exterior. (Como o Piet sempre inicia a execução a partir do canto superior esquerdo, eu esperava ter que embaralhar e girar a imagem para evitar excesso de espaço em branco, mas ela se encaixava perfeitamente!)

Curiosidade: a codificação de execução no Piet não economiza (por si só) espaço. São necessários n codelos de uma cor para inserir o valor n na pilha ou n codéis de cores diferentes para inserir tantos 1s na pilha. Portanto, é o mesmo número de codéis de qualquer maneira. Mas os números maiores que o RLE fornece significa que você pode usar truques aritméticos (por exemplo, em vez de pressionar 9, você pode pressionar 3, duplicar e multiplicar) para reduzir o número de codelos e blocos engraçados para preencher o espaço em branco disponível.

Eu não tinha certeza de como contar a pontuação para as entradas de Piet. Encontrei alguns que parecem contar todos os codelos, e outros que explicitamente contam apenas aqueles usados ​​ativamente. Eu apenas contei todos eles; ignorar codels brancos (mesmo aqueles pelos quais o programa nunca passa) parece semelhante a ignorar espaços em branco em uma linguagem de programação mais típica.

Ah, e agora (duas horas após a postagem) percebi que perdi o último tempo trabalhando nisso. Eu queria cortar a última linha e coluna quase completamente branca, então embaralhei as coisas ... incluindo os blocos pretos de controle de fluxo. Mas as bordas da imagem funcionam da mesma forma que o preto! Se eu tivesse me lembrado disso, não precisaria gastar tanto tempo intrigando os meandros dos PDs e CCs ...


3

C # (Compilador interativo do Visual C #) , 366 332 329 319 bytes

int i;foreach(var g in"*ЀʂЄ࢈ҲપԤ␀␀␀؀ȀȀȀ؀␀␀సؘࠀƐഘؚ྾ߟ␀␀Ā␀␀ྀ␀␀రܘࠈഌΚ྾ߟ␀␀ă␀ྃ␀ȁăÃ1`ƀ1`ÃĂȃЃЁȂĀ`ÀƀȺ؀Ȃ␀ȏЀȗɛ'Ŀஇ7;ȅ?ȅ0ȍЀ␀␀΂␀ΨՕ΀Ŕ␀ŀЀ?܀àǀƀ`̀°٠Ƙѐʈш҈EB@Ѐޟɸ")Write(Convert.ToString(g,2).PadLeft(12-i++%2,'0'));

Substitua todas as instâncias de por \0para testar.

Experimente online!

C # (compilador interativo do Visual C #) , 305 bytes, 210 caracteres

_=>"*ЀʂЄ࢈ҲપԤ␀␀␀؀ȀȀȀ؀␀␀సؘࠀƐഘؚ྾ߟ␀␀Ā␀␀ྀ␀␀రܘࠈഌΚ྾ߟ␀␀ă␀ྃ␀ȁăÃ1`ƀ1`ÃĂȃЃЁȂĀ`ÀƀȺ؀Ȃ␀ȏЀȗɛ'Ŀஇ7;ȅ?ȅ0ȍЀ␀␀΂␀ΨՕ΀Ŕ␀ŀЀ?܀àǀƀ`̀°٠Ƙѐʈш҈EB@Ѐޟɸ".Select((g,i)=>Convert.ToString(g,2).PadLeft(12-i%2,'0'))

Mesmo com o anterior, substitua por com \0para testar. Saída como IEnumerable<string>.

Experimente online! (Cortesia de Jo King)



Eu acredito que o ++in 12-i++%2é um nop (pelo menos, funcionou para mim quando o removi)
meu pronome é monicareinstate

@someone Eles são um copiar e colar da resposta antiga que eu esqueci de remover
Modalidade de Ignorância

2

Perl 6 , 368 bytes

.say for :36('FJXOE0PDDNF5Y5EHGB8M9SWMXQOXIKIT9F6ZKWWDEACHCBGXL1N2H60CN0CJ4EMKF7D6MODSKYJVNR4SFTDR6NSM421LQ67B6MWF0G5BQATFOJJJBQ0UFQM64T0MWSQN41C4S5D1QR5KJM2L9UTYMMKUBBQWY45YCMRGO8ZRGTQH7LXMZBUASLCTKX30IH0AYKYEPHO8HFHX8GAY5WM38YOSUX0HABYSH2PPBLRDRZIN5ANAQ3V8PLOZ6EHC0UI95EVJVYD1820T6J14HGX85NWFQET2NWOMSNUT0JW4LHMY90X094TEE9KXJXSNN6YPERFQW').base(2).substr(1).comb(23)

Experimente online!

A cadeia longa é a mensagem como um único número base-36 (com um único prefixo de 1 bit para preservar os zeros iniciais) que é então convertido novamente em binário e impresso 23 bits por vez.


Você pode usar >>.saye &{S/.//}salvar bytes. Você já pensou em usar uma base diferente?
Jo King

Sim, tentei usar a base 65536 / Unicode, mas a mensagem é executada em alguns pontos de código substitutos proibidos. Consegui evitar isso adicionando um deslocamento fixo a cada ponto de código, mas, surpreendentemente, algumas das seqüências geradas travaram o Emacs algumas vezes. A resolução dos problemas começou a levar mais tempo do que eu podia me comprometer. Provavelmente revisarei o problema mais tarde.
Sean

Não faz sentido entrar em vários caracteres de byte, pois isso aumenta sua contagem de bytes. 289 bytes implementando minhas dicas de cima e usando a base 122 (para evitar retornos de carro)
Jo King

2

Wolfram Language (Mathematica) , 383 bytes

StringPartition[Uncompress@"1:eJylVNsRwjAM44s92KBaBTZgAUZhZXqtHUuOWrgjfSRRHFlO4tyer/vjfb1clq0gHirZLRjby986hppcT5p+L3BmgJ3t4Ul4GsNyG++7YbaXLh0ZTPhXa4Sn+X/s9Qfk3Hx2cOaSIuNYaVu5laschvgzSqAjHeZBhilKgKBDEhw0upJRg+HOK4MyNC29sfbc3RV0VPDqeLiRTsG1ulExq1IitpunOa7asnYM9siDZ6eidUCkEzBOUbCkGIig4aTyUGBYWAX6W6aXIWGGI/HlhmsqzSU0QTZjkMVpaX5sBsm1OGKVg1qdjKP0EdyqZBRLhukn8DLBQav6kccgz8OKfgBzjj6Z",23]

Experimente online!


2

Node.js , 333 bytes

Retorna uma sequência binária de 1.679 caracteres.

_=>Buffer(")SI)=.);1K?>>>2333A3,93/I3>3)g33)AEAAI)5JQZJTddda3)*3*33+3,e)*e3)//0/1+)1C/7Cgggg3395)9)A3IY)h*IH),39+)995*)AA-)59Y)*O3Z,)//*)91**)A*-)Y+1)I11+)I1)/)5)Y*0?)+)I)-0Y)1@;_*7<gaE/a)Q7[*9HM+IY16I33)a1)*^.><I+S3.38I)*hY)7)a)Y)A,9*A5Y/A:9=9K:1I-=9)19I)9*329)GH<").map(x=>s+=(x-51&&x-41).toString(2).padStart(x-51?6:12,0),s='')&&s

Experimente online! (com saída formatada)


JavaScript (ES8), 413 bytes

Retorna uma sequência binária de 1.679 caracteres.

_=>atob('AsKoAFBQEiIlwpVVUk!!ABwo!DQ!Gg!V!Aw7g!!GHGHCi!yGjHChsK+w7vDr8K!!Q!Q!!g!/DgAHDs!AGGHDhiAgCGhjwprDu8Ovwr4!ABAw4AQAcK!MKDAD8GB8OAD!QCAQQMBAYYEAMQwABwpgAMQwBwoYEBAgEEBgEQDAIwoAgIMKAwoDCgMKABgDDgDAEdcKACAgAEHwAIXTCtgTDpMO+w6HDgcK4AsKDwrIFB8OkCgwINg!!A4IAB1FVTDoArCo!U!/CgAB/w4ADwoDDoAwAYDQBYMOMBmEUFEIkSMKARR!woQgAQB!MKUAHnDtA'.split`!`.join`AA`).replace(/[\s\S]/g,c=>c.charCodeAt().toString(2).padStart(8,0))

Experimente online! (com saída formatada)


2

Bubblegum, 275 236 bytes

00000000: e006 8e00 e45d 0018 6988 6507 a228 f86f  .....]..i.e..(.o
00000010: f042 c62f d4d7 b99e 38bc 56c4 52e8 2630  .B./....8.V.R.&0
00000020: 8aaa 7252 d47d 5ef4 c96a 511f 6842 423f  ..rR.}^..jQ.hBB?
00000030: 4532 ca9f 22d3 1633 e0c4 665a d5dc 4e68  E2.."..3..fZ..Nh
00000040: 7b09 76ae 3c7e f9d4 fa4a 05e0 4163 c580  {.v.<~...J..Ac..
00000050: c585 a383 2396 4ca9 1f48 a4b9 744e 37c8  ....#.L..H..tN7.
00000060: 68c5 af23 645d 59a7 542a e6d1 23b9 3aba  h..#d]Y.T*..#.:.
00000070: f0e6 2738 dfd5 b0a3 c6a3 60bf c5b6 5ae6  ..'8......`...Z.
00000080: 7893 30a8 ae04 edf9 298b b777 4d56 285b  x.0.....)..wMV([
00000090: cb74 07cc 7a7b a399 3dc7 c6e7 b693 e715  .t..z{..=.......
000000a0: d908 876e 001f 7408 3c6a 5fcd 37cb 02c4  ...n..t.<j_.7...
000000b0: 93de 33c2 a11e 5bac cd12 d99a fac3 e0fa  ..3...[.........
000000c0: 5268 94f7 d640 0f73 cede f79d 821f 39d1  Rh...@.s......9.
000000d0: dc49 ff06 6962 6c31 dc29 a077 01c3 7690  .I..ibl1.).w..v.
000000e0: 85ef bbec 31d7 5c7f f9fc 8c00            ....1.\.....

Experimente online!


2

ferramentas bash + GNU, 351 bytes

base64 -d<<<H4sIAPnNrVwCA6WUCRLDIAwDv8T+/3NNG4wvkTBTcisGSyA8xrcxj9Ds02F+Z7yuf3hnPyz0vYEGz+FG3IKBs+x3oL2PSh0TM/PnaGamft9nPUCew3uCp5RBWdRKGz+qNJn8qRKkkNaTBgeVIFXWOdi8VCaIeUnsfHo6TXpaFa3H5olf6J5MuIHLoEi0uKcRFCvEXG4xseglKzZg7kpYJSLMA3M7wXKR+/L2WiK0kvg+TDASLp6Co1KEVIlVmFzhCktRhBBDdSZYU1xKHrmDUllcWpNR/YNW2QNcHtF0rSySb0MXk/SDUgEwG5gfLvQDxuEdDo8GAAA=|gunzip

TIO


não vi seu post do bash antes de eu postar o meu - muito menor!
Noodle9 10/04

2

MathGolf , 223 220 bytes

'06*"x·<×J× Ç×►B×ê\"@$↕!◙è0♥f░×→0×♠p└☺α?×└•×◙×P♣p¬è:×►∟××××←♦♠♣≥â☻┘A☺▄αp⌂r☻[║►×>◘×♦♦└:☻↑`×♥@@@@►►@♦↑ ☻♀◘☻♦☻☻├×å↑×╠×Ç!♠ 0♀◘↑◘☻♦◘×♠α♥â▼ÇA×└×◘` ×××▀≈}═14♦►►π0♀××°×α•×►×××☻×◘××└≈}_├↑♪↓×─0♫♥×××|××*××♪×Ç♠×└×××× ⌐¬╩↕◄○((×T☺"$à+

Experimente online!

Explicação

'0                push single character "0"
  6*              repeat 6 times
    "..."         push the magic string
         $        convert to ordinal
          à       convert to binary string
           +      pop a, b : push(a+b) (add the 6 zeroes)
                  below is the footer
            L/    divide into groups of 23 characters
              n   join array with newlines into string

Você pode mover o L/npara o rodapé, na verdade são 220 bytes. É possível salvar mais bytes portando as respostas 05AB1E / Java (usando esse número inteiro compactado , convertê-lo em base-3 e substituir todos 2s por 0000s)?
Kevin Cruijssen 12/04

@KevinCruijssen nice catch! Eu gostaria de ter mais funções de substituição de string, mas isso não faz parte do MathGolf no momento.
maxb 12/04

Como cerca de um mapa por dígitos, que mapeia 2para ♫░╞? EDIT: Não importa. Vejo que você não tem uma Conversão Base embutida (exceto binário / hexadecimal) para converter em base-3?
Kevin Cruijssen 12/04

@KevinCruijssen Pensei um pouco sobre como alterar a conversão de base. Certamente não preciso de um comando para converter string binária em decimal e outro para converter uma matriz binária em decimal. Dessa forma, eu posso ajustar outro comando de conversão de base (e a idéia sempre foi ter uma conversão de base geral no idioma).
maxb 14/04

Certamente você pode mover o +rodapé também
Jo King

1

Perl 5 , 460 bytes

printf"%023b",oct"0x$_"for qw/15400 141404 4444b2 555524 0 600 1a00 1a00 2a00 3e00 0 61c618 400190 68c61a 7df7df 0 80002 0 40001 7c001f 0 618718 404010 68639a 7df7df 0 81802 1800 41801 7c181f 1800 100804 81808 61810 18860 1980 18860 61810 81008 101804 201804 200808 101010 80060 60180 11d600 101000 107c00 10ba5b 1393f 5c3837 283b 10283f 102830 106c00 0 1c1000 1d4555 1c0154 140 7c00 1ff00 701c0 c0060 1a00b0 330198 228288 224488 22880 21080 20080 9400 3cfa78/

Experimente online!


1

Python 2 , 336 bytes

print bin(int('gVQAKCgJERLKqqkgAAAAAMAABoAADQAAKgAAfAAAAAMOMMQAGQ0Yw19998AAAAgAAgAAABAAB+AA+AAADDDjEBAENDHNffffAAAAIGAIAMAAQYAfgwPgBgAIBAIIGAgMMCAGIYAAzAAYhgDDAgIEAggMAiAYBEAQEEBAQEADAGAYAjrABAQACD4AELpbAnJ/cODcAUHZAoPyBQYEGwAAAAAcEAA6iqpwBVAACgAHwAA/4AHAcAYAMBoAsGYDMIoKIRIkQCKIAEIQAIAgAEoAPPp4'.decode('base64').encode('hex'),16))[3:]

Experimente online!

Imprime uma sequência de bytes


1

Java (OpenJDK 8) , 364 bytes

n->new java.math.BigInteger("in95mzupnpa2r0khpoepyql6ioqyn413avucdtfay6indx4wh9dehe3sn18klobtf4z9g9q17umqmwpegr2khb5eqinn7azl4jpfp2a8eui0xfrx5qwrou6gd65jh4ge3ls14k5lu7qrvmg6942ms29u5rb8fa6yrdhfoh5zoi9bdi7uh5ig0u0ff9kounth8sh357x7qox4m3oqviqsbrvakonbka4ahp21bgzi5v1akzzuqoncszhpabbru9q1uo2g11zr73iuyiqr5ikr69zn7cdv7e1lhd6ese9",36).toString(3).replaceAll("2","0000")

Experimente online!

Explicação: Primeiro teve n->new java.math.BigInteger(str,36).toString(2) , bastava converter um número de raiz 36 em binário, mas isso precisava de nove caracteres extras para zeros iniciais. Então, eu tive a idéia de codificar no comprimento da execução alguns zeros como dois. Um comprimento de quatro zeros parece minimizar o comprimento da base 36, portanton->new java.math.BigInteger(str,36).toString(3).replaceAll("2","0000")

Consulte a discussão sob esta resposta para obter a correção de bug principal de zeros por @KevinCruijssen


Agradável. É impressionante para Java!
Eric Duminil 11/04

1

[Python 2] , 345 bytes

s=''
for c in")pG/K(K*j$h%kk$ppjGE&I6S6S5[5eCv~vw0x&z$wgqcde$e=G4G?G4eG0e:vv~w*G,gn$wy$uuuuG=G)I,G.I2G(I-eG(I)e-I0G+G+G(G)I*G*vI)G-w'I2y0w'I,vI)G*G)G+G(G*I+W+I+W,G*G(G*G*G*G/I,I+I,iq.G*G1G(e/g$c%sG)m%md~$M(},K(cO)K(eO)K(I)G(aE$M(G1c$hpoI,pG3K1e3eU/M*M,I.I*S,Q(y*y'hG(ng&j$j$G+hW/g'G/G,G1k.d$e$mN":c=ord(c)-35;s+=[bin(c-35)[2:],'0'*c][c<35]
print s

Codifiquei o comprimento das cadeias de 0s como um byte começando em chr (31). Então codifiquei os 10101 restantes como números binários, começando em chr (70) até chr (126). Strings binárias que não se encaixavam foram divididas em pedaços menores.

Editar: reduzido para 326 bytes. Obrigado Jo King

Edit: Corrigido um bug no programa gerador de código

Edit: Edição Final


Você não precisa salvar a string grande em ouma variável.
xnor 12/04

1

Zsh , 577 bytes

experimente online !!

S=fxxxxibxxdxxfyzzzyx1yxxxxxxxxyyywl2ij1xxhj1xxhixxxhi5iw2d3c2d2cxl2bxc2az2c2d2ax4x4x4x5wcxpxwdxp15m5w2d2d3c2cxfxhxc1xxc2c2y1xx4x4x4x5wc1f2ixj2kd1e2j15e2f5j2kb1h1hyc1f2gzd2d2fzaf2c1d2ej2b2gf2c1d2ed2d2f1dc1f1hzb1g2hya1h2hya1i1gzb1g1g1dc1l2ed2h2gbz2xx2ibzd1lbzb5jb1dx2xyx1x2fy2yy6x3d3e2a3ixxd2x2b1fxxd6b1fxxd2db1e2a2jwb3e1lb2xxzxxxxx1b3ixxxynxxeh5jf9hd3g3fc2k2eb2a1ix2da2b2g2b2cazxxdxzzazyzyzzezxz1ge1d1d1ge1i1ggyxxia3y4xy3z
for X in ${(s::)S};{case $X in
[a-w])V=$[##$X-96];printf 0%.s {1..$V};;[1-9])V=$[##$X-48];printf 1%.s {1..$V};;[x-z])V=$[##$X-119];printf $[10**$V];;esac}

Lógica de codificação personalizada usada. A string Stem 421 caracteres e pode ser compactada um pouco mais. As letras a-wrepresentam 0s repetidos . Os números 1-9representam 1s repetidos . As letras x y zrepresentam10 100 1000 respectivamente.

Talvez eu devesse ter tentado a codificação de pares de bytes ou o Ascii85 .


0

Bash , 702 697 bytes

xxd -r -p<<X|xz -dc
fd377a585a000004e6d6b4460200210116000000742fe5a3e006d7010c5d
0018698865079cf6752c9e9a501a87a798b4844f9fcfdaaf87733b9d8239
48c816d860a938767f6cb81299f3e8a638effe3068c0e096a8949c81d706
7dff3ec44e5df185b3a48e5b5857724386e8c37cfbd5c856b12614ee78ec
c41df4db3aea71fd3a8fa474905609f78eb3fd66e246557965e4ab6dfd67
efbd9202f542ded9cf98a6401ee2d23afb2f544bd2442c6f428fd612397c
f2c6ec50847ddccc5832185e487712e5a7676b97058d7e485d5a3536166a
44ab3c689c93073cdda73b5306a83c4cd268e79db238bfa2d08ac912a578
75020bc7828342d5a62ce367aff7fd89290336128d119fa4272da2b2a79f
5973c71935af054f2d91c1bd3ea4847a3502d6dc8c975114dacf8a4de600
622d80986dbb0cd00001a802d80d00001b16e2a7b1c467fb020000000004
595a
X

Experimente online!


0

Ruby , 362 bytes

puts"5r0afnfm8wyke8tfy1pwt7xnuaxyh3wodfp7bhsdufyw0xbdp1pumrz2xir652tuc0ss9oec8yad9vefivd66j126wybhefgk2lv38uqqiur11u26q275jk3h2ucithd59awpaenqpqi1pszh52179zw0ddqtbrvo6kyrrgv8c34pqrp83j8estjp63v29t4hqp9yg2hhzjlq1e9zqx6gh20n9lsttimz3nbq060ritrphxaru7quwmv3oujhd9xjddpbacq4bnpf270znhgto59yn0980itylf95pxw9x7rvkvi7mfql1sx46puo8rg4dq0".to_i(36).to_s(2).rjust(1679,?0)

Inteiro escrito na base 36. Certamente, existe uma maneira mais eficiente de compactar o número inteiro, por exemplo, com zliboubase64 .

Experimente online!


350 bytes se você: (1) usar "% b" para formatar em vez de to_s, (2) acrescentar? 0 * 6 em vez de chamar rjust
GB

0

[C ++ (VC ++) (mas também testado com gcc)], 585 bytes

#define l(x,y)for(int x=0;x<y;x++)
void f(){const char*a="02A800505012Y595Y240U180YD0Y1A0Y540YF80V61C618800321A3186BEFBEF80X10Y40W20YFC001F0X1861C620200868639AFBEFBE0W40C0100180Z83003F0607C00C001008041030101860400C430Z19800310C018604040804101804403008802020808080800600C030047580080800107C002174B604E4FEE1C1B80283B20507E40A0C08360U3820Z751554E00AA0Z140ZF80Z7FC00380E00C0060340160CC06611414422448804510Z8420010040Z940079F4F0";int x=1679;l(i,365){int d=a[i],c=0;d-=(d>47&d<58)?48:((d>64&d<71)?55:0);if(d>70&d<91)c=91-d,d=a[i-1];for(c;c>=0;c--)l(j,4){if(x--)cout<<(int)((d&(8>>j))>0);}}}

Experimente online!

Versão ungolfed (falta a ruptura após o 1679th elemento embora e vai até o 1680th):

#include <stdio.h>
#include <iostream>
using namespace std;
int main()
{
    const char arecibo[]="02A800505012Y595Y240U180YD0Y1A0Y540YF80V61C618800321A3186BEFBEF80X10Y40W20YFC001F0X1861C620200868639AFBEFBE0W40C0100180Z83003F0607C00C001008041030101860400C430Z19800310C018604040804101804403008802020808080800600C030047580080800107C002174B604E4FEE1C1B80283B20507E40A0C08360U3820Z751554E00AA0Z140ZF80Z7FC00380E00C0060340160CC06611414422448804510Z8420010040Z940079F4F0";
    int i = 0,j;
    while (i<sizeof(arecibo)-1)
    {   
        char digit = arecibo[i];
        int count=0;
        if (digit >= '0' & digit <= '9')
        {
            digit -= '0';
        }
        else if (digit>='A'& digit<='F')
        {
            digit -=  'A'-10;
        }
        else if (digit > 'F'&digit<='Z')
        {
            //digit does not contain any valid hex digit in this case
            count = 'Z' - digit+1; //digit = Z means repeat 2 more times...
            digit = arecibo[i - 1];
        }
        for (count; count >= 0; count--)
        {
            for (j = 0; j<4; j++)
            {
                cout << (int)(((digit)&(8 >> j))>0);
            }
        }
        i++;
    }
    return 0;
}

como uma explicação: concatenou as 73 linhas de saída de amostra fornecidas para uma linha longa. codifiquei-os em hexadecimal, onde a ordem dos bits é msbfirst (usando este programa https://github.com/Marc-Bender/longBinaryStreamToHex/releases/download/addedErrorCode-4/longBinaryStreamToHex.exe ) a saída disso em cerca de 70 Dígitos hexadecimais usando as letras 'G' - 'Z' como um sinal para repetir o último dígito por um determinado período de tempo (Z = mais duas vezes, Y = mais três vezes ...) o resto deve ser relativamente auto-explicativo para os jogadores de código . abusar do pré-processador para encurtar loops, abusar do, Operador e similares.

Formato de saída é um fluxo ininterrupto de 1679 0/1-valores.


antes que alguém pergunte ao const que é compatível com VC ++ (com o que o principal trabalho de desenvolvimento foi feito)
der bender

@ceilingcat Eu acho que você pode até encurtar mais isso colocando seu include na seção de cabeçalho ...
der bender


0

Perl 6 , 348 bytes

{"000000"~:36<5r0afnfm8wyke8tfy1pwt7xnuaxyh3wodfp7bhsdufyw0xbdp1pumrz2xir652tuc0ss9oec8yad9vefivd66j126wybhefgk2lv38uqqiur11u26q275jk3h2ucithd59awpaenqpqi1pszh52179zw0ddqtbrvo6kyrrgv8c34pqrp83j8estjp63v29t4hqp9yg2hhzjlq1e9zqx6gh20n9lsttimz3nbq060ritrphxaru7quwmv3oujhd9xjddpbacq4bnpf270znhgto59yn0980itylf95pxw9x7rvkvi7mfql1sx46puo8rg4dq0>.base(2)}

Baseado na solução Java de Benjamin Urquhart .

Usa um fluxo direto de 0 e 1 caracteres. O link abaixo tem algum código para prettify a saída.

Experimente online!


0

Tcl , 366 bytes

binary scan [binary decode base64 QBUACgpIRKSpqkoCAAAAgAEAsAAAWAAAKgAAHwAAAGA4hhEATFiMYX3f9wEAAAgAIAAAAAQA8AOADwAAGIZjBAQQFsZZ3/d9AAAAAgMIgAEAwQD8YOADMAAIECAIDAgYBgIwwgCAGQCMMIBhICAQIAgYIAIMEAEEBAEBAQFgAAMMIK4BEBAACD4AhC5tICd/h4MdQMFNoOAnUDAQbAAAAAAcBACuqCoHUAUAKADwAQD+A8ABBzAABiyABjNghigoQiQSAaIIACEEgAACACkAni8P] b* z
puts [join [regexp -all -inline .{23} $z] \n]

Experimente online!


0

C ++ (com biblioteca multi-precisão Gnu), 359 bytes

Isso gera a string como uma linha. Ele usa '1' para 0 e '0' para 1: /

Ele simplesmente lê a string incorporada como base 62 e a imprime como base 2.

Use g++ -g arecibo.cpp -lgmp -lgmpxxpara compilar e vincular

#include<gmpxx.h>
main(){mpz_out_str(stdout,2,class_mpz("vuXXKBYAu1hPsJPbFSf49akyFd0bjJbMIV3upYndU8kYFPsXcpRUK6c9qnzLfORxkxGL7ZfoSwgSxFbCrydjHL603QcxexopAzoYAcAyEiENJJU2vQA2zM8NDbeY6nHgL8rfFoPJaclwxx6TeKeOEknEQHzp7C4la3o8xijBQLOVweFZ1CI9dXy2VQhgnuwF5FeW5mQ909pRMxhn6G3RJ1QEtkS7oGMZYHM03fh4fj391IoYLGVv3iUVuTrV2ghz9CUa9hfGYrdhGoVE2w1inYalYl",62).get_mpz_t());}

Eu não consegui fazer isso funcionar até que eu class_mpzmpz_class
fosse

0

Perl 6 , 276 bytes

:122[q{3tD!gLF['u#.K>'uCG8cvJZ[on1Z<D!	`Fhqq-_V'"qQn+n0h\:b,vXjo&1TMFaW;wvX;eUS
(ueelNSu,y93\kjGI&?UU/38 :ndi4Y5cyC+ME\g7LWaS;QLjtD^L+aVd(XW%gy\8'Eqk-+f72S5J?(r5!m^5px T[Z'3&jd0lZ'/x%#(}.ords].base(2)~~S/.//.say

Experimente online!

Saídas como uma série de 1679 0s e 1s. Você pode tê-lo em linhas diferentes adicionando .comb(23)>>antes dosay .

Explicação:

:122["...".ords]                     # Convert the string from base 122
                .base(2)             # To base 2
                        ~~S/.//      # Remove the leading 1
                               .say  # And print

Provavelmente, posso salvar bytes usando a saída como um inteiro de 1679 bits ou revertendo a representação de bits.


0

C ++ (gcc) , 748 bytes

#define l(X,Y)if(z[i]==#X[0])z.replace(i,1,#Y);
void f(){std::string z = {"ab1eeedala1ebeeheal1mmma1fa1g1eeeeeeea1a1alddhgdbcdgdacedgdacedgdeeedgdndgddhgqiafbcag1dbfa1blceafafbcegcinnnlddhgmddegddhgb1ddelcidbnlddhgqqiafag1hedeblcebcaf1acegcinnnlddhgmhcdegdacdagb1bfda1lcibfhcildacdaga1d1d1almhcheagbqch1blhcmbqgdacachghcmbqgbqch1blmh1d1aga1hfd1aledcd1aledeheaga1heheblmdbqgbcdchga1af1efdga1hedbla1bndala1b1f1ea1fflh1aia1acccl1f1bibff1ldeebf1fla1h1ebfccla1h1ebfbla1bffdalddhgaibedblaieemeeeeelaideeeealdh1ehldcidalhcccidlbihf1hlafdafbgacedefblfachfacagemebeemagema1ma1magbememhgbeb1b1hgbedehghea1edalfcacieacca0"};for(int i=0;i<1751;i++){l(q,cb)l(n,fi)l(m,ae)l(i,c1)l(h,ba)l(g,0l)l(f,0c)l(e,01)l(d,bb)l(c,11)l(b,aa)l(a,00)l(l,\n)printf("%c",z[i]);}}

Experimente online!

Substituindo a substring mais usada por um novo caractere até que não valha mais a pena



0

Python 3 , 331 bytes

exit(''.join(bin(i)[3:]for i in b'`UP@JB`IDQKJjjd`@@@@@L@@Ah@@CP@@J`@@_@@@@@LNLLP@FPtXpu}}}|@@@@`@@`@@@A@@A~@@~@@@CCCcDA@DMCGM____@@@@HF@H@L@@PX@_`pO`A`@HA@HHF@`LLB@FHX@@s@@Xa`CC@`HD@``L@b@XAD@PDDA@PD@C@F@X@ck@A@P@BCx@DKi[@gI\x7f\\NC\\@TGY@hOrAPXDFp@@@@@\\D@@zbjipAU@@B`@Gp@@\x7fx@G@\\@X@LAh@lFXCLHhJHQHdPBJH@DHP@H@`@Dh@OOix')[1:])

Experimente online!

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.