Created
December 9, 2019 07:58
-
-
Save rust-play/0f0782af4a260ac3b25a718832350f73 to your computer and use it in GitHub Desktop.
Code shared from the Rust Playground
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
use std::collections::HashMap; | |
static COLOR_TABLE: [(&str, (u8, u8, u8)); 147] = [ | |
("aliceblue", (240, 248, 255)), | |
("antiquewhite", (250, 235, 215)), | |
("aqua", (0, 255, 255)), | |
("aquamarine", (127, 255, 212)), | |
("azure", (240, 255, 255)), | |
("beige", (245, 245, 220)), | |
("bisque", (255, 228, 196)), | |
("black", (0, 0, 0)), | |
("blanchedalmond", (255, 235, 205)), | |
("blue", (0, 0, 255)), | |
("blueviolet", (138, 43, 226)), | |
("brown", (165, 42, 42)), | |
("burlywood", (222, 184, 135)), | |
("cadetblue", (95, 158, 160)), | |
("chartreuse", (127, 255, 0)), | |
("chocolate", (210, 105, 30)), | |
("coral", (255, 127, 80)), | |
("cornflowerblue", (100, 149, 237)), | |
("cornsilk", (255, 248, 220)), | |
("crimson", (220, 20, 60)), | |
("cyan", (0, 255, 255)), | |
("darkblue", (0, 0, 139)), | |
("darkcyan", (0, 139, 139)), | |
("darkgoldenrod", (184, 134, 11)), | |
("darkgray", (169, 169, 169)), | |
("darkgreen", (0, 100, 0)), | |
("darkgrey", (169, 169, 169)), | |
("darkkhaki", (189, 183, 107)), | |
("darkmagenta", (139, 0, 139)), | |
("darkolivegreen", (85, 107, 47)), | |
("darkorange", (255, 140, 0)), | |
("darkorchid", (153, 50, 204)), | |
("darkred", (139, 0, 0)), | |
("darksalmon", (233, 150, 122)), | |
("darkseagreen", (143, 188, 143)), | |
("darkslateblue", (72, 61, 139)), | |
("darkslategray", (47, 79, 79)), | |
("darkslategrey", (47, 79, 79)), | |
("darkturquoise", (0, 206, 209)), | |
("darkviolet", (148, 0, 211)), | |
("deeppink", (255, 20, 147)), | |
("deepskyblue", (0, 191, 255)), | |
("dimgray", (105, 105, 105)), | |
("dimgrey", (105, 105, 105)), | |
("dodgerblue", (30, 144, 255)), | |
("firebrick", (178, 34, 34)), | |
("floralwhite", (255, 250, 240)), | |
("forestgreen", (34, 139, 34)), | |
("fuchsia", (255, 0, 255)), | |
("gainsboro", (220, 220, 220)), | |
("ghostwhite", (248, 248, 255)), | |
("gold", (255, 215, 0)), | |
("goldenrod", (218, 165, 32)), | |
("gray", (128, 128, 128)), | |
("green", (0, 128, 0)), | |
("greenyellow", (173, 255, 47)), | |
("grey", (128, 128, 128)), | |
("honeydew", (240, 255, 240)), | |
("hotpink", (255, 105, 180)), | |
("indianred", (205, 92, 92)), | |
("indigo", (75, 0, 130)), | |
("ivory", (255, 255, 240)), | |
("khaki", (240, 230, 140)), | |
("lavender", (230, 230, 250)), | |
("lavenderblush", (255, 240, 245)), | |
("lawngreen", (124, 252, 0)), | |
("lemonchiffon", (255, 250, 205)), | |
("lightblue", (173, 216, 230)), | |
("lightcoral", (240, 128, 128)), | |
("lightcyan", (224, 255, 255)), | |
("lightgoldenrodyellow", (250, 250, 210)), | |
("lightgray", (211, 211, 211)), | |
("lightgreen", (144, 238, 144)), | |
("lightgrey", (211, 211, 211)), | |
("lightpink", (255, 182, 193)), | |
("lightsalmon", (255, 160, 122)), | |
("lightseagreen", (32, 178, 170)), | |
("lightskyblue", (135, 206, 250)), | |
("lightslategray", (119, 136, 153)), | |
("lightslategrey", (119, 136, 153)), | |
("lightsteelblue", (176, 196, 222)), | |
("lightyellow", (255, 255, 224)), | |
("lime", (0, 255, 0)), | |
("limegreen", (50, 205, 50)), | |
("linen", (250, 240, 230)), | |
("magenta", (255, 0, 255)), | |
("maroon", (128, 0, 0)), | |
("mediumaquamarine", (102, 205, 170)), | |
("mediumblue", (0, 0, 205)), | |
("mediumorchid", (186, 85, 211)), | |
("mediumpurple", (147, 112, 219)), | |
("mediumseagreen", (60, 179, 113)), | |
("mediumslateblue", (123, 104, 238)), | |
("mediumspringgreen", (0, 250, 154)), | |
("mediumturquoise", (72, 209, 204)), | |
("mediumvioletred", (199, 21, 133)), | |
("midnightblue", (25, 25, 112)), | |
("mintcream", (245, 255, 250)), | |
("mistyrose", (255, 228, 225)), | |
("moccasin", (255, 228, 181)), | |
("navajowhite", (255, 222, 173)), | |
("navy", (0, 0, 128)), | |
("oldlace", (253, 245, 230)), | |
("olive", (128, 128, 0)), | |
("olivedrab", (107, 142, 35)), | |
("orange", (255, 165, 0)), | |
("orangered", (255, 69, 0)), | |
("orchid", (218, 112, 214)), | |
("palegoldenrod", (238, 232, 170)), | |
("palegreen", (152, 251, 152)), | |
("paleturquoise", (175, 238, 238)), | |
("palevioletred", (219, 112, 147)), | |
("papayawhip", (255, 239, 213)), | |
("peachpuff", (255, 218, 185)), | |
("peru", (205, 133, 63)), | |
("pink", (255, 192, 203)), | |
("plum", (221, 160, 221)), | |
("powderblue", (176, 224, 230)), | |
("purple", (128, 0, 128)), | |
("red", (255, 0, 0)), | |
("rosybrown", (188, 143, 143)), | |
("royalblue", (65, 105, 225)), | |
("saddlebrown", (139, 69, 19)), | |
("salmon", (250, 128, 114)), | |
("sandybrown", (244, 164, 96)), | |
("seagreen", (46, 139, 87)), | |
("seashell", (255, 245, 238)), | |
("sienna", (160, 82, 45)), | |
("silver", (192, 192, 192)), | |
("skyblue", (135, 206, 235)), | |
("slateblue", (106, 90, 205)), | |
("slategray", (112, 128, 144)), | |
("slategrey", (112, 128, 144)), | |
("snow", (255, 250, 250)), | |
("springgreen", (0, 255, 127)), | |
("steelblue", (70, 130, 180)), | |
("tan", (210, 180, 140)), | |
("teal", (0, 128, 128)), | |
("thistle", (216, 191, 216)), | |
("tomato", (255, 99, 71)), | |
("turquoise", (64, 224, 208)), | |
("violet", (238, 130, 238)), | |
("wheat", (245, 222, 179)), | |
("white", (255, 255, 255)), | |
("whitesmoke", (245, 245, 245)), | |
("yellow", (255, 255, 0)), | |
("yellowgreen", (154, 205, 50)), | |
]; | |
fn main() { | |
let mut result = COLOR_TABLE | |
.iter() | |
.map(|(k, _)| (k, Vec::new())) | |
.collect::<HashMap<_, _>>(); | |
for color in colors() { | |
let distances = COLOR_TABLE | |
.iter() | |
.map(|(k, v)| (k, distance(color, *v))) | |
.collect::<Vec<_>>(); | |
let (_, minimum_distance) = *distances.iter().min_by_key(|(_, d)| d).unwrap(); | |
let minimums = distances | |
.into_iter() | |
.filter(|(_, d)| *d == minimum_distance) | |
.map(|(k, _)| k); | |
for minimum in minimums { | |
result.get_mut(minimum).unwrap().push(color); | |
} | |
} | |
let mut result = result.iter().map(|(k, v)| (k, v.len())).collect::<Vec<_>>(); | |
result.sort_by_key(|(_, n)| *n); | |
for (k, v) in result { | |
println!("{}: {}", k, v) | |
} | |
} | |
fn colors() -> impl Iterator<Item = (u8, u8, u8)> { | |
(0..=255).flat_map(move |r| (0..=255).flat_map(move |g| (0..=255).map(move |b| (r, g, b)))) | |
} | |
fn distance((r1, g1, b1): (u8, u8, u8), (r2, g2, b2): (u8, u8, u8)) -> u32 { | |
((r1 as i32 - r2 as i32).pow(2) | |
+ (g1 as i32 - g2 as i32).pow(2) | |
+ (b1 as i32 - b2 as i32).pow(2)) as u32 | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment