हेक्स में रंग कोड कैसे करें


15

हेक्सागोनल tessellations , या विमान के झुकाव, तीन रंग के होते हैं - जिसका अर्थ है कि केवल तीन रंगों का उपयोग करना, जैसे कि लाल, नीला, और हरा, हर षट्भुज बिना किसी दो हेक्सागोन्स के रंगीन हो सकता है जो एक रंग साझा करने वाली सीमा साझा करते हैं। इस तरह के पैटर्न को दिखाने वाला एक आंशिक उदाहरण

ASCII में एक आंशिक हेक्सागोनल टाइलिंग (STDIN के माध्यम से, एक फ़ाइल से पढ़ना, आदि) को देखते हुए, इस रंग को फिट करने के लिए वर्णों के रंग (ANSI कोड, छवि हेरफेर, आदि के माध्यम से) बदलें। मोड़ हेक्सागोन्स के बीच में है ( *, नीचे) तीन रंग हैं, और उनके बीच की रेखाओं को उनके दो हेक्स *रंगों के मिश्रण की आवश्यकता है । यदि रेखा बाहरी सीमा पर है, तो उसे संबंधित से मेल खाना चाहिए *

उदाहरण के लिए, के आंशिक हेक्सागोनल टाइलिंग को देखते हुए

 / \ / \ / \ / \
| * | * | * | * |
 \ / \ / \ / \ /
  | * | * | * |
   \ / \ / \ /

मान लें कि हम शीर्ष-बाएँ हेक्स *को लाल करने का निर्णय लेते हैं , और इसके दो पड़ोसी ब्लू और ग्रीन (दक्षिणावर्त जाने वाले) हैं। फिर |लाइन को मैजेंटा होने की जरूरत है और /लाइन को पीला होना चाहिए। यदि हम रंग देते हैं, तो हम अंततः कुछ इस तरह से समाप्त करेंगे (स्पष्टता के लिए बढ़े हुए):

हेक्सागोनल रंग 1

या के इनपुट के लिए

     / \
    | * |
   / \ /
  | * |
 / \ /
| * |
 \ /

आप इसे इस तरह से रंग सकते हैं (स्पष्टता के लिए बढ़े हुए):

हेक्सागोनल रंग 2

कुछ अतिरिक्त परीक्षण मामले (आपका कोड इनको संभालने में सक्षम होना चाहिए):

 / \ / \
| * | * |
 \ / \ /
  | * |
 / \ / \
| * | * |
 \ / \ /


 / \
| * |
 \ / \
  | * |
 / \ /
| * |
 \ /



 / \
| * |
 \ /

नियम

  • इनपुट में कम से कम एक षट्भुज होने की गारंटी है, और किसी भी इनपुट में "छेद" नहीं होगा।
  • आपको अपना रंग रेड से शुरू करने की आवश्यकता नहीं है, जब तक आप तीन-रंग नियम बनाए रखते हैं।
  • यदि आंशिक टाइलिंग दो-रंग की हो सकती है, तो आप दंड के बिना ऐसा कर सकते हैं (जैसे कि दूसरे उदाहरण में) - आपको आंशिक रूप से पूर्ण टाइलिंग को अतिरिक्त टाइलिंग करने की आवश्यकता नहीं है।
  • हेक्सागोन केंद्रों *को लाल, नीले या हरे रंग से रंगा जाना चाहिए, जबकि बीच की रेखाएं सियान, पीली या मैजेंटा होनी चाहिए। उदाहरण के लिए, हो रही एक मैजेंटा *अनुमति दी है नहीं, और एक लाल |या \या /ड्राइंग के बाहर सीमा पर होना चाहिए। नीचे रंग देखें ।
  • यदि आपके कंसोल में ये सटीक रंग नहीं हैं, तो कृपया निकटतम सन्निकटन का उपयोग करें और अपने उत्तर में निर्दिष्ट करें कि आप किस सन्निकटन का उपयोग कर रहे हैं।
  • लीडिंग या अनुगामी व्हाट्सएप, जिसमें अनुगामी न्यूलाइन्स भी शामिल हैं, इतने लंबे समय के लिए स्वीकार्य हैं जब तक कि वर्ण पंक्तिबद्ध न हो जाएं।
  • आंशिक टाइलिंग को आयत बनाने के लिए स्पेस-पेडिंग के साथ इनपुट किया जा सकता है, अगर यह आपके कोड के लिए आसान बनाता है।
  • या तो एक पूर्ण कार्यक्रम या एक समारोह स्वीकार्य हैं। यदि कोई फ़ंक्शन है, तो आप इसे प्रिंट करने के बजाय आउटपुट वापस कर सकते हैं।
  • आउटपुट कंसोल के लिए हो सकता है, एक छवि के रूप में सहेजा जा सकता है, आदि।
  • मानक खामियों को मना किया जाता है।
  • यह इसलिए सभी सामान्य गोल्फिंग नियम लागू होते हैं, और सबसे छोटा कोड (बाइट्स में) जीतता है।

रंग और रंग मिश्रण:

तीन उपलब्ध बेस रंग आरजीबी दशमलव प्रारूप में रंग कोड के साथ हैं:

  • लाल (255,0,0)
  • हरा (0,255,0)
  • नीला (0,0,255)

संयोजन हैं:

  • पीला बनाने के लिए लाल और हरा गठबंधन (255,255,0)
  • सियान बनाने के लिए नीला और हरा गठबंधन (0,255,255)
  • मैजेंटा बनाने के लिए लाल और नीला गठबंधन (255,0,255)

आप एक छेद के साथ एक परीक्षण के मामले जोड़ सकते हैं? पहले की तरह (अतिरिक्त) एक, लेकिन बीच के बिना*
H.PWiz

यदि इनपुट के अंत में अतिरिक्त व्हाट्सएप लाइनों या newlines के अंत में दिया जाता है, तो क्या उन्हें संरक्षित किया जाना है?
HyperNeutrino

@ H.PWiz ऐसी स्थिति कभी उत्पन्न नहीं होगी। इसके बारे में चिंता करने की कोई जरूरत नहीं है।
AdmBorkBork

@ हैपरनेट्रिनो नहीं, यह विशुद्ध रूप से आपका निर्णय है। इनपुट / आउटपुट व्हॉट्सएप प्रारूपण इस चुनौती का दिलचस्प हिस्सा नहीं है।
AdmBorkBork

ठीक है। धन्यवाद। इसके अलावा, क्या हमें कभी खाली इनपुट को संभालना होगा?
हाइपरन्यूट्रिनो

जवाबों:


7

जावास्क्रिप्ट (ईएस 6), 219 203 201 बाइट्स

f=
s=>s.split`
`.map((b,i,a)=>b.replace(/./g,(c,j)=>`<font color=#${g=(x,y)=>((a[x+i]||``)[b=y+j]==`*`&&15<<b%3*4)|(y<0?8<<9:g(x,y-2)),(g(0,2)|g(-1,1)|g(1,1)).toString(16).slice(1)}>${c}</font>`)).join`
`
<input type=button value="Colourise!" onclick=i.innerHTML=f(i.textContent)>
<pre id=i contenteditable> / \ / \
| * | * |
 \ / \ / \
  | * | * |
 / \ / \ / \
| * |   | * |
 \ / \ / \ / \
  | * | * | * |
 / \ / \ / \ /
| * | * |
 \ / \ /</pre>

स्पष्टीकरण: प्रत्येक वर्ण को fontउसके रंग को सेट करने के लिए एक टैग में लपेटा जाता है , जिसकी गणना प्रत्येक वर्ग की जांच करके की जाती है, साथ ही वर्गों को दो को बाएं और दाएं, और चार वर्गों को तिरछे रूप से दूर किया जाता है, *यदि s और सभी के रंगों को मिलाते हुए *पाया गया। *रंग बस लेने उनके क्षैतिज सापेक्ष 3 समन्वय और बिटमास्क उचित रूप से स्थानांतरण द्वारा चुना जाता है। संपादित करें: सहेजी गयी 2 स्विच करके बाइट्स #RRGGBBकरने के लिए #RGBरंग।


आपको आंतरिक छिद्रों को संभालने की आवश्यकता नहीं है, अगर इससे कोई फर्क पड़ता है
AdmBorkBork

2
@AdmBorkBork नहीं, मैं बस दिखावा कर रहा था।
नील

"Colourise!" - आपने इसे गलत बताया।
OldBunny2800

3
@ OldBunny2800 यह मेरी भाषा में सही ढंग से लिखा गया है ...
नील

2
@ OldBunny2800 अमेरिकी केवल वर्तनी-सेट मौजूद नहीं है। उदाहरण के लिए ब्रिटिश (अंग्रेजी अंग्रेजी का सुपरसेट), ऑस्ट्रेलियाई (जिसमें किसी कारण न्यूजीलैंड शामिल है - शायद इसे ऑस्ट्रेलियन कहा जाना चाहिए) और कनाडाई (संयुक्त राज्य अमेरिका के अधिकांश हिस्से के उत्तर में स्थित)।
wizzwizz4 21

4

जावास्क्रिप्ट (ES6), 210 बाइट्स (HTML + CSS का उपयोग करके)

मेरे कैनवास दृष्टिकोण के समान ; *इनपुट स्ट्रिंग में सभी s का पता लगाता है और पेज को बिल्कुल तैनात <pre>तत्वों के रूप में पेज पर लिखता है । क्योंकि mix-blend-modeपर सेट है lighten, रंग अलावा स्वचालित रूप से पात्रों ओवरलैप किया जाता है।

s=>s.split`
`.map((r,y)=>[...r].map((c,x)=>c=='*'&&document.write(`<pre style=position:fixed;mix-blend-mode:lighten;line-height:1;left:${x}ch;top:${y}em;color:${['red','lime','blue'][x%3]}> / \\
| * |
 \\ /`)))


3

पायथन 2 , 279 बाइट्स

e=enumerate
x=input()
c=[[i,j]for i,t in e(x)for j,_ in e(t)if"*"==x[i][j]]
C=[[j%3*([i,j]in c)for j,_ in e(o)]for i,o in e(x)]
for J,K in c:
	for i in-1,0,1:q=2-(i&1);_=C[i+J];_[K+q]=_[K-q]=_[K-q]|C[J][K]
for i,o in e(x):print"".join("[%dm"%(30+C[i][j])+x[i][j]for j,_ in e(o))

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

Golf20 और user202729 के लिए धन्यवाद!
-27 बाइट्स का धन्यवाद मिस्टर एक्सकोडर
-24 बाइट्स की बदौलत जोनाथन फ्रेच को धन्यवाद



इसके अलावा 2-abs(i)है 2-(i&1)इस संदर्भ में, 336 बाइट्स।
श्री एक्सकोडर

@ Mr.Xcoder कूल, धन्यवाद!
हाइपरएन्यूट्रीनो

मुझे लगता है कि \033किया जा सकता है \33या वास्तविक (एक बाइट बचत) \x1bचरित्र ( तीन बाइट्स बचत )।
जोनाथन फ्रीच

1
@ OldBunny2800 मुझे लगता है कि यह समान लंबाई है। आप दो =और एक और ;दो के लिए स्वैप करें । ,=
wizzwizz4

2

पायथन 2 , 346 331 बाइट्स

e=enumerate
C='0132645'
def f(s):
 c={(i,j):[1+(i/2%2+j/4)%3*2]for i,l in e(s)for j,x in e(l)if'*'==x}
 for i,l in e(s):
  r=''
  for j,x in e(l):a=c.get((i,j),c.get((i-(x<'|'),j+[-1,1][x>'/']+(x>'z')),[]))+c.get((i+(x<'|'),j+[1,-1][x>'/']-(x>'z')),[])if' '<x else[0];r+='\033[3'+C[[sum(a)/len(a),6][set(a)=={5,1}]]+'m'+x
  print r

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


1

HTML (कैनवास) + जावास्क्रिप्ट (ES6), 13 + 251 = 264 बाइट्स

*इनपुट स्ट्रिंग में सभी एस का पता लगाता है और इसी पदों पर कैनवास पर एक ASCII षट्भुज पेंट करता है। क्योंकि globalCompositeOperation='lighter'वर्णों के ओवरलैप होने पर रंग जोड़ स्वतः ही हो जाता है।

एचटीएमएल

<canvas id=c>

जावास्क्रिप्ट

s=>{c.width=c.height=s.length
with(c.getContext`2d`)font='1px monospace',globalCompositeOperation='lighter',s.split`
`.map((r,y)=>[...r].map((c,x)=>c=='*'&&[` / \\`,`| * |`,` \\ /`].map((t,i)=>fillText(t,x,y+i),fillStyle=['red','lime','blue'][x%3])))}

scale()दृश्यता के लिए स्निपेट में एक गुणक और अतिरिक्त कमांड जोड़ा गया था।

यहां छवि विवरण दर्ज करें


मेरा सीएसएस-आधारित दृष्टिकोण भी देखें ।


मुझे विश्वास नहीं है कि यह आवश्यक आउटपुट को पूरा करता है: https://i.stack.imgur.com/Pp3J0.png । फॉरवर्ड और बैकस्लैश माना जाता है कि वे हेक्सागोन्स के रंगों के संयोजक संयोजन हैं जो वे अलग करते हैं, अलग नहीं।
पैट्रिक रॉबर्ट्स

@PatrickRoberts Hmm, असंगत फ़ॉन्ट चौड़ाई (मेरे कंप्यूटर पर स्थितियाँ सही हैं) के साथ एक समस्या है। मैं आज इस पर गौर करूंगा।
darrylyeo

ओह, मुझे एहसास नहीं था कि एक मंच था जो सही था। यदि आप स्क्रीनशॉट के साथ अपना उत्तर अपडेट करते हैं, तो मैं अपना वोट वापस कर दूंगा। उत्तर को केवल कम से कम एक कार्यान्वयन पर काम करने की आवश्यकता है, उन्हें क्रॉस-प्लेटफ़ॉर्म होने की आवश्यकता नहीं है।
पैट्रिक रॉबर्ट्स

1

MATLAB / ऑक्टेव , 223 बाइट्स

a=input('')';s=size(a);p=zeros([s 3]);[i,j]=ind2sub(s,find(a=='*'));
for f=1:nnz(i)
p((-2:2)+i(f),(-1:1)+j(f),mod(f+~mod(j(f)/2,2),3)+1)=1;end
for f=1:nnz(a)
[i,j]=ind2sub(s,f);text(i/s(1),1-j/s(2),a(i,j),'Co',p(i,j,:));end

थोड़े नटखट कोड प्रारूप में:

a=input('')';                  %Grab input as 2D array
s=size(a);                     %Get input size
p=zeros([s 3]);                %Make empty colour matrix of matching size with RGB
[i,j]=ind2sub(s,find(a=='*')); %Find all *'s
for f=1:nnz(i)                 %For each *
    %Fill a 5x3 box centred at the * on the colour channel for this box
    %Overlapping regions between boxes will result in the correct mix.
    p((-2:2)+i(f),(-1:1)+j(f),mod(f+~mod(j(f)/2,2),3)+1)=1;
end
%Display as text on a figure
for f=1:nnz(a)
    [i,j]=ind2sub(s,f);
    text(i/s(1),1-j/s(2),a(i,j),'Co',p(i,j,:))
end

इनपुट को 2D सरणी के रूप में लिया जाता है, जैसे इनपुट के लिए संकेत मिलने पर निम्नलिखित दर्ज करना:

[' / \ / \ / \ / \ ';'| * | * | * | * |';' \ / \ / \ / \ / ';'  | * | * | * |  ';'   \ / \ / \ /   ']

MATLAB अब तक के रूप में मैं जानता हूँ कि सांत्वना के लिए रंग उत्पादन करने की क्षमता नहीं है (गंदे जावा हैक को छोड़कर जो मैं छूट रहा हूँ)। जैसे कि आउटपुट एक आंकड़ा के बजाय मुद्रित होता है।

रंग *इनपुट में सभी के स्थान को खोजने के द्वारा प्राप्त किया जाता है , और फिर RGB रंग सरणी ( p) में, 1 के 5x3 बॉक्स (MATLAB रंग प्रतिनिधित्व में 255) के बारे में केंद्रित लिखा जाता है *। बॉक्स को प्रत्येक पंक्ति के साथ mod-3 सूचकांक के साथ संबंधित रंग के साथ लिखा जाता है, यहां तक ​​कि एक ऑफसेट द्वारा रंग सूचकांक को स्थानांतरित करने वाली रेखाओं के साथ।

यह एक रंग मैट्रिक्स का उत्पादन करता है जहां किसी भी बक्से जो ओवरलैप करता है, उसके परिणामस्वरूप आवश्यक मिश्रित रंग होगा। ऊपर दिया गया उदाहरण निम्नलिखित रंग मैट्रिक्स का उत्पादन करता है।

रंग मैट्रिक्स उदाहरण

सफेद और काले क्षेत्र अप्रासंगिक हैं क्योंकि उन स्थानों पर एक स्थान मुद्रित होता है जिसका अर्थ है कि हम वास्तव में गलत रंग नहीं देखते हैं।

एक बार जब रंग मैट्रिक्स बन जाता है, तो हम textकमांड का उपयोग करके चित्र पर प्रत्येक वर्ण को प्रदर्शित करते हैं , पाठ का रंग रंग मैट्रिक्स में संबंधित प्रविष्टि के लिए सेट करते हैं। उपरोक्त उदाहरण प्रदर्शित करेगा:

नमूना आउटपुट

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