Ich denke, wir haben wahrscheinlich alle diesen xkcd-Comic gesehen :
:
Das könnte entweder zu allgemein oder zu schwierig sein, da bin ich mir nicht sicher. Die Herausforderung besteht jedoch darin, ein Programm in einer beliebigen Sprache zu erstellen, das ein Fenster mit mindestens zwei Farben erstellt und in englischen Wörtern anzeigt, wie viel Prozent des Bildschirms jeweils farbig sind.
Ex. Die einfachste Lösung wäre ein weißer Hintergrund mit schwarzen Buchstaben mit der Aufschrift "Prozentsatz dieses Bildes, das schwarz ist: [x]%. Prozentsatz dieses Bildes, das weiß ist: [y]%".
Sie können so verrückt oder so einfach werden, wie Sie möchten. Klartext ist eine gültige Lösung, aber wenn Sie interessante Bilder wie im xkcd-Comic erstellen, ist das sogar noch besser! Der Gewinner ist die unterhaltsamste und kreativste Lösung, die die meisten Stimmen erhält. Also mach etwas, das Spaß macht und der xkcd würdig ist! :)
Also was denkst du? Klingt nach einer lustigen Herausforderung? :)
Bitte fügen Sie Ihrer Antwort einen Screenshot Ihres laufenden Programms bei :)
quelle
"/.*/"
(Lesen: [der Quellcode] enthält keine neue Zeile)Antworten:
Ulme
Ich habe noch niemanden gesehen, der diese Lücke benutzt hat: Demo
quelle
view source
wird dort von share-elm.com gestellt und ist nicht Teil des kompilierten JS / HTML.JavaScript mit HTML
Ich habe versucht, den Original-Comic genauer zu reproduzieren. Ein Screenshot wird mit der html2canvas-Bibliothek erstellt. Die Zahlen werden wiederholt berechnet, sodass Sie die Größe des Fensters ändern oder der Seite in Echtzeit etwas hinzufügen können.
Versuchen Sie es online: http://copy.sh/xkcd-688.html
Hier ist ein Screenshot:
quelle
Verarbeitung, 222 Zeichen
Ich wollte schon immer meine eigene Version dieses Comics machen! Der einfachste (einzige?) Weg, wie ich mir das vorstellen konnte, war Versuch und Irrtum - etwas zeichnen, zählen, erneut zeichnen ...
Dieses Programm stellt sich nach einigen Sekunden auf einen genauen Prozentsatz ein. Es ist nicht sehr hübsch, aber interaktiv . Sie können die Größe des Fensters ändern und es wird neu berechnet.
Einige neue Zeilen zur besseren Lesbarkeit hinzugefügt:
Es wird nur der Prozentsatz der weißen Pixel angezeigt. Aufgrund des Antialiasing des Texts sind nicht weiße Pixel nicht unbedingt schwarz. Je länger es ausgeführt wird, desto mehr Zeit benötigt es, um sich bei einer Größenänderung selbst zu aktualisieren.
Bearbeiten:Es ist also eine Code-Herausforderung. Ich habe sowieso irgendwie Golf gespielt. Vielleicht könnte ich später eine Art Grafik hinzufügen, aber das allgemeine Prinzip würde das gleiche bleiben. Die Interaktivität ist der nette Teil, den ich denke.
quelle
background(-1)
anstelle vonbackground(255)
Große Herausforderung. Hier ist meine Lösung. Ich habe versucht, dem ursprünglichen Comic so nahe wie möglich zu kommen, ich habe sogar die xkcd-Schriftart verwendet .
Es ist eine WPF-Anwendung, aber ich
System.Drawing
habe die Zeichnungsteile gemacht, weil ich faul bin.Grundkonzept: In WPF sind Fenster
Visuals
, dh sie können gerendert werden. Ich rendere die gesamte Window-Instanz auf eine Bitmap, zähle das Schwarz und das gesamte Schwarz oder Weiß auf (ohne die Graustufen in der Schriftglättung und so weiter) und zähle diese auch für jedes Drittel des Bildes auf (für jedes Panel). Dann mache ich es nochmal auf einem Timer. Es erreicht das Gleichgewicht innerhalb von ein oder zwei Sekunden.Herunterladen:
MEGA Überprüfen Sie heruntergeladene Dateien immer auf Viren usw.
Sie müssen die oben genannte Schriftart auf Ihrem System installieren, wenn Sie sie sehen möchten. Andernfalls ist sie die Standard-WPF-Schriftart.
XAML:
Code:
Der Code ist nicht aufgeräumt, sollte aber etwas lesbar sein, sorry.
quelle
C (mit SDL und SDL_ttf): Graustufenlösung
Hier ist eine Lösung, die das Tortendiagramm nutzt, um das gesamte Spektrum der Graustufenpixelfarben zu erfassen, die sich auf knapp 100 Zeilen belaufen.
Wie bei meiner vorherigen Lösung muss der Pfad zur Schriftartdatei entweder in der Quelle fest codiert oder dem Build-Befehl hinzugefügt werden, z.
Die Ausgabe des Programms sieht folgendermaßen aus:
Es macht Spaß, diese zu sehen, denn die ganze Mathematik verlangsamt das Neuzeichnen, bis Sie sehen, dass das Programm in der stabilen Lösung Null ist. Die erste Schätzung ist verrückt (da die Oberfläche komplett schwarz ist) und schrumpft nach etwa einem Dutzend Iterationen auf die endgültige Größe.
Der Code berechnet die Grundgesamtheit für jede Pixelfarbe im aktuellen Bild. Wenn diese Bevölkerungszahl nicht mit der letzten übereinstimmt, wird das Bild neu gezeichnet. Der Code durchläuft jedes Pixel, wandelt jedoch die x- und y-Koordinaten in Polarkoordinaten um und berechnet zunächst den Radius (unter Verwendung der Bildmitte als Ursprung). Wenn der Radius innerhalb des Kreisdiagrammbereichs liegt, wird das Theta berechnet. Das Theta lässt sich leicht auf die Anzahl der Populationen skalieren, die die Pixelfarbe bestimmt. Befindet sich der Radius hingegen direkt am Rand des Kreisdiagramms, wird ein Anti-Alias-Wert berechnet, um den Kreis um die Außenseite des Diagramms zu zeichnen. Polarkoordinaten machen alles einfach!
quelle
float
Versionen der mathematischen Bibliotheksfunktionen, sollten es aber nichtfabs
seinfabsf
?fabs()
portabler.C (mit SDL und SDL_ttf)
Hier ist eine sehr einfache Implementierung in etwa 60 Zeilen C-Code:
Um dies zu kompilieren, müssen Sie definieren
FONTPATH
, dass auf eine .ttf-Datei der zu verwendenden Schriftart verwiesen wird:Auf den meisten modernen Linux-Rechnern können Sie das
fc-match
Dienstprogramm verwenden, um die Speicherorte der Schriftarten zu ermitteln. Der Kompilierungsbefehl lautet also:(Natürlich können Sie die gewünschte Schrift auch durch Ihre persönliche Lieblingsschrift ersetzen.)
Der Code fordert ausdrücklich kein Anti-Aliasing an, sodass das Fenster nur schwarze und weiße Pixel enthält.
Schließlich ließ ich mich von @ danieros eleganter Lösung für die Größenänderung von Fenstern inspirieren. Sie werden sehen, dass das Programm manchmal zwischen den Zählungen pendelt und sich in einer Umlaufbahn um einen Attraktor befindet, den es niemals erreichen kann. Wenn dies passiert, passen Sie die Größe des Fensters einfach ein wenig an, bis es stoppt.
Und je nach Anforderung sieht es so aus, wenn ich es auf meinem System ausführe:
Schließlich sollte ich darauf hinweisen, dass die MAA ein Interview mit Randall Munroe veröffentlicht hat, in dem er die Entstehung des Cartoons # 688 ausführlich bespricht , falls es hier noch niemand gesehen hat .
quelle
Das Bild ist 100x100 und die Zahlen sind genau, und ich meine genau - ich habe ein Bild mit 10000 Pixeln gewählt, damit die Prozentsätze mit zwei Dezimalstellen ausgedrückt werden können. Die Methode war ein bisschen Mathe, ein bisschen Vermutung und ein bisschen Zahlenkalkulation in Python.
Da ich im Voraus wusste, dass die Prozentsätze in vier Ziffern ausgedrückt werden können, zählte ich die Anzahl der schwarzen Pixel in jeder der Ziffern 0 bis 9 in einem 8 Pixel hohen Arial, in dem der Text geschrieben ist schnelle Funktion,
weight
die angibt, wie viele Pixel benötigt werden, um eine bestimmte Zahl zu schreiben, mit Nullen aufgefüllt, um 4 Ziffern zu erhalten:px
ist ein Array, das Ziffern auf die Anzahl der erforderlichen Pixel abbildet. Wenn B die Anzahl der schwarzen Pixel ist und W die Anzahl der weißen Pixel ist, haben wirB + W = 10000
und wir brauchen:Woher kommen die Konstanten? 423 ist die "anfängliche" Anzahl schwarzer Pixel, die Anzahl schwarzer Pixel im Text ohne die Zahlen. 9577 ist die Anzahl der anfänglichen weißen Pixel. Ich musste die Anzahl der anfänglichen schwarzen Pixel mehrmals anpassen, bevor ich Konstanten abrufen konnte, sodass das obige System sogar eine Lösung hat. Dies geschah durch Erraten und Kreuzen meiner Finger.
Das obige System ist furchtbar nichtlinear, so dass Sie offensichtlich vergessen können, es symbolisch zu lösen, aber Sie können einfach jeden Wert von B durchlaufen, W = 10000 - B einstellen und die Gleichungen explizit überprüfen.
quelle
QBasic
Weil Nostalgie.
Und weil ich keine Bildbibliotheken wirklich kenne, sind das moderne Sprachen.
Ziemlich unkomplizierte Methode zur Zählung von Ausgaben und Wiederholungen. Das wichtigste "Interessante" ist, dass das Programm zufällig verschiedene Präzisionen für die Prozentsätze versucht - ich habe festgestellt, dass es nicht immer anders konvergiert.
Und die Ausgabe (getestet auf QB64 ):
quelle
AWK
... mit netpbm und anderen helfern
Die 'x'-Datei:
Der Lauf:
Das Bild ist als 'x.pbm' geschrieben, ich habe es zum Hochladen in PNG konvertiert:
quelle