छलावरण रंग बदलते गिरगिट चुनौती


19

जाहिरा तौर पर गिरगिट की चुनौतियां एक बुरी चीज हैं । बहुत बुरा, गिरगिट सुंदर जीव हैं। बदलाव का समय!

एक गिरगिट की तस्वीर

जैसा कि हम सभी जानते हैं, कई गिरगिट अपनी त्वचा का रंग बदलकर अपने परिवेश के साथ घुलने-मिलने की उल्लेखनीय क्षमता रखते हैं। जो इस चुनौती का उद्देश्य भी है।

चुनौती

नौ पिक्सल के एक वर्ग की कल्पना करो। आठ पिक्सेल परिवेश हैं। केंद्र में गिरगिट है।

ऐशे ही: एक केंद्र वर्ग के चारों ओर आठ ग्रे वर्ग।

गिरगिट स्वाभाविक रूप से अपने परिवेश के साथ मिश्रण करने की कोशिश करता है। यह अपने रंग को आसपास के पिक्सेल के औसत में बदलकर ऐसा करता है। तो, इस मामले में, गिरगिट अपना रंग बदल देगा धूसर

उद्देश्य

आसपास के पिक्सेल के रंगों को देखते हुए, गिरगिट के रंग का उत्पादन करते हैं।

गिरगिट का रंग पिक्सेल ÷ 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>]]

आप एक भिन्न रूप में इनपुट प्राप्त करना चुन सकते हैं, जब तक कि इसमें दशमलव संख्या 0-255 के आठ त्रिगुण शामिल हों।

यदि आप किसी भिन्न रूप में इनपुट प्राप्त करते हैं, तो संख्याएँ या तो एक सुसंगत लंबाई की होनी चाहिए या उनके बीच एक गैर-संख्यात्मक विभाजक होना चाहिए। जब तक वे 0-अंक से 9 अंकों के नहीं हो जाते, तब तक उनके पास एक अलग चरित्र होना चाहिए। (उदाहरण 044200255044200255044200255044200255044200255044200255044200255044200255मान्य है, इसलिए हैं 44 200 255 44 200 255 44 200 255 44 200 255 44 200 255 44 200 255 44 200 255 44 200 255और हैं 44?200?255$44?200?255$44?200?255$44?200?255$44?200?255$44?200?255$44?200?255$44?200?255, लेकिन 4420025544200255442002554420025544200255442002554420025544200255नहीं है)

उत्पादन

एक सरणी / स्ट्रिंग / आदि जिसमें केंद्र पिक्सेल के रंग शामिल हैं (दशमलव में), इस तरह:

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

यदि आप किसी सरणी के अलावा कुछ और आउटपुट करते हैं: संख्या या तो एक सुसंगत लंबाई की होनी चाहिए या उनके बीच एक गैर-संख्यात्मक विभाजक होना चाहिए। (जैसे 044200255वैध है, ऐसा है 44 200 255, लेकिन 44200255नहीं है)

संख्याओं में दशमलव बिंदु नहीं हो सकते हैं, इसलिए उदाहरण 44.0 200 255.0अमान्य है।

गोलाई

आउटपुट को पूर्णांक में गोल किया जाना चाहिए। (हैवल्स को गोल किया जाना चाहिए।) जैसे, यदि सभी लाल का योग 1620 है , तो आपको आउटपुट होना चाहिए 203, 202या नहीं 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

"जब तक यह दशमलव संख्या 0-255 के आठ त्रिगुणों से युक्त होता है" क्या यह बाइनरी में हो सकता है? एकल?
लीक नन

क्या मैं इसे पहले से ट्रांसफर कर सकता हूं?
लीक नन

जवाबों:


8

MATL, 8 4 बाइट्स

YmYo

इसे ऑनलाइन आज़माएं!

4 बाइट्स बीकर के लिए धन्यवाद बचा लिया!

स्पष्टीकरण:

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

मुझे अजगर सरणी सिंटैक्स का दुरुपयोग पसंद है! आप बदल सकते हैं s8/के साथ Xm(यानी meanकॉलम नीचे)। इसके अलावा, आप इनपुट को निर्दिष्ट करने में सक्षम हो सकते हैं 3 x 8और 3e!
जुलाहा

हाँ, YmYoयह करना चाहिए ... बस [[R,G,B];[R,G,B];...]आरजीबी पंक्तियों के बीच अर्धविराम के साथ इनपुट लें ।
बीकर

@ बीकर वाह! धन्यवाद!
DJMcMayhem

क्या Yoराउंड अप, या राउंड टू क्लोज़ के साथ राउंड अप किया जा रहा है? चुनौती बाद की चाहत है।
जॉन ड्वोरक

@JanDvorak यह निकटतम पूर्णांक तक राउंड (ऊपर या नीचे) matl.tryitonline.net/...
Suever

11

पायथन, 38 बाइट्स

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

औसत जोड़कर (निकटतम पूर्णांक की ओर, आधा भाग ऊपर की ओर) जोड़कर 4 तक जोड़ते हैं, फिर बिट-शिफ्ट के माध्यम से 8 से फर्श-विभाजन करते हैं >>3



4

सी, 151 123 103 91

आरजीबीआरजीबी के क्रम में, कार्यक्रम के लिए 24 मापदंडों को पारित करने की आवश्यकता होती है ... और एक नई रेखा के बिना ट्रिपल आरजीबी को आउटपुट करता है।

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

जे, 11 बाइट्स

0.5<.@++/%#

इनपुट को 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

जावास्क्रिप्ट, 75 64 55 बाइट्स

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

एक जावास्क्रिप्ट उत्तर आपको आरंभ करने के लिए।

संपादित करें: डेंड्रोबियम के लिए 11 बाइट्स सहेजे गए , और नील के लिए एक और 9 धन्यवाद ।


55 बाइट्स:a=>a.reduce((p,c)=>p.map((e,i)=>e+c[i])).map(x=>x+7>>3)
डेंड्रोबियम

@ डेंड्रोबियम आपके कोड के साथ 83, 125, * 104 * के बजाय 83, 125, * 103 *[[0,200,200],[200,0,200],[200,200,0],[60,200,0],[200,0,200],[0,200,220],[2,200,0],[0,0,7]] पैदावार देता है ।
user2428118

आह, सवाल को गलत समझा, सोचा था कि यह माना जाता है ceil। 64 बाइट्स:a=>a.reduce((p,c)=>p.map((e,i)=>e+c[i])).map(x=>(x/8).toFixed())
डेंड्रोबियम

x+4>>3सही तरीके से राउंड करना चाहिए।
नील

1

लिस्प - 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)))

क्या यह सही तरीका है , मुझे लगता है। Untested।

  • a औसत है
  • rइस चुनौती का उचित 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

निम , 134 126 115 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])

एक निम अनुक्रम @सामने के साथ एक सरणी है , जैसे @[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

फोर्थ (gforth) , 65 बाइट्स

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

इसे ऑनलाइन आज़माएं!

स्टैक तर्कों के रूप में इनपुट लेता है (आरजीबी आदेश)

व्याख्या

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,...) और जब तक कि तीनों IP में से प्रत्येक का विलय न हो जाए, और अगले पढ़े जाने वाले input कमांड पर भी जल्दी न जाएं। (इसलिए सभी रिक्त स्थान), यह बाहर काम करता है और बाइट्स को बचाता है ताकि स्टम्स को गणना करने के लिए शीर्ष पर सही मूल्य रखने के लिए लगातार स्टैक को घुमाए

तकनीकी रूप से इस कोड में x.5कुछ इनपुटों के लिए मानों को सही ढंग से राउंड करने में त्रुटि है , लेकिन इसका कारण C # द्वारा उपयोग की जाने वाली डिफ़ॉल्ट राउंडिंग विधि है , जो कि ऊपर की बजाय निकटतम ईवेंट नंबर पर राउंड करना है, और फ़्लोटिंग पॉइंट सटीकता हानि में समस्याओं के कारण है , और मैं इस उत्तर को लिखने और परीक्षण के मामलों की जाँच करने से पहले इस मुद्दे से अनभिज्ञ था। यह भविष्य के निर्माण में तय किया जाएगा , साथ ही कुछ अन्य चीजें जैसे कि यह बिना किसी अपवाद के

इस बीच, यह संशोधन आवश्यक समायोजन करता है।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.