Formula Referensi-Mandiri Tupper (disalin dari Wikipedia)
Rumus referensial-sendiri Tupper adalah rumus yang didefinisikan oleh Jeff Tupper bahwa, ketika digambarkan dalam dua dimensi di lokasi yang sangat spesifik di pesawat, dapat "diprogram" untuk mereproduksi rumus itu sendiri secara visual. Ini digunakan dalam berbagai kursus matematika dan ilmu komputer sebagai latihan dalam membuat grafik.
Di mana fungsi lantai.
Biarkan k
menjadi nomor 543 digit berikut:
960939379918958884971672962127852754715004339660129306651505519271702802395266424689642842174350718121267153782770623355993237280874144307891325963941337723487857735749823926629715517173716995165232890538221612403238855866184013235585136048828693337902491454229288667081096184496091705183454067827731551705405381627380967602565625016981482083418783163849115590225610003652351370343874461848378737238198224849863465033159410054974700593138339226497249461751545728366702369745461014655997933798537483143786841806593422227898388722980000748404719
Jika salah satu grafik himpunan titik-titik (x, y)
di 0 <= x < 106
dan k <= y < k + 17
memuaskan ketimpangan yang diberikan di atas, grafik penampilan yang dihasilkan seperti ini (catatan bahwa sumbu di plot ini telah terbalik, jika gambar keluar terbalik):
Terus?
Yang menarik dari rumus ini adalah dapat digunakan untuk membuat grafik gambar 106x17 hitam putih yang mungkin. Sekarang, benar-benar mencari melalui pencarian akan sangat membosankan, jadi ada cara untuk mengetahui nilai k di mana gambar Anda muncul. Prosesnya cukup sederhana:
- Mulai dari piksel bawah kolom pertama gambar Anda.
- Jika pikselnya putih, angka 0 akan ditambahkan ke nilai-k. Jika berwarna hitam, tambahkan 1.
- Pindah ke atas kolom, ulangi langkah 2.
- Setelah di akhir kolom, pindah ke kolom berikutnya dan mulai dari bawah, mengikuti proses yang sama.
- Setelah setiap piksel dianalisis, konversikan string biner ini menjadi desimal, dan kalikan dengan 17 untuk mendapatkan nilai k.
Apa pekerjaan saya?
Tugas Anda adalah membuat program yang dapat mengambil gambar 106x17 apa pun, dan menampilkan nilai-k yang sesuai. Anda dapat membuat asumsi berikut:
- Semua gambar akan berukuran 106x17
- Semua gambar hanya akan mengandung piksel hitam (# 000000) atau putih (#FFFFFF), tidak ada di antaranya.
Ada beberapa aturan juga:
- Output hanyalah nilai-k. Itu harus di dasar yang tepat, tetapi bisa dalam format apa pun.
- Gambar harus dibaca dari PNG atau PPM.
- Tidak ada celah standar.
Gambar Uji
[ ] harus menghasilkan ~ 1,4946x10 542
[ ] harus menghasilkan ~ 7.2355x10 159
[ ] harus menghasilkan 2 1801 * 17
[ ] harus menghasilkan (2 1802 -1) * 17
Lihat Intisari ini untuk solusi yang tepat.
Ini adalah kode-golf , jadi paling tidak jumlah byte yang menang.
Tautan Bermanfaat
quine
suatu tempat.Jawaban:
CJam, 16
Dengan terima kasih banyak untuk Dennis. Cobalah online
Jika Anda mengalami masalah dengan url, ini adalah input yang saya uji:
Saya menggunakan format yang dihasilkan GIMP saat mengekspor sebagai ASCII pbm, dengan komentar dihapus.
Penjelasan:
sumber
l;l~\qN-/W%zs:~2b*
sebaiknya bekerja juga.Pyth - 21 byte
Mudah dilakukan dengan
i
konversi basis pyth . Mengambil input sebagaiPBM
nama file dan membaca menggunakan'
perintah. Saya harus menggunakan!M
untuk meniadakan kulit hitam dan putih. Segala sesuatu yang lain sudah jelas.Coba di sini online . (Web interpreter tidak dapat membaca file, jadi dimodifikasi dan mengambil file sebagai input).
sumber
Python 2:
133110 byteUpaya pertama dengan python menggunakan PIL:
Berkat komentator yang sangat membantu di bawah ini
sumber
from PIL import Image k=0 for a in range(1802):y=a%17;x=a/17;k=(0 if Image.open(input()).load()[x,16-y][0]else 1)+k*2 print k*17
a/17
dana%17
di lokasi yang sesuai, dan Anda dapat menyalahgunakan fakta bahwa 1 adalah benar dan 0 adalah palsu. Inilah hasil dari perubahan ini, Anda akan turun ke 111 byte :)input()
dipanggil pada setiap iterasi dari loop dengan modifikasi itu. Editing dengan tips lain, terima kasih.(...<1) --> 0**...
mungkin?C #, 199
Ini sangat menyenangkan! Tidak ada yang salah dengan memuat ulang bitmap 106 * 17 kali, kan? Saya melakukannya sebagai fungsi untuk menyimpan beberapa byte, tidak yakin apakah itu legal.
i
adalah nama file input.Juga, sebagai ekspresi tunggal, hanya karena itu adalah satu ekspresi, dengan yang
i
disediakan atau subtitle (167 byte)sumber
Mathematica 69 Bytes
Binarize @ dapat ditinggalkan jika gambar adalah format monokrom.
Fungsi ini akan mereproduksi gambar:
sumber