XKCD # 99 , con el título "Binary Heart" muestra una imagen simple de unos y ceros, con algunos dígitos de color rojo.
El corazón rojo es visible a simple vista, pero el mensaje oculto en la secuencia binaria no lo es. Si elimina todos los espacios y líneas nuevas e interpreta la secuencia binaria como código ASCII de 8 bits, terminará con el mensaje:
iloveyOuilOveyouiloveyOuilOveyOuiloveyouilOveyouilOveyOuilOv
¿Hermoso, verdad?
Pssst ... La cadena no es una simple repetición de cuerda.
Su desafío es crear esta imagen binaria con 21 dígitos de ancho y 23 dígitos hacia abajo. Debe haber exactamente un espacio entre cada dígito en cada fila, y una nueva línea para cada nueva fila. Tenga en cuenta que los últimos bits son solo el comienzo de la letra e
, ya 21*23
que no es divisible por 8. También necesita esos bits correctos.
La función o programa no debe tomar ninguna entrada. Se aceptan espacios iniciales y finales y líneas nuevas.
El resultado de su código debería verse así:
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
Este es el código de golf, por lo que gana la respuesta más corta (en bytes).
Tabla de clasificación
fuente
O
s mayúscula de la cadena de salida ASCII!Respuestas:
Gelatina ,
363332 bytes¡Gracias a @JonathanAllan por jugar 3 bytes!
Pruébalo en línea!
Cómo funciona
El enlace principal
se ejecuta de forma nulad (es decir, sin ningún argumento) cuando se ejecuta el programa. Su valor de retorno se imprimirá implícitamente.
encuentra los índices de los caracteres citados en la página de códigos de Jelly y los interpreta como dígitos de un número base biyectivo 250. Esto produce el número entero 13021639057551959994 .
convierte el entero generado en binario. Esto produce la matriz de bits 1011010010110110001001111011101100110010101111001010011110111010 que corresponde a la codificación UTF-8 de la cadena ilOveyOu , desplazada un bit a la izquierda.
El cambio es necesario porque
B
no puede devolver una matriz de bits con un 0 inicial . Otras opciones incluyen negar los dígitos binarios o calcular el cuadrado al revés, pero este enfoque ahorra un byte.moldea la matriz generada como el rango de 1 a 484 , es decir, repite el contenido de la matriz tantas veces como sea necesario para alcanzar una longitud de 484 .
Esto es un poco más de lo que necesitamos para dar cuenta del cambio. Podríamos eliminar el primer bit ahora, pero hacerlo más tarde significa que todos los bits que deben intercambiarse se encuentran en índices pares, lo que nos permite guardar el byte mencionado anteriormente.
toma los puntos de código de los caracteres entre
“
y‘
( [10, 58, 74, 138, 154, 186] ), luego los "libera", es decir, los multiplica por 2 ( [20, 116, 148, 276, 308, 372 ] ).niega condicionalmente los bits en esos índices. Esto corresponde a las variaciones de O / O en el patrón original.
Finalmente,
elimina la matriz de bits (elimina el primer bit), divide la matriz restante en filas de 21 elementos e imprime la matriz resultante como una cuadrícula.
fuente
O
como predeterminado, creo que esto lo hace:“ỊḂr×C)ḃȯ’B¬ṁ483¬“Œ` ° @‘+\¤¦s21G
Gelatina ,
41 40 3533 bytes¡Gracias a @Dennis por llegar al final
ṖṖCG
! (complementoC
=1-x
en lugar de lógico no¬
)TryItOnline
¿Cómo?
Versión "color", 77 bytes
TryItOnline
Jelly no tiene salida de color, pero de todos modos esto es mucho más fácil de ver (soy daltónico) ...
¿Cómo?
fuente
¬
, los últimos cuatro bytes pueden convertirseṖṖCG
. :)complement
?En realidad, 58 bytes
Pruébalo en línea!
Explicación
Aquí hay tres partes principales, por lo que lo desglosaré en consecuencia.
Parte 1: Construyendo la cadena base-256
Realmente vamos a construir la cadena binaria invertida, para aprovechar la estructura basada en la pila de Actually (LIFO) y evitar complicaciones con ceros iniciales en la cadena binaria. Por lo tanto, la cadena binaria de destino es
110011011101111001000110110100101101010111011110010100111101010011001101110111100100011011010010110101011101111011010011110101001100110111011110010001101101001011010101110111101101001111010100110011011101111011000110110100101101010111011110010100111101010011001101110111100100011011010010110101011101111001010011110101001100110111011110110001101101001011010101110111101101001111010100110011011101111001000110110100101101010111011110010100111101010011001101110111101100011011010010110
, que es equivalente a20083405242288679348048842451418880256193335738939042905519679590571514414673488599852759703515507690399267425671627412178904636115120346432419478
en decimal. En base-256 (usando la tabla de caracteres CP437 para la conversión), la cadena correspondiente es♠n≥6û«≥₧ªn≥6û«÷₧ªn≥6û«÷₧ªn÷6û«≥₧ªn≥6û«≥₧ªn÷6û«÷₧ªn≥6û«≥₧ªn÷6û
. Para construir la cadena binaria original, construimos la cadena base-256 (aprovechando el patrón en ella) y realizamos conversiones de base a decimal y binario.La cadena base-256 tiene el siguiente formato (espacios y líneas nuevas añadidos para mayor claridad):
Por lo tanto, cada una de las 7 secciones intermedias se puede formar usando el andamio
«%s₧ªn%s6û
y reemplazando las%s
partes con≥
o÷
.La secuencia específica de
≥
s y÷
s es que necesitamos≥≥÷≥÷÷≥≥≥÷÷≥≥÷
. Como necesitamos esto como una lista de cadenas de longitud 1, la forma ingenua de representar esto sería"≥≥÷≥÷÷≥≥≥÷÷≥≥÷"#
(empujar la cadena, convertirla en una lista). Sin embargo, podemos hacerlo un poco mejor. Al interpretar esa cadena como un número binario (donde≥
representa1
y÷
representa0
), obtenemos13542
en decimal. Al convertir esto de nuevo a binario (usando los1
s y0
s tradicionales ) e indexarlo en una cadena de longitud 2, podemos obtener la lista usando un byte menos que el método ingenuo.Parte 2: Convertir a binario
Esta parte es mucho más sencilla. Si realmente tuviera la capacidad de convertir directamente base-256 a binario, lo usaríamos. Desafortunadamente, no es así, así que tendremos que usar decimal como formato intermedio.
El
,
siguiente código representa el código de la Parte 1: para fines explicativos, he reemplazado el código de la Parte 1,
para leer la salida de la Parte 1 de STDIN. No es parte del código final real.Parte 3: Formateo
Si el desafío fuera simplemente generar la cadena binaria tal como está, estaríamos listos. Sin embargo, todavía tenemos que formatear para obtener la cadena binaria en un rectángulo de 21 x 23.
Como en la Parte 2,
,
representa la salida de la parte anterior y no es parte del código real.Para aquellos que realizan un seguimiento en casa, este es el código equivalente de Python 3 (481 bytes):
fuente
JavaScript (ES6),
169...136135bytesGuardado 2 bytes gracias a Andrakis
Guardado 4 bytes gracias a Hedi
Guardado
35 bytes gracias a NeilVersión coloreada, 249 bytes (237 bytes de JS + 12 bytes de CSS)
El código JS genera el arte ASCII con etiquetas en negrita para el corazón. Se requieren 12 bytes de CSS para colorear en rojo. (¿Es justo el recuento de bytes?)
fuente
s=>s.replace(/./g,'$& ')
. He estado trabajando en una solución prácticamente idéntica.s.replace(/./g,'$& ')
ser reemplazado pors.split``.join` `
?[...s].join` `
replace(/./g,(c,i)=>c+=++i%21?' ':'\n')
(obviamente usando una nueva línea literal allí) guarda un byte adicional. Bien puede haber una mejor manera de expresar esa idea.05AB1E ,
775453444341 bytesUtiliza la codificación CP-1252 .
Explicación
Pruébalo en línea!
fuente
Sðý42ô»
queS21ô»
, ya»
se une a las listas internas por espacios implícitamente (y el•1žä¿*•
ahora debería ser•Å¾$6•
, ya que los enteros se codifican en la base-255 ahora en lugar de la base-214).CJam , 48 bytes
Colaboración con @MartinEnder, quien eliminó 3 bytes difíciles con la
"uilvey"3/
cadena. Intérprete en línea .fuente
Javascript ES6 REPL ,
124121119113 bytesGuardado 6 bytes gracias a @ETHproductions
Este es un programa completo que se puede pegar en la REPL / consola para producir el resultado correcto.
Mostrar fragmento de código
Más detallado
JavaScript coloreado solo corazón, 281 bytes
Esto funciona cambiando los colores cada n bits y hace uso de la capacidad console.log para registrar colores
Corazón CSS coloreado, 229 + 12 bytes
Si se permite el uso de CSS, el corazón coloreado se puede reducir aún más a 229 bytes de código JavaScript y 12 bytes de CSS
Mostrar fragmento de código
fuente
a
y simplemente usarlonum>>i/64&1
en ambos lugares, ahorrando 1 byte. Además,++i%21==0?newline:space
es lo mismo que++i%21?space:newline
.i=0,r=''
ai=r=''
;''
se coacciona automáticamente a 0.MATL,
5655 bytesPruébalo en línea
Explicación
fuente
PowerShell v2 +, (UTF-16) 300 bytes
Recuento de bytes erróneo corregido gracias a @Mego
No es el más corto, sino un enfoque diferente. Tomé manualmente cada línea y las corté en pares cada una (aproximadamente) 9-11 bits significativos de longitud. Convirtió cada uno de esos valores binarios en un
char
(Nota: PowerShell usa UTF-16 de forma predeterminada, no UTF-8), y lo convirtió en una cadena. Eso es'...'
al principio.Luego lo hacemos
-split
en cadenas de longitud 2, y recorremos cada par. Esos pares se dividen en unachar
vía de matriz$_[0,1]
, y cada uno de ellos se convierte como int+$_
y se[convert]
edita en un binario (,2
)String
. Eso se-join
junta en una sola cadena, luegoPadLeft
'd' para obtener la longitud adecuada, luego cada elemento es-replace
d consigo mismo y un espacio'$1 '
.Esas cadenas se dejan en la tubería, y la salida es implícita, con el valor predeterminado
Write-Output
pegando una nueva línea entre los elementos.fuente
len("'ږƍƕ๓ƺ֥˄ϝӊ༭ǝ֥ţϝɥޔǮƱϝIJ˲ӷʴ˘ͻ֙ץŻŬɻˌʼֽ͖ҶɻŦʼʞݖɛĽƳ'-split'(..)'-ne''|%{(-join($_[0,1]|%{[convert]::ToString(+$_,2)})).PadLeft(21,'0')-replace'(.)','$1 '}".encode('utf-16be'))
/// , 237 bytes
Pruébalo en línea!
fuente
Python 3,
147144 bytesPruébalo en ideone
Inicializa
i
a0
la declaración de la función, a continuación, repite este 23 veces:hace que toda la cadena binaria sin espacios (véase más adelante);
corta una fila desde dentro usando
[i:i+21]
;inserta los espacios con
' '.join(...)
;huellas dactilares; e
incrementa
i
en 21 coni+=21
Para hacer toda la cadena binaria:
se repite
"ilOveyOu"
ocho veces;reemplaza
O
cono
donde sea necesario (en los índices[2,14,18,34,38,46]
);- - - esto se logra con
chr(j+30)in' ,0@DL'
guardar 3 bytesconvierte cada carácter a su ordinal;
convierte cada ordinal en una cadena binaria (
'0bxxxxxxx'
);elimina el inicio
'0b'
de cada uso[2:]
;antecede cada uno con un
'0'
; yune todo con
''.join(...)
fuente
i=0\nexec(...)
oi=0;exec(...)
para 137 bytes.exec("...")
aexec"..."
yprint(...)
paraprint...
PHP + HTML + CSS, 173 bytes coloreados 367 bytes
CLI solo PHP 173 Bytes
cumplir con el tipo de contenido de especificación de recompensa text / html
b{all:unset;color:red}
en lugar deb{all:unset;color:#911;background:red}
en la primera versiónPHP + HTML + CSS, 392 bytes
corazón rojo + negro que se ve más bonito
Tal vez llame al número de color en la parte CSS
agregue esto antes de que se vea mejor
La primera versión de salida es el código HTML más feo de mi vida
corazón rojo-negro
375 bytes para crear la página HTML con PHP directamente
fuente
color:#911;background:red
concolor:red;
marcas que cumpla con la especificación de recompensas, así como el ahorro de unos pocos bytes.Powershell, 110 bytes
Explicación:
La primera línea del guión toma las subcadenas e inserta una letra
O
entre ellas. El resultado es la cadenauiloveyOuilOveyouiloveyOuilOveyOuiloveyouilOveyouilOveyOuilOvey
. Tenga en cuenta que el primer y el último carácter son redundantes.El bucle genera todos los
(8..490)
bits necesarios de los caracteres de la cadena, así como un espacio o un avance de línea.El enigma del destinatario de la carta de San Valentín
Se puede ver que los símbolos pequeños y grandes
O
forman la codificación de bits. Hay 15 símbolos (bits). Solo hay una partición en los bits para obtener caracteres ASCII:oOOooOOO
+ooOoOOO[o]
. Tuvimos que agregar un pequeño eno
lugar de0
al final. Estos símbolos ASCII son:g.
¿Quién es este misterioso
g.
?fuente
PHP, 121 bytes
Descompostura
fuente
q / kdb +,
10793855553 bytesSolución:
Ejemplo:
Explicación:
Notas:
fuente
Python 3, 199 Bytes:
fuente
Python 3, 170 bytes
hace una repetición de cadena de "Il% svey% su", lo repite el número requerido de veces, luego usa una tupla para sumar todas las o's. Luego lo convierte en binario, usa el módulo textwrap, convierte cada elemento del nuevo lista para lista, se une con el espacio, luego agrega 0 1 1 porque eso parece ser un trozo o algo
fuente
Mathematica, 123 bytes (275 con color)
No estoy seguro de si usar en
Grid
lugar de generar una cadena está bien (si no, esta es una entrada no competitiva).B / W
Color
fuente
grid
en texto plano y pegarlo en el bloc de notas? Cómo se ve? ¿Espacio separado (espacio simple) con líneas nuevas, como muestra la figura?Ruby 142 Bytes
(Ligeramente más) legiblemente:
Todavía no he encontrado una manera de condensar el texto original en una forma más sucinta en Ruby: tiene algunas excelentes funciones de manipulación de cadenas, pero todas las formas en que he intentado usar más caracteres que la cadena en sí. Cualquier sugerencia apreciada, ¡este es mi primer Code Golf en StackOverflow!
fuente
a
) y luego hacera+a+a
...? Aún mejor, si Ruby admite la multiplicación de cadenasa*count
,!a+a+a
sea así)o
con mayúsculaO
!Óxido, 195 bytes
Sin golf:
fuente
C (gcc) , 102 bytes
Atropellar
Pruébalo en línea!
fuente
K (oK) ,
5048 bytesSolución:
Pruébalo en línea!
Explicación:
Puerto de mi solución Q / KDB + .
Notas:
fuente
2 14 18 34 38 46
->0x020e1222262e
Pyth, 47 bytes
Pruébelo en línea aquí .
fuente
/// , 220 bytes
Pruébalo en línea!
fuente
C ++ 11, para no competir,
726687636 bytes (* NIX o W10 umbral 2 se requiere)Sé que esto se puede jugar mucho mejor. ¡Quiero ver una breve respuesta de C ++ maldita sea!
Probablemente también cometí algunos errores al codificar la sección del corazón.
Salida (colores fijos):
fuente
Python, 473 bytes
¡De colores!
fuente
str.translate
podría ser una mejor opciónFEU , 360 bytes
Solo estúpida compresión
fuente