カモフラージュの色が変わるカメレオンチャレンジ


19

明らかに、カメレオンの挑戦は悪いことです。残念なことに、カメレオンは美しい生き物です。変革の時!

カメレオンの写真

ご存知のように、多くのカメレオンは、肌の色を変えることで周囲に溶け込む驚くべき能力を持っています。これもこの課題の目的です。

チャレンジ

9ピクセルの正方形を想像してください。8ピクセルが周囲です。中央にカメレオンがあります。

このような: 中央の正方形の周りの8つの灰色の正方形。

カメレオンは自然に周囲に溶け込もうとします。それは、周囲のピクセルの色の平均に色を変更することによって行われます。したがって、この場合、カメレオンの色はに変わりグレーます。

目的

周囲のピクセルの色を指定して、カメレオンの色を出力します。

カメレオンの色は、ピクセル内のすべての赤、緑、青の合計÷8として定義されます。

入力

次のように、左上から時計回りに続く8つの周囲のピクセルの色の値の配列:

[[<red>,<green>,<blue>],[<red>,<green>,<blue>],[<red>,<green>,<blue>],[<red>,<green>,<blue>],[<red>,<green>,<blue>],[<red>,<green>,<blue>],[<red>,<green>,<blue>],[<red>,<green>,<blue>]]

10進数の0〜255の8つのトリプルで構成される限り、別の形式で入力を受け取ることもできます。

別の形式で入力を受け取る場合、数値は一貫した長さであるか、数値の間に数字以外の区切り文字が必要です。トリプルには、9桁まで0が埋め込まれていない限り、区切り文字が必要です。(例は044200255044200255044200255044200255044200255044200255044200255044200255有効で、そうしている44 200 255 44 200 255 44 200 255 44 200 255 44 200 255 44 200 255 44 200 255 44 200 25544?200?255$44?200?255$44?200?255$44?200?255$44?200?255$44?200?255$44?200?255$44?200?255、しかし、4420025544200255442002554420025544200255442002554420025544200255ではありません。)

出力

次のような中央のピクセルの色を含む配列/文字列/など(10進数):

[<red>,<green>,<blue>]

配列以外の何かを出力する場合:数値は、一貫した長さであるか、数値の間に数字以外の区切り文字が必要です。(Egが044200255有効で、そうである44 200 255が、44200255ではありません。)

数値に小数点を含めることはできないため、たとえば44.0 200 255.0無効です。

丸め

出力は最も近い整数に丸める必要があります。(半分を切り上げる必要があります。)たとえば、すべての赤の合計が1620の場合203202またはではなくを出力する必要があります202.5

写真は説明のみを目的としています。中央のピクセルが出力で、周囲のピクセルが入力です。

入力:

[[200,200,200],[200,200,200],[200,200,200],[200,200,200],[200,200,200],[200,200,200],[200,200,200],[200,200,200]]

出力:

[200,200,200]


入力:

[[0,0,0],[255,255,255],[0,0,0],[255,255,255],[255,255,255],[0,0,0],[255,255,255],[0,0,0]]

出力:

[128,128,128]


入力:

[[0,200,200],[200,0,200],[200,200,0],[60,200,0],[200,0,200],[0,200,220],[2,200,0],[0,0,0]]

出力:

[83,125,103]


入力:

[[0,56,58],[65,0,200],[33,200,0],[60,33,0],[98,0,200],[0,28,220],[2,200,0],[99,0,5]]

出力:

[45,65,85]

提出物は、完全なプログラムまたは機能です。標準のI / Oおよび抜け穴の規則が適用されます。



@LeakyNunリンクをありがとう。この課題にとってはそれほど重要ではありませんが、将来的に似たようなことをする場合は心に留めておきます。
user2428118

9
おかしなことに、これは丸めを処理するための少しカメレオンの質問だと思います。
-xnor

「10進数0〜255の8つのトリプルで構成されている限り」バイナリにすることはできますか?単項?
リーキー修道女

また、事前に転置できますか?
リーキー修道女

回答:


8

MATL、8 4バイト

YmYo

オンラインでお試しください!

ビーカーのおかげで4バイト節約されました!

説明:

Ym          "Get the average of each column
  Yo        "And round up

Python配列構文の悪用が好きです!あなたは置き換えることができs8/Xm(すなわちmean列ダウン)。また、あなたは、入力を指定することができるかもしれ3 x 8で始まり、取り除くために3e!
Suever

ええ、それYmYoを行うべきです... [[R,G,B];[R,G,B];...]RGB行間のセミコロンのように入力を取得してください。
ビーカー

@beaker Woah!ありがとう!
DJMcMayhem

ないYo絆が切り上げされていると最も近いラウンドアップ、またはラウンドを?課題は後者を望んでいます。
ジョンドヴォルザーク

@JanDvorakそれは最も近い整数(アップまたはダウン)に丸めmatl.tryitonline.net/...
Suever

11

Python、38バイト

lambda l:[sum(r)+4>>3for r in zip(*l)]

合計に4を加えてから、ビットシフトを介して8でフロア除算することにより、平均値を(最も近い整数に向かって、半分に切り上げて)丸め>>3ます。



4

C、151 123 103 91

プログラムにRGBRGBの順序で24個のパラメーターを渡す必要があり、改行なしでトリプレットRGBを出力します。

i,t;main(c,v)char**v;{for(i=0;t=4,i++<3;printf("%d ",t/8))for(c=i;c<24;c+=3)t+=atoi(v[c]);}

main(c,v)char**v;{2バイトを節約するには?ソースコードで<3の場合も+1です!
-betseg



1

J、11バイト

0.5<.@++/%#

各行がRGB値である8x3配列として入力を受け取ります

説明

0.5<.@++/%#  Input: a
          #  Count the number of rows
       +/    Sum along the columns
         %   Divide each sum by the count to get the averages
0.5   +      Add 0.5 to each average
   <.@       Floor each value and return

1

JavaScript、 75 64 55バイト

a=>a.reduce((p,c)=>p.map((e,i)=>e+c[i])).map(x=>x+4>>3)

始めるためのJavaScriptの回答。

編集:デンドロビウムのおかげで11バイト、ニールのおかげでさらに9 バイト節約しました。


55バイト:a=>a.reduce((p,c)=>p.map((e,i)=>e+c[i])).map(x=>x+7>>3)
デンドロビウム

@Dendrobiumを[[0,200,200],[200,0,200],[200,200,0],[60,200,0],[200,0,200],[0,200,220],[2,200,0],[0,0,7]]、83、125 * 104 *の代わりに83、125、* 103 *コードを有します。
user2428118

ああ、質問を読み違えて、それはそうなっていたと思ったceil。64バイト:a=>a.reduce((p,c)=>p.map((e,i)=>e+c[i])).map(x=>(x/8).toFixed())
デンドロビウム

x+4>>3正しく丸める必要があります。
ニール

1

Lisp- 180 179バイト

編集:さらにゴルフ用にフォーマットされています。

(defun a(l)(/(apply #'+ l)(length l)))(defun r(a)(if(integerp(* a 2))(ceiling a)(round a)))(defun c(s)(mapcar(lambda(i)(r(sqrt(a(mapcar(lambda(x)(expt(nth i x)2))s)))))'(0 1 2)))

それはありません正しい方法、私は推測します。未テスト。

  • a ただの平均です
  • rLisp roundは最も近い偶数の整数に丸めるので、このチャレンジの適切な丸めです
  • c実際の作業を行い、形式で入力を 受け取り、回答を'((R G B) (R G B) (R G B) (R G B) (R G B) (R G B) (R G B) (R G B))含む'(R G B)リストを返します。

1

NIM134の 126 115 108 78バイト

import math,future
x=>lc[(lc[x[j][i]|(j<-0..7),int].sum+4)shr 3|(i<-0..2),int]

匿名プロシージャを定義します。このプロシージャでは、入力が二重ネストされたシーケンスとして渡され、3要素配列として出力される必要があります。プロシージャは、別のプロシージャへの引数としてのみ使用できます。テストするには、次のラッパーを使用します。

import math,future
import strutils
proc test(x: seq[seq[int]] -> seq[int]) =
 echo x(#[ Insert your input here ]#)
test(x=>lc[(lc[x[j][i]|(j<-0..7),int].sum+4)shr 3|(i<-0..2),int])

Nimシーケンスは@、などの前にある配列@[1, 2, 3]です。したがって、この手順への入力は次のようになります。

@[@[0,0,0],@[255,255,255],@[0,0,0],@[255,255,255],@[255,255,255],@[0,0,0],@[255,255,255],@[0,0,0]]


1

Forth(gforth)、65バイト

: f 3. do 8. do 3 j - i * 2 + roll loop 4 8. do + loop 8 / loop ;

オンラインでお試しください!

入力をスタック引数として受け取ります(rgb順序)

説明

3つのカラーチャネルのそれぞれについて:

  • そのチャネルのすべての番号をスタックの一番上に移動します
  • それらを一緒に追加します
  • 4を追加(丸めを処理するため)
  • 8で割る

コードの説明

: f            \ start new word definition
  3. do        \ start a counted loop from 0 to 2
    8. do      \ start a counted loop from 0 to 7
      3 j -    \ get the offset of the channel
      i * 2 +  \ get the absolute position of the channel value
      roll     \ move the value to the top of the stack
    loop       \ end the inner loop
    4          \ add 4 to the top of the stack
    8. do      \ loop from 0 to 7
      +        \ add the top two stack numbers
    loop       \ end loop. (Result on top of stack with be sum of values for channel + 4)
    8 /        \ divide by 8
  loop         \ end outer loop
;              \ end word definition

1

ルーン文字のエンチャント、41バイト

>iRi+ i+ i+ i+ i+ i+ i+8,'rA' q$;
>iU
>iU

オンラインでお試しください!

3つの命令ポインターを使用して、入力を正しい順序で解析し(入力値は常に順序であるRGB, RGB,...)、3つのIPのそれぞれがマージせず、次のread inputコマンドに早すぎない限り(したがってすべてのスペース)、合計を計算するために正しい値を維持するためにスタックを連続的に回転させる必要があるので、うまくいき、バイトを節約します。

技術的には、このコードにはx.5一部の入力の値を正しく丸める際にエラーが含まれていますが、これはC#使用されるデフォルトの丸め方法によるものです。 、この回答を書いてテストケースをチェックする前は、この問題に気付いていませんでした。これは、この未処理の例外などの他のいくつかの事項とともに、将来のビルド修正される予定です。

それまでの間、この変更により必要な調整が行われます。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.