Yang ini mudah dijelaskan dan saya hampir tidak bisa percaya bahwa ini tidak pernah main golf sebelumnya:
Untuk gambar yang diberikan (format apa pun yang didukung oleh bahasa Anda), temukan warna-warna unik dan hasilkan daftar warna.
- Cetak kode warna dalam hex RGB, yaitu tanda pagar
#
diikuti oleh 2 digit untuk R, 2 digit untuk G dan 2 digit untuk B. (di#xxxxxx
mana x dapat 0-9, AF dan / atau af). - Kode hex harus diikuti oleh spasi
dan jumlah piksel desimal, kemudian baris baru (
\n
atau\r\n
). - Daftar harus disortir berdasarkan jumlah menurun (warna paling sering di bagian atas).
- Jika ada dasi (dua warna dengan jumlah yang sama), urutannya tidak penting.
- Gambar tidak akan mengandung transparansi, jadi nilai alfa apa pun tidak penting. Nilai alpha mungkin bukan bagian dari output.
- Ukuran gambar 4000x3000 harus didukung (yang penting untuk mengetik definisi)
Contoh gambar "10red 20blue 30black 40white":
Output yang diharapkan:
#FFFFFF 40
#000000 30
#0000FF 20
#FF0000 10
Salah satu output yang diharapkan (karena urutan warna yang sama dapat bervariasi):
#718DFF 19
#5571FF 15
#3855FF 11
#8DAAFF 11
#1C38FF 7
#AAAAFF 7
#8D8DFF 6
#AAC6FF 6
#C6C6FF 5
#C6E2FF 4
#001CFF 3
#E2E2FF 3
#FFFFFF 3
Contoh gambar "testImage", mohon disediakan oleh @Luis Mendo :
Output yang diharapkan:
#FFFFFF 18042
#000000 1754
#FF3300 204
Mirip dengan pertanyaan ini , tetapi hasilnya adalah teks, bukan gambar.
code-golf
image-processing
color
Thomas Weller
sumber
sumber
count descending
agak tidak jelas. Bagaimana kita mengatasinya?the most frequent colors at the top
?Jawaban:
Mathematica, 91 byte
Menggunakan metode yang sama sekali berbeda dari jawaban @ DavidC . Tidak seperti itu, ini dapat mendukung gambar dengan ukuran dan jumlah warna apa pun. Penjelasan:
sumber
Bash + coreutils, 54
Ini mengasumsikan input STDIN dari format .txt Imagemagick .
Ideone.
Jika format input di atas terlalu banyak, maka kita dapat menambahkan konversi Imagemagick dari format apa pun:
Bash + coreutils + Imagemagick, 71
Di sini, nama file gambar input dilewatkan sebagai parameter baris perintah.
sumber
,
awk
bagian:awk '$0=$2" "$1'
.JavaScript (ES6),
359355 byteDisimpan 4 byte berkat @Neil
Demo
Kasus pengujian lain yang saya unggah ke imgur untuk mendukung CORS:
Data warna spesifik pada kedua ini tampaknya telah sedikit berubah saat mengunggah karena suatu alasan tetapi masih mencetak jumlah kejadian yang sama untuk kedua kasus uji tersebut.
sumber
|
memiliki prioritas lebih rendah daripada<<
jadi jika Anda menggunakannya,+
maka Anda tidak akan membutuhkan begitu banyak()
.<!-- language: lang-js -->
dari snippet, secara efektif menonaktifkan JavaScript.u=>{document.write`<img src=${u} id=i><canvas id=e>`;c=e.getContext`2d`;i.onload=_=>{w=e.width=i.width;h=e.height=i.height;c.drawImage(i,0,0);d=c.getImageData(0,0,w,h).data;for(o={},i=0;i<d.length;i+=4)++o[s='#'+`00000${(d[i]<<16|d[i+1]<<8|d[i+2]).toString(16)} `.slice(-7)]?0:o[s]=1;Object.keys(o).sort((a,b)=>o[b]-o[a]).map(c=>console.log(c+o[c]))}}
Pyth , 29 byte
Cobalah online!
(Juru bahasa online tidak dapat membaca gambar, jadi saya menanggalkan bagian itu dan memasukkan hasil membaca gambar itu, yang merupakan daftar kembar tiga warna. Bagian yang bertanggung jawab untuk membaca gambar adalah
'
, satu titik tunggal.)Bukti fungsionalitas
'
satu titik tunggalsumber
s
sebelumnya'Q
, karena gambar direpresentasikan sebagai daftar daftar kembar tiga.V_SrS%L+\#*3"%02X"s'z8jd_N
Mathematica
10392 byteContoh
Penjelasan
DominantColors
biasanya mengembalikan daftar warna dan jumlah yang mewakili kelompok utama dalam gambar. Ketika jumlah warna yang diminta melebihi jumlah warna dalam gambar, warna piksel yang tepat dikembalikan. (Saya berasumsi bahwa kurang dari 10.000 warna akan ada di gambar input.){"#"<>IntegerString[255Round[List@@#],16,2],#2}
mengubah nilai warna dasar 10 dengan nilai heksadesimal.Catatan: hanya ada 5 warna pada gambar mandrill. (Saya dulu
ColorQuantize[<image>,5]
mengurangi jumlah warna dalam gambar mandrill standar.)sumber
PowerShell v2 +, 187 byte
Menggunakan kembali hampir semua kode dari jawaban saya di Dapatkan warna yang paling dominan . Jadi, mohon referensi untuk penjelasan lengkap.
Perubahan di sini adalah dalam pengindeksan
$b
di baris ketiga untuk mencocokkan persyaratan format output eksplisit, dan di baris terakhir kitasort
denganvalue
dalam-des
urutan cending, kemudian pipaFormat-Table
dengan-H
ideTableHeaders dan-A
utoSize sebagai parameter. Sangat jarang digunakanFT
sini di PPCG, karena output tersirat pada akhir eksekusi, tetapi di sini sangat berguna untuk memastikan kami mendapatkan hanya output bagian yang benar.Contohnya
Yang pertama adalah gambar uji "merah" dari tantangan Warna dominan, yang kedua adalah "kesaksian" dari tantangan ini.
sumber
Tcl / Tk , 134 byte
d
adalah untukdata
.Tcl / Tk , 232 byte
wish sort_pix.tcl QTE4O.png
wish sort_pix.tcl 5s1Ob.png
wish sort_pix.tcl z07VA.gif
sumber
Brain-Flak , 1110 byte
Cobalah online!
Ya itu petualangan. Ternyata, Brain-Flak tidak pandai memproses gambar. Siapa yang tahu?
Saya akan memulai dengan mencatat bahwa ini secara teknis tidak memenuhi format output ketat yang diminta. Jika Anda ingin itu diberlakukan, beri tahu saya dan saya akan mencoba menambahkan kode terjemahan. Untuk saat ini menampilkan angka desimal: masing-masing 4 angka mewakili warna dalam urutan RED GREEN BLUE COUNT.
Selanjutnya, masukan. Format input yang diizinkan lebih fleksibel sehingga saya menggunakan format yang paling mudah untuk Brain-Flak untuk menguraikan (yang dapat saya temukan): Netpbm P6. Sayangnya, Brain-Flak tidak dapat mengurai angka desimal dari format P3 karena semua gambar Netpbm dimulai dengan karakter
P
dan Brain-Flak tidak dapat menangani input desimal dari file yang mengandung karakter non-angka. Jadi P6 digunakan sebagai gantinya, karena P6 menyimpan informasi warna sebagai byte, yang diperlakukan sebagai angka dalam mode input ASCII. Masih ada tantangan karena informasi tajuk tidak disandikan bermanfaat, tapi untungnya saya tidak memerlukan informasi itu sehingga hanya dibuang. Program ini tidak sepenuhnya mematuhi standar Netpbm karena tidak mengizinkan baris baru dalam header, tetapi baris baru tidakdiperlukan oleh standar sehingga input adalah file Netpbm yang valid.Peringatan terakhir, versi pada TIO sebenarnya tidak dikonfigurasikan dengan benar untuk operasi "resmi" karena (setahu saya) saya tidak dapat menyediakan file sebagai input pada TIO, saya juga tidak bisa menyediakan byte yang sesuai dengan ASCII yang tidak dapat dicetak dalam input langsung. Untuk operasi resmi,
-a
bendera diperlukan untuk mengambil input sebagai byte mentah dan-f
untuk mengambil input dari file. Input sampel pada tautan TIO bukannya diterjemahkan secara manual dari contoh di halaman wiki Netpbm .Selain itu, saya ingin mengucapkan terima kasih kepada wiki Brain-Flak untuk memberikan potongan kode yang bermanfaat untuk bekerja. Secara khusus, implementasi Bubble-Sort di sini sangat penting untuk langkah terakhir begitu saya mendapatkan hitungan untuk setiap warna, karena saya tidak benar-benar tahu harus mulai dari mana. Butuh modifikasi berat, tetapi saya senang saya tidak harus memulai dari awal.
Ini adalah versi kode yang tidak diklik dan dikomentari. Brain-Flak agak terlalu bertele-tele untuk memasukkan penjelasan yang diformat dengan benar di pos ini, tetapi versi yang tidak diklik di TIO berisi semua yang akan saya sertakan dalam satu dengan format yang lebih baik daripada yang bisa saya kelola di sini, jadi jika Anda tertarik silakan ambil Lihat.
Mungkin ada golf yang belum dilakukan, jawaban Brain-Flak saya sebelumnya telah melalui banyak revisi, tetapi semoga pelajaran yang didapat di sana memberikan titik awal yang lebih baik.
sumber
Python 2, 186 byte
Cobalah online!
Penafian: Output yang disajikan adalah one-liners untuk keterbacaan. Keluaran kode dihasilkan dengan pemisahan ruang dan garis sesuai permintaan tantangan.
Output untuk 10red 20 biru 30 hitam 40 putih:
Ouput untuk gradien biru:
Output untuk gambar uji
Penjelasan:
sumber
Java (1.4+) ,
483428 bytesCobalah online!(Tidak bekerja online)Tidak Disatukan:
The
toString()
peta output seperti ini:Tolong jangan memposting 1,8 saran golf tertentu, kecuali itu berfungsi di Jawa yang lebih lama, saya tidak mau.
Contoh: Lambdas tidak berfungsi di lebih banyak versi Jawa daripada yang berfungsi.
sumber
import java.util.*;class M{public static void main(String[]a)throws Exception{java.awt.image.BufferedImage i=javax.imageio.ImageIO.read(new java.io.File(a[0]));Map m=new HashMap();String s;for(Integer x=0,y=0,c;y<i.getHeight();y++)for(x=0;x<i.getWidth();m.put(s=x.toHexString((c&0xff0000)>>16)+x.toHexString((c&0xff00)>>8)+x.toHexString(c&0xff),m.get(s)==null?1:(int)m.get(s)+1))c=i.getRGB(x++,y);System.out.print(m);}}
( 419 bytes )x.toHexInteger
lebih pintar daripada impor statis.SmileBASIC, 165 byte
Gambar diberikan sebagai array nilai warna ARGB 32 bit (nilai alfa dipangkas ketika nomor tersebut dikonversi ke string hex 6 digit)
sumber