Başbakan Nerd Sniping Desen


16

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/pyerdir 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 pikselsqrt(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:

dikey olmayan asal mesafe dağılımının görüntüsü


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.

rastgele oluşturulmuş resim


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.

Nerd Sniping terimi için Randall Munroe'ye kredi

Yanıtlar:


36

CJam, skor 276496.9062958626

2,128*_(]128*

Optimum olduğu ortaya çıkıyor, çünkü: Mesafe 2'ye sahip dik olmayan çiftler yok. Bu yüzden mesafe garip olmalı ve mesafe karesi de öyle. P 2 = x 2 + y 2 gibi , x ve y'den birinin (kare veya kare) tek, diğerinin çift olması gerekir. Bu noktalar bu görüntüde her zaman zıt renktedir.

Bu ve negatifi de en uygun çözümlerdir. Optimal bir çözümde, dikey olmayan hiçbir asal mesafe pikseli aynı renge sahip olmamalıdır. Çapraz olarak bitişik (3,4) ve (4,3) gibi karşıt pikseller vardır. Zıt renkteki karşıt renkteki pikselleri doldurarak, aynı renkte bir köşegen elde edebiliriz. Diyagonaldeki her pikselden başlayarak, tüm anti-diyagonalleri aynı şekilde doldurabiliriz. Onlar etrafında sarın unutmayın. Yine de yapmazlarsa, yine de optimaldir.


3
İnsanların bunu fark etmesinin daha uzun süreceğini umuyordum ...
trichoplax

1
Bu soruyu yazarken optimal bir çözüm olduğunu anlamak uzun zaman aldı, bu yüzden bir meydan okuma olarak göndermeye değer olacağını düşündüm. Nasıl bu kadar çabuk gördün? Sadece açık mıydı yoksa belirli bir düşünce süreciniz var mıydı?
trichoplax

4
PS Bu soruyu ne zaman gördüğünüzü bilmiyorum ama soru gönderildikten 71 dakika sonra en uygun çözüm bir ödül hak ediyor - sadece atamadan önce 2 gün beklemek zorundayım ...
trichoplax

@trichoplax İlk görüntünüzden, aynı diyagonalde birçok nokta var gibi görünüyordu. Başlangıçta daha geniş çizgiler kullanmayı düşünüyordum. Ve sonra fikrimi doğrulamak için Gimp'i açtım. Ve sürprizime göre, bu desenle doldurduğumda tamamen siyah bir görüntü elde ettim.
jimmy23013

8
@trichoplax Optimal bir çözüm olduğunu bildiğiniz göz önüne alındığında, daha az çözülebilir hale getirmek için soruyu gözden geçirmenin daha iyi olacağını düşünüyorum. Jimmy23013 hızlı bulsa da, birisi onu bulana kadar her zaman bir zaman meselesidir ve sonra biter.
xnor

1

Python 3, puan 138267.64

Bu, neyin gerekli olduğuna bir örnek olarak ve yenilecek bir şey olarak minimal bir cevaptır ...

O içerir

  • Dil adı.
  • Söz konusu Yığın Pasajından alınan puan.
  • Yığın Snippet'inden kaydedilen görüntü.
  • 65.536 sıfır ve bir dizeyi üretmek için kullanılan kod.

Çıktı

rastgele oluşturulmuş resim

kod

from random import random

output_string = ''
filename = '65536digits.txt'

for t in range(65536):
    digit = int(random() * 2)
    output_string += str(digit)

with open(filename, 'w') as output_file:
    output_file.write(output_string)

Bu sadece bir örnek. Python, bu özel zorluğa rekabetçi cevaplar için en iyi dil olmayabilir.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.