Anda adalah pengembang web, dan bos Anda telah memutuskan untuk memperbarui situs web perusahaan. Dia telah memutuskan bahwa lebih sedikit warna lebih baik, tetapi dia ingin situsnya terlihat sama. Anda benar-benar memutuskan bahwa dia tidak tahu apa yang dia bicarakan, tetapi Anda tetap akan mencoba, karena Anda bosan. Karena perusahaan memiliki ribuan halaman web, dan masing-masing memiliki CSS sendiri, Anda memutuskan untuk menulis skrip untuk melakukan perubahan yang diperlukan. Parsing HTML tidak diperlukan.
Semua halaman saat ini menggunakan string seperti rgb(255,0,0)
untuk warna. Mengingat tiga nilai desimal mewakili nilai-nilai RGB dari atribut warna CSS (dalam urutan itu), kembali atau mencetak string representasi terpendek warna yang, seperti bahwa itu dapat digunakan untuk CSS seperti: color:<your-result-here>;
.
Berikut adalah tabel lengkap Kata Kunci Warna CSS yang valid . Mereka tidak peka huruf besar-kecil.
Contoh:
Perhatikan bahwa warna dapat didefinisikan dengan 12 atau 24 bit. Polanya #ABC
adalah versi lebih pendek dari #AABBCC
. Chuck Norris adalah warna .
Program Anda hanya akan menerima 3 bilangan bulat, bukan string (dengan pengecualian "bonus" yang disebutkan kemudian).
0, 0, 0 -> #000 (same as #000000, but shorter)
255, 0, 0 -> red
0, 128, 128 -> TEAL
139, 0, 0 -> DarkRed (OR #8B0000)
72, 61, 139 -> #483D8B
255, 255, 254 -> #fffffe
255, 85, 255 -> #f5f (same as #ff55ff, but shorter)
Penilaian / Aturan
- Kode terpendek menang!
- Celah standar tidak diijinkan , dengan pengecualian built-in.
- -50% byte (bonus dibulatkan ke bawah) jika Anda menerima * pemilih warna yang valid dan menghasilkan yang terpendek. Begitu
DarkSlateBlue
juga dengan output#483D8B
,#F00
outputred
, dll.- * Ini hanya termasuk RGB, kode hex, dan nama.
- Perhatikan bahwa beberapa warna memiliki nama alternatif karena X11 (seperti
Fuchsia
danMagenta
, atauCyan
danAqua
). Nama-nama alternatif termasuk dalam daftar tautan Kata Kunci Warna CSS sesuai dengan standar W3.
- CSS3 adalah Turing Lengkap . Itu akan bernilai karunia.
Edit:
- HARAP JALANKAN KODE ANDA DI TES CASES!
#000
? Dan jika kurang dari 6 digit diizinkan, mengapa tidak#0
? w3schools.com/cssref/css_colors.asp ,, CSSJawaban:
Perl, 212 - 50% = 106 byte
Dengan baris baru ditambahkan:
Uji Kasus
Keluaran
Perl, tanpa bonus, 144 byte
Dengan baris baru ditambahkan:
Graphics::ColorNames
bukan modul inti, tetapi sudah ada sejak tahun 2001. Anda mungkin perlu menginstalnya melalui:Representasi heksa lebih disukai jika nama warna memiliki panjang yang sama.
Uji Kasus
Keluaran
sumber
C # 6 527 byte / 2 bonus = 264
EDIT: Woot! Saya akhirnya mendapat jawaban bonus dengan skor lebih rendah dari jawaban dasar!
Saya baru saja menulis fungsi. Itu membutuhkan
using
pernyataan (termasuk.)C # memiliki daftar warna yang bagus untuk dikerjakan, tetapi bersikeras untuk menyertakan saluran Alpha. Warna-warna yang diketahui juga mencakup semua warna sistem, dua di antaranya memiliki nama yang panjangnya kurang dari 7 karakter, jadi ini perlu dihilangkan.
Inilah solusi bonus, format pendukung seperti:
12, 34, 56
#123
#123456
DarkSlateBlue
Benar-benar golf:
Lekukan dan baris baru untuk kejelasan:
C #, 265 byte
Inilah solusi dasarnya.
Lekukan dan baris baru untuk kejelasan:
sumber
Mathematica
207 242500-250 = 250 bytePembaruan:
Ini berfungsi dengan input yang terdiri dari rgb tiga kali lipat, nama warna, atau angka hex.
(12 bit) warna-kedalaman output sekarang berfungsi dengan baik, berkat artikel yang bagus tentang Pengurangan Kedalaman Warna Bit . Ide dasarnya adalah bahwa, jika RGB rangkap tiga {r, g, b}, di mana r, g, dan b berada dalam kisaran 0-255, (yaitu hex 00-ff) dapat direpresentasikan tanpa kehilangan sebagai angka dalam kisaran 0-15 (yaitu 0-f), maka seseorang dapat menggunakan nomor hex 3 digit, bukan 6 digit. Ternyata ini akan terjadi setiap kali 17 (yaitu 255/15) membagi r, g, dan b.
Hanya fungsi bawaan yang digunakan. Mathematica memiliki aturan untuk mengganti nama warna HTML dengan triples RGB. Misalnya, satu aturan
"Teal"-> RGBColor[0, 128, 128]
. Ketika aturan tersebut dibalik, nilai rgb (dikalibrasi ulang ke kisaran, {0, 255}) dapat diganti dengan nama warna.Contohnya
Mengomentari, Kode Tidak Terkunci
(* aturan untuk mengganti nama warna dengan contoh warna, mis
RGBColor{255,17,0}
(* aturan untuk mengganti daftar 3 bilangan bulat dengan nama warna masing-masing, jika ada. Dan aturan yang sama, dibalik. *)
(* menguji apakah warna hex 24 bit dapat direpresentasikan sebagai warna 12 bit tanpa kehilangan.
reduce
Dapat mengubah ekspresi 24 bit menjadi ekspresi 12 bit. *)(* Daftar RGB diubah menjadi angka Hex *)
(* Nomor heks diubah menjadi daftar RGB. *)
(* Lebih banyak konversi *)
(* memilih ekspresi CSS valid terpendek dari suatu warna *)
(* Mengkonversi input apa saja ke dalam daftar RGB dan memanggil
f
*)sumber
FF
di Base 16? Jadi itu harus dibuat#FFFFFF
, yang lebih panjang dari Putih. Saya menemukan#000
tidak biasa tetapi akan melihat keanehan CSS untuk memastikan.#FFF
sama dengan#FFFFFF
(semua bit satu) yang sama denganwhite
. Juga,#0
tidak valid karena bukan 24 bit atau 12 bitCoffeeScript,
411 404 388 384382/2 = 191UPD: Cukup yakin ini adalah hasil akhir
Harap, tidak apa-apa untuk digunakan
window.document.*
. Periksargb
fungsi daneval
panggilan.Hasil tes
Kode yang dikomentari
Ini akan menghemat beberapa byte.
q
fungsi akan menempatkan warna input kedocument.body.style.color
dan mendapatkan warna yang dikompilasi sebagairgb(...)
. Juga akan menyimpan hasil sepertihexColor:inputColor
padad
. Perhatikaneval
penggunaan.rgb(100,100,100)
adalah panggilan fungsi JavaScript yang valid dengan tiga argumen angka.rgb
function akan mengonversi argumen menjadi notasi HEX 24/12 tunggal (seperti#fff
,#f0f0f0
).Split string ke array nama warna, buat objek pencarian.
Dan kembalikan HEX jika tidak ada varian yang lebih pendek di
d
.sumber
Stylus,
238234/2 = 117Lebih banyak solusi seperti CSS! Stylus sudah memiliki dukungan besar untuk manipulasi warna, sehingga fungsi yang diinginkan cukup kecil dan tidak banyak golf.
f(c){for n in split(' ''navy green teal indigo maroon purple olive gray sienna brown silver peru tan orchid plum violet khaki azure wheat beige salmon linen tomato coral orange pink gold bisque snow ivory red'){lookup(n)==c?c=s(n):c}}
Uji di sini
sumber
Matlab 617
Banyak preprocessing dan hardcoding. Set minimal nama warna yang harus Anda pertimbangkan adalah ini. Sayang sekali Matlab tidak memiliki nama warna = /
sumber
r=0;g=16;b=0;
di sana, meskipun itu tidak dihitung dalam skor Anda.Python 3,
857795 byteHarus secara manual menentukan semua warna yang diterima yang dibutuhkan memang meningkatkan jumlah byte yang satu ini: /
c(a)
mengambil satu argumen,,a
yang datang dalam bentukrgb(#,#,#)
. Dari itu, rgb dan tanda kurung dihapus dan string kemudian dibagi dengan koma menjadi array.c(x,y,z)
membutuhkan 3 int, nilai r, g dan b dari warna rgb untuk diproses. Kami menempatkan mereka bersama dalam sebuah arraya
. Kami kemudian menggunakanhex
fungsi built-in Python yang mengubah nomor Base 10 ke nomor Base 16 pada array kami dan membuat string hex (ini dilakukan dalamfor
loop). Theif
pernyataan mengkonversi warna seperti000000
untuk000
, dan mengganti warna dikenal menggunakan kamus.Ini dia (terima kasih kepada @undergroundmonorail untuk tip tentang
;
Python):Versi lama:
Mungkin saya akan menambahkan bonus untuk itu, saya belum tahu. Itu pasti bisa dilakukan dengan diskon 50% byte!
-Toastrackenigma
sumber
;
, menyimpan lekukan. misalnya:a=a[4:-1].split(",");b=""
. setiapif
,else
,for
,while
, dll blok dengan hanya satu baris dapat ditulis sebagaiif b in k:b=k[b]
.finally, Anda dapat kehilangan banyak spasi Anda di tengah-tengah garis, misalnyak = {
->k={
danreturn "color:
->return"color:
re.findall()
(jadi perluimport re
): pastebin.com/rQHqgxXSJavaScript (ES6), 499
611Sunting Menambahkan kasus uji dalam pertanyaan
Catatan: Saya hanya menyimpan nama warna yang lebih pendek dari padanan hex.
Catatan 2: ini pasti bisa golf lebih ...Kurang golf
sumber
{f00:"red";"008000":"green"}
.