Chamäleon Herausforderungen sind anscheinend eine schlechte Sache . Schade, Chamäleons sind wunderschöne Kreaturen. Zeit für Veränderung!
Wie wir alle wissen, haben viele Chamäleons eine bemerkenswerte Fähigkeit, sich in ihre Umgebung einzufügen, indem sie die Farbe ihrer Haut verändern. Welches ist auch das Ziel dieser Herausforderung.
Herausforderung
Stellen Sie sich ein Quadrat mit neun Pixeln vor. Acht Pixel sind die Umgebung. In der Mitte befindet sich das Chamäleon.
So was:
Das Chamäleon versucht auf natürliche Weise, sich in seine Umgebung einzufügen. Dies geschieht, indem die Farbe auf den Durchschnitt der umgebenden Pixel geändert wird. In diesem Fall würde das Chamäleon also seine Farbe in ändern .
Zielsetzung
Geben Sie unter Berücksichtigung der Farben der umliegenden Pixel die Farbe des Chamäleons aus.
Die Farbe des Chamäleons ist definiert als die Summe aller Rot-, Grün- und Blautöne in den Pixeln ÷ 8.
Eingang
Eine Reihe von Farbwerten für die acht umliegenden Pixel, beginnend oben links und im Uhrzeigersinn, wie folgt:
[[<red>,<green>,<blue>],[<red>,<green>,<blue>],[<red>,<green>,<blue>],[<red>,<green>,<blue>],[<red>,<green>,<blue>],[<red>,<green>,<blue>],[<red>,<green>,<blue>],[<red>,<green>,<blue>]]
Sie können Eingaben in einer anderen Form empfangen, sofern diese aus acht Dreifachen der Dezimalzahlen von 0 bis 255 bestehen.
Wenn Sie Eingaben in einer anderen Form erhalten, müssen die Zahlen entweder eine konsistente Länge haben oder ein nicht numerisches Trennzeichen dazwischen haben. Tripel müssen ein Trennzeichen haben, es sei denn, sie sind mit 0 bis 9 Ziffern aufgefüllt. (ZB 044200255044200255044200255044200255044200255044200255044200255044200255
ist gültig, so sind 44 200 255 44 200 255 44 200 255 44 200 255 44 200 255 44 200 255 44 200 255 44 200 255
und 44?200?255$44?200?255$44?200?255$44?200?255$44?200?255$44?200?255$44?200?255$44?200?255
, ist aber 4420025544200255442002554420025544200255442002554420025544200255
nicht.)
Ausgabe
Ein Array / String / etc., das die Farben des mittleren Pixels (in Dezimalzahl) enthält, wie folgt:
[<red>,<green>,<blue>]
Für den Fall, dass Sie etwas anderes als ein Array ausgeben: Zahlen müssen entweder eine konsistente Länge haben oder ein nicht numerisches Trennzeichen dazwischen haben. (ZB 044200255
ist gültig, ist 44 200 255
aber 44200255
nicht gültig .)
Die Zahlen dürfen keine Nachkommastellen enthalten, sind also zB 44.0 200 255.0
ungültig.
Runden
Die Ausgabe muss auf die nächste Ganzzahl gerundet werden. (Die Hälften müssen aufgerundet werden.) Wenn beispielsweise die Summe aller Roten 1620 ist , müssen Sie 203
nicht 202
oder ausgeben 202.5
.
Beispiele
Die Bilder dienen nur zur Veranschaulichung. Das mittlere Pixel ist die Ausgabe, die umgebenden Pixel sind die Eingabe.
Eingang:
[[200,200,200],[200,200,200],[200,200,200],[200,200,200],[200,200,200],[200,200,200],[200,200,200],[200,200,200]]
Ausgabe:
[200,200,200]
Eingang:
[[0,0,0],[255,255,255],[0,0,0],[255,255,255],[255,255,255],[0,0,0],[255,255,255],[0,0,0]]
Ausgabe:
[128,128,128]
Eingang:
[[0,200,200],[200,0,200],[200,200,0],[60,200,0],[200,0,200],[0,200,220],[2,200,0],[0,0,0]]
Ausgabe:
[83,125,103]
Eingang:
[[0,56,58],[65,0,200],[33,200,0],[60,33,0],[98,0,200],[0,28,220],[2,200,0],[99,0,5]]
Ausgabe:
[45,65,85]
Einsendungen können ein vollständiges Programm oder eine Funktion sein. Standard I / O und Schlupfloch Regeln gelten.
Antworten:
MATL,
84 BytesProbieren Sie es online!
4 Bytes gespart dank Becher!
Erläuterung:
quelle
s8/
mitXm
(dhmean
nach unten den Spalten). Möglicherweise können Sie auch die Eingabe angeben3 x 8
, um den3e!
YmYo
sollte es tun ... nehmen Sie einfach die Eingabe wie[[R,G,B];[R,G,B];...]
mit Semikolons zwischen den RGB-Zeilen.Yo
Runde, oder rund um die am nächsten mit Riegeln aufgerundet wird? Die Herausforderung will das letztere.Python, 38 Bytes
Rundet den Durchschnitt (in Richtung der nächsten Ganzzahl, wobei die Hälften aufgerundet werden) durch Addition von 4 zur Summe und anschließender Division durch 8 über die Bitverschiebung
>>3
.quelle
Gelee , 5 Bytes
Testsuite . (Leicht modifiziert, um alle Testfälle auf einmal zu überprüfen.)
quelle
C
15112310391Erfordert 24 an das Programm übergebene Parameter in der Reihenfolge RGBRGB ... und gibt das RGB-Triplett ohne Zeilenumbruch aus.
quelle
main(c,v)char**v;{
2 Bytes sparen? Auch +1 für <3 im Quellcode!Pyth , 8 Bytes
Testsuite .
quelle
Pyke, 7 Bytes
Probieren Sie es hier aus!
quelle
J, 11 Bytes
Nimmt die Eingabe als 8x3-Array, wobei jede Zeile ein RGB-Wert ist
Erläuterung
quelle
JavaScript,
756455 BytesEine JavaScript-Antwort zum Einstieg.
Bearbeiten: 11 Bytes dank Dendrobium und weitere 9 dank Neil gespeichert .
quelle
a=>a.reduce((p,c)=>p.map((e,i)=>e+c[i])).map(x=>x+7>>3)
[[0,200,200],[200,0,200],[200,200,0],[60,200,0],[200,0,200],[0,200,220],[2,200,0],[0,0,7]]
ergibt 83, 125, * 104 * anstelle von 83, 125, * 103 * mit Ihrem Code.ceil
. 64 Bytes:a=>a.reduce((p,c)=>p.map((e,i)=>e+c[i])).map(x=>(x/8).toFixed())
x+4>>3
sollte richtig runden.Lisp -
180179 BytesEDIT: Für weiteres Golfen formatiert.
Tut es den richtigen Weg , denke ich. Ungetestet.
a
ist nur durchschnittlichr
ist die richtige Rundung dieser Herausforderung, da Lispround
auf die nächste gerade Ganzzahl rundetc
erledigt die eigentliche Arbeit, nimmt Eingaben im Format auf'((R G B) (R G B) (R G B) (R G B) (R G B) (R G B) (R G B) (R G B))
und gibt eine'(R G B)
Liste mit der Antwort zurück.quelle
Nim ,
13412611510878 BytesDefiniert eine anonyme Prozedur, für die die Eingabe als doppelt verschachtelte Sequenz übergeben und als Array mit 3 Elementen ausgegeben werden muss. Die Prozedur kann nur als Argument für eine andere Prozedur verwendet werden. Verwenden Sie zum Testen den folgenden Wrapper:
Eine Nim-Sequenz ist ein Array mit einem vorangestellten
@
Wert@[1, 2, 3]
. Ein Beitrag zu diesem Verfahren könnte daher sein:quelle
Japt, 8 Bytes
Versuch es
Alternative 9 Bytes
Versuch es
quelle
Viertens (gviertens) , 65 Bytes
Probieren Sie es online!
Nimmt Eingaben als Stapelargumente (RGB-Reihenfolge)
Erläuterung
Für jeden der 3 Farbkanäle:
Code-Erklärung
quelle
Runenverzauberungen , 41 Bytes
Probieren Sie es online!
Verwendet 3 Befehlszeiger, um die Eingabe in der richtigen Reihenfolge zu analysieren (da die Eingabewerte immer in der richtigen Reihenfolge sind
RGB, RGB,...
) und so lange, wie keine der drei IPs zusammengeführt werden und nichti
zu früh zum nächsten Befehl read nput übergegangen wird (daher alle Leerzeichen), es funktioniert und spart Bytes, da der Stapel ständig gedreht werden muss , um den korrekten Wert für die Berechnung der Summen oben zu behalten.Technisch enthält dieser Code einen Fehler bei der korrekten Rundung von
x.5
Werten für einige Eingaben. Dies liegt jedoch an der von C # verwendeten Standardrundungsmethode , die auf die nächste Ereignisnummer und nicht aufwärts gerundet wird, und an Problemen beim Verlust der Gleitkommagenauigkeit , und ich war mir dieses Problems nicht bewusst, bevor ich diese Antwort schrieb und die Testfälle überprüfte. Dies wird in einem zukünftigen Build behoben , zusammen mit ein paar anderen Dingen wie dieser unbehandelten Ausnahme .In der Zwischenzeit nimmt diese Änderung die erforderliche Anpassung vor.
quelle