Diberi 3 byte atau RGB sebagai input, hitung nilai CMYK terdekat, dan hasilkan.
- buat fungsi dengan parameter dan nilai balik atau program yang beroperasi pada stdin / stdout
- gunakan profil warna pilihan Anda, tetapi berikan referensi
- input dapat berupa nilai numerik yang terpisah dalam rentang [0; 255] atau string hex 6 digit
- output harus berupa nilai numerik terpisah yang berkisar antara [0; 1] atau [0; 100]
- golf kode standar: tidak ada celah , kode terpendek menang
- ide-ide mewah dipersilakan
contoh data:
input output
108,174,106 [0.3793103448275862, 0.0, 0.3908045977011494, 0.3176470588235294]
0,0,0 0,0,0,1
170,255,238 33,0,7,0
0x0088ff 1,0.4667,0,0
[250,235,215] [0,6,14,1.96]
#123456 .7907,.3953,0,.6627
- Pemetaan yang tidak dikalibrasi baik-baik saja dan mungkin paling mudah
- Tidak diperlukan validasi input; pelampung diperbolehkan (berkisar dari 0 hingga 255), tetapi juga dapat dibulatkan
- Format output harus baik komentar jelas atau jelas; yaitu:
- CMYK dalam urutan itu
- tidak masalah jika persentase [0; 100] atau angka murni [0; 1]
- Pengujian harus mencakup contoh sepele [0,0,0].
Situs ini memiliki digit alat online terbanyak yang bisa saya temukan. Adakah yang tahu alat yang memberi lebih dari 4 digit?
code-golf
conversion
color
Titus
sumber
sumber
~
.Jawaban:
Dyalog APL ,
1615 byte1 dikurangi
1-
X dibagi dengan
÷
Y , diikuti oleh,
255 membagi255÷⍨
Y⊢
, di manaX itu sendiri
⊢
(yaitu daftar nilai RGB), danY adalah maks
/⌈
(dari nilai RGB).TryAPL!
Kredit:
∘ -1 byte oleh ngn .
sumber
⍨
! Emoticon yang bagus⍣
dan⍤
. Saya harap kita akan mendapatkannya⍥
dan⍢
segera.ಠ
akan membuatku bahagia!C # ,
88868584 byteoutput untuk
108,174,106
:Karena OP mengizinkan fungsi, saya hanya mengirimkan lambda. Anda dapat menemukan demo yang sedang berjalan di .NetFiddle . Saya bukan pegolf, saya memposting untuk bersenang-senang. Juga, ini adalah jawaban pertama saya \ o /. Jangan ragu untuk berkomentar perbaikan apa pun :)
Kudos to Leaky Nun untuk formula.
peringatan: itu tidak berhasil untuk [0,0,0] (terima kasih Titus)
sumber
1.0-x/j
? Anda pasti tidak bisa melakukannya1-x/j
?a[3]
, dan Anda tampaknya tidak menentukan ukuran tetap untuka
, sehingga Anda dapat melakukannya{r,g,b}
dana[3]=j*j
(karena, bagaimanapun,1 * a = a
).a
denganselect()
. Jika saya menggunakana[3]
seperti ini saya akan keluar dari jangkauan dan melempar, bukan?#
di depan baris. :)Python, 46 byte
Membutuhkan input untuk mengapung di Python 2, cukup yakin itu tidak dalam 3.
sumber
JavaScript (ES6),
5851 byteMenerima array
[R, G, B]
(tambahkan 7 byte untuk parameter terpisah) dan mengembalikan array[C, M, Y, K]
menggunakan pemetaan warna yang tidak dikalibrasi.sumber
a
bercampur? Ini aneh. 3) Sudahkah Anda menguji [0,0,0]? Tidak terkecuali di ES, tetapi terlihat seperti pembagian dengan nol.[...a,m=Math.max(...a)]
di solusi array Anda. 5) Bisakah Anda golf yang lain lebih lanjut menggunakan array sebagai input? Pertimbangkan untuk menggunakana.0
dll. Daripada.map
.Mathematica,
362833 byteSetelah liberalisasi format I / O, bermain golf lebih lanjut:List@@#~ColorConvert~"CMYK"&
Fungsi anonim, yang melakukan apa yang diminta.
Fungsi lama mengambil tiga argumen dari 0 hingga 255 (apa pun di luar rentang ini akan secara otomatis terpotong ke kisaran ini) dan mengembalikan array nilai "CMYK" antara
0.
dan1.
Contoh (untuk fungsi lama):
Karena array diizinkan sebagai input, 33 byte:
Tentu saja yang built-in menangani fungsi
{0, 0, 0}
dengan baik dan kembali{0, 0, 0, 1}
.sumber
/255
?Bash + ImageMagick, 69 byte
Contoh:
sumber
SmileBASIC,
7372 byteBisa jadi jauh lebih pendek.
sumber
J=MAX(R,G,B)
?Pyth,
2421182421 byteHidup itu perjalanan bolak-balik.
Suite uji.
Input sampel:
108,174,106
Output sampel:
[0.3793103448275862, 0.0, 0.3908045977011494, 0.3176470588235294]
Input sampel:
0,0,0
Output sampel:
[0, 0, 0, 1.0]
Formula yang digunakan:
Formula lama: http://i.stack.imgur.com/ZtPD6.gif
Formula lama: http://i.stack.imgur.com/Nqi9F.gif
sumber
Lithp , 114 byte
Cobalah online!
max
membutuhkan sejumlah argumen)Saya tidak yakin ini benar. Dua hasil pertama dengan data sampel sudah benar, tetapi sisanya tidak (lihat Coba online .)
Penggunaan implementasi dijelaskan dengan baik sebagai berikut:
sumber
PHP 7,
123110105 byteInput sebagai warna RGB
100 240 75
Output nilai CMYK dalam
0...1
rentang desimal .Menyimpan banyak byte berkat Titus.
Penggunaan sampel:
Tes online
Input sebagai warna HEX
#123456
, 202 byte54 byte untuk fungsi untuk mencegah pembagian dengan nol, mungkin golf atau dapat dilepas.
Dimasukkan sebagai warna RGB sebagai HEX
#123456
dan menghasilkan CMYK sebagai desimal di0...1
.Penggunaan sampel:
sumber
separate numeric values
berarti Anda bisa$h=$argv;
menggunakan dan menggunakan$h[1]
alih-alih$h[0]
dll. Saya sukaNAN
triknya; tetapi bukankah itu menghasilkan peringatan?strtr
mungkin lebih pendek daristr_replace
, danNAN
tidak memerlukan qotation (akan menghasilkan Pemberitahuan, tetapi itu tidak ditampilkan dalam konfigurasi default).1/0
hasilINF
) atau dalam PHP 5 (1/0
=>false
).$argv
tip array yang sangat menarik di command line! Saya menambahkan versi PHP. Ini berfungsi dengan baikNAN
karena ketika Anda menggunakannyastr_replace
secara implisit mengkonversi angka ke string sehingga menghasilkanNAN
, sebenarnya jika Anda memeriksa di tautan ini , Anda akan melihat bahwa itu menghasilkanNAN
karenastr_replace("INF"
bukanstr_replace("NAN"
. Saya tidak bisa membuatnya bekerja menggunakanstrtr
. Saya menambahkannya@
untuk menekan peringatan.$n/0
isINF
, but0/0
isNAN
(juga dalam PHP 7.0). Anda dapat menyimpan 4 byte denganstr_replace(NAN,0,$s)
atau 6 byte denganstrtr($s,["NAN"=>0)
.strtr()
;PHP, tidak bersaing
Saya terlalu tergoda untuk memposting sendiri.
Input RGB, 74 byte
atau 68 byte dengan tanda koma di output: hapus
[$i>3]
.Jalankan dengan
php -r '<code>' <red-value> <green-value> <blue-value>
.Input HEX, 100 byte
Jalankan dengan
php -nr '<code>' RRGGBB
.Pendekatan itu akan membutuhkan 75 byte untuk input RGB:
ganti
foreach($a=array_map...as$c)
denganforeach($a=$argv as$c)if($i++)
.sumber
C, 155 byte
Saya mencoba mencari tahu bagaimana mungkin golf lebih banyak.
Pemakaian:
Keluaran:
sumber
i>0?i>1?i>2
j>0?
17 dalam menghilangkan loop, dan 6 dalam memisahkanj
definisi.F *
). Tapi saya menemukan byte lain untuk bermain golf di C99.j>0?j:1
bisaj+!j
mencapai -3 byte.C
makro tidak benar:1-x/1
untukj==0
? Saya pikir seharusnya begitu1-(j>0?x/j:1)
.Hoon , 110 byte
Gunakan perpustakaan floating-point presisi tunggal. Buat fungsi generik baru yang diperlukan
a
. Aturs
untuksub
digosok dengan.1
untuk nanti, danj
untuk melipata
denganmax
.Peta lebih
a
dengan membagi setiap elemen denganj
, menemukan minimum itu dan 1 untuk menormalkan NaN, kemudian kurangi 1 dengans
. Tambahkan1-j/255
ke akhir daftar itu.sumber