Le XKCD # 99 , intitulé "Binary Heart" (Cœur binaire), montre une image simple de 1 et de zéros, avec quelques chiffres colorés en rouge.
Le coeur rouge est visible à l'œil nu, mais le message caché dans la séquence binaire ne l'est pas. Si vous supprimez tous les espaces et les nouvelles lignes et interprétez la séquence binaire en tant que code ASCII 8 bits, vous obtiendrez le message suivant:
iloveyOuilOveyouiloveyOuilOveyOuiloveyouilOveyouilOveyOuilOv
Mignon droit?
Pssst ... La chaîne n'est pas une répétition de chaîne pure.
Votre défi consiste à créer cette image binaire à 21 chiffres et à 23 chiffres. Il doit y avoir exactement un espace entre chaque chiffre de chaque ligne et une nouvelle ligne pour chaque nouvelle ligne. Notez que les derniers bits ne sont que le début de la lettre e
, car ils 21*23
ne sont pas divisibles par 8. Vous avez également besoin de ces bits corrects.
La fonction ou le programme ne doit prendre aucune entrée. Les espaces de début et de fin et les nouvelles lignes sont acceptés.
Le résultat de votre code devrait ressembler à ceci:
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
C'est le code de golf, donc la réponse la plus courte (en octets) gagne.
Classement
la source
O
de la chaîne de sortie ASCII!Réponses:
Jelly ,
363332 octetsMerci à Jonathan Jonathan pour avoir joué 3 octets!
Essayez-le en ligne!
Comment ça fonctionne
Le lien principal
est exécuté niladiquement (c'est-à-dire sans aucun argument) lors de l'exécution du programme. Sa valeur de retour sera imprimée implicitement.
trouve les index des caractères cités dans la page de code de Jelly et les interprète comme des chiffres d'un nombre bijectif de base 250. Cela donne le nombre entier 13021639057551959994 .
convertit l'entier généré en binaire. Cela donne la matrice de bits qui correspond au codage UTF-8 de la chaîne ilOveyOu décalée d'un bit vers la gauche.
Le décalage est nécessaire car il
B
est impossible de renvoyer un tableau de bits avec un 0 au début . D'autres options incluent la négation des chiffres binaires ou le calcul du carré en sens inverse, mais cette approche enregistre un octet.moule la matrice générée de la plage 1 à 484 , c’est-à-dire qu’elle répète le contenu de la matrice autant de fois que nécessaire pour obtenir une longueur de 484 .
C’est un peu plus que ce dont nous avons besoin pour tenir compte de ce changement. Nous pourrions supprimer le premier bit maintenant, mais le faire plus tard signifie que tous les bits qui doivent être échangés se trouvent à des index égaux, ce qui nous permet de sauvegarder l'octet susmentionné.
prend les points de code des caractères compris entre
“
et‘
( [[10, 58, 74, 138, 154, 186] ), puis les "unhale", c'est-à-dire les multiplie par 2 ( [20, 116, 148, 276, 308, 372 ] ).négativement sous condition les bits à ces indices. Cela correspond aux variations O / O du motif original.
Finalement,
dequeues le tableau de bits (en supprimant le premier bit), divise le tableau restant en lignes de 21 éléments et affiche la matrice résultante sous forme de grille.
la source
O
par défaut, je pense que ça le fait:“ỊḂr×C)ḃȯ’B¬ṁ483¬“Œ` ° @‘+\¤¦s21G
Jelly ,
41 40 3533 octetsMerci à @Dennis d'avoir fait la fin
ṖṖCG
! (complémentC
=1-x
à la place de pas logique¬
)TryItOnline
Comment?
Version "Couleur", 77 octets
TryItOnline
Jelly n'a pas de sortie couleur, mais c'est beaucoup plus facile à voir quand même (je suis daltonien) ...
Comment?
la source
¬
, les quatre derniers octets peuvent devenirṖṖCG
. :)complement
?En fait, 58 octets
Essayez-le en ligne!
Explication
Il y a trois parties principales ici, donc je vais décomposer en conséquence.
Partie 1: Construire la chaîne base-256
Nous allons en fait construire la chaîne binaire inversée, pour tirer parti de la structure LIFO (pile) d'Actually et éviter les complications liées aux zéros non significatifs de la chaîne binaire. Ainsi, la chaîne binaire cible est
110011011101111001000110110100101101010111011110010100111101010011001101110111100100011011010010110101011101111011010011110101001100110111011110010001101101001011010101110111101101001111010100110011011101111011000110110100101101010111011110010100111101010011001101110111100100011011010010110101011101111001010011110101001100110111011110110001101101001011010101110111101101001111010100110011011101111001000110110100101101010111011110010100111101010011001101110111101100011011010010110
, ce qui équivaut à20083405242288679348048842451418880256193335738939042905519679590571514414673488599852759703515507690399267425671627412178904636115120346432419478
en décimal. En base 256 (en utilisant la table de caractères CP437 pour la conversion), la chaîne correspondante est♠n≥6û«≥₧ªn≥6û«÷₧ªn≥6û«÷₧ªn÷6û«≥₧ªn≥6û«≥₧ªn÷6û«÷₧ªn≥6û«≥₧ªn÷6û
. Pour construire la chaîne binaire d'origine, nous construisons la chaîne base-256 (en tirant parti du modèle qu'elle contient) et effectuons des conversions de base en décimales et binaires.La chaîne base-256 a le format suivant (espaces et nouvelles lignes ajoutés pour plus de clarté):
Ainsi, chacune des 7 sections médianes peut être formée en utilisant l'échafaudage
«%s₧ªn%s6û
et en remplaçant les%s
pièces par l'un≥
ou l' autre÷
.La séquence spécifique de
≥
s et÷
s dont nous avons besoin est≥≥÷≥÷÷≥≥≥÷÷≥≥÷
. Puisque nous avons besoin de cela comme liste de chaînes de longueur 1, la manière naïve de le représenter serait"≥≥÷≥÷÷≥≥≥÷÷≥≥÷"#
(poussez la chaîne, faites-en une liste). Cependant, nous pouvons faire un peu mieux. En interprétant cette chaîne comme un nombre binaire (où≥
représente1
et÷
représente0
), nous obtenons13542
en décimal. En reconvertissant cela en binaire (en utilisant les traditionnels1
s et0
s), et en l'indexant dans une chaîne de longueur 2, nous pouvons obtenir la liste en utilisant un octet de moins que la méthode naïve.Partie 2: Conversion en binaire
Cette partie est beaucoup plus simple. Si réellement avait la capacité de convertir directement la base 256 en binaire, nous l'utiliserions. Malheureusement, ce n'est pas le cas, nous devrons donc utiliser le format décimal comme format intermédiaire.
Le
,
code ci-dessous représente le code de la partie 1; à des fins d’explication, j’ai remplacé le code de la partie 1 par,
lire le résultat de la partie 1 à partir de STDIN. Cela ne fait pas partie du code final réel.Partie 3: Formatage
Si le défi consistait simplement à sortir la chaîne binaire telle quelle, nous aurions terminé. Cependant, nous avons encore du formatage à faire pour obtenir la chaîne binaire dans un rectangle de 21 x 23.
Comme dans la partie 2, le
,
représente la sortie de la partie précédente et ne fait pas partie du code réel.Pour ceux qui font le suivi chez eux, il s’agit du code Python 3 équivalent (481 octets):
la source
JavaScript (ES6),
169...136135 octetsEnregistré 2 octets grâce à Andrakis
Enregistré 4 octets grâce à Hedi
Sauvegardé
35 octets grâce à NeilVersion colorée, 249 octets (237 octets de JS + 12 octets de CSS)
Le code JS génère l’art ASCII avec des étiquettes en gras pour le cœur. 12 octets de CSS sont nécessaires pour colorier en rouge. (Ce nombre d'octets est-il juste?)
la source
s=>s.replace(/./g,'$& ')
. Je travaille sur une solution à peu près identique.s.replace(/./g,'$& ')
être remplacé pars.split``.join` `
?[...s].join` `
replace(/./g,(c,i)=>c+=++i%21?' ':'\n')
(évidemment en utilisant une nouvelle ligne littérale ici) enregistre un octet supplémentaire. Il y a peut-être une meilleure façon d’exprimer cette idée.05AB1E ,
775453444341 octetsUtilise le codage CP-1252 .
Explication
Essayez-le en ligne!
la source
Sðý42ô»
àS21ô»
, depuis»
rejoint les listes internes par des espaces implicitement (et•1žä¿*•
doit maintenant être•Å¾$6•
, étant donné que les entiers sont codés en base 255 maintenant au lieu de base 214).CJam , 48 octets
Collaboration avec @MartinEnder, qui a enlevé 3 octets délicats avec la
"uilvey"3/
chaîne. Interprète en ligne .la source
Javascript ES6 REPL ,
124121119113 octetsSauvegardé 6 octets grâce à @ETHproductions
C'est un programme complet qui peut être collé dans le REPL / console pour produire le résultat correct.
Afficher l'extrait de code
Plus verbeux
JavaScript coloré seul coeur, 281 octets
Cela fonctionne en changeant de couleur tous les n bits et utilise la capacité console.log pour enregistrer les couleurs
Cœur en couleur CSS, 229 + 12 octets
Si l'utilisation de css est autorisée, le cœur coloré peut encore être réduit à 229 octets de code JavaScript et à 12 octets de CSS
Afficher l'extrait de code
la source
a
et l'utilisernum>>i/64&1
à la fois, en économisant 1 octet. En outre,++i%21==0?newline:space
est le même que++i%21?space:newline
.i=0,r=''
pouri=r=''
;''
est automatiquement contraint à 0.MATL,
5655 octetsEssayez-le en ligne
Explication
la source
PowerShell v2 +, (UTF-16) 300 octets
Nombre d'octets erroné corrigé grâce à @Mego
Pas le plus court, mais une approche différente. J'ai pris manuellement chaque ligne et les ai tranchés en paires, d'une longueur d'environ 9 à 11 bits significatifs. Converti chacune de ces valeurs binaires en un
char
(Remarque: PowerShell utilise par défaut UTF-16, et non pas UTF-8), puis convertie en chaîne. C'est'...'
le début.Nous avons ensuite
-split
cela en chaînes de longueur 2, et en boucle chaque paire. Ces paires sont divisées en unechar
-raray via$_[0,1]
, et chacune de celles-ci est convertie en un int+$_
et[convert]
ed en un binaire (,2
)String
. C’est-join
assemblé dans une seule chaîne, puis ilPadLeft
faut obtenir la bonne longueur, puis chaque élément est-replace
d avec lui-même et un espace'$1 '
.Ces chaînes sont toutes laissées sur le pipeline et la sortie est implicite, la valeur par défaut
Write-Output
collant une nouvelle ligne entre les éléments.la source
len("'ږƍƕ๓ƺ֥˄ϝӊ༭ǝ֥ţϝɥޔǮƱϝIJ˲ӷʴ˘ͻ֙ץŻŬɻˌʼֽ͖ҶɻŦʼʞݖɛĽƳ'-split'(..)'-ne''|%{(-join($_[0,1]|%{[convert]::ToString(+$_,2)})).PadLeft(21,'0')-replace'(.)','$1 '}".encode('utf-16be'))
/// , 237 octets
Essayez-le en ligne!
la source
Python 3,
147144 octetsTestez-le chez ideone
Initialise
i
to0
dans la déclaration de fonction, puis répète cette opération 23 fois:crée la chaîne binaire complète sans espaces (voir ci-dessous);
tranches une ligne de l'intérieur à l'aide
[i:i+21]
;insère les espaces avec
' '.join(...)
;des impressions; et
incrémente
i
de 21 aveci+=21
Pour faire toute la chaîne binaire:
il se répète
"ilOveyOu"
huit fois;remplace
O
paro
si nécessaire (aux index[2,14,18,34,38,46]
);- - - ceci est réalisé
chr(j+30)in' ,0@DL'
en économisant 3 octets,convertit chaque caractère en son caractère ordinal;
jette chaque ordinal en chaîne binaire (
'0bxxxxxxx'
);supprime le début
'0b'
de chaque utilisation[2:]
;préfixe chacun avec un
'0'
; etrejoint le tout avec
''.join(...)
la source
i=0\nexec(...)
oui=0;exec(...)
pour 137 octets.exec("...")
pourexec"..."
etprint(...)
àprint...
PHP + HTML + CSS, 173 octets de couleur 367 octets
CLI seulement PHP 173 Octets
se conformer au type de contenu Bounty Spec text / html
b{all:unset;color:red}
au lieu deb{all:unset;color:#911;background:red}
dans la première versionPHP + HTML + CSS, 392 octets
coeur rouge + noir qui a l'air plus joli
Peut-être appeler le numéro de couleur dans la partie CSS
ajoutez ceci avant qu'il ne soit plus joli
Sortie première version c'est le code HTML le plus moche de ma vie
coeur rouge-noir
375 octets pour créer directement la page HTML avec PHP
la source
color:#911;background:red
par lecolor:red;
rend conforme à la spécification de prime, tout en économisant quelques octets.Powershell, 110 octets
Explication:
La première ligne du script prend les sous-chaînes et insère une lettre
O
entre elles. Le résultat est la chaîneuiloveyOuilOveyouiloveyOuilOveyOuiloveyouilOveyouilOveyOuilOvey
. Notez que les premier et dernier caractères sont redondants.La boucle génère tous les
(8..490)
bits nécessaires à partir des caractères de la chaîne, ainsi qu'un espace ou un saut de ligne.L'énigme du destinataire de la lettre de la Saint-Valentin
On peut voir que les petits et les grands symboles constituent
O
eux-mêmes le codage de bits. Il y a 15 symboles (bits). Il n'y a qu'une partition sur les bits pour obtenir des caractères ASCII:oOOooOOO
+ooOoOOO[o]
. Nous avons dû ajouter un petito
au lieu de0
à la fin. Ces symboles ASCII sont:g.
Qui est ce mystérieux
g.
?la source
PHP, 121 octets
panne
la source
q / kdb +,
10793855553 octetsSolution:
Exemple:
Explication:
Remarques:
la source
Python 3, 199 octets:
la source
Python 3, 170 octets
fait une répétition de chaîne de "Il% svey% su", le répète le nombre de fois requis, puis utilise un tuple pour remplacer tous les o. Il le convertit ensuite en binaire, utilise le module textwrap, convertit chaque élément du nouveau list to list, se joint à un espace, puis ajoute 0 1 1 car cela semble être un bout ou quelque chose
la source
Mathematica, 123 octets (275 avec couleur)
Je ne sais pas si utiliser
Grid
au lieu de sortir une chaîne est correct (sinon, il s'agit d'une entrée non concurrente).B / W
Couleur
la source
grid
en texte brut et de le coller dans le bloc-notes? À quoi cela ressemble-t-il? Espace séparé (espace simple) avec des nouvelles lignes, comme le montre la figure?Ruby 142 octets
(Un peu plus) lisiblement:
Je n'ai pas encore trouvé le moyen de condenser le texte original dans une forme plus succincte en Ruby. Il comporte d'excellentes fonctions de manipulation de chaîne, mais toutes les méthodes que j'ai essayées utilisent plus de caractères que la chaîne elle-même. Tous les indicateurs appréciés, ceci est mon premier Code Golf sur StackOverflow!
la source
a
), puis de fairea+a+a
...? Mieux encore, si Ruby supporte la multiplication de chaînesa*count
,!a+a+a
soit la voie.)o
par une majusculeO
!Rouille, 195 octets
Ungolfed:
la source
C (gcc) , 102 octets
Fatigué
Essayez-le en ligne!
la source
K (oK) ,
5048 octetsSolution:
Essayez-le en ligne!
Explication:
Port de ma solution Q / KDB + .
Remarques:
la source
2 14 18 34 38 46
->0x020e1222262e
Pyth, 47 octets
Essayez-le en ligne ici .
la source
/// , 220 octets
Essayez-le en ligne!
la source
C ++ 11, non en concurrence,
726687636 octets (* NIX ou W10 seuil 2 requis)Je sais que cela peut être mieux joué au golf. Je veux voir une courte réponse c ++ damnit!
J'ai aussi probablement fait quelques erreurs en encodant la section cardiaque.
Sortie (couleurs fixes):
la source
Python, 473 octets
Coloré!
la source
str.translate
pourrait être un meilleur choixFEU , 360 octets
Juste une compression stupide
la source