Pola Sniping Perdana Nerd

16

Hari terpanjang dalam setahun - ada sesuatu yang membuang waktu ekstra ...


Gambaran

Perhatikan ini bukan kontes popularitas dan bukan tantangan output grafis - Anda hanya diminta untuk menghasilkan string 65.536 angka nol dan satu. Cuplikan Stack di bagian bawah pertanyaan akan menampilkan ini sebagai 256 oleh 256 gambar hitam dan putih dan menghitung skor resmi Anda. Anda kemudian dapat menyimpan gambar dan mengunggahnya ke jawaban Anda di samping kode Anda (karena output string tidak sesuai dengan jawaban Stack Exchange 30.000 karakter).


Mencetak gol

Skor dari suatu gambar adalah jumlah dari skor masing-masing pikselnya. Skor dari masing-masing piksel adalah jumlah dari subskala untuk masing-masing piksel yang tidak ortogonal , jarak utama yang memiliki warna berlawanan dengan piksel yang sedang dicetak. Subscore untuk setiap piksel tersebut adalah di 1/pmana pjarak prima.

Dalam konteks pertanyaan ini, istilah-istilah tersebut memiliki definisi berikut:

  • Non-ortogonal: Sebuah piksel adalah non-ortogonal dengan piksel yang dicetak jika tidak berada di baris yang sama dan tidak di kolom yang sama.

  • Prime prime: Sebuah pixel berada pada jarak prime dari pixel yang dicetak jika mereka dipisahkan oleh jarak Euclidean yang persis merupakan bilangan prima. Secara khusus, jarak adalah jarak minimum yang diukur secara toroidal - piksel kiri atas adalah jarak darisqrt(2)piksel kanan bawah (semua 4 tepi bungkus).

  • Warna berlawanan: Sebuah piksel memiliki warna yang berlawanan dengan piksel yang dinilai jika nilainya menjumlahkan ke 1. Artinya, yang pertama adalah 0 dan yang kedua adalah 1, atau yang pertama adalah 1 dan yang kedua adalah 0 dan yang kedua adalah 0.

Cuplikan Stack menyertakan contoh kode yang menunjukkan cara menilai suatu gambar, tetapi tidak menyertakan optimisasi atau pendekatan yang efisien, hanya kode yang benar sehingga penilaian gambar akhir dapat dilakukan secara konsisten.

Jika ada sesuatu dalam kode yang tidak benar, harap beri tahu saya baik di komentar atau dalam obrolan .

JavaScript mungkin bukan bahasa terbaik untuk menjawab tantangan khusus ini. Perhatikan bahwa kode Snippet sengaja tidak memberikan petunjuk tentang pendekatan yang lebih cepat. Hanya akan ada efisiensi yang diperkenalkan yang telah ditunjukkan dalam jawaban yang ada.


Visualisasi

Pixel skor

Untuk nuansa intuitif untuk distribusi piksel penilaian, di sini (warna ungu) adalah piksel jarak prime non-ortogonal untuk piksel (128, 128) dari gambar 256 kali 256:

gambar distribusi jarak prime non-orthogonal


Gambar acak

Ini adalah gambar yang dihasilkan secara acak dari contoh jawaban Python 3. Ini memiliki skor 138.267,64 dan memberi Anda sesuatu untuk dikalahkan.

gambar yang dihasilkan secara acak


Memasukkan

Kode tidak memerlukan input.

Keluaran

Kode harus menampilkan string 65.536 nol dan satu, yang mewakili piksel hitam dan putih 256 dengan 256 gambar. Digit harus berupa string kontinu, tanpa pemisah. Anda mungkin lebih mudah menyalin dan menempel jika Anda menghasilkan file, tetapi ini terserah Anda.

Kode Anda juga dapat menampilkan informasi lain yang menurut Anda berguna, asalkan string dapat disalin dan ditempelkan ke dalam Stack Snippet. Misalnya, Anda mungkin ingin menampilkan string terbaik ke file dan skor terbaik ke STDOUT secara berkala, memungkinkan pengguna untuk memilih kapan harus menghentikan pencarian.


Cuplikan Stack

Seperti yang ditunjukkan oleh Sp3000 , cuplikan itu memakan waktu 10 menit untuk menghitung skor, yang agak terlalu lambat, bahkan untuk implementasi referensi yang sengaja tidak efisien. Saya telah mengedit perbaikan yang disarankan Sp3000 untuk mengkomputasi piksel offset untuk penilaian, dan sekarang perlu beberapa detik untuk menghitung skor.


Jika Anda menggunakan output atau kode jawaban lain sebagai titik awal untuk kode Anda sendiri, harap ingat untuk memberi kredit dan menautkan ke jawaban pendukung. Jawaban untuk pertanyaan ini tidak perlu dikreditkan contoh jawaban atau kode dalam pertanyaan.

Penghargaan untuk Randall Munroe untuk istilah Nerd Sniping

trichoplax
sumber

Jawaban:

36

CJam, skor 276496.9062958626

2,128*_(]128*

Ternyata menjadi optimal, karena: Tidak ada pasangan non-ortogonal dengan jarak 2. Jadi jaraknya harus ganjil, dan begitu juga jarak kuadrat. Sebagai p 2 = x 2 + y 2 , salah satu dari x dan y (kuadrat atau tidak) harus ganjil, dan yang lainnya harus genap. Titik-titik itu selalu dalam warna yang berlawanan dalam gambar ini.

Ini dan negatifnya juga satu-satunya solusi optimal. Dalam solusi optimal, tidak ada piksel jarak prima non-ortogonal yang harus memiliki warna yang sama. Ada piksel berlawanan yang berdekatan secara diagonal seperti (3,4) dan (4,3). Dengan mengisi piksel kebalikan dari warna yang berlawanan, dll, kita bisa mendapatkan diagonal dengan warna yang sama. Mulai dari setiap piksel di diagonal, kita bisa mendapatkan semua anti-diagonal diisi dengan cara yang sama. Perhatikan bahwa mereka membungkus. Namun tetap optimal jika tidak.

jimmy23013
sumber
3
Saya berharap akan lebih lama bagi orang untuk memperhatikan bahwa ...
trichoplax
1
Butuh waktu lama bagi saya untuk mengetahui bahwa ada solusi optimal ketika menulis pertanyaan ini, jadi saya pikir itu akan layak untuk dikirim sebagai tantangan. Bagaimana Anda melihatnya begitu cepat? Apakah sudah jelas atau apakah Anda memiliki proses pemikiran tertentu?
trichoplax
4
PS Saya tidak tahu jam berapa Anda melihat pertanyaan ini tetapi solusi optimal 71 menit setelah pertanyaan diposting layak mendapatkan hadiah - saya hanya harus menunggu 2 hari sebelum saya dapat menetapkannya ...
trichoplax
@trichoplax Dari gambar pertama Anda, sepertinya ada banyak titik di diagonal yang sama. Saya berpikir untuk menggunakan garis yang lebih luas di awal. Dan kemudian saya membuka Gimp untuk memverifikasi ide saya. Dan yang mengejutkan saya, saya mendapatkan gambar yang benar-benar hitam ketika saya mengisinya dengan pola ini.
jimmy23013
8
@trichoplax Mengingat bahwa Anda tahu ada solusi optimal, saya pikir Anda akan lebih baik merevisi pertanyaan untuk membuatnya kurang dapat dipecahkan. Meskipun jimmy23013 menemukannya dengan cepat, selalu masalah waktu sampai seseorang menemukannya, dan kemudian berakhir.
xnor
1

Python 3, skor 138267.64

Ini adalah jawaban minimal sebagai contoh dari apa yang diperlukan, dan sebagai sesuatu untuk dikalahkan ...

Itu termasuk

  • Nama bahasa
  • Skor dari Stack Snippet dalam pertanyaan.
  • Gambar disimpan dari Stack Snippet.
  • Kode yang digunakan untuk menghasilkan string 65.536 nol dan satu.

Keluaran

gambar yang dihasilkan secara acak

Kode

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)

Ini hanya sebuah contoh. Python mungkin tidak selalu menjadi bahasa terbaik untuk jawaban kompetitif untuk tantangan khusus ini.

trichoplax
sumber