Sie sind Webentwickler und Ihr Chef hat beschlossen, die Website des Unternehmens zu aktualisieren. Er hat entschieden, dass weniger Farbe besser ist, aber er möchte, dass die Site gleich aussieht. Sie entscheiden zu Recht, dass er keine Ahnung hat, wovon er spricht, aber Sie werden es trotzdem versuchen, weil Sie sich langweilen. Da das Unternehmen über Tausende von Webseiten verfügt und jede über ein eigenes CSS verfügt, entscheiden Sie sich, ein Skript zu schreiben, um die erforderlichen Änderungen vorzunehmen. Parsing von HTML nicht erforderlich.
Alle Seiten verwenden derzeit eine Zeichenfolge wie rgb(255,0,0)
für eine Farbe. Angesichts der drei Dezimalzahlen , die die RGB - Werte eines CSS - Farbattribut (in dieser Reihenfolge), Rückgabe oder drucken Sie die kürzeste String - Darstellung dieser Farbe, so dass es für CSS verwendbar ist wie so: color:<your-result-here>;
.
Hier finden Sie eine vollständige Tabelle der gültigen CSS-Farbschlüsselwörter . Sie sind unabhängig von Groß- und Kleinschreibung.
Beispiele:
Beachten Sie, dass Farben mit 12 oder 24 Bit definiert werden können. Das Muster #ABC
ist eine kürzere Version von #AABBCC
. Chuck Norris ist eine Farbe .
Ihr Programm akzeptiert nur 3 Ganzzahlen, keine Zeichenfolge (mit Ausnahme des später erwähnten "Bonus" ).
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)
Wertung / Regeln
- Kürzester Code gewinnt!
- Standard-Schlupflöcher sind mit Ausnahme der eingebauten nicht zulässig.
- -50% Bytes (der Bonus wird abgerundet), wenn Sie eine gültige * Farbauswahl akzeptieren und die kürzeste ausgeben. So
DarkSlateBlue
würde ausgeben#483D8B
,#F00
Ausgängered
usw.- * Dies schließt nur RGB, Hex-Codes und Namen ein.
- Beachten Sie, dass einige Farben aufgrund von X11 alternative Namen haben (wie
Fuchsia
undMagenta
, oderCyan
undAqua
). Die alternativen Namen sind in der verknüpften Liste der CSS-Farbschlüsselwörter gemäß dem W3-Standard enthalten.
- CSS3 ist Turing Complete . Das wäre ein Kopfgeld wert.
Bearbeiten:
- BITTE LAUFEN SIE IHREN CODE AUF DEN TESTFÄLLEN!
#000
? Und wenn weniger als 6 Stellen zulässig sind, warum nicht#0
? w3schools.com/cssref/css_colors.asp , die CSSAntworten:
Perl, 212 - 50% = 106 Bytes
Mit hinzugefügten Zeilenumbrüchen:
Testfälle
Ausgabe
Perl, kein Bonus, 144 Bytes
Mit hinzugefügten Zeilenumbrüchen:
Graphics::ColorNames
ist kein Kernmodul, aber es gibt es seit 2001. Möglicherweise müssen Sie es installieren über:Die hexadezimale Darstellung wird bevorzugt, wenn der Farbname dieselbe Länge hat.
Testfälle
Ausgabe
quelle
C # 6 527 Bytes / 2 Bonus = 264
EDIT: Woot! Ich habe endlich die Bonusantwort mit einer niedrigeren Punktzahl als die Basisantwort bekommen!
Ich habe nur eine Funktion geschrieben. Es erfordert eine
using
Erklärung (enthalten.)C # verfügt über eine schöne Liste bekannter Farben, besteht jedoch darauf, den Alpha-Kanal einzuschließen. Die bekannten Farben umfassen auch alle Systemfarben, von denen zwei Namen weniger als 7 Zeichen lang sind, so dass diese entfernt werden mussten.
Hier ist die Bonuslösung, die folgende Formate unterstützt:
12, 34, 56
#123
#123456
DarkSlateBlue
Vollständig golfen:
Einrückung und neue Zeilen für Klarheit:
C #, 265 Bytes
Hier ist die Grundlösung.
Einrückung und neue Zeilen für Klarheit:
quelle
Mathematica
207 242500-250 = 250 BytesUpdate:
Dies funktioniert mit Eingaben, die aus RGB-Tripeln, Farbnamen oder Hex-Zahlen bestehen.
Die Farbtiefenausgabe (12 Bit) funktioniert jetzt dank eines hervorragenden Artikels zur Farbtiefenreduzierung einwandfrei . Die Grundidee ist, dass, wenn ein RGB-Tripel {r, g, b}, wobei r, g und b im Bereich von 0-255 liegen (dh hex 00-ff), ohne Verlust als Zahl in dargestellt werden kann Wenn der Bereich 0-15 (dh 0-f) ist, kann man die 3-stellige Hex-Zahl anstelle der 6-stelligen Zahl verwenden. Es stellt sich heraus, dass dies immer dann der Fall ist, wenn 17 (dh 255/15) r, g und b dividiert.
Es werden nur integrierte Funktionen verwendet. Mathematica hat Regeln zum Ersetzen von HTML-Farbnamen durch RGB-Tripel. Zum Beispiel ist eine Regel
"Teal"-> RGBColor[0, 128, 128]
. Wenn solche Regeln invertiert werden, können RGB-Werte (neu kalibriert auf den Bereich {0, 255}) durch Farbnamen ersetzt werden.Beispiele
Kommentiert, Ungolfed Code
(* Regeln zum Ersetzen eines Farbnamens durch ein Farbfeld, z
RGBColor{255,17,0}
(* Regeln zum Ersetzen einer Liste mit 3 ganzen Zahlen durch den jeweiligen Farbnamen, falls vorhanden. Und die gleichen Regeln, umgekehrt. *)
(* testet, ob eine 24-Bit-Hex-Farbe verlustfrei als 12-Bit-Farbe dargestellt werden kann.
reduce
Kann den 24-Bit-Ausdruck in einen 12-Bit-Ausdruck ändern. *)(* RGB-Liste in eine Hex-Nummer geändert *)
(* Hex-Nummer in RGB-Liste geändert. *)
(* Weitere Conversions *)
(* wählt den kürzesten gültigen CSS-Ausdruck einer Farbe *)
(* konvertiert jede Eingabe in eine RGB-Liste und ruft
f
*)quelle
FF
16? Also sollte das machen#FFFFFF
, was länger ist als Weiß. Ich finde es#000
ungewöhnlich, werde mich aber mit den Macken von CSS befassen, um sicherzugehen.#FFF
ist dasselbe wie#FFFFFF
(alle Bits eins), was dasselbe ist wiewhite
. Auch#0
ist ungültig, weil es weder 24-Bit noch 12-Bit istCoffeeScript,
411 404 388 384382/2 = 191UPD: Ich bin mir ziemlich sicher, dass es das Endergebnis ist
Hoffe, es ist okay zu benutzen
window.document.*
.rgb
Funktion prüfen undeval
anrufen.Testergebnisse
Kommentierter Code
Dies spart einige Bytes.
q
Die Funktion platziert die Eingabefarbe zudocument.body.style.color
und erhält die kompilierte Farbe alsrgb(...)
. Auch wird das Ergebnis wiehexColor:inputColor
in gespeichertd
. Beachten Sie dieeval
Verwendung.rgb(100,100,100)
ist ein gültiger JavaScript-Funktionsaufruf mit drei Zahlenargumenten.rgb
Die Funktion konvertiert Argumente in eine einzelne 24/12-HEX-Notation (like#fff
,#f0f0f0
).Teilen Sie die Zeichenfolge in ein Array mit Farbnamen, und erstellen Sie ein Suchobjekt.
Und zurück HEX, wenn keine kürzere Variante in
d
.quelle
Stylus,
238234/2 = 117Mehr CSS-ähnliche Lösung! Der Stylus bietet bereits eine hervorragende Unterstützung für die Farbmanipulation, sodass die gewünschte Funktion recht klein ist und nicht viel Golf spielt.
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}}
Teste es hier
quelle
Matlab 617
Viel Vorverarbeitung und Hardcoding. Die minimale Menge an Farbnamen, die Sie berücksichtigen müssen, sind diese. Schade, dass Matlab keine Farbnamen eingebaut hat = /
quelle
r=0;g=16;b=0;
dort belassen , obwohl er nicht in Ihrer Punktzahl enthalten ist.Python 3,
857795 BytesWenn alle akzeptierten Farben manuell angegeben werden mussten, erhöhte sich die Anzahl der Bytes für diese: /
c(a)
nimmt ein Argument,a
das in Form von kommtrgb(#,#,#)
. Daraus werden das rgb und die eckigen Klammern entfernt und die Zeichenfolge wird dann durch Kommas in ein Array aufgeteilt.c(x,y,z)
Es werden 3 Zoll benötigt, um die Werte für r, g und b der RGB-Farbe zu verarbeiten. Wir fügen diese in einem Array zusammena
. Wir verwenden dann die in Python integriertehex
Funktion, die eine Zahl der Basis 10 in eine Zahl der Basis 16 in unserem Array umwandelt und eine Hex-Zeichenfolge erstellt (dies erfolgt in derfor
Schleife). Dieif
Anweisungen konvertieren Farben000000
nach000
und ersetzen die bekannten Farben durch ein Wörterbuch.Hier ist es (danke an @undergroundmonorail für den Tipp
;
in Python):Alte Version:
Vielleicht füge ich den Bonus hinzu, ich weiß es noch nicht. Es könnte definitiv mit 50% Bytes auskommen!
-Toastrackenigma
quelle
;
, wobei die Einrückung erhalten bleibt . zum Beispiel:a=a[4:-1].split(",");b=""
. jederif
,else
,for
,while
, usw. Block mit nur einer Zeile geschrieben werden kann alsif b in k:b=k[b]
.Schließlich, können Sie eine Menge Ihre Leerzeichen in der Mitte der Linien verlieren, zum Beispielk = {
->k={
undreturn "color:
->return"color:
re.findall()
(so wird auch notwendigimport re
): pastebin.com/rQHqgxXSJavaScript (ES6), 499
611Bearbeiten Die Testfälle wurden der Frage hinzugefügt
Hinweis: Ich habe nur die Farbnamen beibehalten, die kürzer als das Hex-Äquivalent sind.
Anmerkung 2: Dies kann sicherlich mehr Golf gespielt werden ...Weniger golfen
quelle
{f00:"red";"008000":"green"}
.