RGB’mi Tahmin Et: Guess My RGB
(susam.net)- Guess My RGB, ekrandaki arka plan renginin RGB değerlerini doğrudan tahmin etmeye dayanan basit bir renk tahmin oyunudur
- Kullanıcı, üstteki slider’ları hareket ettirerek R, G, B değerlerini ayarlar ve arka plan rengine en yakın kombinasyonu bulur
- Ekranda 0’dan 9’a ve A’dan F’ye kadar onaltılık karakterler ile birlikte R, G, B etiketleri gösterilir
New Gamedüğmesiyle yeni bir oyun başlatılabilir- Puanlama, doğru cevabın nasıl gösterildiği, zorluk seviyesi ve uygulama şekli, verilen özet bilgiden doğrulanamıyor
Ekran ve hedef
- Başlık Guess My RGB’dir
- Amaç, slider’ları ayarlayarak arka plan RGB rengini tahmin etmektir
- Ekranda 0’dan 9’a ve A’dan F’ye kadar karakterler gösterilir
- Her renk kanalını ayırt etmek için R, G, B etiketleri birlikte gösterilir
Kontrol şekli
- Yönerge metni “Move the sliders above to guess the background RGB colour.” şeklindedir
- Kullanıcı, üstteki slider’larla R, G, B değerlerini ayarlar
New Gamedüğmesiyle yeni bir oyun başlatır
1 yorum
Hacker News yorumları
Rengi göremeden, yalnızca gönderdikten sonra puanı görebiliyorsak en iyi stratejinin ne olacağını merak ediyorum
Basit bir tepe tırmanma (hill climbing) bile epey verimli: Her kaydırıcıyı 0’dan başlatıp puan düşene kadar sağa kaydırır, sonra bir adım sola dönersiniz
Ortalama olarak kaydırıcı başına 9, bir renk başına da yaklaşık 27 deneme gerekecek gibi
0’dan 1’e taşıdığınızda puan farkına bakarak sağa ne kadar gitmek gerektiğini kabaca tahmin edebilirsiniz, ama yuvarlama yüzünden tam uzunluk çıkmaz
En iyi stratejiyle ortalama kaydırıcı başına 4, yani bir renk için 12 deneme civarı yeterli olur gibi
Sonuç yüzdesindeki yuvarlama nedeniyle bitişik renkler aynı puanı alabileceğinden en az iki kez tekrarlamak gerekir
Üçgenleme sonucunda iki olası cevap çıkacağı için ikisinden birini rastgele seçersek ortalama 4,5 denemede tutturabiliriz gibi
https://en.wikipedia.org/wiki/Golden-section_search
0-F aralığında 6 ve 9’u ölçüp, hangisi daha yüksekse ona göre 0-9 ya da 6-F aralığına daraltılır
Sonrasında önceden ölçülen değerleri yeniden kullanarak aralığı küçültürseniz en kötü durumda kaydırıcı başına 6, ortalama yaklaşık 5 deneme olur
Daha da optimize edilebilir gibi ama şimdilik buraya kadar baktım
Olası renkleri 100 puan kovasına olabildiğince dengeli dağıtan tahmini seçme, yani varyansı en aza indirme yöntemi
Tüm renklerin yarısından fazlası yalnızca 2 tahminle tanımlanabiliyor
Kodu en büyük kova boyutunu en aza indirecek şekilde değiştirirseniz ortalama biraz kötüleşiyor ama hiçbir durumda 4’ü geçmiyor
Sitenin tarayıcı konsoluna yapıştırılıp çalıştırılabilen bir çözüm
Ölçeklemeyi ve yuvarlamayı bir an için yok sayarsak, hedef renkten birbirine doğrusal olmayan herhangi üç noktaya olan mesafeler, her eksenin hassasiyetinden bağımsız olarak adayları en fazla ikiye indirir
Bu yüzden üçüncü tahminde tutturma olasılığı %50, dördüncü tahminde tutturma olasılığı %50 olur
Ölçekleme işin içine girince yine kürelerin kesişimi problemi gibi görülebilir, ama mesafe fonksiyonu simetrik olmadığı için küreler tuhaf şekilli olur
Örneğin ilk tahmin küpün bir köşesiyse, en uzak nokta seçilmiş demektir; bu yüzden uzayın 1/8’i aynı %0 puanı alır
Yuvarlamadan kaynaklanan hassasiyet kaybını da hesaba katınca bunu ayrık bir problem olarak görüp tüm renkleri ayırt edebilen nokta demetlerini bulmak daha iyi; birkaç denemenin ardından [11,7,4], [4,4,8], [11,8,11], [4,11,7] şeklindeki dört nokta işe yaradı
Daha küçük bir küme de olabilir ama üç noktayla hepsinin ayırt edilip edilemeyeceğini kaba kuvvetle aramak yaklaşık 2^48 işlem gerektirir gibi; ilk sonuca göre ikinci noktayı seçmek daha da iyi olabilir
Bu benim parti numaram
Bir rengi tarif ederseniz onaltılık renk kodunu söyleyebilirim
Tahmin edeceğiniz gibi partilerde muazzam popülerim
İlk ipucu tek kelime, ikinci ipucu iki kelime oluyor ve herkes kendi renk tahmini konumuna piyonunu koyuyor
Mesafeye göre puan veren bir sistem olduğu için oynaması kolay
https://boardgamegeek.com/boardgame/302520/hues-and-cues
Eskiden Netscape’in resmi renk adları listesinde olmayan kelimeleri renge nasıl yorumladığını anlatan bir yazı okumuştum; onaltılık olmayan karakterleri atıp kalan karakterleri doldurarak ve parçalara ayırarak RGB sayıları oluşturuyordu
Bu yüzden “dumptruck” DC0 olup sarı gibi görünebiliyor
Bunu görünce hemen /usr/share/dict/words içindeki tüm kelimeleri yorumlayıp Lab renk temsilleriyle birlikte bir sqlite veritabanına koyan küçük bir uygulama yaptım
İstenen RGB’ye en yakın 100 sahte renk kelimesini gerçek renkleriyle gösterip yakınlık sırasına göre sıralıyordu; doğaçlama yapılmış bir akşam projesi olarak oldukça eğlenceliydi
Orta Amerika ve ABD’nin güneyinde yetişen tatlı-ekşi bir meyveyi çağrıştıran donuk sarı
Boya açıklamasından alınmış bir ifade
Gönderdikten sonra eşleşme oranı sonucunu gösteren kutunun arka plan rengi benim tahmin ettiğim renge dönüyor
Tutturulan renge bağlı olarak bu bariz görünebilir, ama benim durumumda renk epey griydi; bu önemli görsel ipucunu ancak birkaç tahminden sonra fark ettim
İstemeden de olsa algı temelli renk uzayları için harika bir reklam olmuş
Bir ölçüde yaklaşınca rengi yok sayıp yalnızca yüzde değişimine bakmak daha kolaydı
Guess My OKLCH gibi bir oyun olsa farklı olur mu merak ediyorum
%95’te tavana vuruyormuş hissi veriyor
Sayfada bağlantı verilmemiş ama ilgilenenler için GitHub deposu burada
https://github.com/susam/myrgb
Tam da çeşitli renk formatlarını öğreten ders materyallerini bitirmiştim; eğlenceli olmuş
Orada RGB değerleriyle renk seçmenin ne kadar zor olduğunu anlatmıştım, çünkü insanlar renkleri bu şekilde düşünmüyor
Bu oyun bunun iyi bir örneği
HSL çok daha sezgisel; renk çemberi hissiniz varsa rengi doygunluk ve parlaklık düzeyleriyle tanımlamak çok kolay
Öğrencilere giydikleri kıyafetlerin renk farklarını HSL ile tanımlatmaya yönelik bir alıştırma yaptırıyorum
RGB’yi kavramsallaştırmak zor geliyorsa Lab’i de bir deneyin
İlk rengi tek seferde bildim; artık buradan sonrası sadece düşüş olacak gibi geldiği için korkuyorum
Sorun ne ki? Geliştirici araçlarında arka plan rengini kontrol edip 16 adımlı ölçeğe normalize edersin, haha
Gerçekte ise iyi yapılmış; eğlenceli ve zorlayıcı bir oyun
Bir Guess my HSL spin-off’u da denemek isterim
https://bottosson.github.io/posts/oklab/
https://codepen.io/kaliedarik/full/YzvYadX
Fikir gerçekten harika
İlk iki denemede hızlıca %94’e çıktım, sonra tamamen takıldım
%94 bir yerel optimum gibi görünüyordu; herhangi bir kaydırıcıyı bir kademe yukarı ya da aşağı oynatmak çözmüyormuş gibi hissettirdi
Nedenini açıklayabilir misin? Bir de pes edip doğru cevabı görebilmenin bir yolu olsa iyi olurdu
Telefonda parmaklarım kalın olduğu için kaydırıcıyı tam olarak bir kademe oynatamadığımı, ikişer kademe oynattığımı fark etmemiştim
Önce hedef renkten olası maksimum hata hesaplanıyor; sonra gerçek tahminle olan Öklid mesafesi bu maksimum mesafeye bölünerek
Math.floor(100 * (1 - dist / maxDist))döndürülüyorHer turdaki yüzdelerin benzer hissettirmesi için yapılmış bir yöntem, bu yüzden makul
Aksi halde orta gri, neredeyse her tahminde görece yüksek puan alırdı
Soruna cevap olarak, bahsettiğin yerel optimum durumunun mümkün olmadığını düşünüyorum
Matematikçi değilim ama sadece bu fonksiyona bakınca, doğru cevap olmadığı sürece her zaman kaydırıcılardan birini oynatarak daha yüksek puan alınabilecek bir yön var gibi görünüyor
Muhtemelen o tek kademelik hareketi kaçırmışsındır; doğru cevaba yaklaştıkça bu daha sık oluyor
Birini oynattığında çözülmediyse, diğerini oynatmadan önce ilk kaydırıcıyı eski konumuna döndürmelisin
Ben denediğimde tek bir sayıyı değiştirmek bile eşleşme oranını ya artırdı ya da düşürdü