eu te amo eu te amo eu te amo!

58

O XKCD # 99 , com o título "Coração binário", mostra uma imagem simples de uns e zeros, com alguns dígitos em vermelho.

insira a descrição da imagem aqui

O coração vermelho é visível a olho nu, mas a mensagem oculta na sequência binária não é. Se você remover todos os espaços e novas linhas e interpretar a sequência binária como código ASCII de 8 bits, você terminará com a mensagem:

iloveyOuilOveyouiloveyOuilOveyOuiloveyouilOveyouilOveyOuilOv

Bonito né?

Pssst ... A corda não é uma repetição pura de corda.


Seu desafio é criar essa imagem binária com 21 dígitos e 23 dígitos abaixo. Deve haver exatamente um espaço entre cada dígito em cada linha e uma nova linha para cada nova linha. Observe que os últimos bits são apenas o começo da letra e, pois 21*23não é divisível por 8. Você também precisa desses bits.

A função ou programa não deve receber nenhuma entrada. Espaços iniciais e finais e novas linhas são aceitos.

O resultado do seu código deve ficar assim:

0 1 1 0 1 0 0 1 0 1 1 0 1 1 0 0 0 1 1 0 1
1 1 1 0 1 1 1 0 1 1 0 0 1 1 0 0 1 0 1 0 1
1 1 1 0 0 1 0 1 0 0 1 1 1 1 0 1 1 1 0 1 0
1 0 1 1 0 1 0 0 1 0 1 1 0 1 1 0 0 0 1 0 0
1 1 1 1 0 1 1 1 0 1 1 0 0 1 1 0 0 1 0 1 0
1 1 1 1 0 0 1 0 1 1 0 1 1 1 1 0 1 1 1 0 1
0 1 0 1 1 0 1 0 0 1 0 1 1 0 1 1 0 0 0 1 1
0 1 1 1 1 0 1 1 1 0 1 1 0 0 1 1 0 0 1 0 1
0 1 1 1 1 0 0 1 0 1 0 0 1 1 1 1 0 1 1 1 0
1 0 1 0 1 1 0 1 0 0 1 0 1 1 0 1 1 0 0 0 1
0 0 1 1 1 1 0 1 1 1 0 1 1 0 0 1 1 0 0 1 0
1 0 1 1 1 1 0 0 1 0 1 0 0 1 1 1 1 0 1 1 1
0 1 0 1 0 1 1 0 1 0 0 1 0 1 1 0 1 1 0 0 0
1 1 0 1 1 1 1 0 1 1 1 0 1 1 0 0 1 1 0 0 1
0 1 0 1 1 1 1 0 0 1 0 1 1 0 1 1 1 1 0 1 1
1 0 1 0 1 0 1 1 0 1 0 0 1 0 1 1 0 1 1 0 0
0 1 0 0 1 1 1 1 0 1 1 1 0 1 1 0 0 1 1 0 0
1 0 1 0 1 1 1 1 0 0 1 0 1 1 0 1 1 1 1 0 1
1 1 0 1 0 1 0 1 1 0 1 0 0 1 0 1 1 0 1 1 0
0 0 1 0 0 1 1 1 1 0 1 1 1 0 1 1 0 0 1 1 0
0 1 0 1 0 1 1 1 1 0 0 1 0 1 0 0 1 1 1 1 0
1 1 1 0 1 0 1 0 1 1 0 1 0 0 1 0 1 1 0 1 1
0 0 0 1 0 0 1 1 1 1 0 1 1 1 0 1 1 0 0 1 1

Isso é código de golfe, então a resposta mais curta (em bytes) vence.


Entre os melhores

Stewie Griffin
fonte
11
Eu quero que você saiba agora que vou encontrar uma maneira de alguma maneira?
BlueRaja - Danny Pflughoeft 27/09/16
25
Vou dar uma recompensa para o código mais curto que as cores da saída usando vermelho e preto para fazer o coração
Beta Decay
Estou ainda mais curioso para saber qual é a mensagem oculta nos Os maiúsculos da string de saída ASCII!
brandonscript
Não há mensagem, ou pelo menos nenhuma foi descoberta por explanxkcd.com que diz "A mistura de maiúsculas e minúsculas" O "s é presumida intencional para evitar um padrão repetitivo".
Petr Hudeček
11
@WeeingIfFirst Haha, você superestima minha habilidade de programação :). Vou premiar o vencedor com uma recompensa de 100 representantes também, quando puder
Beta Decay

Respostas:

21

Geléia , 36 33 32 bytes

“ḅUɗaṚPXṙ’Bṁ484¬“½:J⁺ȤṾ‘Ḥ¤¦Ḋs21G

Graças a @ JonathanAllan por jogar fora 3 bytes!

Experimente online!

Como funciona

O link principal

“ḅUɗaṚPXṙ’Bṁ484¬“½:J⁺ȤṾ‘Ḥ¤¦Ḋs21G

é executado niladicamente (ou seja, sem argumentos) quando o programa é executado. Seu valor de retorno será impresso implicitamente.

“ḅUɗaṚPXṙ’

encontre os índices dos caracteres citados na página de códigos de Jelly e os interprete como dígitos de um número bijetivo de base 250. Isso gera o número inteiro 13021639057551959994 .

          B

converte o número inteiro gerado em binário. Isso gera a matriz de bits 1011010010110110001001111011101100110010101111001010011110111010, que corresponde à codificação UTF-8 da string ilOveyOu , deslocada um bit para a esquerda.

A mudança é necessária porque Bnão é possível retornar uma matriz de bits com um 0 inicial . Outras opções incluem negar os dígitos binários ou calcular o quadrado ao contrário, mas essa abordagem economiza um byte.

            ṁ484

molda a matriz gerada como o intervalo de 1 a 484 , ou seja, repete o conteúdo da matriz quantas vezes for necessário para atingir um comprimento de 484 .

Isso é mais um pouco do que precisamos, para explicar a mudança. Nós podemos remover o primeiro bit agora, mas fazê-lo mais tarde significa que todos os bits que precisam ser trocados estão em índices pares, o que nos permite salvar o byte mencionado acima.

                 “½:J⁺ȤṾ‘Ḥ¤

pega os pontos de código dos caracteres entre e ( [10, 58, 74, 138, 154, 186] ) e, em seguida, "abre", ou seja, multiplica-os por 2 ( [20, 116, 148, 276, 308, 372 ] ).

                ¬           ¦

nega condicionalmente os bits nesses índices. Isso corresponde às variações de E / S no padrão original.

Finalmente,

                             Ḋs21G

desenfileire a matriz de bits (removendo o primeiro bit), divida a matriz restante em linhas de 21 elementos e imprima a matriz resultante como uma grade.

Dennis
fonte
2
Você pode economizar mais 3 bytes por ter maiúsculas Ocomo padrão, eu acho que isso faz:“ỊḂr×C)ḃȯ’B¬ṁ483¬“Œ` ° @‘+\¤¦s21G
Jonathan Allan
Certo, existem mais O maiúsculos que minúsculos. Obrigado!
Dennis
4
Então é isso que magia negra parece ..
Bassdrop Cumberwubwubwub
2
@BassdropCumberwubwubwub Agora deve haver esforço para transformá-lo em magia vermelho e preto
Matthew Roh
43

Geléia , 41 40 35 33 bytes

Obrigado a @Dennis por fazer o fim ṖṖCG! (complemento C= 1-xno lugar de não lógico ¬)

“ƝƓỊ⁹Ȥ⁶Ị⁺‘ẋ8_“¤ÐŒ#'/‘¦32BFs21ṖṖCG

TryItOnline

Quão?

“ƝƓỊ⁹Ȥ⁶Ị⁺‘ẋ8_“¤ÐŒ#'/‘¦32BFs21ṖṖCG - Main link: no arguments
“ƝƓỊ⁹Ȥ⁶Ị⁺‘                        - code page indexes [150,147,176,137,154,134,176,138]
                                        (bitwise negated values of ordinals of "ilOveyOu")
          ẋ8                      - repeat eight times
            _                     - subtract
                     ¦            - apply to indexes
             “¤ÐŒ#'/‘             - code page indexes [3,15,19,35,39,47]
                                        (the indexes of the lowercase Os)
                      32          - literal 32 (subtracting 32 from the bitwise negated
                                                'O's makes them bitwise negated 'o's)
                        B         - binary (all are 8 bits, hence the negation)
                         F        - flatten list
                          s21     - split into slices of length 21
                             ṖṖ   - pop (remove the last two slices)
                               C  - complement (transform the bits to what they should be)
                                G - format as a grid
                                        (inserts both the spaces and line feeds)

Versão "colorida", 77 bytes

“¤Ɓ¥J¬ ¥ƲėNėR½5ðḃḍCṬ’b19‘“Y^‘jĖŒṙḂ
“ƝƓỊ⁹Ȥ⁶Ị⁺‘ẋ8_“¤ÐŒ#'/‘¦32BFż¢Ḅị“¹0°1”s21ṖṖG

TryItOnline

Jelly não tem saída de cores, mas isso é muito mais fácil para mim de qualquer maneira (eu sou daltônico) ...

° ¹ ¹ ° ¹ ° ° ¹ ° ¹ ¹ ° ¹ ¹ ° ° ° ¹ ¹ ° ¹
¹ ¹ ¹ ° ¹ ¹ ¹ ° ¹ ¹ ° ° ¹ ¹ ° ° ¹ ° ¹ ° ¹
¹ ¹ ¹ ° ° ¹ ° ¹ ° ° ¹ ¹ ¹ ¹ ° ¹ ¹ ¹ ° ¹ °
¹ ° ¹ ¹ ° ¹ ° ° ¹ ° ¹ ¹ ° ¹ ¹ ° ° ° ¹ ° °
¹ ¹ ¹ ¹ ° 1 1 1 ° ¹ ¹ ° ° 1 1 0 ° ¹ ° ¹ °
¹ ¹ ¹ 1 0 0 1 0 1 1 ° 1 1 1 1 0 1 1 ¹ ° ¹
° ¹ ° 1 1 0 1 0 0 1 ° 1 1 0 1 1 0 0 ° ¹ ¹
° ¹ ¹ 1 1 0 1 1 1 0 1 1 0 0 1 1 0 0 1 ° ¹
° ¹ 1 1 1 0 0 1 0 1 0 0 1 1 1 1 0 1 1 ¹ °
¹ ° 1 0 1 1 0 1 0 0 1 0 1 1 0 1 1 0 0 ° ¹
° ° ¹ 1 1 1 0 1 1 1 0 1 1 0 0 1 1 0 0 ¹ °
¹ ° ¹ 1 1 1 0 0 1 0 1 0 0 1 1 1 1 0 ¹ ¹ ¹
° ¹ ° ¹ 0 1 1 0 1 0 0 1 0 1 1 0 ¹ ¹ ° ° °
¹ ¹ ° ¹ ¹ 1 1 0 1 1 1 0 1 1 0 0 ¹ ¹ ° ° ¹
° ¹ ° ¹ ¹ ¹ 1 0 0 1 0 1 1 0 1 ¹ ¹ ¹ ° ¹ ¹
¹ ° ¹ ° ¹ ° ¹ 1 0 1 0 0 1 0 ¹ ¹ ° ¹ ¹ ° °
° ¹ ° ° ¹ ¹ ¹ ¹ 0 1 1 1 0 ¹ ¹ ° ° ¹ ¹ ° °
¹ ° ¹ ° ¹ ¹ ¹ ¹ ° 0 1 0 ¹ ¹ ° ¹ ¹ ¹ ¹ ° ¹
¹ ¹ ° ¹ ° ¹ ° ¹ ¹ ° 1 ° ° ¹ ° ¹ ¹ ° ¹ ¹ °
° ° ¹ ° ° ¹ ¹ ¹ ¹ ° ¹ ¹ ¹ ° ¹ ¹ ° ° ¹ ¹ °
° ¹ ° ¹ ° ¹ ¹ ¹ ¹ ° ° ¹ ° ¹ ° ° ¹ ¹ ¹ ¹ °
¹ ¹ ¹ ° ¹ ° ¹ ° ¹ ¹ ° ¹ ° ° ¹ ° ¹ ¹ ° ¹ ¹
° ° ° ¹ ° ° ¹ ¹ ¹ ¹ ° ¹ ¹ ¹ ° ¹ ¹ ° ° ¹ ¹

Quão?

“¤Ɓ¥J¬ ¥ƲėNėR½5ðḃḍCṬ’b19‘“Y^‘jĖŒṙḂ - Link 1: no arguments
“¤Ɓ¥J¬ ¥ƲėNėR½5ðḃḍCṬ’              - base 250 of a big number
                     b19           - convert to base 19, yields a list of integers
                        ‘          - increment those numbers
                         “Y^‘      - get code page indexes [89,94]
                             j     - join: [89,3,5,3,8, ... ,3,19,1,94]
                                         - {left-right, top-bottom} runs of colours
                              Ė    - enumerate [[1,89],[2,3],[3,5],[4,3],[5,8], ...]
                               Œṙ  - run-length decode [89 1s, 3 2s, 5 3s, 3 4s, 8 5s, ...]
                                 Ḃ - mod 2

“ƝƓỊ⁹Ȥ⁶Ị⁺‘ẋ8_“¤ÐŒ#'/‘¦32BFż¢Ḅị“¹0°1”s21ṖṖG - Main link: no arguments
“ƝƓỊ⁹Ȥ⁶Ị⁺‘ẋ8_“¤ÐŒ#'/‘¦32BF                 - same as the original to get 1s and 0s
                          ż                - zip with
                           ¢               - last link (1) as a nilad
                            Ḅ              - binary to integer (vectorises)
                             ị             - index into
                              “¹0°1”       - string "¹0°1"
                                    s21    - split into length 21 slices
                                       ṖṖ  - pop last two unused slices
                                         G - format as a grid
Jonathan Allan
fonte
27
Se você remover o ¬, os últimos quatro bytes poderão se tornar ṖṖCG. :)
Dennis
2
Oh uau, é claro - isso só precisa ser feito!
Jonathan Allan
11
Perdoe meu pedantismo; talvez o termo apropriado seja complement?
Sherlock9
@ Sherlock9, sim; fixo e obrigado - não consigo escrever muito bem, portanto, muitas vezes, as palavras estão erradas se a verificação ortográfica não der nenhuma bandeira!
Jonathan Allan
@WeeingIfFirst - não verifiquei, mas espero que isso ainda seja bom o suficiente para ser considerado colorido.
Jonathan Allan
42

Na verdade, 58 bytes

73*8╙:13542├`≈"÷≥"E`M"«%s₧ªn%s6û"7*%"♠n≥6û"+¿├`' +`M╪♂Σ♂Ri

Experimente online!

Explicação

Existem três partes principais aqui, então eu vou decompô-lo adequadamente.

Parte 1: Construindo a sequência base-256

Na verdade, vamos construir a string binária invertida, aproveitar a estrutura baseada em pilha da Actually (LIFO) e evitar complicações com zeros à esquerda na string binária. Portanto, a cadeia binária de destino 110011011101111001000110110100101101010111011110010100111101010011001101110111100100011011010010110101011101111011010011110101001100110111011110010001101101001011010101110111101101001111010100110011011101111011000110110100101101010111011110010100111101010011001101110111100100011011010010110101011101111001010011110101001100110111011110110001101101001011010101110111101101001111010100110011011101111001000110110100101101010111011110010100111101010011001101110111101100011011010010110é equivalente a 20083405242288679348048842451418880256193335738939042905519679590571514414673488599852759703515507690399267425671627412178904636115120346432419478decimal. Na base-256 (usando a tabela de caracteres CP437 para conversão), a sequência correspondente é ♠n≥6û«≥₧ªn≥6û«÷₧ªn≥6û«÷₧ªn÷6û«≥₧ªn≥6û«≥₧ªn÷6û«÷₧ªn≥6û«≥₧ªn÷6û. Para construir a cadeia binária original, construímos a cadeia base-256 (aproveitando o padrão nela) e executamos conversões básicas em decimal e binário.

A cadeia base-256 tem o seguinte formato (espaços e novas linhas adicionadas para maior clareza):

♠n≥6û
« (either ≥ or ÷) ₧ªn (either ≥ or ÷) 6û
  (7 times)

Assim, cada uma das 7 seções do meio pode ser formada usando o andaime «%s₧ªn%s6ûe substituindo as %speças por ou ÷.

A sequência específica de s e ÷s que precisamos é ≥≥÷≥÷÷≥≥≥÷÷≥≥÷. Como precisamos disso como uma lista de strings de comprimento 1, a maneira ingênua de representá-lo seria "≥≥÷≥÷÷≥≥≥÷÷≥≥÷"#(empurre a string, faça-a em uma lista). No entanto, podemos fazer um pouco melhor. Ao interpretar essa sequência como um número binário (onde representa 1e ÷representa 0), obtemos o 13542decimal. Ao converter isso de volta em binário (usando os tradicionais 1es 0) e indexar em uma cadeia de comprimento 2, podemos obter a lista usando um byte a menos que o método ingênuo.

:13542├`≈"÷≥"E`M"«%s₧ªn%s6û"7*%"♠n≥6û"+
:13542├                                  push 13542, convert to binary
       `≈"÷≥"E`M                         for each bit:
        ≈                                  convert to integer (from string)
         "÷≥"E                             index into "÷≥"
                "«%s₧ªn%s6û"7*           push the scaffold for the middle section
                              %          old-style Python string formatting to fill in the scaffold
                               "♠n≥6û"+  prepend the beginning piece

Parte 2: Convertendo em binário

Esta parte é muito mais direta. Se realmente tivesse a capacidade de converter diretamente base-256 em binário, usaríamos isso. Infelizmente, isso não acontece, então teremos que usar decimal como um formato intermediário.

O ,código a seguir representa o código da Parte 1 - para fins explicativos, substituí o código da Parte 1 por ,para ler a saída da Parte 1 do STDIN. Não faz parte do código final real.

8╙,¿├
  ,    Part 1 result
8╙ ¿   convert from base-256 to decimal
    ├  convert to binary

Parte 3: Formatação

Se o desafio fosse apenas produzir a string binária como está, estaríamos prontos. No entanto, ainda temos alguma formatação a fazer para obter a sequência binária em um retângulo 21 x 23.

Como na Parte 2, o ,representa a saída da parte anterior e não faz parte do código real.

73*,`' +`M╪♂Σ♂Ri
   ,              output from Part 2
    `' o`M        insert a space after every character
73*       ╪       chunk into 21 pieces
           ♂Σ     concatenate each piece
             ♂R   reverse each piece
               i  flatten
                  (implicitly print)

Para aqueles que acompanham em casa, este é o código Python 3 equivalente (481 bytes):

print('\n'.join([''.join(' '+c for c in bin(sum('\x00☺☻♥♦♣♠•◘○◙♂♀♪♫☼►◄↕‼¶§▬↨↑↓→←∟↔▲▼ !"#$%&\'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_`abcdefghijklmnopqrstuvwxyz{|}~⌂ÇüéâäàåçêëèïîìÄÅÉæÆôöòûùÿÖÜ¢£¥₧ƒáíóúñѪº¿⌐¬½¼¡«»░▒▓│┤╡╢╖╕╣║╗╝╜╛┐└┴┬├─┼╞╟╚╔╩╦╠═╬╧╨╤╥╙╘╒╓╫╪┘┌█▄▌▐▀αßΓπΣσµτΦΘΩδ∞φε∩≡±≥≤⌠⌡÷≈°∙·√ⁿ²■\xa0'.index(c)*256**i for i,c in enumerate(("♠n≥6û"+("«%s₧ªn%s6û"*7)%tuple("÷≥"[int(b)]for b in bin(13542)[2:]))[::-1])))[2:])[i*42:-~i*42][::-1]for i in range(23)][::-1]))
Mego
fonte
46
Você sabe, é uma programação como essa que me faz acreditar que os egípcios onde na verdade programadores e hieróglifos muito avançados e bem-sucedidos eram simplesmente a linguagem de sua escolha. 1
MonkeyZeus 27/09/16
Que idioma era esse? Além disso, essa resposta é compilada?
Jack
@ Jack Isso é realmente . Nenhuma compilação envolvida.
Mego
11
@Mego: 0 Você é um BOSS, em seguida, para escrever este código
Jack
11
O que acontece se você precisar do dígito 34 em um número base 256? (o caractere que encerra a string)
Jonathan Allan
22

JavaScript (ES6), 169 ... 136 135 bytes

let f =

_=>"0213021203131214".replace(x=/./g,v=>0+[a=1768714102,a-8192,a-=66265089,a+8192,3][v].toString(2)).replace(x,(c,i)=>` 
`[+!(i%21)]+c)

console.log(f());

Economizou 2 bytes graças a Andrakis
Economizou 4 bytes graças a Hedi
Economizou 3 5 bytes graças a Neil

Versão colorida, 249 bytes (237 bytes de JS + 12 bytes de CSS)

O código JS gera a arte ASCII com tags em negrito para o coração. São necessários 12 bytes de CSS para colorir em vermelho. (Essa contagem de bytes é justa?)

let f =

_=>"0213021203131214".replace(x=/./g,v=>0+[a=1768714102,a-8192,a-=66265089,a+8192,3][v].toString(2)).replace(x,(c,i)=>` 
`[+!(y=i/21|0,x=i%21)]+([57568,a=261112,a,b=524280,b+4,b+4,b,a+1024,65520][y-4]&1<<x|y>12&x>y-9&x<29-y?c.bold():c))

document.getElementById("o").innerHTML = f();
b{color:red}
<pre id="o"></pre>

Arnauld
fonte
2
Você pode salvar alguns bytes, substituindo o substituir: s=>s.replace(/./g,'$& '). Eu tenho trabalhado em uma solução praticamente idêntica.
Andrakis 27/09/16
11
Não foi s.replace(/./g,'$& ')possível substituir por s.split``.join` `?
Hedi
2
[...s].join` `
Neil
11
Eu acho que replace(/./g,(c,i)=>c+=++i%21?' ':'\n')(obviamente, usando uma nova linha literal lá) economiza mais um byte. Pode muito bem haver uma maneira ainda melhor de expressar essa idéia.
Neil
20

05AB1E , 77 54 53 44 43 41 bytes

Usa a codificação CP-1252 .

’i„΀î’8ו1žä¿*•S·£™J¦'iìÇb0ìJ011JSðý42ô»

Explicação

’i„Î€î’   # the string "iloveyou"
8×        # repeated 8 times
•1žä¿*•   # the number 3262264221 encoded in base 214
S·        # split to list and multiplied by 2, gives [6, 4, 12, 4, 4, 12, 8, 4, 4, 2]
£         # split the "iloveyou..." string into chunks of these lengths
™J        # title-case the chunks and join, giving the string with capitalized O's
¦'iì      # replace the faulty capitalized "I" in the beginning with a lower case "i"
Ç         # convert to list of ascii values
b0ì       # convert each to binary and prepend a 0 to each binary string
J011J     # join the strings and append "011"
Sðý       # add a space between each digit
42ô       # split in pieces of 42 (21 digits, 21 spaces)
»         # merge on newline

Experimente online!

Emigna
fonte
3
Você parece ter uma foto de perfil relevante
tomsmeding 28/09/16
3
@tomsmeding: De fato! Ele chamou-me um cara chapéu quando nos conhecemos um par de anos atrás, de modo que é quem eu sou agora :)
Emigna
Eu sei que já faz 2,5 anos, mas você pode jogar o Sðý42ô»to S21ô», já que »une listas internas por espaços implicitamente (e •1žä¿*•deve ser agora •Å¾$6•, já que números inteiros são codificados na base 255 agora, em vez da base 214).
Kevin Cruijssen 28/01
15

CJam , 48 bytes

19560Yb"Oo"f="uilvey"8*3/.\s:i2fb0a*7>21/W<Sf*N*

Colaboração com @MartinEnder, que tirou 3 bytes complicados com a "uilvey"3/string. Intérprete online .

19560Yb        Convert 19560 to base 2
"Oo"f=         Index each bit into the string "Oo" to give "ooooOOooOOOooOoOOO"
"uilvey"8*3/   Repeat the string "uilvey" 8 times then split into chunks of 3
.\s            Vectorised swap (insert the Os into the right places) then stringify
:i2fb          Convert each char to int then take base 2
0a*            Join with 0s
7>             Remove the first 7 bits
21/            Split into chunks of length 21
W<             Drop the last row
Sf*            Join each row with spaces
N*             Join the rows with newlines
Sp3000
fonte
12

Javascript ES6 REPL , 124 121 119 113 bytes

Guardado 6 bytes graças a @ETHproductions

Este é um programa completo que pode ser colado no REPL / console para produzir o resultado correto.

for(i=r='';i<483;)r+=(`il${"Oo"[21>>i/64&1]}vey${"oO"[77>>i/64&1]}u`.charCodeAt(i/8%8)>>7-i%8&1)+(++i%21?` `:`
`)

Mais detalhado

for (i=0, r='';                         // r == the result
     i < 483;)                          // 483 == 21 * 23
r+= (                                   // construct "iloveyou"
        `il${                           // il
            "Oo"[21 >> (a = i/64) & 1]  // position in the loop defines the o or O
         }vey${                         // vey
            "oO"[77 >> a & 1]           // position in the loop defines the o or O
         }u`                            // u
        .charCodeAt(                    // "i" == 105 == 01101001
            i / 8 % 8                   // find the correct bit to append
        ) >> 7-i%8 & 1                  // shift it to select 1 or 0
    )
+                                       // add a space or newline
    (
        ++i%21 == 0 ? `
` : ` `                                 // every 21 characters add a new line, 
                                           otherwise a space
    )
;                                       // Javascript implicitly returns the last value 
                                           edited in a for loop

Coração somente JavaScript colorido, 281 bytes

for(i=z=r='',h=[],g=[90,...[...'353871767176G4H4H5G5F7CABB9D7F5H3J1'].map(n=>parseInt(n,20)),-1];i<483;)r+=`%c`+(`il${"Oo"[21>>i/64&1]}vey${"oO"[77>>i/64&1]}u`.charCodeAt(i/8%8,--g[+z]||z++,h[i]=z%2)>>7-i%8&1)+(++i%21?` `:`
`);console.log(r,...h.map(H=>`color:${H?'red':'black'}`))

Isso funciona alternando cores a cada n bits e utiliza a capacidade console.log para registrar cores

Coração CSS colorido, 229 + 12 bytes

Se o uso de css for permitido, o coração colorido poderá ser reduzido ainda mais para 229 bytes de código JavaScript e 12 bytes de CSS

for(i=z=r='',g=[90,...[...'353871767176G4H4H5G5F7CABB9D7F5H3J1'].map(n=>parseInt(n,20)),-1];C=`il${"Oo"[21>>i/64&1]}vey${"oO"[77>>i/64&1]}u`.charCodeAt(i/8%8,--g[+z]||z++)>>7-i%8&1,i++<483;)r+=(z%2?(''+C).bold():C)+(i%21?` `:`
`)

Bassdrop Cumberwubwubwub
fonte
A razão pela qual fiz dessa maneira é porque isso pode ser considerado um programa completo. Não há variáveis ​​codificadas permanentemente que devem ser alteradas pelo usuário; elas podem ser copiadas e coladas e funcionam como estão. Eu chamo isso de trecho, mas também pode ser um programa completo. Pensamentos?
Bassdrop Cumberwubwubwub
Ele se baseia no comportamento do REPL, o que significa que o idioma é "Javascript ES6 REPL" ( origem ).
Mego
@Mego Graças, editado minha resposta nesse sentido
Bassdrop Cumberwubwubwub
11
Tenho certeza de que você pode se livrar ae usar num>>i/64&1nos dois lugares, economizando 1 byte. Além disso, ++i%21==0?newline:spaceé o mesmo que ++i%21?space:newline.
ETHproductions
Outra dica: mude i=0,r=''para i=r=''; ''é coagido automaticamente a 0.
ETHproductions
9

MATL, 56 55 bytes

'!?u<TgGU*lB7SE1q3s.?Su(q6)iM'F'eilovyOu'Za8&B!FTTv21e!

Experimente Online

Explicação

'!?u<TgGU*lB7SE1q3s.?Su(q6)iM'      % Previously compressed version of the string
F'eilovyOu'Za                       % Decompress this string
8&B                                 % Convert each char to 8-bit binary number
!                                   % Transpose the result
FTTv                                % Append [0 1 1] to the end to take care of 
                                    % the partial "e" bits
21e!                                % Reshape it into the appropriate shape
                                    % Implicitly display the result     
Suever
fonte
9

PowerShell v2 +, (UTF-16) 300 bytes

Contagem de bytes errados corrigida graças a @Mego

'ږƍ໬ƕ๓ƺ֥˄ϝӊ༭ǝ֥ţϝɥޔǮ૒ƱϝIJ˲ӷʴ˘ͻ֙ץŻ઴Ŭɻˌʼֽ͖ҶɻŦʼʞݖɛĽƳ'-split'(..)'-ne''|%{(-join($_[0,1]|%{[convert]::ToString(+$_,2)})).PadLeft(21,'0')-replace'(.)','$1 '}

Não é a mais curta, mas uma abordagem diferente. Peguei manualmente cada linha e as cortei em pares cada (aproximadamente) 9 a 11 bits significativos de comprimento. Convertido cada um desses valores binários em um char(Observação: o PowerShell usa UTF-16 por padrão, não UTF-8) e transformou isso em uma sequência. Esse é '...'o começo.

Em seguida, fazemos -splitisso em strings de comprimento 2 e passamos por cada par. Esses pares são divididos em um char-array via $_[0,1], e cada um deles é convertido como int +$_e [convert]ed em um binário ( ,2) String. Isso é -joineditado em uma única string, PadLeftpara obter o comprimento adequado, então cada elemento é -replaced com ele e um espaço '$1 '.

Todas essas strings são deixadas no pipeline e a saída é implícita, com o padrão Write-Outputcolando uma nova linha entre os elementos.

PS C:\Tools\Scripts\golfing> 'ږƍ໬ƕ๓ƺ֥˄ϝӊ༭ǝ֥ţϝɥޔǮ૒ƱϝIJ˲ӷʴ˘ͻ֙ץŻ઴Ŭɻˌʼֽ͖ҶɻŦʼʞݖɛĽƳ'-split'(..)'-ne''|%{(-join($_[0,1]|%{[convert]::ToString(+$_,2)})).PadLeft(21,'0')-replace'(.)','$1 '}
0 1 1 0 1 0 0 1 0 1 1 0 1 1 0 0 0 1 1 0 1 
1 1 1 0 1 1 1 0 1 1 0 0 1 1 0 0 1 0 1 0 1 
1 1 1 0 0 1 0 1 0 0 1 1 1 1 0 1 1 1 0 1 0 
1 0 1 1 0 1 0 0 1 0 1 1 0 1 1 0 0 0 1 0 0 
1 1 1 1 0 1 1 1 0 1 1 0 0 1 1 0 0 1 0 1 0 
1 1 1 1 0 0 1 0 1 1 0 1 1 1 1 0 1 1 1 0 1 
0 1 0 1 1 0 1 0 0 1 0 1 1 0 1 1 0 0 0 1 1 
0 1 1 1 1 0 1 1 1 0 1 1 0 0 1 1 0 0 1 0 1 
0 1 1 1 1 0 0 1 0 1 0 0 1 1 1 1 0 1 1 1 0 
1 0 1 0 1 1 0 1 0 0 1 0 1 1 0 1 1 0 0 0 1 
0 0 1 1 1 1 0 1 1 1 0 1 1 0 0 1 1 0 0 1 0 
1 0 1 1 1 1 0 0 1 0 1 0 0 1 1 1 1 0 1 1 1 
0 1 0 1 0 1 1 0 1 0 0 1 0 1 1 0 1 1 0 0 0 
1 1 0 1 1 1 1 0 1 1 1 0 1 1 0 0 1 1 0 0 1 
0 1 0 1 1 1 1 0 0 1 0 1 1 0 1 1 1 1 0 1 1 
1 0 1 0 1 0 1 1 0 1 0 0 1 0 1 1 0 1 1 0 0 
0 1 0 0 1 1 1 1 0 1 1 1 0 1 1 0 0 1 1 0 0 
1 0 1 0 1 1 1 1 0 0 1 0 1 1 0 1 1 1 1 0 1 
1 1 0 1 0 1 0 1 1 0 1 0 0 1 0 1 1 0 1 1 0 
0 0 1 0 0 1 1 1 1 0 1 1 1 0 1 1 0 0 1 1 0 
0 1 0 1 0 1 1 1 1 0 0 1 0 1 0 0 1 1 1 1 0 
1 1 1 0 1 0 1 0 1 1 0 1 0 0 1 0 1 1 0 1 1 
0 0 0 1 0 0 1 1 1 1 0 1 1 1 0 1 1 0 0 1 1 
AdmBorkBork
fonte
Eu conto 300 bytes UTF-16. Python 3:len("'ږƍ໬ƕ๓ƺ֥˄ϝӊ༭ǝ֥ţϝɥޔǮ૒ƱϝIJ˲ӷʴ˘ͻ֙ץŻ઴Ŭɻˌʼֽ͖ҶɻŦʼʞݖɛĽƳ'-split'(..)'-ne''|%{(-join($_[0,1]|%{[convert]::ToString(+$_,2)})).PadLeft(21,'0')-replace'(.)','$1 '}".encode('utf-16be'))
Mego
@Mego Oh, durr. Só porque estou contando UTF-16 para a sequência não significa que eu possa contar magicamente UTF-8 para o restante do código. Hah. Obrigado pela ajuda.
AdmBorkBork 28/09
Fico feliz em ajudar :)
Mego
Se não parecesse tão intimidador, eu abriria um terminal do PowerShell e o executaria.
DaveTheMinion
6

/// , 237 bytes

/2/\/\///3/0 24/1 25/0
26/1
27/4428/3329/772A/432B/A732C/937A782D/B48B72E/8A4892F/98B93/373A3A737837367A7A7878AA674E37A45D83A5C78A45F7A63D83463C78A639E3745AD8368C7845A9E3763AD8573C7863AF46AAD35348C735AAF673AD5848C753AA9E57AAB48B468348C41

Experimente online!

Erik, o Outgolfer
fonte
4

Python 3, 147 144 bytes

lambda i=0:exec("print(' '.join(''.join('0'+bin(ord(chr(j+30)in' ,0@DL'and'o'or c))[2:]for j,c in enumerate('ilOveyOu'*8))[i:i+21]));i+=21;"*23)

Teste em ideone

Inicializa ia 0na declaração da função, em seguida, repete este 23 vezes:
faz toda a cadeia binária sem espaços (ver abaixo);
corta uma linha de dentro usando [i:i+21];
insere os espaços com ' '.join(...);
impressões; e
incrementa iem 21 comi+=21

Para criar toda a cadeia binária:
repete "ilOveyOu"oito vezes;
substitui Opor oonde for necessário (em índices [2,14,18,34,38,46]);
- - - isto é conseguido com chr(j+30)in' ,0@DL'para salvar 3 bytes
converte cada caractere em seu ordinal;
lança cada ordinal em uma string binária ( '0bxxxxxxx');
remove a liderança '0b'de cada uso [2:];
precede cada um com um '0'; e
junta a coisa toda com''.join(...)

Jonathan Allan
fonte
Você não precisa de uma lambda. Faça i=0\nexec(...)ou i=0;exec(...)para 137 bytes.
mbomb007
A menos que você realmente precisa Python 3, você pode usar Python 2 para mudar exec("...")para exec"..."e print(...)paraprint...
mbomb007
3

PHP + HTML + CSS, 173 bytes coloridos 367 bytes

Somente CLI PHP 173 bytes

$o=2841;for($i=0;$i<16;)$t.=il.Oo[$o>>$i++&1].vey.Oo[$o>>$i++&1].u;foreach(str_split($t)as$c)$x.="0".decbin(ord($c));for($i=0;$i<504;$i++){$i%21?:print"\n";echo$x[$i]." ";}}

em conformidade com o tipo de conteúdo text / html da especificação de recompensa

<?=gzinflate(base64_decode("jVNbDoIwELwKJ9Ctn9hwF9HGmFQwiB+GeHcRd7ezvDQEAmWmMzuT+nv7jKG4dddDc75UOW124foqu0OM+aO6h3Z/rGPd5E04vfz2C/a3gjLXXzTcxG/pSem7xzr4hxhn2BZLZvfpDjRg/3FBjBWuL78fflsWAOVl0uWk8rmG3yDCMNnMLMsshHpq0jLVQLKj6RrIbHBCYoq6WclPHHJ+PNdqjEZlpLNgbaTy2xoTHAQ3kBasKZyg3/XUDAVV5urVcDE5mQXsGWugIJqikibVmcZTJIrL0Bq3NKdgjxhak2q5ukmpWuXS+QJPEBVi52vE025VJy7Yw18u3g==");

b{all:unset;color:red}em vez de b{all:unset;color:#911;background:red}na primeira versão

PHP + HTML + CSS, 392 bytes

coração vermelho + preto que parece mais bonito

Talvez chame o número da cor na parte CSS

<?=gzinflate(base64_decode("jVTLDoIwELyb+A8m3nXrzdrwL7xijAgG8GAI/67WdpktD00DoWWmMztLMU37LPLo3t3i+nwpNe0O+a1Purgo9KNs8vaUVkVV6+1RqVMSp9dzXT3KTNd51pv9l7xemXtEG/UeZC9yT8OdhrlFK3iLKCX4IZqEwngPcuh/vBCjPd8k34nZJxGA3TLxMip9hgWAkAP67cTyUBOhJluVXDYxWIKsBWgyRE9jEntayNL75CxdfYuRBkqB1ozBkdJvg46iRIiWNmOQCSQ6vpygIEmlqYZz1LAN1AQmhUFQUfBBhjVzbWE1SFIbNOi6NqUSHkI06JvtmjlqMzR37gSCMxEboicbG/wVpPbICzv5y8sL"));

adicione isso antes que pareça melhor

<style>*{word-spacing:1em;}</style>

Saída primeira versão, é o código HTML mais feio da minha vida

coração vermelho-preto

<style>*{word-spacing:1em;}</style><style>p{margin:0.2em}b{all:unset;color:#911;background:red}</style>
<p>0 1 1 0 1 0 0 1 0 1 1 0 1 1 0 0 0 1 1 0 1
<p>1 1 1 0 1 1 1 0 1 1 0 0 1 1 0 0 1 0 1 0 1
<p>1 1 1 0 0 1 0 1 0 0 1 1 1 1 0 1 1 1 0 1 0
<p>1 0 1 1 0 1 0 0 1 0 1 1 0 1 1 0 0 0 1 0 0
<p>1 1 1 1 0 <b>1 1 1</b> 0 1 1 0 0 <b>1 1 0</b> 0 1 0 1 0
<p>1 1 1 <b>1 0 0 1 0 1 1</b> 0 <b>1 1 1 1 0 1 1</b> 1 0 1
<p>0 1 0 <b>1 1 0 1 0 0 1</b> 0 <b>1 1 0 1 1 0 0</b> 0 1 1
<p>0 1 1 <b>1 1 0 1 1 1 0 1 1 0 0 1 1 0 0 1</b> 0 1
<p>0 1 <b>1 1 1 0 0 1 0 1 0 0 1 1 1 1 0 1 1</b> 1 0
<p>1 0 <b>1 0 1 1 0 1 0 0 1 0 1 1 0 1 1 0 0</b> 0 1
<p>0 0 1 <b>1 1 1 0 1 1 1 0 1 1 0 0 1 1 0 0</b> 1 0
<p>1 0 1 <b>1 1 1 0 0 1 0 1 0 0 1 1 1 1 0</b> 1 1 1
<p>0 1 0 1 <b>0 1 1 0 1 0 0 1 0 1 1 0</b> 1 1 0 0 0
<p>1 1 0 1 1 <b>1 1 0 1 1 1 0 1 1 0 0</b> 1 1 0 0 1
<p>0 1 0 1 1 1 <b>1 0 0 1 0 1 1 0 1</b> 1 1 1 0 1 1
<p>1 0 1 0 1 0 1 <b>1 0 1 0 0 1 0</b> 1 1 0 1 1 0 0
<p>0 1 0 0 1 1 1 1 <b>0 1 1 1 0</b> 1 1 0 0 1 1 0 0
<p>1 0 1 0 1 1 1 1 0 <b>0 1 0</b> 1 1 0 1 1 1 1 0 1
<p>1 1 0 1 0 1 0 1 1 0 <b>1</b> 0 0 1 0 1 1 0 1 1 0
<p>0 0 1 0 0 1 1 1 1 0 1 1 1 0 1 1 0 0 1 1 0
<p>0 1 0 1 0 1 1 1 1 0 0 1 0 1 0 0 1 1 1 1 0
<p>1 1 1 0 1 0 1 0 1 1 0 1 0 0 1 0 1 1 0 1 1
<p>0 0 0 1 0 0 1 1 1 1 0 1 1 1 0 1 1 0 0 1 1

    <style>p{margin:0.2em}b{all:unset;color:red}</style>
    <p>0 1 1 0 1 0 0 1 0 1 1 0 1 1 0 0 0 1 1 0 1
    <p>1 1 1 0 1 1 1 0 1 1 0 0 1 1 0 0 1 0 1 0 1
    <p>1 1 1 0 0 1 0 1 0 0 1 1 1 1 0 1 1 1 0 1 0
    <p>1 0 1 1 0 1 0 0 1 0 1 1 0 1 1 0 0 0 1 0 0
    <p>1 1 1 1 0 <b>1 1 1</b> 0 1 1 0 0 <b>1 1 0</b> 0 1 0 1 0
    <p>1 1 1 <b>1 0 0 1 0 1 1</b> 0 <b>1 1 1 1 0 1 1</b> 1 0 1
    <p>0 1 0 <b>1 1 0 1 0 0 1</b> 0 <b>1 1 0 1 1 0 0</b> 0 1 1
    <p>0 1 1 <b>1 1 0 1 1 1 0 1 1 0 0 1 1 0 0 1</b> 0 1
    <p>0 1 <b>1 1 1 0 0 1 0 1 0 0 1 1 1 1 0 1 1</b> 1 0
    <p>1 0 <b>1 0 1 1 0 1 0 0 1 0 1 1 0 1 1 0 0</b> 0 1
    <p>0 0 1 <b>1 1 1 0 1 1 1 0 1 1 0 0 1 1 0 0</b> 1 0
    <p>1 0 1 <b>1 1 1 0 0 1 0 1 0 0 1 1 1 1 0</b> 1 1 1
    <p>0 1 0 1 <b>0 1 1 0 1 0 0 1 0 1 1 0</b> 1 1 0 0 0
    <p>1 1 0 1 1 <b>1 1 0 1 1 1 0 1 1 0 0</b> 1 1 0 0 1
    <p>0 1 0 1 1 1 <b>1 0 0 1 0 1 1 0 1</b> 1 1 1 0 1 1
    <p>1 0 1 0 1 0 1 <b>1 0 1 0 0 1 0</b> 1 1 0 1 1 0 0
    <p>0 1 0 0 1 1 1 1 <b>0 1 1 1 0</b> 1 1 0 0 1 1 0 0
    <p>1 0 1 0 1 1 1 1 0 <b>0 1 0</b> 1 1 0 1 1 1 1 0 1
    <p>1 1 0 1 0 1 0 1 1 0 <b>1</b> 0 0 1 0 1 1 0 1 1 0
    <p>0 0 1 0 0 1 1 1 1 0 1 1 1 0 1 1 0 0 1 1 0
    <p>0 1 0 1 0 1 1 1 1 0 0 1 0 1 0 0 1 1 1 1 0
    <p>1 1 1 0 1 0 1 0 1 1 0 1 0 0 1 0 1 1 0 1 1
    <p>0 0 0 1 0 0 1 1 1 1 0 1 1 1 0 1 1 0 0 1 1

375 bytes para criar a página HTML diretamente com PHP

<?$o=2841;for(;$i<16;)$t.=il.Oo[$o>>$i++&1].vey.Oo[$o>>$i++&1].u;foreach(str_split($t)as$c)$x.="0".decbin(ord($c));$a=[1,9,20,28,41,49,62,82,103,125,146,168,190,212,234,256,278,300];$z=[3,11,26,34,47,55,77,98,119,140,160,179,200,220,240,260,280,300];for($i=0;$i<483;$i++)echo $i%21?"":"<p>",in_array($i-88,$a)?"<b style=color:red>":"",$x[$i],in_array($i-88,$z)?"</b>":""," ";
Jörg Hülsermann
fonte
2
Apenas substituir color:#911;background:redpor color:red;faz com que esteja em conformidade com as especificações de recompensa, além de economizar alguns bytes.
Emigna
3

PowerShell, 110 bytes

'uil','vey'*8|%{$s+=$_+'oOOooOOOooOoOOO'[$i++]}
-join(8..490|%{(+$s[$_-shr3]-shr(7-$_%8))%2
' 
'[!(++$j%21)]})

Explicação:

A primeira linha do script pega as substrings e insere uma letra Oentre elas. O resultado é a sequência uiloveyOuilOveyouiloveyOuilOveyOuiloveyouilOveyouilOveyOuilOvey. Observe que o primeiro e o último caracteres são redundantes.

O loop gera todos os (8..490)bits necessários a partir dos caracteres da string, bem como um espaço ou um avanço de linha.

O enigma do destinatário da carta dos namorados

Pode-se ver que os pequenos e grandes símbolos Ocompõem a codificação de bits. Existem 15 símbolos (bits). Existe apenas uma partição nos bits para obter caracteres ASCII: oOOooOOO+ ooOoOOO[o]. Tivemos que adicionar um pequeno em ovez de 0no final. Estes símbolos ASCII são:g.

Quem é esse misterioso g.?

confuso
fonte
2

PHP, 121 bytes

for($n=5682;$i++<60;)for($b=8;$b;)$p.=(1&ord(~$i&3||($n/=2)&1?uiloveyo[$i%8]:O)>>--$b)." ";echo wordwrap($p."0 1 1",42);

demolir

$n=2*bindec("000101100011001"); // where to NOT replace o with O
for($i=1;$i<61;$i++)            // loop $i from 1 to 60
{
    $c=
        ~$i&3                       // $i%4!=3
        ||
        ($n/=2)&1                   // or (1. shift $n, 2. test bit 0)
        ? "uiloveyo"[$i%8]          // yes: character from string
        : "O"                       // no: uppercase "O"
    ;
    for($b=8;$b--;)                 // run from bit 7 to bit 0
        $p.=(1 & ord($c)>>$b). " ";     // append 1 or 0 plus space
}
$p.="0 1 1";                    // append the missing three bits
echo wordwrap($p,42);           // wrap at column 42 (actually 41; 42 is space -> gets cut)
Titus
fonte
2

q / kdb +, 107 93 85 55 53 bytes

Solução:

23 21#0 1(,/)0b vs'@[61#"ilOveyOu";0x020e1222262e;_:]

Exemplo:

q)23 21#0 1(,/)0b vs'@[61#"ilOveyOu";0x020e1222262e;_:]
0 1 1 0 1 0 0 1 0 1 1 0 1 1 0 0 0 1 1 0 1
1 1 1 0 1 1 1 0 1 1 0 0 1 1 0 0 1 0 1 0 1
1 1 1 0 0 1 0 1 0 0 1 1 1 1 0 1 1 1 0 1 0
1 0 1 1 0 1 0 0 1 0 1 1 0 1 1 0 0 0 1 0 0
1 1 1 1 0 1 1 1 0 1 1 0 0 1 1 0 0 1 0 1 0
1 1 1 1 0 0 1 0 1 1 0 1 1 1 1 0 1 1 1 0 1
0 1 0 1 1 0 1 0 0 1 0 1 1 0 1 1 0 0 0 1 1
0 1 1 1 1 0 1 1 1 0 1 1 0 0 1 1 0 0 1 0 1
0 1 1 1 1 0 0 1 0 1 0 0 1 1 1 1 0 1 1 1 0
1 0 1 0 1 1 0 1 0 0 1 0 1 1 0 1 1 0 0 0 1
0 0 1 1 1 1 0 1 1 1 0 1 1 0 0 1 1 0 0 1 0
1 0 1 1 1 1 0 0 1 0 1 0 0 1 1 1 1 0 1 1 1
0 1 0 1 0 1 1 0 1 0 0 1 0 1 1 0 1 1 0 0 0
1 1 0 1 1 1 1 0 1 1 1 0 1 1 0 0 1 1 0 0 1
0 1 0 1 1 1 1 0 0 1 0 1 1 0 1 1 1 1 0 1 1
1 0 1 0 1 0 1 1 0 1 0 0 1 0 1 1 0 1 1 0 0
0 1 0 0 1 1 1 1 0 1 1 1 0 1 1 0 0 1 1 0 0
1 0 1 0 1 1 1 1 0 0 1 0 1 1 0 1 1 1 1 0 1
1 1 0 1 0 1 0 1 1 0 1 0 0 1 0 1 1 0 1 1 0
0 0 1 0 0 1 1 1 1 0 1 1 1 0 1 1 0 0 1 1 0
0 1 0 1 0 1 1 1 1 0 0 1 0 1 0 0 1 1 1 1 0
1 1 1 0 1 0 1 0 1 1 0 1 0 0 1 0 1 1 0 1 1
0 0 0 1 0 0 1 1 1 1 0 1 1 1 0 1 1 0 0 1 1

Explicação:

23 21#0 1(,/)0b vs'@[61#"ilOveyOu";0x020e1222262e;_:] / the solution
                   @[             ;              ;  ] / apply[input;indices;function]
                                                  _:  / lowercase
                                   0x020e1222262e     / 2 14 18 34 38 46 represented in hex
                    61#"ilOveyOu"                     / 61 take "ilOveyOu" (wraps around)
             0b vs'                                   / convert into 8-bit representation
         (,/)                                         / flatten
      0 1                                             / index into 0 / 1 (convert from booleans)
23 21#                                                / reshape

Notas:

  • -2 bytes graças a ngn!
rua
fonte
1

Python 3, 199 bytes:

z='01111011101'
a='011010010110110001'
b=z+'10011001010111100101'
[print(' '.join(''.join([a+i[0]+b+i[1]+z+'01'for i in'10 01 10 00 11 01 00'.split()])+a+'0'+b[:16])[i:i+41])for i in range(0,966,42)]
Tim
fonte
1

Python 3, 170 bytes

from textwrap import*
print('\n'.join(' '.join(list(i))for i in wrap(''.join(bin(ord(i)+256)[3:]for i in (7*"il%svey%su")%(tuple("oOOooOOOooOoOO"))+"ilOv"),21))+" 0 1 1")

faz uma repetição de seqüência de caracteres "Il% svey% su", repete o número de vezes necessário e depois usa uma tupla para submarcar todos os o's. Depois, converte-o em binário, usa o módulo textwrap, converte cada item do novo lista a lista, junta-se ao espaço e depois adiciona 0 1 1 porque isso parece ser um esboço ou algo assim

Limão destrutível
fonte
1

Mathematica, 123 bytes (275 com cores)

Não tenho certeza se o uso em Gridvez da saída de uma string está OK (caso contrário, essa é uma entrada não concorrente).

P / B

Grid@Partition[ReplacePart[PadLeft[{},483,IntegerDigits[36^^nz4sp78k5qyb,2,64]],
Thread[51+32{0,1,4,5,6,9,11,12,13}->0]],21]

insira a descrição da imagem aqui

Cor

Grid[Partition[ReplacePart[PadLeft[{},483,IntegerDigits[36^^nz4sp78k5qyb,2,64]],
Thread[51+32{0,1,4,5,6,9,11,12,13}->0]],21],ItemStyle->{{},{},Thread[Join@@MapIndexed[
Thread@{Range@@#,2+First@#2}&,Thread[Partition[IntegerDigits[36^^k32b741shmsoiwed4vnakt],
17]+{0,10}]]->Red]}]

insira a descrição da imagem aqui

2012rcampion
fonte
É possível copiar / colar o resultado gridem texto sem formatação e colá-lo no bloco de notas? Com o que se parece? Espaço separado (espaço único) com novas linhas, como mostra a figura?
Stewie Griffin
1

Ruby 142 bytes

(('iloveyOuilOveyouiloveyOuilOveyOuiloveyouilOveyouilOveyOuilOv'.unpack('B*')[0]+'011').split(/(.{21})/)-['']).map{|i|puts(i.chars.join(' '))}

(Um pouco mais) legível:

(('iloveyOuilOveyouiloveyOuilOveyOuiloveyouilOveyouilOveyOuilOv'.unpack('B*')[0]+'011') 
  # unpack turns it into a binary string, [0] takes the first element, and then we add on the trailing 011
.split(/(.{21})/) -['']) 
  # split it every group of 21 characters and remove the empty strings that are also included
.map { |i| puts(i.chars.join(' ')) } 
  # take each string of 21 characters, get its chars and join them with an empty string for formatting (puts takes care of the newlines)

Ainda não encontrei uma maneira de condensar o texto original em uma forma mais sucinta no Ruby - ele tem ótimas funções de manipulação de String, mas todas as maneiras pelas quais tentei usar mais caracteres do que a própria string. Qualquer dica apreciada, este é o meu primeiro Code Golf no StackOverflow!

Smittles2003
fonte
Bem-vindo à Programação de quebra-cabeças e troca de pilha de código de golfe! Você já tentou definir a string como uma variável (por exemplo a) e depois a+a+a...? Melhor ainda, se Ruby suportar multiplicação de strings a*count,!
Wizzwizz4
@ wizzwizz4, a string não é pura repetição de string. :) (Há provavelmente melhores maneiras de fazer isso, porém, mas eu não acho que a+a+aé a maneira)
Stewie Griffin
Eu sei! Faça uma versão curta em minúscula, repita e substitua a enésima opor maiúscula O!
Wizzwizz4 10/10
1

Ferrugem, 195 bytes

||for(c,i)in"iloveyOuilOveyouiloveyOuilOveyOuiloveyouilOveyouilOveyOuilOve".bytes().fold(String::new(),|a,c|format!("{}0{:b}",a,c)).chars().zip(1..484){print!("{}{}",c,if i%21!=0{' '}else{'\n'})}

Ungolfed:

fn main(){
    // convert bytes of the string to binary numerals.
    let s = "iloveyOuilOveyouiloveyOuilOveyOuiloveyouilOveyouilOveyOuilOve"
        .bytes()
        .fold(String::new(),|a,c|format!("{}0{:b}",a,c));

    // print them over the range with newlines/spaces as appropriate
    for(c,i) in s.chars().zip(1..484) {
        print!("{}{}",c,if i%21!=0{' '}else{'\n'})
    }
}
Harald Korneliussen
fonte
1

C (gcc) , 102 bytes

f(i){for(i=0;i<483;)printf("\n%2d"+!!(i++%21),(i/8%4^2|35609>>i/32&1?"iloveyou"[i/8%8]:79)>>7-i%8&1);}

Atropelar

f(i){
for(i=0;i<483;)         Loop through bits.
printf("\n%2d"
+!!(i++%21),            Decide if newline in format string should be skipped.
(i/8%4^2|               Are we at a non-'o' letter?
                        (They occur every 4th letter, starting at index 2.)
35609>>i/32&1?          Check with magic number if the 'o' should be capital.
"iloveyou"[i/8%8]:      If not-'o' or not capital, use current letter.
79)                     Otherwise, use the letter 'O'.
>>7-i%8&1               Extract bit to write.
);}

Experimente online!

gastropner
fonte
1

Pitão, 47 bytes

jPcjdsm+0.BCdtPs.i*8c"uil vey"dmr\o!djC\䱨2 42

Experimente online aqui .

jPcjdsm+0.BCdtPs.i*8c"uil vey"dmr\o!djC\䱨2 42   Implicit: d=" "
                    c"uil vey"d                  Chop "uil vey" on spaces, to yield ["uil" "vey"]
                  *8                             Repeat the above 8 times - {1}
                                      C\䱨       Character code of 䱨, yields 19560
                                     j    2      Convert the above to base 2
                               m                 Map the digits of the above, as d, using:
                                r\o!d            If d is 0, yield "O", otherwise "o" - {2}
                .i                               Interleave {1} with {2}
               s                                 Concatenate into a string
                                                   This yields "uiloveyOuilOveyouiloveyOuilOveyOuiloveyouilOveyouilOveyOuilOvey"
             tP                                  Remove first and last characters of the above
      m                                          Map each character, as d, using:
           Cd                                      Get character code
         .B                                        Convert to binary string
       +0                                          Prepend 0 (all binary strings will be length 7, so this pads to length 8)
     s                                           Flatten the result of the map
   jd                                            Join on spaces
  c                                        42    Chop into strings of length 42
 P                                               Discard the last, partial, string
j                                                Join on newlines, implicit print
Sok
fonte
0

/// , 220 bytes

/H/2E//G/CBDCC//F/ABC2C//E/AC//D/2B//C/A2//A/33//B/32//2/0 //3/1 /2G22C3
ABFDB3
ABDBHABB
BG2D2
EFDB
EDCEAB3
DG22A
HFD3
HDBHAB
BBG223
2HFD
BEDBHA3
DBG22
CEF23
DEDCEA
BBBG2
DHF2
BBEDCE3
CBBG
2DHF
DBEDBH
ABBBCBDCA
22DHABC2A

Experimente online!

acrólito
fonte
0

C ++ 11, não concorrente, 726 687 636 bytes (* limite NIX ou W10 2 necessário)

#include <iostream>
#include <string>
#ifdef  _WIN32
#include <Windows.h>
#endif
using namespace std;int main() {
#ifdef  _WIN32
HANDLE h=GetStdHandle(-11);DWORD m;GetConsoleMode(h,&m);SetConsoleMode(h,m|0x04);
#endif
cout<<"\033[47m\033[30m";string d("4fup8y8hihjyl9g1ifh9wpc4f52l5a8giosim2isj80xff814db9wmf958x4zlbl58x4zlbl6zxgjt9whbcz4mu91r0j5c4kfq48uxw53w1zvpdshv6ylrnl3t38qyiteyw0lphs3kx59vf4ezay145thrt7lkb80w83nz10ih27f77p0820wzr9");for(int s=0;s!=184;s+=8){unsigned long long n=stoull(d.substr(s,8),NULL,36),i=3;for(int p=40;p!=-2;p-=2){int r=(n&(i<<p))>>p;printf(r>1?"\033[31m %d\033[30m":" %d",r>1?r-2:r);}puts("");}return 0;}

Eu sei que isso pode ser jogado muito melhor. Eu quero ver uma resposta c ++ curta, droga!

Provavelmente também cometi alguns erros ao codificar a seção do coração.

Saída (cores fixas):

insira a descrição da imagem aqui


fonte
Eu assumi que apenas a seção do coração continha a mensagem, então codifiquei a coisa toda. Escusado será dizer que me senti um idiota quando reli o desafio e testei as primeiras linhas da saída em ASCII.
0

Python, 473 bytes

Colori!

r=str.replace;print r(r(r(r(r(r(r(r("""
jh0k1k1k0jk1
ikik1kjk0h1
ik0hjikih
k1h0k1k1k00k0
i1ksi1ejk0s1ke0h
i1sk0kie0si1kiek1
0ks1hje0s1k1k0ej1
j1s1kik1kjkjej
jsik0hjikiek
ksk1h0k1k1k0ej
0jsikik1kjk0ek
k1sik0hjikei1
0k1sjh0k1ke1k00
1kis1kik1k0e1kj
0ki1sk0k1k1eiki
hk1sh0ke1k1k0
0kji1sj1ke1kjk0
hi1ks0ke1ki1k1
1hk1ks1e00k1k1k
00kjikik1kjk
0hi1k0hjik
ihk1h0k1ki
000kjikik1kj1
""",'h','1010'),'i','11'),'j','01'),'k','10'),'1','1 '),'0','0 '),'s','\x1b[0;40;31m'),'e','\x1b[0m')
Oliver Ni
fonte
11
str.translatepode ser uma escolha melhor
Mego
0

FEU , 360 bytes

m/a/0 1 /b/1 0 /c/1 1 /d/0 0 /e/0 /f/1 /g
__DATA__
afaeaafabeab1
cfacababaae1
cbaaeacfaca0
fafaeaafabeae0
ccacababaa0
cfbaafacfafb1
aafaeaafabea1
acfacababae1
acbaaeacfac0
faafaeaafabd1
eacfacababa0
facbaaeacfaf1
aaafaeaafabe0
cacfacababe1
aacbaafacfa1
faaafaeaafab0
aeacfacabab0
faacbaafacb1
caaafaeaafaf0
eaeacfacabaf0
aaacbaaeacf0
cfaaafaeaafa1
daeacfacaba1

Apenas compressão estúpida

TuxCrafting
fonte