Errate mein RGB: Guess My RGB
(susam.net)- Guess My RGB ist ein einfaches Farben-Ratespiel, bei dem man die RGB-Werte der Hintergrundfarbe direkt errät
- Nutzer bewegen die Slider oben, um die R-, G- und B-Werte anzupassen und eine Kombination zu finden, die der Hintergrundfarbe möglichst nahekommt
- Auf dem Bildschirm werden Hexadezimalzeichen von 0 bis 9 und von A bis F sowie die Labels R, G und B angezeigt
- Mit dem Button
New Gamekann ein neues Spiel gestartet werden - Punktestand, Art der Auflösung, Schwierigkeitsgrad und Implementierungsweise lassen sich anhand der bereitgestellten Zusammenfassung nicht feststellen
Bildschirm und Ziel
- Der Titel lautet Guess My RGB
- Ziel ist es, per Slider die RGB-Hintergrundfarbe zu erraten
- Auf dem Bildschirm werden die Zeichen von 0 bis 9 und von A bis F angezeigt
- Die Labels R, G und B werden ebenfalls angezeigt, sodass die einzelnen Farbkanäle unterschieden werden können
Bedienung
- Der Hinweistext lautet: „Move the sliders above to guess the background RGB colour.“
- Nutzer passen die R-, G- und B-Werte über die Slider oben an
- Mit dem Button
New Gamewird ein neues Spiel gestartet
1 Kommentare
Meinungen auf Hacker News
Ich frage mich, was die optimale Strategie wäre, wenn man die Farbe nicht sehen kann und erst nach dem Absenden nur die Punktzahl sieht.
Schon einfaches Hill Climbing ist ziemlich effizient: Man startet jeden Slider bei 0, verschiebt ihn nach rechts, bis die Punktzahl sinkt, und geht dann einen Schritt nach links zurück.
Im Schnitt dürften etwa 9 Versuche pro Slider nötig sein, also rund 27 Versuche pro Farbe.
An der Punktedifferenz beim Verschieben von 0 auf 1 kann man grob abschätzen, wie weit man nach rechts gehen sollte, aber wegen der Rundung bekommt man nicht die exakte Distanz.
Mit einer optimalen Strategie sollten im Mittel etwa 4 Versuche pro Slider reichen, also ungefähr 12 Versuche pro Farbe.
Wegen der Rundung des Ergebnisprozentsatzes können benachbarte Farben dieselbe Punktzahl haben, daher muss man mindestens zweimal iterieren.
Die Triangulation liefert zwei mögliche Antworten; wenn man zufällig eine davon wählt, dürfte man im Schnitt nach 4,5 Versuchen richtig liegen.
https://en.wikipedia.org/wiki/Golden-section_search
Im Bereich 0–F misst man 6 und 9 und grenzt je nach höherer Punktzahl auf 0–9 oder 6–F ein.
Wenn man danach bereits gemessene Werte wiederverwendet und den Bereich weiter verkleinert, kommt man im schlechtesten Fall auf 6 Versuche pro Slider, im Mittel auf etwa 5.
Wahrscheinlich lässt sich das noch weiter optimieren, aber ich habe es nur bis hierhin betrachtet.
Dabei wählt man Schätzungen so, dass die möglichen Farben möglichst gleichmäßig auf 100 Punkte-Buckets verteilt werden, also die Varianz minimiert wird.
Mehr als die Hälfte aller Farben lässt sich mit nur 2 Schätzungen identifizieren.
Wenn man den Code so ändert, dass die größte Bucket-Größe minimiert wird, wird der Durchschnitt etwas schlechter, aber man braucht in keinem Fall mehr als 4 Versuche.
Die Lösung kann man in die Browser-Konsole der Website einfügen und ausführen.
Wenn man Skalierung und Rundung kurz ignoriert, grenzen die Distanzen von der Zielfarbe zu drei beliebigen, nicht kollinearen Punkten die Kandidaten unabhängig von der Genauigkeit der einzelnen Achsen auf höchstens zwei ein.
Daher liegt die Trefferwahrscheinlichkeit bei der dritten Schätzung bei 50 % und bei der vierten ebenfalls bei 50 %.
Mit Skalierung kann man es immer noch als Schnittproblem von Kugeln betrachten, aber die Distanzfunktion ist nicht symmetrisch, sodass die Kugeln eine merkwürdige Form bekommen.
Wenn die erste Schätzung zum Beispiel eine Ecke des Würfels ist, hat man damit den am weitesten entfernten Punkt gewählt, sodass 1/8 des Raums dieselbe Punktzahl von 0 % hat.
Wenn man auch den Präzisionsverlust durch Rundung berücksichtigt, sollte man es eher als diskretes Problem betrachten und Tupel von Punkten suchen, die alle Farben unterscheiden können; nach ein paar Versuchen funktionierten die vier Punkte [11,7,4], [4,4,8], [11,8,11], [4,11,7].
Es könnte eine kleinere Menge geben, aber um per Brute Force zu prüfen, ob drei Punkte alles unterscheiden können, wären wohl ungefähr 2^48 Operationen nötig; es könnte auch besser werden, wenn man den zweiten Punkt abhängig vom ersten Ergebnis wählt.
Das ist mein Partytrick.
Wenn man mir eine Farbe beschreibt, kann ich den Hex-Farbcode nennen.
Wie man sich denken kann, bin ich auf Partys unglaublich beliebt.
Der erste Hinweis ist ein Wort, der zweite Hinweis sind zwei Wörter, und alle platzieren ihre Spielfigur dort, wo sie die Farbe vermuten.
Die Punkte werden nach Distanz vergeben, daher ist es leicht zu spielen.
https://boardgamegeek.com/boardgame/302520/hues-and-cues
Ich habe früher einen Artikel darüber gelesen, wie Netscape Wörter, die nicht in der offiziellen Liste der Farbnamen stehen, als Farben interpretiert hat: Nicht-hexadezimale Zeichen werden verworfen, die übrigen Zeichen werden gepaddet und in Chunks zerlegt, um RGB-Zahlen zu bilden.
So kann „dumptruck“ zu DC0 werden und wie Gelb aussehen.
Daraufhin habe ich sofort eine kleine App gebaut, die alle Wörter aus /usr/share/dict/words interpretiert und zusammen mit ihrer Lab-Farbdarstellung in eine sqlite-DB schreibt.
Sie zeigte die 100 dem gewünschten RGB-Wert nächsten Pseudo-Farbwörter als echte Farben an und sortierte sie nach Nähe; für ein spontan gebautes Abendprojekt war das ziemlich unterhaltsam.
Ein trübes Gelb, das an eine süß-saure Frucht aus Mittelamerika und dem Süden der USA erinnert.
Das stammt aus einer Farbbeschreibung.
Nach dem Absenden ändert sich die Hintergrundfarbe der Box, die das Übereinstimmungsergebnis anzeigt, zu der Farbe, die ich geschätzt habe.
Je nach gesuchter Farbe mag das offensichtlich sein, aber in meinem Fall war die Farbe ziemlich grau, sodass ich diesen wichtigen visuellen Hinweis erst nach ein paar Schätzungen bemerkt habe.
Unbeabsichtigt ist das eine großartige Werbung für wahrnehmungsbasierte Farbräume.
Sobald ich mich einigermaßen angenähert hatte, war es einfacher, die Farbe zu ignorieren und nur auf die Prozentänderung zu achten.
Ich frage mich, ob ein Spiel wie Guess My OKLCH anders wäre.
Es fühlt sich an, als gäbe es bei 95 % eine Obergrenze.
Auf der Seite ist es nicht verlinkt, aber für Interessierte gibt es hier das GitHub-Repository:
https://github.com/susam/myrgb
Ich hatte gerade erst Unterrichtsmaterial zu verschiedenen Farbformaten fertiggestellt, daher fand ich das witzig
Darin hatte ich erklärt, wie schwierig es ist, Farben über RGB-Werte auszuwählen, weil Menschen Farben nicht so denken
Dieses Spiel ist ein gutes Beispiel dafür
HSL ist viel intuitiver, und wenn man ein Gefühl für den Farbkreis hat, lässt sich eine Farbe sehr leicht über Sättigung und Helligkeit definieren
Ich lasse Studierende als Übung die Unterschiede der Farben ihrer Kleidung in HSL definieren
Wenn einem RGB schwer zu konzeptualisieren erscheint, sollte man auch einmal Lab ausprobieren
Ich habe die erste Farbe auf Anhieb getroffen, und jetzt habe ich Angst, dass es von hier an nur noch bergab gehen kann
Wo ist das Problem? Einfach in den Entwicklerwerkzeugen die Hintergrundfarbe nachsehen und auf 16 Stufen normalisieren, haha
Im Ernst: sehr gut gemacht, ein spaßiges und herausforderndes Spiel
Ich würde auch gern ein Spin-off Guess my HSL ausprobieren
https://bottosson.github.io/posts/oklab/
https://codepen.io/kaliedarik/full/YzvYadX
Die Idee ist wirklich großartig
Bei den ersten beiden Versuchen kam ich schnell auf 94 %, danach hing ich komplett fest
94 % sah wie ein lokales Optimum aus, und es fühlte sich so an, als würde kein Slider, um einen Schritt nach oben oder unten bewegt, die Lösung bringen
Kann jemand erklären, warum? Außerdem wäre es schön, wenn es eine Möglichkeit gäbe, aufzugeben und die richtige Antwort zu sehen
Auf dem Handy habe ich wegen meiner dicken Finger nicht gemerkt, dass ich den Slider nicht exakt um einen Schritt, sondern immer um zwei Schritte bewegt habe
Zuerst wird der maximal mögliche Fehler von der Zielfarbe berechnet, dann wird die euklidische Distanz zum tatsächlichen Tipp durch diese maximale Distanz geteilt und
Math.floor(100 * (1 - dist / maxDist))zurückgegebenDas ist sinnvoll, damit sich die Prozente in jeder Runde ähnlich anfühlen
Andernfalls würde ein mittleres Grau bei jeder Schätzung relativ hohe Punktzahlen bekommen
Um die Frage zu beantworten: Die beschriebene lokale-Optimum-Situation scheint mir nicht möglich zu sein
Ich bin kein Mathematiker, aber wenn man nur diese Funktion betrachtet, sollte es, solange es nicht die richtige Antwort ist, immer eine Richtung geben, in der man durch Bewegen eines Sliders eine höhere Punktzahl erzielt
Wahrscheinlich hast du diese Ein-Schritt-Bewegung übersehen, und je näher man der Antwort kommt, desto eher passiert das
Wenn du einen bewegst und es nicht die Lösung ist, musst du den ersten Slider wieder auf seine ursprüngliche Position zurücksetzen, bevor du einen anderen bewegst
Als ich es ausprobiert habe, stieg oder fiel die Übereinstimmung schon, wenn ich nur eine Zahl geändert habe