Die Herausforderung
Wenn die beiden hexadezimalen Zeichenfolgen (jeweils 6 Zeichen lang, XXXXXX und YYYYYY) RGB-Werte (von 000000
bis FFFFFF
einschließlich) und eine positive Ganzzahl N ungleich Null darstellen, wird ein linearer Übergang der von XXXXXX zu YYYYY erzeugten N + 2-Farben angezeigt das würde zu einem Farbverlauf führen.
Beispiel
Eingang
FF3762
F08800
9
Ausgabe
Bitte beachten Sie, dass ich in unserem Beispiel 9 Zwischenschritte zwischen den beiden Farben angefordert habe. Daher werden 11 Linien von der Anfangsfarbe bis zur Endfarbe angezeigt
FF3762
FD3F58
FC474E
FA4F44
F9573A
F75F31
F66727
F46F1D
F37713
F17F09
F08800
Vorbehalte
Während ich mit einem einfachen linearen Prozess gearbeitet habe, bei dem die ganzzahligen Werte für die Zwischenfarben abgeleitet wurden, bevor sie wieder in hexadezimal konvertiert wurden, variieren Ihre Methoden möglicherweise. Bitte beachten Sie die verschiedenen Möglichkeiten, wie Sie Ihre Zahlen entsprechend auf- / abrunden können .
Testen
Um dies interessant zu machen, habe ich ein Snippet bereitgestellt, mit dem Sie Ihren Code testen können, einschließlich einer Schaltfläche, mit der Sie zwei zufällige Farben zum Testen Ihres Codes erhalten. Die Anzeige Ihrer Ergebnisse ist optional, wird jedoch empfohlen!
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) Sie können auf zwei zufällige Farben für Ihren Test zugreifen, indem Sie auf die Schaltfläche "Ihre zwei Farben" klicken. 2) Die Anzahl der Zwischenschritte entspricht der Anzahl der Zeichen in Ihrem PPCG-Benutzernamen einschließlich Leerzeichen, im Fall von "WallyWest" sind es 9 (wie in meinem obigen Beispiel). 3) Führen Sie Ihren Code mit den beiden Farben und der Zahl aus. Sobald Sie Ihre generierte Liste erstellt haben, haben Sie die Möglichkeit, Ihre Ausgabe in den Textbereich einzufügen und von diesem wegzugehen, um den generierten Farbverlauf zu erhalten.
Mein Beispiel ist hier gezeigt:
Ich muss zugeben, das sieht ziemlich genial aus!
Bitte beachten Sie: Wie bereits erwähnt, ist es optional, das Testen Ihrer Ausgabe mit dem Snippet zu zeigen, aber es wird empfohlen! :)
Ausgabe
Die Listenausgabe muss in Form von N + 2 Gruppen von 6-stelligen Hex-Zahlen erfolgen, die durch Zeilenvorschübe (\ n) getrennt sind, wie in meinem obigen Beispiel gezeigt. Die Ausgabe kann in Form von separaten Linien, Raum / kommagetrennte Liste, ein Array oder was auch immer am besten für Ihre Sprache geeignet ist ... (Danke @nimi für die Heads - up) Bitte denken Sie daran, dass , wenn Sie planen Ihren Code testet mit Der Ausschnitt, wie auch immer Sie die einzelnen "Farben" trennen, liegt bei Ihnen.
Regeln
Das ist Code-Golf, also wird die kürzeste Lösung in Bytes zum Gewinner gekrönt. Natürlich keine Lücken . Die Eingabe muss die beiden Zeichenfolgen und eine Zahl akzeptieren (die, wie gesagt, der Anzahl der Buchstaben in Ihrem Benutzernamen bei PPCG entspricht, sodass die resultierende Ausgabe immer mindestens drei Zeilen lang ist.
Antworten:
MATL , 31 Bytes
Dies verwendet eine lineare Interpolation mit Abrundung. Eingabeformat ist
Probieren Sie es online!
Grafische Ausgabe, 31 Bytes
Dies ist das Ergebnis für Eingaben
Probieren Sie es in MATL Online aus ! Der Dolmetscher ist derzeit experimentell. Wenn Sie keine Ausgabe erhalten, aktualisieren Sie die Seite und klicken Sie erneut auf "Ausführen".
quelle
JavaScript (ES6), 130 Byte
quelle
Dyalog APL , 44 Bytes
Prompts für N , dann B eginning-Farbe, dann E nden-Farbe. Bedürfnisse,
⎕IO←0
die auf vielen Systemen Standard sind.h[
...]
index in h (was einen Wert hat, wenn wir den Inhalt der Klammer ausgewertet haben)N←⎕
Eingabeaufforderung für numerisches N (4)1+
addiere eins zu N (5)(
...)÷
teile damit das Ergebnis von ...⍞⍞
Eingabeaufforderung für zwei Zeichenfolgen ["7E0E7E", "FF3762"](
...)∘⍳¨
finden Sie die Indizes der Zeichen der einzelnen Zeichenfolgen in ...⎕D,⎕A
D igits gefolgt von A lphabeth←
zugeordnet zu hjetzt haben wir "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ"
E B←
Ordnen Sie die Indizes E und B zu [[7,14,0,14,7,14], [15,15,3,7,6,2]]-/
subtrahieren und schließe B von ein E ein [[-8, -1, -3,7,1,12]]das bisherige Ergebnis ist [[-1.6, -0.2, -0.6,1.4,0.2,2.4]]
(
...)×
multipliziere dies mit ...2+N
zwei plus N (6)⍳
erste ganze Zahlen [0,1,2,3,4,5]das ergibt uns [[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 ], ...]
B∘+¨
addiere B zu jedem [[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], ... ]⌊
abrunden [[15,15,3,7,6,2], [13,14,2,8,6,4], [11,14,1,9,6,6], ...]↑
Liste der Listen in Tabelle umwandelnhier indizieren wir in h , geben
das ist das gleiche wie
und druckt als
TryAPL online!
quelle
Pyth - 35 Bytes
Schrecklich golfen, einfach aufgegeben.
Probieren Sie es hier online aus .
Beispiel:
quelle
7cb472 93fb8a 8
beim Testen Ihres Codes nicht 10 Zeilen eingegeben und nur 10 Zeilen ausgegeben haben?93fb8a
... Hat Ihr Code zwei Zeilen mit demselben Wert ausgegeben?PowerShell v2 +,
176159150 BytesNimmt die Eingabe als zwei Zeichenfolgen und eine Zahl und konvertiert dann die Startzeichenfolge in ein Array von Zeichenfolgen, die auf jeweils zwei Zeichen aufgeteilt sind, speichert diese in
$x
. Wir geben dann$a
als Startabschnitt aus und machen eine Schleife von++$n
bis1
(um eine ordnungsgemäße Absicherung zu gewährleisten).Bei jeder Iteration wird der Helfer
$j
auf die aktuelle Nummer gesetzt (wird später verwendet, um sicherzustellen, dass wir die richtige Anzahl von Schritten zwischen der aktuellen Position und dem Ziel haben) und der nächste Schritt wird basierend auf einer Schleife berechnet$x
.Jede innere Schleife ist nur eine Aufgabe. Wir setzen mit dem Operator ormat
$x
an der entsprechenden Stelle einen neuen String gleich. Das hier gibt eine zweistellige hexadezimale Ausgabe an, und die Eingabe ist die rechte Seite des Operators. Powershell verfügt über einen native hexadezimal-Dezimal - Operator , so dass dieser lange Pars-verschachtelte Ausdruck ist , dass Operator unter Verwendung der aktuellen hex in Zahlen umwandeln, um den Unterschied zu finden Subtrahieren noch zu gehen (done durch dynamische Aufspaltung hier genauso wie wir taten , und mit modulo das richtige Element auswählen), dividieren durch (PowerShell rundet standardmäßig durch Banker) und diesen Schrittzähler vom aktuellen Hex abziehen, um das zu erhalten, was unser nächstes Hex sein muss."{0:x2}"
-f
x2
-f
0x
$b
$a
$j
verbleibenden Schritte und zu einem[int]
Das Ergebnis dieser Berechnung wird in
$x
drei hexadezimale Elemente zurückgespeichert. Das wird in Parens gekapselt, um eine Kopie in der Pipeline zu erstellen, und-join
zu einer einzelnen Zeichenfolge zusammengefasst. Alle diese resultierenden Zeichenfolgen verbleiben in der Pipeline und werden implizitWrite-Output
bei der Programmausführung ausgegeben .Beispiel
Ich habe 0ba7c5 und 6c0e50 für meine beiden Farben erhalten, und TimmyD enthält 6 Zeichen.
quelle
Python 2, 189 Bytes
quelle
[Groovy] Final Update (199 Bytes) - Gemäß Anforderung
Nicht Golf
Golf
Versuchen Sie das Finale hier: https://groovyconsole.appspot.com/script/5130696796405760
ALTE VERSIONEN UNTEN, ABGELEHNT VON OP
Groovy (123 Bytes)
Golf
Nicht Golf
Eingänge
Ausgabebeispiel
Ergebnisse in
Probieren Sie es selbst aus: https://groovyconsole.appspot.com/script/5184465357766656
Mit Hex Conversions enthalten
Ich schätze, ich betrüge auch irgendwie ... Hier ist das Skript mit hex:
Neuer Code mit Hex-Konvertierungen:
188 Zeichen beim Golfen:
Ausgabe für 000000 an FFFFFF und 16 (Benutzername Länge)
quelle
{s-> s.split("(?<=\\G.{2})").collect{Integer.parseInt(it,16)}}('FFFFFF')
Ergebnisse in [255,255,255] Mit dieser Konvertierung kann ich meinem Code 62 Byte hinzufügen, wenn Sie dies wirklich möchten.R, 68 Bytes
Es gibt eine integrierte Funktion, die zwei Farben interpoliert:
Eingang:
Ausgabe: ein Vektor mit Werten
Für die Farbspezifikation in R ist ein Raute-Symbol erforderlich.
Zeichnen wir etwas wie eine Funktion:
quelle
FF3762 F08800 15
?C
175169168 BytesUngolfed:
Danke an @ h-walters für das Abschneiden von 5 Bytes!
quelle
puts
Syntax noch einmal tut?printf()
, aber es wird keine Formatierung durchgeführt, sondern nur die angegebene Zeichenfolge wie sie ist gedruckt und eine neue Zeile hinzugefügt.puts("")
in den dritten Teil der ersten for - Schleife (;
nachdem Sie a,
Before) ... +0 Bytes. Auf diese Weise können Sie jedoch die geschweiften Klammern nach der zweiten Schleife entfernen ... -2 Bytes. Sie können ein weiteres Byte speichern, indem Sie 3 aus entfernenj<3
und durch Ihreprintf
Anweisung ersetzen (dies ist hinterhältig ... printf gibt nur 2 zurück, muss jedoch noch das dritte Mal ausgewertet werden).0
in verwendenj=0
. Sobald hier alles eingerichtet ist, sollte Ihr Programm 5 Bytes kürzer und mindestens 50% fremd sein.sh + ImageMagick, 81 Bytes
Verwendung:
("-tiefe 8" ist nicht erforderlich, wenn Ihre IM mit 8bpp als Standard kompiliert wurde.)
quelle