Tantangan:
Tulis sebuah program yang menghasilkan file grafik 1920 piksel lebar 1080 tinggi. Setiap 2.073.600 piksel dalam grafik harus berwarna unik dan tidak ada nilai warna yang harus diulang. Warna harus ditentukan dalam RGB dan mulai dari 0,0,0 dan dihitung ke atas secara berurutan menuju 255.255.255. Anda akan menemukan gambar 1920 x 1080 piksel hanya akan mengandung banyak warna hitam, biru dan hijau.
Misalnya, (versi pengurangan yang lebih kecil). Jika tinggi diatur ke 5 dan lebar diatur ke 5 grafik persegi 25 piksel akan menjadi output dan setiap piksel akan menjadi warna yang unik. Array warna RGB akan terlihat seperti ini:
Array (
[0] => Array
(
[0] => 0
[1] => 0
[2] => 0
)
[1] => Array
(
[0] => 0
[1] => 0
[2] => 1
)
[2] => Array
(
[0] => 0
[1] => 0
[2] => 2
)
[3] => Array
(
[0] => 0
[1] => 0
[2] => 3
)
[4] => Array
(
[0] => 0
[1] => 0
[2] => 4
)
[5] => Array
(
[0] => 0
[1] => 0
[2] => 5
)
[6] => Array
(
[0] => 0
[1] => 0
[2] => 6
)
[7] => Array
(
[0] => 0
[1] => 0
[2] => 7
)
[8] => Array
(
[0] => 0
[1] => 0
[2] => 8
)
[9] => Array
(
[0] => 0
[1] => 0
[2] => 9
)
[10] => Array
(
[0] => 0
[1] => 0
[2] => 10
)
[11] => Array
(
[0] => 0
[1] => 0
[2] => 11
)
[12] => Array
(
[0] => 0
[1] => 0
[2] => 12
)
[13] => Array
(
[0] => 0
[1] => 0
[2] => 13
)
[14] => Array
(
[0] => 0
[1] => 0
[2] => 14
)
[15] => Array
(
[0] => 0
[1] => 0
[2] => 15
)
[16] => Array
(
[0] => 0
[1] => 0
[2] => 16
)
[17] => Array
(
[0] => 0
[1] => 0
[2] => 17
)
[18] => Array
(
[0] => 0
[1] => 0
[2] => 18
)
[19] => Array
(
[0] => 0
[1] => 0
[2] => 19
)
[20] => Array
(
[0] => 0
[1] => 0
[2] => 20
)
[21] => Array
(
[0] => 0
[1] => 0
[2] => 21
)
[22] => Array
(
[0] => 0
[1] => 0
[2] => 22
)
[23] => Array
(
[0] => 0
[1] => 0
[2] => 23
)
[24] => Array
(
[0] => 0
[1] => 0
[2] => 24
)
)
Aturan:
Bahasa pemrograman apa pun dapat digunakan untuk menghasilkan gambar.
Jawaban dengan kemenangan terbanyak menang.
Warna hanya boleh digunakan satu kali.
Pixel pada posisi 0,0 harus dimulai dengan warna 0,0,0
Warna harus berada dalam kisaran warna 24 bit yang sebenarnya.
Gambar harus berukuran 1920 x 1080 piksel.
Warna harus dalam format RGB.
Menggunakan perpustakaan untuk menampilkan gambar tidak masalah.
Output harus dalam format file grafik misalnya output.png
Output sebagai teks yang mewakili nilai warna tidak masuk hitungan, kode harus menampilkan file grafik.
Ukuran file dari gambar output tidak masalah.
Anda harus dapat melihat output dengan membukanya sebagai grafik di browser web chrome.
Saya akan terkesan jika Anda melakukan ini dengan kode yang benar-benar singkat, program Anda juga mengeluarkan waktu dalam detik yang telah berlalu untuk menghasilkan gambar yang tertanam di dalam gambar itu sendiri yang dilapiskan pada piksel berurutan, program Anda menghasilkan gambar dalam waktu 10 detik. Saya akan sangat terkesan jika program Anda menampilkan gambar dalam 1 detik.
sumber
x==y==0
tampaknya agak sewenang-wenang. Bagaimanapun, itu ambigu karena koordinat ini dapat merujuk ke sudut kiri atas atau kiri bawah gambar.Jawaban:
Python - 660+ byte
Versi Tambahan
Ukuran Penuh: http://www.pictureshack.net/images/57626_all_colors.png (4,52MB)
Ini adalah gambar berdasarkan fraktal Julia Set . Setiap warna ditambahkan ke gambar secara bertahap, meskipun ada sejumlah besar pra-perhitungan.
Versi Luminosity
Ukuran penuh: http://www.pictureshack.net/images/95389_all_colors4.png (5.24MB)
Saya telah menambahkan opsi untuk beralih setiap warna dengan luminositas, bukan berdasarkan indeks. Ini tidak memenuhi syarat sebagai "menghitung" dari nol, tetapi ini tampaknya merupakan persyaratan yang lemah. Sangat menarik bahwa dua urutan ini memperlihatkan struktur yang sangat berbeda dalam gambar. Untuk menggunakan ini, atur
use_luminosity
bendera keTrue
.Sumber
Membutuhkan PIL .
Diperingatkan : ini akan membutuhkan beberapa menit untuk dieksekusi. Menggunakan PyPy with Pillow berjalan sekitar seperlima waktu CPython dengan PIL, jadi saya akan merekomendasikan itu, jika mungkin.
Sunting : diperbarui sehingga
#000000
ada di kiri atas, seperti yang ditentukan.Sunting : menambahkan bendera untuk beralih warna dengan luminositas.
Sunting : beralih ke perhitungan kompleks asli, dan bobot luminositas integer, yang sedikit lebih cepat.
Solusi yang saya kerjakan sebelum kriteria utama menjadi kontes popularitas
PHP - 161 byte
Ini akan menghasilkan output tercepat. Tidak ada perpustakaan yang digunakan, hanya header yang sudah dihitung sebelumnya, dan keluaran byte langsung. Berjalan kurang dari 2 detik di komputer saya. Dengan menambah dengan 256 daripada 1 , itu menghasilkan efek pseudo-gradient, tanpa perhitungan nyata diperlukan. Satu-satunya kejatuhan adalah bahwa ( 0, 0 ) tidak hitam, tetapi hasilnya terlihat jauh lebih baik.
ob_start();
danob_end_flush();
tidak sepenuhnya diperlukan, tetapi buffering output membuatnya berjalan jauh lebih cepat.Peningkatan menarik lainnya termasuk:
17: http://i.stack.imgur.com/ieyyZ.png
103: http://i.stack.imgur.com/WD2wa.png
326: http://i.stack.imgur.com/c4DSF. png
557: http://i.stack.imgur.com/eTTWE.png
943: http://i.stack.imgur.com/7rrmR.png
2125: http://i.stack.imgur.com/Ct1kM .png
Dan banyak lagi. Meskipun, sebagian besar pola yang terlihat seperti apa pun menyerupai garis-garis
PHP - 105 byte
Mengabaikan versi sembrono.
Content-type
tajuk yang rusak , Chrome akan melakukan yang terbaik untuk mengetahui apa yang dikirim. Dalam hal ini, itu benar mengidentifikasi sebagaiimage/bmp
. Versi terbaru FireFox dan IE juga dapat memperbaiki header yang rusak.BM
,,I5S2
danCS
akan menghasilkanNOTICE
kesalahan. Untuk mencegah kerusakan gambar, pelaporan kesalahan dalamphp.ini
perlu diatur untuk mencegah hal ini (misalnyaerror_reporting = E_ALL & ~E_NOTICE
).PHP-CLI - 83 byte
Jalankan langsung dari baris perintah dan disalurkan ke file (misalnya
$ php all-colors.php > out.bmp
), tidak adaContent-type
header yang diperlukan. File yang dihasilkan identik dengan versi 105 byte, dan dapat dilihat di Chrome.sumber
C dengan perpustakaan grafik GD (err, sekitar 2.5 KB?)
Aturan tidak melarang memodifikasi gambar yang ada. Saya membuat program untuk mengganti semua piksel gambar dengan nilai RGB berurutan dari
#000000
menjadi#1fa3ff
, dan saya cukup senang dengan hasilnya. Inilah yang dihasilkan dari foto yang diposting ke Flickr oleh Michael Carian ( cc-oleh-sa 2.0 ):(Gambar output mentah agak besar (5,6 MB) )
Berikut ini foto close-up sudut kiri atas (ditingkatkan 400%):
Waktu pemrosesan sekitar 3 detik untuk gambar dengan ukuran ini:
dan ya, semua pikselnya berwarna berbeda:
(
identify
adalah utilitas ImageMagick;-format %k
opsi menghitung jumlah warna unik dalam suatu gambar)Berikut kode sumbernya:
sumber
C ++, 750 byte
PNG resolusi penuh (5.1MB)
Kode menciptakan koleksi semua bilangan bulat dari 0-1080 * 1920, lalu mengurutkannya dengan kecerahan keseluruhan. Ini kemudian menciptakan set Mandelbrot, dan mengurutkan posisi berdasarkan iterasi dan nilai melarikan diri mereka. Kemudian ia berjalan melalui kedua set, menugaskan warna dalam urutan dari gelap ke cerah ke nilai Mandelbrot terkecil hingga terbesar. Akhirnya, ia menulis gambar BMP 32 bit per pixel ke nama file output yang ditentukan sebagai parameter baris perintah.
Kode tidak sepenuhnya golf, tetapi tidak akan menjadi terlalu kecil.
sumber
C - 854 byte (saat diperas)
Saya awalnya memiliki sesuatu dengan cyan, magenta, dan sudut kuning dan gradasi warna yang halus yang terlihat sangat bagus, tetapi tidak memenuhi spesifikasi.
Yang berikut ini memenuhi spesifikasi: menggunakan 2.073.600 warna "pertama", tanpa pengulangan, dan hitam di sudut kiri atas.
Cara kerjanya agak keren. Itu membangun sebuah array dengan warna, kemudian mengurutkan secara vertikal dan horizontal dengan kriteria yang berbeda beberapa kali. Hasil akhirnya adalah transisi yang menyenangkan antara biru & hijau dan antara gelap & terang. Dibutuhkan sekitar 1,5 detik untuk berjalan. Kompilasi menggunakan:
gcc -o many many.c -lm
dan jalankan menggunakan:./many > many.ppm
FYI, ini adalah gambar asli ...
Dan bagi mereka yang tertarik dengan kode yang digunakan untuk menghasilkan gambar ini:
sumber
./a.out | hexdump | head
menunjukkan7d ff de
berkali-kali diulang), (2) tidak menggunakan nilai RGB berurutan dari000000
melalui1dffff
, dan (3) piksel pada (x = 0, y = 0) bukan hitam. (Meskipun saya tidak bisa melihat titik (3) diri saya sendiri.)Ruby, 109
EDIT: Saya harus mencatat bahwa saya mengirimkan ini ketika pertanyaannya masih ditandai kode-golf , sebelum menjadi kontes popularitas jadi saya akan mencari kode pendek. Ini tidak terlalu imajinatif tapi saya percaya itu adalah pengiriman yang valid.
Nilai warna berkisar dari
00 00 00
hingga1f a3 ff
meningkat1
, sehingga kurangnyared
hasilnya tidak mengejutkan.Untuk biaya menambahkan 1 karakter ke panjang kode sumber (ganti
<<8
dengan<<11
), output berikut dapat diperoleh. Ini mencakup lebih banyak spektrum dengan biayablue
resolusi. Ini meningkat melalui ruang RGB pada tingkat delapan kali lipat. Nilai warna berkisar dari00 00 00
hinggafd 1f f8
.sumber
Raket
Tidak pernah menggunakan pemrograman berorientasi objek raket sebelumnya (message passing) jadi saya tidak yakin ini optimal, tetapi tampaknya menyelesaikan pekerjaan.
Dengan tidak menggunakan 3 bit pertama di saluran merah saya mendapatkan ketiga warna di gambar hasil saya.
Brainfuck
Kode mencetak gambar BMP 24bit ke STDOUT untuk penerjemah BF sel 8 bit. Ini menciptakan gambar yang sama dengan versi Racket. Ini didasarkan pada versi pnm.
Ubuntu dikirimkan dengan
bf
yang memiliki sel 8 bit:Versi lama yang melanggar bisa dibuka dari Chrome. Itu membuat file .pnm yang kompatibel dengan sebagian besar pemirsa gambar.
sumber
Diperbarui, versi pertama tidak memiliki semua warna unik dalam ruang 24-bit:
Mathematica: 110
Verifikasi aturan:
Pixel pertama berwarna hitam:
Semua warna unik:
Mathematica: 146Membutuhkan 14,778 detik.
Verifikasi aturan:
Pixel pertama berwarna hitam:
Semua warna unik:
sumber
Python - 104
Ini adalah versi, yang seharusnya untuk tantangan kode-golf. Karena hanya meningkatkan nilai dari 0 hingga 2073599, itu hanya berisi warna-warna unik.
Python - 110
Karena saya tidak suka versi di atas (colorrange tidak sepenuhnya digunakan), saya mencoba sesuatu seperti berikut:
Python - 122
Ekstensi lain ke atas:
sumber
i.show()
dapat digunakan untuk membuka gambar di penampil default. Tidak ada persyaratan ketat bahwa itu disimpan ke file..show()
tidak bekerja untuk saya. Tidak tahu kenapa. : PMemproses, 301
Ini bukan upaya solusi yang paling singkat, tetapi ini mempertahankan semua kontrol untuk mencapai pengaturan warna yang diinginkan. Ya, warnanya tidak berurutan, tapi itu tidak menyenangkan.
sumber
0,0
menjadi RGB0,0,0
. Saya melihat31,31,31
. Bahkan, seluruh kolom nol tampaknya berwarna itu.Visual Basic .NET, 273 byte
Ini menghasilkan file 5,61 MB:
Kode di atas adalah versi terkompresi dari kode yang lebih mudah dibaca ini. Spasi telah dihapus untuk menyimpan byte.
Tautan ke gambar: http: //µ.pw/k
sumber
ImageMagick - Konversi 119
Mari kita gunakan
convert
dari ImageMagick toolbox untuk membuat gambar. Ini berjalan dalam 0 detik. Ini golf hingga 119 karakter. Saya overlay dua gradien (merah-biru dan hitam-putih) mengubahnya menjadi HSL dan kembali ke RGB.Contoh overlay gradien dapat ditemukan di halaman manual ImageMagick .
sumber
identify -format %k o.png
. Saya mendapat 1762920, bukan 2073600PHP, 507
Anda mungkin perlu menambah jumlah memori yang dialokasikan untuk PHP agar dapat dijalankan. Menggunakan GD. Butuh waktu sekitar 9 detik untuk menghasilkan gambar.
Tautan ke gambar output: http://i.stack.imgur.com/AAKqW.png
Lihat itu berjalan di web: http://ben-paton.co.uk/portfolio/pixel.php?w=1920&h=1080
sumber
DELPHI / PASCAL (Versi # 1), 361 byte
sumber
Tcl / Tk, 149
150sumber
Jawa
411386 + 24 byteGolf
Tidak disatukan
Hasil
Penjelasan
Ini bukan upaya saya untuk solusi terpendek, melainkan yang paling portabel. Hanya tersisa impor untuk BufferedImage karena yang lain tidak menyimpan byte. Daripada memuat Gambar ke dalam JPanel dan menulis di atasnya, saya menghemat waktu mulai dari awal hingga menulis ke disk sebagai nama file. Bagi saya, ini mengambil menghasilkan nama file sekitar ~ 110 ms, sedangkan waktu dari awal hingga akhir biasanya memakan waktu ~ 500 ms. Terakhir, itu harus platform independen ketika saya diuji di Windows dan Ubuntu VM dan itu berhasil (Ini menulis file ke Desktop Anda). Harus memiliki pernyataan kembali karena sampah sintaks Callable. Meskipun saya sedang mengerjakan pekerjaan di sekitar, saya ragu saya akan menemukan implementasi yang lebih baik pada saya sendiri karena menghemat menggunakan l dan w untuk loop saya. Saya akan mengatakan setengah detik untuk java tidak terlalu buruk.
Tapi saya percaya itu masih divalidasi karena masih bisa dibuka oleh chrome, itu hanya secara otomatis terbuka ke png viewer default Anda (versi tidak diuji pada mesin berbasis Unix).
Saya menyadari kemungkinan penghematan byte tetapi sebagian besar telah menghilangkannya agar memenuhi syarat untuk bonus. Jika diminta, saya dapat mengunggah lebih pendek, contoh spesifik platform. Terima kasih.
Edit
Dihapus tidak perlu Coba Tangkap blok dan pernyataan kembali diformat buruk untuk mengurangi ~ 30 byte.
Dihapus
BufferedImage.TYPE_INT_RGB
karena secara harfiah hanya 1.sumber