2 puan yazan GN⁺ 2024-04-01 | 1 yorum | WhatsApp'ta paylaş
  • 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 Game düğ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 Game düğmesiyle yeni bir oyun başlatır

1 yorum

 
GN⁺ 2024-04-01
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

    • Yoksul işi bir otomasyon denemesi yapılacaksa, RGB girişini 0’a sıfırlayıp her renk kanalını birer adım artırarak gönderen, puan artık yükselmediğinde de bir adım geri alan bir şey yazılabilir
      Sonuç yüzdesindeki yuvarlama nedeniyle bitişik renkler aynı puanı alabileceğinden en az iki kez tekrarlamak gerekir
    • Puanın 100 - Öklid uzaklığı olduğunu varsayarsak, üç rastgele tahminden sonra üçgenleme ile cevabı daraltmak mümkün
      Üçgenleme sonucunda iki olası cevap çıkacağı için ikisinden birini rastgele seçersek ortalama 4,5 denemede tutturabiliriz gibi
    • Puan sayısının kendi bilgisini yok sayıp yalnızca hangi taraftaki puanın daha yüksek olduğunu karşılaştırırsak, ikili arama değil üçlü arama ya da altın oran aramasıyla optimize edilebilir
      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
    • Toplam ortalama yaklaşık 3,27 denemede çözen bir yöntem mümkün
      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
    • Asıl hesaplama 3 boyutlu uzaydaki mesafe ve mümkün olan en uzun mesafeye göre ölçekleniyor
      Ö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

    • Bu konuyla ilgili bir masa oyunu da var
      İ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
    • Şimdi kelimeleri Netscape algoritmasının yorumladığı renkle yanıtlamak yeterli
      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
    • 1980’lerin sonlarında Sovyet kamerasıyla çekilmiş bir fotoğraf; parfüm ve oyuncak ayı, duvarda asılı halı, gençliğin hafifliğiyle tezat oluşturan koyu ahşap hissi
    • 1910 tarihli bir çocuk kitabındaki alacakaranlığı çağrıştıran, renklendirilmiş melankolik mor
    • Tamam, deneyelim
      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

    • Renk gerçekten çok yaklaştığında yüzde, algıyla tam örtüşmüyor gibi
      %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

    • HSL’in düşünmek için iyi bir renk uzayı olduğuna tamamen katılıyorum
      Öğ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

  • 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

    • Bende de bu sorun vardı
      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
    • Puan şu şekilde tanımlanıyor
      Ö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üyor
      Her 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
    • %94 ise yukarı ya da aşağı yalnızca bir kademe oynatman gerektiği anlamına gelir, yani 6 olasılık var
      Birini oynattığında çözülmediyse, diğerini oynatmadan önce ilk kaydırıcıyı eski konumuna döndürmelisin
    • Bunun mümkün olduğunu sanmıyorum
      Ben denediğimde tek bir sayıyı değiştirmek bile eşleşme oranını ya artırdı ya da düşürdü