Menjadi penggemar berat kubus Rubik dan seni keren, saya telah berupaya menggabungkan keduanya untuk melakukan beberapa hal yang sangat keren. Pada dasarnya memecahkan kubus Rubik miniatur untuk membentuk piksel yang belum sempurna dalam pembentukan seni kubus Rubik. Contoh seni semacam itu dapat dilihat melalui tautan ini: http://google.com/search?q=rubik%27s+cube+art
Sekarang, tujuan dari Code Golf ini adalah untuk membuat kode yang menerima gambar sebagai input, dan kemudian mengubahnya dengan cara berikut:
Gambar awalnya direduksi menjadi warna abu-abu web-safe. Alasan di balik ini adalah karena kita perlu mengisolasi palet grayscale web-safe (yaitu 000000, 333333, 666666, 999999, CCCCCC, dan FFFFFF). Algoritme pada metode kolorimetri konversi menjadi grayscale tersedia di: http://en.wikipedia.org/wiki/Grayscale#Colorimetric_.28luminance-preserving.29_conversion_to_grayscale , jika Anda ingin menggunakannya sebagai inspirasi.
Satu kemudian akan membuat skala abu-abu ke warna yang sesuai. Untuk memecahnya dengan cepat: 000000 akan merujuk ke biru Rubik, 333333 akan merujuk ke merah Rubik, 666666 akan merujuk ke hijau Rubik, 999999 akan merujuk ke oranye Rubik, merujuk ke kuning Rubik, dan FFFFFF akan merujuk ke putih Rubik.
Saya lebih suka bahwa kode yang Anda hasilkan dapat membuat dari palet foto langsung ke warna Rubik. Metode dua tahap dari konversi ke skala abu-abu web-aman dan kemudian ke palet Rubik yang sesuai hanya untuk memberi Anda ide tentang logika di balik proses, tetapi jika lebih mudah bagi Anda untuk melakukan ini, dengan segala cara melakukannya.
Nilai RGB sebenarnya untuk palet Rubik harus sesuai dengan yang berikut:
- Merah: # C41E3A
- Hijau: # 009E60
- Biru: # 0051BA
- Oranye: # FF5800
- Kuning: # FFD500
- Putih: #FFFFFF
Sebagai contoh, saya telah memangkas kepala Abraham Lincoln dari gambar berikut:, dan memberikan algoritme untuk menghasilkan yang berikut:
Kotak ada di sana sehingga Anda dapat melihat bagaimana masing-masing miniatur Rubik's cube harus dikonfigurasi untuk membuat gambar. Ukuran sebenarnya dari gambar yang dihasilkan adalah 45 piksel kali 45 piksel, artinya (45/3) * (45/3) = 15 * 15 = 225 miniatur kubus Rubik akan digunakan untuk membuat gambar ini. Saya tidak mengharapkan Anda untuk menyajikan gambar yang dihasilkan dengan kisi seperti yang saya miliki.
Jadi ini yang dibutuhkan:
Gambar yang akan diproses oleh algoritma ini harus berukuran x piksel lebar x piksel tinggi, sehingga x dan y adalah kelipatan dari 3. Ini untuk membantu dengan kemudahan rendering sebagai bagian dari mosaik kubus Rubik. Jika gambar Anda cukup besar, kurangi menjadi sekitar 45 x 45 hingga 75 x 75 atau sekitar dimensi sebelum pemrosesan disarankan. Ingatlah, komponen ukuran ini adalah OPTIONAL.
Gambar perlu dikonversi ke palet kubus sextacolored Rubik untuk membuat mosaik.
Gambar yang dihasilkan harus berupa file grafik yang valid setelah diproses. Untuk membuktikan bahwa kode Anda berfungsi, jalankan dengan citra salah satu presiden Amerika Serikat, atau selebritas Hollywood yang terkenal. Saya sudah menggunakan Abraham Lincoln dalam contoh saya, jadi presiden ini tidak bisa lagi digunakan. Pastikan Anda memberikan bahasa yang telah Anda gunakan, jumlah byte serta presiden / selebriti yang digunakan untuk menguji kode Anda, termasuk sebelum dan sesudah pemotretan ...
Setiap entri harus memiliki presiden / selebriti yang unik sebagai ujian mereka. Saya tidak akan menerima duplikat. Ini akan memastikan bahwa hasil duplikat tidak digunakan untuk menguji entri kode yang berbeda. Sangat baik untuk mengatakan bahwa kode Anda berfungsi, itu hal lain untuk membuktikannya.
5. Kode terpendek menang.
Saya mengubah ini menjadi kontes popularitas ... Saya lebih suka melihat siapa yang bisa melakukan ini tanpa harus bersaing dalam jumlah byte ... Jadi saya akan menghadiahkan ini bersama dengan hadiah setelah 28 Februari 2014.
sumber
#000000 => #0051BA
, dll.Jawaban:
Imagemagick (108)
Versi: ImageMagick 6.8.7-7 Q16 x86_64 2013-11-27
Panggilan berikut:
di mana
input
danoutput
harus dimodifikasi untuk nama file input dan output.Saya hanya menghitung karakter antara
-resize
dan#FFF"
, jika Anda pikir ini tidak valid, jangan ragu untuk berkomentar.Saya menggunakan Lenna sebagai gambar (dia muncul di Playboy, dan siapa pun yang melakukan itu harus dianggap sebagai selebritas Hollywood, bukan?)
Memasukkan:
Keluaran:
Output diperbesar:
Catatan: menurut dokumen imagemagick Anda tidak dapat memiliki lebih dari satu operator kondisional dalam pernyataan, tetapi panggilan tersebut tampaknya masih berfungsi dengan baik, jadi mungkin ini sudah diperbaiki dan dokumen tidak diperbarui.
Running identify pada gambar hasil (untuk menunjukkan warna memang baik-baik saja):
Jika Anda berpikir Lenna tidak dianggap sebagai selebritas yang pantas, inilah Bruce Willis:
sumber
fx
bagian dapat dikompresi lebih jauh dalam bahasa yang memiliki ekspresifitas yang lebih baik. Dan bahasa-bahasa itu juga memiliki dukungan gambar asli (jadi tidak ada karakter yang hilang karena harus mengimpor imagemagick / gd / etc.)Mathematica
Kami akan bekerja dengan wilayah persegi dari perangko AS yang menampilkan Greta Garbo. Ini akan disebut sebagai
j
.Fungsi f mengambil 3 parameter:
i
yang mengacu pada gambarrs
, ukuran rasterm
, variabel boolean yang menyatakan apakah garis Mesh harus digunakan. (Pengaturan standar adalah Benar).Menggunakan ukuran raster 15, 30, 45, dan 75:
Saya tidak bisa membayangkan ada orang yang membuat kubus Rubrik dengan begitu banyak potongan! Meskipun demikian, latihan yang menarik.
Bermain-main dengan warna
Ini dari entri sebelumnya. Kode ini sedikit berbeda.
Graphics
digunakan sebagai gantiArrayPlot
. Kami juga menggunakan stempel lengkap meskipun tidak persegi.Ada 6! = 720 permutasi dari warna kubus Rubrik.
Berikut ini menampilkan gambar tengah dari baris atas (atur 6 gambar di bawah). Ketika nilai skala abu-abu disusun dari yang paling gelap ke paling terang, warnanya adalah {r, gr, b, o, y, w}. Variasi lain tetap bekerja.
i
adalah gambar asli dalam skala abu-abu.i
adalah gambar grayscale asli dari cap Greta Garbo lengkap.Rasterize[garbo,RasterSize->75
meraster gambar menjadi array 75 dengan 75.ColorQuantize[<>, 6]
mengurangi nilai skala abu-abu ke set 6.ImageData
mengambil larik data dari gambar; itu terbalik.Reverse
membalik array data, maka gambar, sisi kanan atas.garboColors
adalah 6 nilai skala abu-abu dalam gambar terkuantisasi.Graphics[Raster
menampilkan gambar akhir.rubrikColors
adalah nilai RGB dari 6 warna Rubrik cube.Berbagai permutasi warna Merah, Hijau, Biru, Oranye, Kuning, dan Putih diberikan.
Dan kodenya:
Garbos Galore
Berikut adalah 72 (dari 720) gambar Greta Garbo yang menggunakan 6 warna Rubrik cube. Beberapa gambar bekerja lebih baik daripada yang lain, bukan begitu?
sumber
Reverse
bisa dihilangkan, membiarkan gambarnya terbalik, tapi saya tidak melihat peluang lain. Mathematica ekspresif tetapi menggunakan kata-kata besar. Seseorang yang mahir dalam gambar mungkin bisa mengurangi ukuran kode sedikit tapi saya ragu mereka bisa mengalahkan kode imagemagick Anda.i
tahan gambar aslinya.gr
singkatan dari Rubrik's green.g
mengacu pada data gambar raster dan terkuantisasi untuk gambar skala abu-abu.Smalltalk (Smalltalk / X),
289139 *masukan: i; output: r
memasukkan:
keluaran:
diperbesar:
(untuk semua anak muda: ini BUKAN Madonna ;-)
[*] Saya belum menghitung perbesaran hingga 75x75 (baris pertama) - bisa menggunakan yang sudah diubah ukurannya sebagai input. Semoga tidak apa-apa dengan Anda.
sumber
Catatan tambahan, dan warna Rubik yang BENAR! ;-)
Nah, solusi ini sedikit di luar topik di sini, karena terbatas pada bidang yang sangat khusus. Tetapi setelah banyak frustrasi dengan misalnya "pertanyaan nomor aneh" (karena tidak dapat menghasilkan sesuatu yang praktis bekerja) saya memutuskan untuk menerbitkan sesuatu dan dengan demikian mengeluarkan ini dari tumpukan coretan setengah jadi saya dan membuatnya layak.
Solusinya mengeksploitasi fakta, bahwa revisi pertama dari pertanyaan ini mendefinisikan warna yang dibutuhkan berdasarkan tautan ke situs, yang dengan jelas menyatakan, bahwa warna Pantone (R) harus digunakan, dan warna RGB hanya merupakan perkiraan. Kemudian saya berpikir, mengapa saya harus melakukan perkiraan, ketika saya bisa membuat warna asli? - :)
Kode ini harus disimpan sebagai misalnya
rubik.ps
dan kemudian diumpankan ke Ghostscript dengan mantra biasa:Itu kemudian menunggu Anda di baris berikutnya, untuk input nama file JPG misalnya
dan, jika semuanya berjalan dengan baik, simpan output ke
out.psd
file.Input harus persegi RGB JPEG (ukuran apa pun), output PSD dengan saluran warna spot. Anda perlu Photoshop untuk melihat file. Mengubah perangkat GS dari yang
psdcmyk
lainnya tidak akan menghasilkan apa-apa yang dapat digunakan. JPEG sebagai input - karena juru bahasa postscript dapat mendekodekan aliran data dari itu secara langsung. Bentuk kotak - karena program bergantung padasqrt
panjang tali untuk menemukan lebar (dan tinggi) gambar.Baris pertama menentukan ukuran gambar output (dapat diubah dari default 75) dan palet warna (warna dan jumlahnya juga dapat diubah). Ada lagi yang bukan kode-keras, saya pikir.
Apa yang sedang terjadi? Stream triplet RGB dikonversi dengan cepat ke string nilai grayscale (dengan rumus sederhana), kamus gambar contone 8-bit yang biasa dibuat dan digunakan untuk melukis 5 gambar identik di atas satu sama lain dalam 5
Separation
ruang warna. Caranya adalah dengan menerapkan fungsi transfer sebelum setiap doa dariimage
operator. Misalnya untuk cat kuning fungsi ini mengembalikan 0 untuk nilai input dalam 0,167 .. hanya kisaran 0,333, dan 1 sebaliknya.Memasukkan:
Cuplikan layar keluaran 75x75 terbuka di Photoshop, diperbesar 800%:
Dan palet saluran Photoshop:
sumber
C #
Anda perlu menjalankannya dengan 3 parameter:
foo.exe 75 d:\test.jpg d:\out.png
Di mana
75
maks. lebar / tinggi,d:\test.jpg
adalah file input dand:\out.png
file output.Output untuk berbagai gambar dalam kontes ini:
Selebriti saya sendiri:
Keluaran:
Namun, ukuran lain (lebih besar dari 75x75) memang menghasilkan gambar yang lebih baik:
Dan, jika kita tetap dengan presiden:
Karena ini bukan codegolf (lagi?) Saya tidak repot-repot untuk "meminimalkan" kode terlalu banyak. Juga, karena instruksi tidak secara spesifik menyebutkan gambar harus sama lebar dengan tinggi (kotak) saya tidak repot-repot memotong; Saya lakukan , namun, pastikan gambar merupakan kelipatan dari lebar 3 pixel / tinggi. Jika Anda ingin gambar persegi, gunakan input persegi Akhirnya; Algoritma itu jauh dari optimal.
Beberapa lagi (karena orang-orang menyukai pahlawan panas / pahlawan internet lebih banyak )
sumber
Brainfuck
Ini membutuhkan juru bahasa BF / kompiler yang memiliki -1 sebagai EOF dan yang memiliki lebih tinggi dari sel 8 bit JIKA salah satu piksel merah adalah 255. Atau kalau tidak akan berhenti prematur karena tidak akan dapat membedakan antara EOF dan nilai 0xFF . Dengan jitbf Anda memiliki apapun yang dimiliki mesin sebagai ukuran integer dan dapat melakukan ini untuk memaksa -1 sebagai EOF:
Format file gambar yang diberikan adalah file PNM RGB penuh (P6), mentah sebagai opsi di Gimp.
Ini menggunakan saluran hijau saja (yang merupakan salah satu dari banyak cara untuk mengubah gambar warna ke skala abu-abu). Ini mengurangi nilai sebesar 43 tanpa mengurangi nilai di bawah nol untuk mencari tahu warna rubiks mana yang akan digunakan dan memiliki sakelar yang mencetak warna RBG yang tepat yang sesuai.
Gambar Angelina Jolie dari Hackers (1995) diperkecil menjadi 75x75 dan diproses dengan aplikasi:
Sama, hanya saya yang menggunakan ukuran aslinya :
Dan karena saya peramal inilah presiden juga:
sumber
Objektif-C
Saya melihat tantangan ini tadi malam dan memiliki waktu yang sedikit membingungkan dengan
-[NSArray indexOfObject:inSortedRange:options:usingComparator:]
, karenanya penundaan.Saya menjalankannya di iPad saya seperti ini:
Sebelum Setelah
Sebelum Setelah
sumber
Python
Format:
python rubik.py <input> <max_cubes> <output>
.Coverts pixel to grayscale menggunakan algoritma yang disarankan.
Memasukkan:
(sumber: ilmamilio.it )
Output dengan
max_cubes = 25
:Output dengan
max_cubes = 75
:Output dengan
max_cubes = 225
:sumber