Donc, je pense que nous avons tous probablement déjà vu cette bande dessinée xkcd :
:
Cela peut être trop général ou trop difficile, je ne suis pas sûr. Mais le défi est de créer un programme dans n’importe quelle langue qui crée une fenêtre d’au moins 2 couleurs et affichant en mots anglais quel pourcentage de l’écran correspond à chaque couleur.
ex. La solution la plus simple serait un fond blanc avec des lettres noires indiquant "Pourcentage de cette image qui est noir: [x]%. Pourcentage de cette image qui est blanc: [y]%"
Vous pouvez devenir aussi fou ou aussi simple que vous le souhaitez. Le texte brut est une solution valable, mais si vous créez des images intéressantes comme dans la bande dessinée xkcd, c'est encore mieux! Le gagnant sera la solution la plus amusante et créative qui obtiendra le plus de votes. Alors allez-y et faites quelque chose d'amusant et digne de xkcd! :)
Alors qu'est-ce que tu en penses? Cela ressemble à un défi amusant? :)
S'il vous plaît inclure une capture d'écran de votre programme en cours d'exécution dans votre réponse :)
la source
"/.*/"
(lire: [le code source] ne contient pas de nouvelle ligne)Réponses:
Orme
Je n'ai encore vu personne utiliser cette échappatoire: démo
la source
view source
est mis là par share-elm.com et ne fait pas partie du JS / HTML compilé.JavaScript avec HTML
J'ai essayé de reproduire la bande dessinée originale plus précisément. Une capture d'écran est réalisée à l'aide de la bibliothèque html2canvas. Les nombres étant calculés à plusieurs reprises, vous pouvez redimensionner la fenêtre ou même ajouter quelque chose à la page en temps réel.
Essayez-le en ligne: http://copy.sh/xkcd-688.html
Voici une capture d'écran:
la source
Traitement, 222 caractères
J'ai toujours voulu créer ma propre version de cette bande dessinée! La façon la plus simple (la seule?) Que je puisse faire était essais et erreurs - dessiner quelque chose, compter, compter encore ...
Ce programme établit un pourcentage précis après quelques secondes. Ce n'est pas très joli, mais c'est interactif ; vous pouvez redimensionner la fenêtre et celle-ci commencera à se recalculer.
Ajout de nouvelles lignes pour la lisibilité:
Il ne montre que le pourcentage de pixels blancs; En raison de l'anticrénelage du texte, les pixels non blancs ne sont pas nécessairement noirs. Plus il fonctionne longtemps, plus il aura besoin de temps pour se mettre à jour lors d'un redimensionnement.
Modifier:Donc, c'est un défi de code; Je l'ai en quelque sorte joué au golf. Je pourrais peut-être ajouter une sorte de graphique plus tard, mais le principe général resterait le même. L'interactivité est la partie la plus intéressante, je pense.
la source
background(-1)
background(255)
Grand défi. Voici ma solution. J'ai essayé de me rapprocher le plus possible de la bande dessinée originale, j'ai même utilisé la police xkcd .
C'est une application WPF, mais j'avais l'habitude
System.Drawing
de dessiner parce que je suis paresseux.Concept de base: Dans WPF, les fenêtres sont
Visuals
, ce qui signifie qu'elles peuvent être rendues. Je convertis toute l'occurrence de Window en bitmap, compte le noir et le total en noir et blanc (en ignorant les gris dans le lissage des polices), ainsi que chaque tiers de l'image (pour chaque panneau). Ensuite, je le fais à nouveau sur une minuterie. Il atteint l'équilibre en une seconde ou deux.Télécharger:
MEGA Vérifiez toujours que les fichiers que vous téléchargez ne contiennent pas de virus, etc.
Si vous souhaitez la voir, vous devez installer la police ci-dessus sur votre système. Sinon, il s'agit de la police WPF par défaut.
XAML:
Code:
Le code n'est pas nettoyé, mais il devrait être assez lisible, désolé.
la source
C (avec SDL et SDL_ttf): solution en niveaux de gris
Voici une solution qui tire parti du diagramme à secteurs pour capturer l’éventail complet des couleurs de pixels en niveaux de gris, avec un peu moins de 100 lignes.
Comme avec ma solution précédente, le chemin du fichier de police doit être codé en dur dans le source ou ajouté à la commande de construction, par exemple:
La sortie du programme ressemble à ceci:
Celui-ci est amusant à regarder, parce que toutes les maths ralentissent les redessins où vous pouvez voir le programme se focaliser sur la solution stable. La première estimation est complètement décalée (puisque la surface est entièrement noire), puis redescend à la taille finale après environ une douzaine d'itérations.
Le code fonctionne en prenant le nombre d'habitants de chaque couleur de pixel dans l'image en cours. Si cette population ne correspond pas à la dernière, elle redessine l'image. Le code itère sur chaque pixel, mais il transforme les coordonnées x, y en coordonnées polaires, en calculant d'abord le rayon (en utilisant le centre de l'image comme origine). Si le rayon se trouve dans la zone du graphique à secteurs, il calcule le thêta. Le thêta s’adapte facilement au nombre d’habitants, ce qui détermine la couleur des pixels. Par contre, si le rayon se trouve juste à la frontière du graphique à secteurs, une valeur anti-aliasée est calculée pour tracer le cercle autour de l'extérieur du graphique. Les coordonnées polaires rendent tout facile!
la source
float
versions des fonctions de la bibliothèque mathématique, mais cela ne devrait pasfabs
être le casfabsf
?fabs()
est plus portable.C (avec SDL et SDL_ttf)
Voici une implémentation très simple, en environ 60 lignes de code C:
Pour compiler cela, vous devez définir
FONTPATH
de pointer sur un fichier .ttf de la police à utiliser:Sur la plupart des machines Linux modernes, vous pouvez utiliser cet
fc-match
utilitaire pour rechercher les emplacements des polices. La commande de compilation devient:(Bien sûr, vous pouvez remplacer la police demandée par votre favori personnel.)
Le code ne demande spécifiquement aucun anti-aliasing, de sorte que la fenêtre ne contienne que des pixels en noir et blanc.
Enfin, @ daniero m'a inspiré la solution élégante permettant le redimensionnement de la fenêtre. Vous verrez que parfois le programme oscille entre les comptes, bloqué dans une orbite autour d'un attracteur qu'il ne peut jamais atteindre. Lorsque cela se produit, redimensionnez un peu la fenêtre jusqu'à ce qu'elle s'arrête.
Et, à la demande, voici à quoi cela ressemble quand je l’exécute sur mon système:
Enfin, j’estime que je devrais signaler, au cas où personne ici ne l’aurait déjà vu, que le MAA avait publié une interview de Randall Munroe dans laquelle il discutait en détail de la fabrication du dessin animé n ° 688.
la source
L'image est 100x100 et les chiffres sont exacts, et je veux dire exactement - j'ai choisi une image de 10000 pixels pour que les pourcentages puissent être exprimés avec deux décimales. La méthode consistait en un peu de maths, de devinettes et de calculs en Python.
Comme je savais d'avance que les pourcentages pouvaient être exprimés en 4 chiffres, j'ai compté le nombre de pixels noirs dans chacun des chiffres de 0 à 9, en Arial de 8 pixels de haut, dans lequel le texte est écrit. fonction rapide
weight
qui vous indique le nombre de pixels nécessaires pour écrire un nombre donné, complétée à gauche par des zéros de 4 chiffres:px
est un tableau mappant les chiffres sur le nombre de pixels requis. Si B est le nombre de pixels noirs et W le nombre de pixels blancs, nous avonsB + W = 10000
et nous avons besoin de:D'où viennent les constantes? 423 est le nombre "initial" de pixels noirs, le nombre de pixels noirs dans le texte sans les nombres. 9577 est le nombre de pixels blancs initiaux. J'ai dû ajuster la quantité de pixels noirs initiaux plusieurs fois avant de pouvoir obtenir des constantes telles que le système ci-dessus ait même une solution. Cela a été fait en devinant et en me croisant les doigts.
Le système ci-dessus est horriblement non linéaire, vous pouvez donc évidemment oublier de le résoudre symboliquement, mais vous pouvez simplement parcourir chaque valeur de B, définir W = 10000 - B et vérifier les équations de manière explicite.
la source
QBasic
Parce que la nostalgie
Et parce que je ne connais pas vraiment aucune bibliothèque d’images, c’est le langage moderne.
Méthode assez simple de sortie-comptage-répétition. La principale chose "intéressante" est que le programme essaie au hasard différentes précisions pour les pourcentages - j'ai constaté qu'il ne convergeait pas toujours autrement.
Et la sortie (testée sur QB64 ):
la source
AWK
... avec netpbm et d'autres aides
Le fichier 'x':
La course:
L'image est écrite en tant que 'x.pbm', je l'ai convertie en png pour le téléchargement:
la source