Yılın en uzun günü - burada fazladan zaman harcayacak bir şey var ...
genel bakış
Bunun bir popülerlik yarışması olmadığını ve grafiksel bir çıktı mücadelesi olmadığını unutmayın - yalnızca 65,536 sıfır ve bir dizeden çıkmanız gerekir. Sorunun altındaki Yığın Snippet'i bunu 256 x 256 siyah beyaz resim olarak görüntüler ve resmi puanınızı hesaplar. Daha sonra görüntüyü kaydedebilir ve kodunuzla birlikte cevabınıza yükleyebilirsiniz (dize çıktısı 30.000 karakterlik Stack Exchange yanıtına sığmayacağından).
puanlama
Bir görüntünün puanı, bireysel piksellerinin puanlarının toplamıdır. Tek bir pikselin puanı , zıt renkte dik olmayan , asal mesafe piksellerinin her biri için alt puanların toplamıdır puanlanan piksele olan . Bu tür her piksel için alt puan , asal mesafenin olduğu 1/p
yerdir p
.
Bu soru bağlamında, terimlerin aşağıdaki tanımları vardır:
Sigara ortogonal: olmayan Bir piksel, aynı satırda değilse ve aynı sütunda değilse, puanlanan pikselle dikey değildir.
Asal mesafe: Bir piksel, tam olarak asal bir sayıolan Öklid mesafesiyle ayrılırsa, puanlanan pikselden asal mesafedir. Özellikle, mesafe toroidal olarak ölçülen minimum mesafedir - sol üst piksel
sqrt(2)
sağ alt pikselden (4 kenarın tümü sarılır)bir mesafedir.Karşı renk: Bir piksel, değerleri 1'e eşitlenirse puanlanan pikselin karşıt rengindedir. Yani, birincisi 0 ve ikincisi 1 veya ikincisi 1'dir ve ikincisi 0'dır.
Yığın Parçacığı, bir görüntünün nasıl puanlanacağını gösteren örnek kod içerir, ancak herhangi bir optimizasyon veya etkili bir yaklaşım içermez, sadece doğru kodu kodlayın, böylece son görüntülerin puanlanması tutarlı bir şekilde yapılabilir.
Koddaki herhangi bir şey doğru değilse, lütfen yorumlarda veya sohbette bana bildirin .
JavaScript, bu özel soruna cevap vermek için en iyi dil olmayabilir . Snippet kodunun daha hızlı yaklaşımlar hakkında kasıtlı olarak hiçbir ipucu vermediğini unutmayın. Sadece mevcut bir cevapta gösterilmiş olan verimlilikler getirilecektir.
görüntüleme
Puanlama pikselleri
Puanlama piksellerinin dağılımı için sezgisel bir his için, burada (mor renkte) 256 x 256 görüntünün pikseli (128, 128) için dikey olmayan asal mesafe pikselleri şunlardır:
Rastgele bir görüntü
Bu, örnek Python 3 yanıtından rastgele oluşturulan görüntüdür. 138.267.64 puanı var ve size yenmek için bir şey verir.
Giriş
Kod giriş gerektirmez.
Çıktı
Kod, siyah beyaz bir 256 x 256 görüntünün piksellerini temsil eden 65.536 sıfır ve bir dizeden çıktı almalıdır. Basamaklar, ayırıcı olmadan sürekli bir dize olmalıdır. Bir dosyaya çıktı alırsanız kopyalama ve yapıştırma işlemlerini daha kolay bulabilirsiniz, ancak bu size bağlıdır.
Dizeniz Yığın Snippet'ine kopyalanıp yapıştırılabildiği sürece, kodunuz yararlı bulduğunuz diğer bilgileri de çıkarabilir. Örneğin, bir dosyaya henüz en iyi dizeyi çıktılamak ve düzenli aralıklarla en iyi henüz STDOUT'a puan vermek isteyebilirsiniz, böylece kullanıcı aramayı ne zaman durduracağını seçebilir.
Yığın Pasajı
Tarafından sivri dışarı olarak SP3000 , pasajı biraz bir skor hesaplamak için 10 dakika alıyordu çok bile kasten verimsiz referans uygulanması için, yavaş. Sp3000'in puanlama için piksel ofsetlerini önceden hesaplamada önerilen iyileştirmeyi düzenledim ve şimdi bir skorun hesaplanması birkaç saniye sürüyor.
Kendi kodunuzun başlangıç noktası olarak başka bir yanıtın çıktısını veya kodunu kullanırsanız, lütfen kredi vermeyi ve destekleyici yanıta bağlantı vermeyi unutmayın. Bu soruya verilen cevapların, örnek yanıtı veya sorudaki kodu kredilendirmesi gerekmez.