Dalam CSS, warna dapat ditentukan oleh "hex triplet" - angka heksadesimal tiga byte (enam digit) di mana setiap byte mewakili komponen warna merah, hijau, atau biru. Misalnya, #FF0000
sepenuhnya merah, dan setara dengan rgb(255, 0, 0)
.
Warna juga dapat diwakili oleh notasi steno yang menggunakan tiga digit heksadesimal. Singkatan berkembang ke bentuk enam digit dengan menduplikasi setiap digit. Misalnya, #ABC
menjadi #AABBCC
.
Karena ada lebih sedikit digit dalam hex steno, lebih sedikit warna yang dapat diwakili.
Tantangan
Tulis program atau fungsi yang menggunakan kode warna heksadesimal enam digit dan berikan kode warna tiga digit terdekat.
Ini sebuah contoh:
- Masukkan kode hex: # 28a086
- Komponen merah
- 0x28 = 40 (desimal)
- 0x22 = 34
- 0x33 = 51
- 0x22 lebih dekat, jadi digit pertama dari kode warna yang dipersingkat adalah 2
- Komponen hijau
- 0xa0 = 160
- 0x99 = 153
- 0xaa = 170
- 0x99 lebih dekat, jadi digit kedua adalah 9
- Komponen biru
- 0x86 = 134
- 0x77 = 119
- 0x88 = 136
- 0x88 lebih dekat, jadi digit ketiga adalah 8
- Kode warna yang diperpendek adalah # 298 (yang diperluas ke # 229988)
Program atau fungsi Anda harus menerima sebagai input kode warna heksadesimal enam digit yang diawali dengan #
dan menghasilkan kode warna tiga digit yang diawali dengan #
.
Contohnya
- # FF0000 → # F00
- # 00FF00 → # 0F0
- # D913C4 → # D1C
- # C0DD39 → # BD3
- # 28A086 → # 298
- # C0CF6F → # BC7
Mencetak gol
Ini adalah tantangan kode-golf, jadi jawaban tersingkat dalam bahasa Anda menang! Aturan standar berlaku.
sumber
#
menambahkan apa pun untuk tantangan.Jawaban:
JavaScript (ES6), 55 byte
Cobalah online!
sumber
05AB1E , 13 byte
Cobalah online!
Bagaimana?
sumber
ć
memenggal kepala " Itu cara lain untuk menggambarkannya, lol. : D Jawaban yang bagus, +1 dari saya.Japt , 16 byte
Cobalah atau jalankan semua test case
sumber
8088 Majelis, IBM PC DOS,
5958 byteDaftar belum dirakit:
Standalone PC DOS dapat dieksekusi. Input melalui baris perintah, output ke konsol.
Sebagian besar panjang kode menangani konversi hex string I / O yang diperlukan menjadi byte, karena kode mesin DOS / x86 tidak memiliki bawaan untuk itu.
I / O:
Unduh dan uji HEXCLR.COM , atau
xxd
hexdump:sumber
Retina 0.8.2 , 88 byte
Cobalah online! Tautan termasuk kasus uji. Penjelasan:
Pasangkan digit hex.
Ubah setiap digit secara terpisah menjadi desimal.
Konversi setiap angka desimal ke unary.
Selesaikan konversi heksadesimal dari pasangan digit.
Tambahkan 8 dan bagi dengan 17.
Konversi kembali ke heksadesimal.
sumber
PHP ,
7567 byteCobalah online! atau verifikasi semua kasus uji .
sumber
Python 3 ,
727068 byteCobalah online!
Ini adalah port jawaban asli Grzegorz Oledzkis , yang saya bantu dia main golf.
Dua fitur Python 3 membantu kami menghemat byte:
-2 byte thanx ke Jonathan Allan
sumber
(int(x[i:i+2],16)+8)//17
hemat 2Jelly ,
2019 byteCobalah online!
sumber
C # (Visual C # Interactive Compiler) , 81 byte
Cobalah online!
sumber
Bahasa Wolfram (Mathematica) ,
6348 byteCobalah online!
-15 byte terima kasih untuk attinat ! Mengganti
StringJoin
dengan<>
dan mengompresi sintaks.RGBColor@#
mengonversi string input ke warna formulirRGBColor[r, g, b]
dengan tiga argumen titik apung di kisaran 0..1.Round[15 List @@ %]
mengalikan daftar tiga argumen dengan 15 dan membulatkannya ke bilangan bulat terdekat. Kami sekarang memiliki daftar tiga nilai integer yang sesuai dengan tiga digit heksadesimal yang diinginkan.%~IntegerString~16
mengubah daftar tiga bilangan bulat ini menjadi daftar tiga string heksadesimal masing-masing satu karakter."#"<>%
menambahkan#
karakter dan menggabungkan semua karakter ini menjadi satu.sumber
MathGolf ,
1912 byteKeluaran sebagai daftar karakter. Jika ini tidak diizinkan, tambahan tambahan
y
harus ditambahkan untuk bergabung dengan daftar karakter ke string.-7 byte terima kasih kepada @maxb , karena saya melihat melewati builtin (
2ô_2<\1>]
ke2/
).Cobalah online.
Penjelasan:
sumber
Ruby (2.5.3),
45,44, 42 byteEDIT: disimpan satu byte karena kita tidak memerlukan grup karakter untuk karakter kedua di regex (terinspirasi oleh jawaban Neil)
EDIT 2: menyimpan 2 byte karena sintaks dash roket lambda tidak perlu tanda kurung di sekitar argumen
sumber
-p
flag dan 2 lainnya dengan menggunakan$&
alih-alih argumen di dalam blok: tio.run/##KypNqvz/…Python 2 (
10910197858374 byte)"Jarak terdekat" ditangani oleh divisi dengan 17 dan pembulatan.
Perbaikan:
-8 byte dengan menggunakan
int(...+.5)
trik, bukanint(round(...))
-4 byte dengan menggunakan pemahaman daftar alih-alih
map()
-1 byte oleh hardcoding
#
di output (terima kasih @movatica)-10 byte dengan tidak menggunakan
re.findall("..",...)
splicing String eksplisit-2 byte dengan tidak menggunakan pemahaman daftar, tetapi ekspresi generator inline di
join
(terima kasih @movatica)-1 byte dengan tidak menyambung bagian
:7
akhir untuk bagian biru-9 byte dengan iterasi yang lebih baik atas warna - yaitu iterasi atas indeks, bukan karakter yang sebenarnya (terima kasih @movatica)
sumber
'#'
daripadax[0]
.''.join(...)
, karena juga menangani ekspresi generator. Hapus[]
dan simpan 2 byte lagi :)range(1,6,2)
bahkan lebih baik dengan[1,3,5]
lambda x:'#'+''.join(hex((int(x[i:i+2],16)+8)/17)[2:]for i in[1,3,5])
-> 69 bytePerl 5
-p
,3534 byte@nwellnhof menyimpan satu byte
Cobalah online!
Membaca dari STDIN, mengganti setiap pasangan item yang tidak
#
dengan karakter tunggal yang sesuai menggunakan metode pembagian dengan 17 untuk menemukan yang terdekat, kemudian secara implisit mengeluarkan (-p
) hasilnya.sumber
Python 3, 67 byte
sumber
Merah , 103 byte
Cobalah online!
Ternyata versi Linux Red saat ini tidak memiliki implementasi
hex-to-rgb
fungsi, itu sebabnya saya membuat konversi basis "secara manual" :)Ini berfungsi dengan baik di Merah konsol GUI di Windows:
Merah , 94 byte
sumber
Perl 6 , 35 byte
Cobalah online!
sumber
Arang , 22 byte
Cobalah online! Tautan adalah untuk mengucapkan versi kode. Penjelasan:
sumber
R , 57 byte
Cobalah online!
sumber
Pyth , 20 byte
Coba di sini.
CATATAN: Jika tautan di atas memunculkan
ImportError
, buka di sini sebagai gantinya; saat ini ada bug di halaman "resmi", dan ini adalah solusi sementara oleh Maltysen . Tautan ini dapat berhenti berfungsi setelah yang resmi diperbaiki.sumber
Keempat (gforth) , 87 byte
Cobalah online!
Penjelasan
#
)#
0x11
) untuk mendapatkan nilai terdekat untuk komponen yang diperpendekPenjelasan Kode
sumber
Stax , 13 byte
Jalankan dan debug itu
sumber
K4 , 39 byte
Larutan:
Penjelasan:
Gunakan strategi yang sama dengan banyak jawaban ini (yaitu tambahkan 8, bagi 17):
Tambahan:
"#",{x@*16\:a?&/a:abs(17*!16)-16/:x?y}[.Q.nA]@/:3 2#1_
- ide asli saya selama 54 bytesumber