Früher verwendeten alle 1337 Kinder Text-Fader in Chatrooms. Ich weiß nichts über euch, aber ich möchte mich cool fühlen wie sie. Das einzige Problem ist, dass ihre alten Skripte und Anwendungen stark an die Software gekoppelt waren, für die sie entwickelt wurden, sodass ich diese erstaunliche Funktionalität nicht einfach nutzen kann, wo immer ich will. Ich möchte auch, dass die Lösung leicht portierbar ist, damit Sie den Code so klein wie möglich machen müssen, damit er auf meine Diskette passt (ich würde lieber nur eine Diskette bei mir haben, aber wenn Ihr Quellcode zu groß ist Ich kann mehr als eine tragen : P ).
Eingang
- Eine Liste der Farben (RGB, Hex, Namen usw.)
- Zu formatierender Text
Ihr Programm sollte erwarten, dass die Liste der Farben mindestens 2 Farben enthält.
Der zu formatierende Text kann eine beliebige Länge größer als Null haben und die Zeichen sind auf druckbare ASCII beschränkt. (Hinweis: Bei längeren Texteingaben müssen Sie möglicherweise Zwischenfarben für aufeinanderfolgende Zeichen wiederverwenden.)
Ausgabe
Der Ausgabetext sollte sich in keiner anderen Weise als Schriftart und / oder Markup / Styling vom Eingabetext unterscheiden (Hinweis: Wenn Ihre Ausgabe HTML-Markup enthält, müssen Sie die Eingabe in HTML codieren). Sie können Text mit Markup / Styling (HTML-Stil-Tags, Konsolenfarben usw.) oder ein Bild des ausgeblendeten Textes ausgeben. Alle Farbfelder sollten in der Ausgabe vorhanden sein, es sei denn, die Eingabe enthält nicht genügend Zeichen, um diese Anforderung zu erfüllen. Wenn dies der Fall ist, konsultieren Sie die Prioritätsregeln, um zu bestimmen, welche Farbfelder in Ihrer Ausgabe vorhanden sein sollen. Die Reihenfolge oder diese Farben in Ihrer Ausgabe sollten weiterhin die Eingabereihenfolge sein.
Farbprioritätsregeln
- Für den Fall, dass die Eingabe ein Zeichen ist, wird die erste Farbe verwendet
- Falls nur zwei Zeichen vorhanden sind, werden die erste und die letzte Farbe verwendet
- Falls es mehr als drei Farben und mehr Farben als Zeichen gibt, sollten die erste und die letzte Farbe priorisiert werden, dann die restlichen Farben in ihrer eingegebenen Reihenfolge.
- Falls mehr Zeichen als Farben vorhanden sind, sollten die Zeichen mithilfe von Zwischenfarben von einer Farbe zur nächsten ausgeblendet werden
Beispiele (Prioritätsregeln 1-3):
# Farben | Farbe 0 | ... | Farbe n | Text
3 ff0000 0000ff ffff00 M
-> -> ->
3 ff0000 0000ff ffff00 hi
4 ff0000 0000ff ffff00 0fff00 sup
Um klar zu sein, sollte die Textfarbe von einem Hex-Farbfeld zum nächsten verblassen. Das Überblenden muss nicht perfekt gleichmäßig sein, aber es sollte kein abrupter Farbwechsel sein, es sei denn, es gibt nicht genügend Zeichen, um gut auszublenden. Im Allgemeinen wird diese Überblendung erreicht, indem Zwischenfarben für jedes der Zeichen ausgewählt werden, indem die RGB-Werte um ein Intervall erhöht / verringert werden, das durch die Anzahl der Zeichen, mit denen Sie arbeiten müssen, und den Unterschied zwischen den Farben bestimmt wird. Wenn wir zum Beispiel eine einzelne Farbe zwischen (# ff0000) und (# 000000) benötigen, können wir wählen, wie sie genau in der Mitte sitzt. Die optimale Ausgabe sieht ziemlich hübsch aus.
Beispiel (Prioritätsregel 4):
3 ff0000 ff7f00 f0ff00 To be or not to be, that is the question...
->
-OR-
<span style="color:#ff0000;">T</span><span style="color:#ff0600;">o</span><span style="color:#ff0c00;"> </span><span style="color:#ff1200;">b</span><span style="color:#ff1800;">e</span><span style="color:#ff1e00;"> </span><span style="color:#ff2400;">o</span><span style="color:#ff2a00;">r</span><span style="color:#ff3000;"> </span><span style="color:#ff3600;">n</span><span style="color:#ff3c00;">o</span><span style="color:#ff4300;">t</span><span style="color:#ff4900;"> </span><span style="color:#ff4f00;">t</span><span style="color:#ff5500;">o</span><span style="color:#ff5b00;"> </span><span style="color:#ff6100;">b</span><span style="color:#ff6700;">e</span><span style="color:#ff6d00;">,</span><span style="color:#ff7300;"> </span><span style="color:#ff7900;">t</span><span style="color:#ff7f00;">h</span><span style="color:#fe8500;">a</span><span style="color:#fe8b00;">t</span><span style="color:#fd9100;"> </span><span style="color:#fc9700;">i</span><span style="color:#fb9d00;">s</span><span style="color:#fba400;"> </span><span style="color:#faaa00;">t</span><span style="color:#f9b000;">h</span><span style="color:#f9b600;">e</span><span style="color:#f8bc00;"> </span><span style="color:#f7c200;">q</span><span style="color:#f6c800;">u</span><span style="color:#f6ce00;">e</span><span style="color:#f5d400;">s</span><span style="color:#f4da00;">t</span><span style="color:#f4e100;">i</span><span style="color:#f3e700;">o</span><span style="color:#f2ed00;">n</span><span style="color:#f1f300;">.</span><span style="color:#f1f900;">.</span><span style="color:#f0ff00;">.</span>
Bitte geben Sie in Ihrer Antwort an, wie Ihre Ausgabe angezeigt werden soll (als HTML, in einer Konsole, als Bild usw.).
* Alle schwarzen Hintergründe dienen nur der Farbbetonung und sind nicht erforderlich
Wertung
Dies ist Code-Golf , daher gewinnt die kürzeste Antwort (in Bytes).
Wenn Sie es schaffen, einzelnen Charakteren Fade hinzuzufügen, werde ich für immer denken, dass Sie cool sind (aber kein Bonus, um zu punkten, da dies für einige langs nicht fair ist)
#000000
und#ff0000
ist nicht#800000
.000000
undff0000
sollteb40000
(255*sqrt((0+1)/2)
) seinAntworten:
JavaScript (ES6), 290 Byte
quelle
Pyth, 126 Bytes
Obligatorischer quadratischer Mittelwert anstelle des direkten arithmetischen Mittelwerts.
Probieren Sie es online aus!
Beispielausgabe:
quelle
Java,
702662 ZeichenZwei Funktionen golfen:
Da kann das niemand lesen: Hier sind beide Funktionen in der ungolfed Version in einer Klasse:
Hier haben Sie eine Obergrenze für Ihren eigenen Code. Die Verwendung erfolgt durch Aufrufen
colorize
(oder c in der Golfversion) und Übergeben des Textes und einer Reihe von Hex-Farbcodes. Die Funktion gibt einen String mit HTML-Tags zurück, wie es das OP getan hat. Sie benötigen also eine Möglichkeit, den HTML-Code zu rendern.Der Algorithmus ist einfacher, wie die Frage aussieht. Das erste Zeichen erhält immer die erste Farbe, das letzte immer die letzte.
Wenn der Text mehr Farben als Zeichen enthält, durchlaufen wir einfach den Text und die Farben und wenden diese an.Der lustige Teil ist der mit den Überblendungen: Ich begann damit, herauszufinden, in welcher Entfernung die Farben auf dem Text sind. Grundsätzlich berechne ich den Rot-, Grün- und Blauunterschied zwischen zwei bestimmten Farben und füge dann einen Teil dieses Unterschieds zur ersten Farbe hinzu, je nachdem, wo sich das Zeichen zwischen den Farben befindet. Wenn das Intervall zweier Farben verlassen wird, beginnen wir mit den nächsten beiden Farben von neu. Dies wird für alle außer dem letzten Zeichen wiederholt, von dem wir wissen, dass es immer die letzte Farbe ist. Dies ergibt ein sehr schönes Ausbleichen.Diese Frage hat sehr viel Spaß gemacht! Vielen Dank!
Aktualisierung
Jetzt behandle ich nicht alle Fälle speziell. Stattdessen schneide ich die Farben, wenn es zwei sind, und wende die Überblendfunktion auf jede Zeichenfolge an. Wenn mehr Farben als Text vorhanden sind, werden die Farben zugeschnitten und die Überblendfunktion funktioniert genau wie eine einfache Zuordnung.
quelle