Tantangan
Mengingat dua string heksadesimal huruf besar (baik 6 karakter, XXXXXX dan YYYYYY) mewakili nilai-nilai RGB (mulai dari 000000
ke FFFFFF
inklusif), dan non-nol positif bilangan bulat N, menampilkan transisi linier dari N + 2 warna yang dihasilkan dari XXXXXX ke YYYYYY yang akan menghasilkan gradien warna.
Contoh
Memasukkan
FF3762
F08800
9
Keluaran
Harap perhatikan dalam contoh kami, saya telah meminta 9 langkah sementara antara dua warna, oleh karena itu 11 baris akan ditampilkan dari warna awal ke warna akhir
FF3762
FD3F58
FC474E
FA4F44
F9573A
F75F31
F66727
F46F1D
F37713
F17F09
F08800
Peringatan
Walaupun saya telah pergi dengan proses linear sederhana untuk mendapatkan nilai integer untuk warna interim sebelum mengubahnya kembali menjadi heksadesimal, metode Anda mungkin bervariasi. Harap pertimbangkan berbagai cara seseorang dapat mengumpulkan / menurunkan angka Anda .
Pengujian
Untuk membuat ini menarik, saya telah memberikan cuplikan untuk memungkinkan pengujian kode Anda, termasuk tombol untuk memberi Anda dua warna acak untuk menguji kode Anda. Menampilkan hasil Anda adalah opsional, tetapi dianjurkan!
c1=()=>('00000'+(Math.random()*(1<<24)|0).toString(16)).slice(-6);
$("#col").click(function(){
alert("Your two colors are: "+c1()+" and "+c1()+".");
});
$("#colors").blur(function(){
$("#test").empty();
var colArr = $("#colors").val().split("\n");
for(c in colArr){
$("#test").append('<div class="tester" style="background-color:#'+colArr[c]+';">'+colArr[c]+'</div>')
}
});
.tester{height: 20px;
width: 60px;padding: 4px;border: 1px solid black;}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<button id="col">Your two colors</button><br />
<textarea id="colors"></textarea>
<div id="test">
</div>
1) Anda dapat mengakses dua warna acak untuk pengujian Anda dengan mengklik tombol "Dua warna Anda". 2) Jumlah langkah sementara akan sama dengan jumlah karakter dalam nama pengguna PPCG Anda termasuk spasi, dalam kasus "WallyWest" akan 9 (seperti contoh saya di atas). 3) Jalankan kode Anda dengan dua warna dan angka dan setelah Anda membuat daftar yang dihasilkan, Anda memiliki opsi untuk menempelkan output Anda ke dalam textarea dan menabraknya untuk mendapatkan gradien warna yang dihasilkan.
Contoh saya ditunjukkan di sini:
Harus saya akui, itu terlihat sangat luar biasa!
Harap dicatat: Seperti yang saya sebutkan, menunjukkan pengujian Anda terhadap output Anda menggunakan snippet adalah opsional, tetapi dianjurkan! :)
Keluaran
Output daftar harus dalam bentuk N + 2 set 6 digit angka hex yang dipisahkan oleh feed baris (\ n) seperti yang ditunjukkan pada contoh saya di atas. Output dapat dalam bentuk baris terpisah, spasi / daftar dipisahkan koma, array atau apa pun yang paling cocok untuk bahasa Anda ... (Terima kasih @nimi untuk informasi selanjutnya) Harap diingat, bahwa jika Anda berencana untuk menguji kode Anda dengan cuplikan, namun Anda memisahkan setiap "warna" terserah Anda.
Aturan
Ini adalah kode-golf, sehingga solusi terpendek dalam byte akan dinobatkan sebagai pemenang. Tidak ada celah , secara alami. Input harus menerima dua string dan angka (yang seperti yang saya katakan akan setara dengan jumlah huruf dalam nama pengguna Anda di PPCG, sehingga output yang Anda hasilkan akan selalu minimal sepanjang tiga baris.
Jawaban:
MATL , 31 byte
Ini menggunakan interpolasi linier dengan pembulatan ke bawah. Format input adalah
Cobalah online!
Output grafis, 31 byte
Ini adalah hasil untuk input
Cobalah di MATL Online ! Penerjemah saat ini sedang dalam percobaan. Jika Anda tidak mendapatkan output, segarkan halaman dan tekan "Run" lagi.
sumber
JavaScript (ES6), 130 byte
sumber
Dyalog APL , 44 byte
Anjuran untuk N , maka B eginning-warna, maka E nding-warna. Kebutuhan
⎕IO←0
yang standar pada banyak sistem.h[
...]
indeks menjadi h (yang memiliki nilai ketika kami selesai mengevaluasi konten braket)N←⎕
prompt untuk numerik N (4)1+
tambahkan satu ke N (5)(
...)÷
gunakan itu untuk membagi hasil dari ...⍞⍞
prompt untuk dua string karakter ["7E0E7E", "FF3762"](
...)∘⍳¨
temukan indeks masing-masing karakter string di ...⎕D,⎕A
D igits diikuti oleh A lphabeth←
ditugaskan untuk hsekarang kami memiliki "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ"
E B←
menetapkan indeks untuk E dan B [[7,14,0,14,7,14], [15,15,3,7,6,2]]-/
kurangi dan lampirkan B dari E [[-8, -1, -3,7,1,12]]hasilnya sejauh ini adalah [[-1.6, -0.2, -0.6,1.4.0.2.2.4]]
(
...)×
kalikan ini dengan ...2+N
dua ditambah N (6)⍳
bilangan bulat pertama [0,1,2,3,4,5]ini memberi kita [[0,0,0,0,0,0], [- 1,6, -0,2, -0,6,1,4,0,2,2,4], [- 3,2, -0,4, -1,2,2,8,0,4,4,8 ], ...]
B∘+¨
tambahkan B ke masing-masing [[15,15,3,7,6,2], [13,4,14,8,2,4,8,4,6,2,4,4], [11,8,14,6,1,8,9,8,6,4,6,8], ... ]⌊
bulat [[15,15,3,7,6,2], [13,14,2,8,6,4], [11,14,1,9,6,6], ...]↑
buat daftar daftar menjadi tabeldi sini kita indeks ke dalam h , memberi
yang sama dengan
dan mencetak sebagai
TryAPL online!
sumber
Pyth - 35 byte
Golfnya mengerikan, baru saja menyerah.
Cobalah online di sini .
Contoh:
sumber
7cb472 93fb8a 8
dan hanya menerima 10 garis output saat menguji kode Anda?93fb8a
... Apakah kode Anda menghasilkan dua baris dengan nilai yang sama?PowerShell v2 +,
176159150 byteMengambil input sebagai dua string dan angka, kemudian mengubah string awal menjadi array string yang dibagi pada setiap dua karakter, menyimpannya menjadi
$x
. Kami kemudian output$a
sebagai bagian awal kami, dan loop dari++$n
ke1
(untuk memastikan fenceposting tepat).Setiap iterasi, tetapkan helper
$j
ke nomor saat ini (digunakan nanti untuk memastikan kami memiliki jumlah langkah yang tepat antara tempat kami saat ini ke tujuan kami) dan menghitung langkah selanjutnya berdasarkan pada perulangan$x
.Setiap loop batin hanyalah sebuah tugas. Kami menyetel
$x
di tempat yang tepat sama dengan string baru"{0:x2}"
menggunakan-f
operator ormat. Dix2
sini menentukan output heksadesimal dua digit, dan inputnya adalah sisi kanan-f
operator. PowerShell memiliki operator hexadecimal-to-desimal asli0x
, jadi ungkapan parens-nested panjang ini menggunakan operator itu untuk mengubah hex saat ini menjadi angka, mengurangi untuk menemukan perbedaan yang belum pergi (dilakukan dengan memisahkan secara dinamis di$b
sini seperti yang kami lakukan$a
, dan menggunakan modulo untuk memilih elemen yang tepat), membaginya dengan$j
langkah yang tersisa, casting ke[int]
(PowerShell melakukan pembulatan bankir secara default), dan mengurangi langkah-hitung dari hex saat ini untuk mendapatkan apa yang perlu hex berikutnya.Hasil perhitungan itu disimpan kembali menjadi
$x
tiga elemen hex. Itu diringkas dalam parens untuk membuat salinan pada pipa, dan-join
diedit menjadi satu string. Semua string yang dihasilkan dibiarkan dalam pipa, dan output melalui implisitWrite-Output
terjadi pada eksekusi program.Contoh
Saya diberi 0ba7c5 dan 6c0e50 untuk dua warna saya, dan TimmyD memiliki 6 karakter di dalamnya.
sumber
Python 2, 189 byte
sumber
[Groovy] Pembaruan Akhir (199 Bytes) - Sesuai permintaan
Non-golf
Golf
Coba yang terakhir di sini: https://groovyconsole.appspot.com/script/5130696796405760
VERSI LAMA DI BAWAH INI, DITENTUKAN OLEH OP
Groovy (123 Bytes)
Golf
Non-golf
Input
Contoh Keluaran
hasil dalam
Cobalah sendiri: https://groovyconsole.appspot.com/script/5184465357766656
Dengan Termasuk Konversi Hex
Kira saya agak curang juga ... Ini skrip dengan menggunakan hex:
Kode baru dengan konversi hex:
188 karakter saat bermain golf:
Output untuk 000000 hingga FFFFFF dan 16 (Panjang Nama Pengguna)
sumber
{s-> s.split("(?<=\\G.{2})").collect{Integer.parseInt(it,16)}}('FFFFFF')
Hasil dalam [255.255.255] Saya dapat menambahkan 62 byte ke kode saya menggunakan konversi itu jika Anda benar-benar menginginkannya.R, 68 byte
Ada fungsi bawaan yang menginterpolasi dua warna:
Memasukkan:
Output: vektor dengan nilai
Spesifikasi warna dalam R memerlukan simbol hash.
Mari kita plot sesuatu, seperti fungsi:
sumber
FF3762 F08800 15
?C,
175169168 byteTidak Disatukan:
Terima kasih kepada @ h-walters karena mencukur 5 byte!
sumber
puts
sintaks lagi?printf()
, tetapi tidak melakukan format apa pun, melainkan hanya mencetak string yang diberikan apa adanya, dan menambahkan baris baru.puts("")
ke bagian ketiga dari loop pertama (;
setelah menjadi,
sebelum) ... +0 byte. Namun, ini memungkinkan Anda untuk menghapus kurung kurawal setelah loop kedua ... -2 byte. Anda dapat menyimpan 1 byte lainnya dengan menghapus 3 darij<3
, dan menggantinya denganprintf
pernyataan Anda (ini licik ... printf hanya akan mengembalikan 2, tetapi masih harus mengevaluasi ketiga kalinya).0
inj=0
. Setelah semuanya ada di sini, program Anda harus lebih pendek 5 byte, dan setidaknya 50% orang asing.sh + ImageMagick, 81 byte
pemakaian:
("-depth 8" tidak diperlukan jika IM Anda dikompilasi dengan 8bpp sebagai default)
sumber