Skip to content

Instantly share code, notes, and snippets.

@rust-play
Created December 9, 2019 07:58
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save rust-play/0f0782af4a260ac3b25a718832350f73 to your computer and use it in GitHub Desktop.
Save rust-play/0f0782af4a260ac3b25a718832350f73 to your computer and use it in GitHub Desktop.
Code shared from the Rust Playground
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