কালো এবং সাদা রংধনু


60

শুধুমাত্র কালো এবং সাদা পিক্সেল এবং একটি সাদা পিক্সেলযুক্ত একটি (x, y) অবস্থানযুক্ত একটি চিত্র দেওয়া হয়েছে, কেবলমাত্র অন্যান্য সাদা পিক্সেলকে অনুসরণ করে জড়িত জড়িত পথে (x, y) থেকে তাদের ন্যূনতম ম্যানহাটনের দূরত্বের ভিত্তিতে সাদা পিক্সেলকে রঙ করুন ।

রঙ রঙ্গিন পিক্সেল থেকে (X, Y), তাই (X, Y) এ পিক্সেল তাদের দূরত্ব সমানুপাতিক হতে হবে 0 ° (খাঁটি লাল) একটি রঙ এবং পিক্সেল সুদূরতম থেকে দূরে থাকবে (X, Y) অন্যান্য বর্ণ বর্ণবিহীনভাবে এবং রৈখিকভাবে মিশ্রিত করা সহ একটি বর্ণের রঙ হবে 360 ° (এছাড়াও লাল)। সম্পৃক্তি এবং মান উভয় 100% হতে হবে।

যদি একটি সাদা পিক্সেল অন্যান্য সাদা পিক্সেলের মাধ্যমে (x, y) এর সাথে সংযুক্ত না থাকে তবে তা অবশ্যই সাদা থাকবে।

বিস্তারিত

  • ইনপুটটিতে চিত্রের ফাইলের নাম বা কাঁচা চিত্রের ডেটা, এবং এক্স এবং y পূর্ণসংখ্যা থাকবে।
  • আউটপুট চিত্রটি কোনও ফাইলে সংরক্ষণ করা যেতে পারে বা কোনও সাধারণ চিত্র ফাইলের ফর্ম্যাটে স্টাডআউটে কাঁচা পাইপ করা যায়, বা কেবল প্রদর্শিত হয়।
  • এক্স মানটি বামতম পিক্সেলের 0 হয় এবং ডানদিকে যেতে বাড়ায়। শীর্ষস্থানীয় পিক্সেলগুলিতে y মান 0 হয় এবং নীচে যেতে বাড়তে থাকে। (x, y) সর্বদা চিত্রের সীমানায় থাকবে।
  • সম্পূর্ণ প্রোগ্রাম এবং ফাংশন উভয়ই অনুমোদিত।

বাইটের মধ্যে সংক্ষিপ্ততম কোডটি জয়ী।

উদাহরণ

এই সমস্ত চিত্রগুলি স্থান বাঁচাতে ডাউনসাইজ করা হয়েছে। পূর্ণ আকারে দেখতে তাদের ক্লিক করুন।

ইনপুট চিত্র:

উদাহরণ 1 ইনপুট

(x,y) = (165,155) এবং (x,y) = (0,0)

উদাহরণ 1 আউটপুট এ উদাহরণ 1 আউটপুট বি


এর সাথে ইনপুট চিত্র এবং আউটপুট (x,y) = (0,0):

উদাহরণ 5 ইনপুট উদাহরণ 5 ইনপুট এ


এর সাথে ইনপুট চিত্র এবং আউটপুট (x,y) = (600,350):

উদাহরণ 2 ইনপুট উদাহরণ 2 আউটপুট


এর সাথে ইনপুট চিত্র এবং আউটপুট (x,y) = (0,0):

উদাহরণ 3 ইনপুট উদাহরণ 3 আউটপুট


এর সাথে ইনপুট চিত্র এবং আউটপুট (x,y) = (0,0):

উদাহরণ 4 ইনপুট উদাহরণ 4 আউটপুট


Ptionচ্ছিক -30% বোনাস: ইউক্লিডিয়ান দূরত্ব ব্যবহার করুন। আপনার অ্যালগরিদমের জন্য একটি পরামর্শ নিম্নরূপ (সাধারণ রূপরেখা):

  1. একটি পিক্সেল শুরু করুন।
  2. সেই পিক্সেল থেকে বন্যা ভরাট।
  3. প্রতি পিক্সেল বন্যা পূরণে পৌঁছেছে জন্য,
  4. প্রারম্ভিক পিক্সেল থেকে অর্ধ-ইউনিট ধাপে, পিক্সেল থেকে সরলরেখায় সরান।
  5. প্রতিটি পদক্ষেপে, int()x এবং y স্থানাঙ্কে প্রয়োগ করুন । এই স্থানাঙ্কগুলিতে পিক্সেলটি কালো হলে বন্ধ করুন। অন্যথায়, চালিয়ে যান। (এটি দর্শনের এক লাইনের পদ্ধতি))
  6. কোনও সাদা পিক্সেল এবং / বা এমন একটি পিক্সেল সীমানা করে যে কোনও পিক্সেল সীমানা পূর্বে উল্লেখযোগ্যভাবে উচ্চতর দূরত্ব (যেমন, +10) সহ লেবেলযুক্ত একটি শুরু পিক্সেল হয়ে যায়।

আরও মেটা অর্থে, এই অ্যালগরিদম প্রারম্ভিক / ইতিমধ্যে রঙিন পিক্সেল থেকে সরলরেখায় প্রতিটি পিক্সেলের কাছে পৌঁছে যায়, তারপরে প্রান্তের চারপাশে "ইঞ্চি"। "উল্লেখযোগ্যভাবে উচ্চতর দূরত্ব" বিটটি অ্যালগরিদমের গতি বাড়ানোর উদ্দেশ্যে করা হয়েছে। সত্যিই, আপনি কীভাবে ইউক্যালিডিয়ান দূরত্বটি বাস্তবায়ন করেন তাতে কিছু আসে যায় না , এটি কেবল দেখতে বেশ সুন্দর দেখতে হবে।

উপরের অ্যালগরিদম ব্যবহার করে ইউক্লিডিয়ান দূরত্বের সাথে প্রথম উদাহরণটি দেখতে এই রকম:

ইনপুট চিত্র এবং (x,y) = (165,155)

উদাহরণ 1 ইনপুট এখানে চিত্র বর্ণনা লিখুন


এই চ্যালেঞ্জটি লেখার জন্য সহায়তার জন্য ক্যালভিনের শখ এবং ট্রাইকোপ্লেক্সকে অনেক ধন্যবাদ! আনন্দ কর!


7
আমি এটি গল্ফ করার পরিকল্পনা করি না তবে আমি জাভাস্ক্রিপ্ট সংস্করণ তৈরি করেছিলাম যেখানে আপনি চিত্রটি মাউস-ওভার করতে পারেন এবং রঙগুলি তত্ক্ষণাত আপডেট হতে পারে। এখানে পরীক্ষা চিত্র অত্যন্ত বড় তাই আমি মত ছোট ইমেজ চেষ্টা পরামর্শ দিতে চাই এটি দ্রুত চালানোর জন্য হয় এই বা এই
ক্যালভিনের

এটা সত্যিই দারুন! আমার সন্দেহ হয় গল্ফযুক্ত সংস্করণ =) এর ভাল বেস হওয়ার পক্ষে এটি খুব দক্ষ is
flawr

2
মাজেস যখন এ জাতীয় রঙিন হয় তখন তাদের সমাধান করা এত সহজ!
mbomb007

শেষ উদাহরণ সত্যই সুন্দর। ইনপুট চিত্রটি কি কেবল গোলমাল করছে?
dylnan

@ এললানন: আপনি যদি বোনাসের ঠিক আগে উদাহরণের কথা বলছেন তবে এটি আসলে একটি গোলকধাঁধা। এটি পূর্ণ আকারে দেখতে এটিতে ক্লিক করতে পারেন।
এল'েন্ডিয়া স্টারম্যান

উত্তর:


33

মতলব, 255 245 231 বাইট

এটি চিত্রের নামটি প্রথমে yএবং তারপরে প্রত্যাশা করে x

I=@input;i=imread(I('','s'));[r,c]=size(i);m=zeros(r,c);m(I(''),I(''))=1;M=m;d=m;K=[1,2,1];for k=1:r*c;d(m&~M)=k;M=m;m=~~conv2(m,K'*K>1,'s');m(~i)=0;end;z=max(d(:));v=[1,1,3];imshow(ind2rgb(d,hsv(z)).*repmat(m,v)+repmat(~d&i,v),[])

আমি বন্যার ভরাট বাস্তবায়ন করেছি (বা 'চাইলে' চারপাশের অঞ্চলের জন্য 'ডিজিট্রাস্ট্রা' মোটামুটি প্রথমে একটি মুখোশ তৈরি করে যেখানে বীজ পিক্সেলটি 1 তে নির্ধারিত হয় এবং একটি দূরত্ব সংগ্রহকারী (চিত্রের আকার উভয়) দিয়ে এবং তারপরে পুনরাবৃত্তি করে ধাপ:

  • 4 টি আশেপাশের কার্নেল দিয়ে মুখোশটিকে দৃolute় করুন (এটি খুব অদক্ষ অংশ)
  • মাস্কের সমস্ত ননজারো পিক্সেল সেট করে 1
  • চিত্রের সমস্ত কালো পিক্সেল শূন্যে সেট করুন
  • সঞ্চয়ের সমস্ত মান সেট করুন যেখানে মুখোশটি এই পদক্ষেপে পরিবর্তিত হয়েছে k
  • বৃদ্ধি k
  • মুখোশটিতে কোনও পরিবর্তন না হওয়া পর্যন্ত পুনরাবৃত্তি করুন (আমি আসলে এই শর্তটি পরীক্ষা করি না, তবে কেবলমাত্র একটি উচ্চতর বাউন্ড হিসাবে চিত্রের পিক্সেলগুলির সংখ্যা ব্যবহার করি যা সাধারণত খুব খারাপ উপরের বাউন্ড হয়, তবে এটি কোডগল্ফ =)

এটি আমাদের দূরত্ব সংগ্রহকারীতে প্রতি পিক্সেলের ম্যানহাটন দূরত্ব বীজ পিক্সেলের সাথে ছেড়ে দেয়। তারপরে আমরা প্রদত্ত রঙের বর্ণটি ছড়িয়ে দিয়ে একটি নতুন চিত্র তৈরি করি এবং মান শূন্যের "প্রথম" বর্ণটি এবং সর্বোচ্চ দূরত্বে "শেষ" বর্ণটি মানচিত্র করি।

উদাহরণ

এখানে চিত্র বর্ণনা লিখুন

এখানে চিত্র বর্ণনা লিখুন

এখানে চিত্র বর্ণনা লিখুন

এখানে চিত্র বর্ণনা লিখুন

বোনাস হিসাবে, এখানে দূরত্বটি কীভাবে গণনা করা হয় তার একটি সুন্দর চিত্র। উজ্জ্বল = আরও দূরে।

এখানে চিত্র বর্ণনা লিখুন


3
এটি আমার ধরণের ধরণের জিনিসটি আমার মেয়ের জন্য আঁকতে চাই।
রেয়রিং

@ রাইরিং টেমপ্লেটগুলি ইলেন্ডিয়া স্টারম্যানের কাজ, আমার নয় =)
flawr

আপনি এখনও চিত্রগুলিতে রঙ রেখেছেন: ডি। আপনি শেষ পদক্ষেপটি করেছেন।
রায়রেং

4
আমি অভিভূত. আমি সবেমাত্র চ্যালেঞ্জটি বুঝতে পারি lol
zfrisch

সত্যি বলতে কী, আমি এটির জন্য যা ব্যবহার করতে চাই তা ল্যান্ডস্কেপ তৈরি করা es
কর্সিকা

3

ব্লিটজ 2 ডি / 3 ডি , 3068 * 0.7 = 2147.6

এটি ইউক্লিডিয়ান অ্যালগরিদমের জন্য রেফারেন্স বাস্তবায়ন, গল্ফড।

image=LoadImage("HueEverywhere_example1.png")
Graphics ImageWidth(image),ImageHeight(image)
image=LoadImage("HueEverywhere_example1.png")
x=0
y=0
w=ImageWidth(image)
h=ImageHeight(image)
Type start
Field x,y
Field dis#
Field nex.start
End Type
Type cell
Field x,y
Field dis#
End Type
Type oldCell
Field x,y
Field dis#
End Type
initCell.start=New start
initCell\x=x
initCell\y=y
initCell\dis=1
Dim array#(w,h)
imgBuff=ImageBuffer(image)
LockBuffer(imgBuff)
s.start=First start
colr=col(0,0,0)
colg=col(0,0,1)
colb=col(0,0,2)
newcol=colr*256*256+colg*256+colb
WritePixelFast(s\x,s\y,newcol,imgBuff)
While s<>Null
c.cell=New cell
c\x=s\x
c\y=s\y
c\dis=s\dis
While c<>Null
For dy=-1To 1
For dx=-1To 1
If dx*dy=0And dx+dy<>0
nx=c\x+dx
ny=c\y+dy
ndis#=s\dis+Sqr#((nx-s\x)*(nx-s\x)+(ny-s\y)*(ny-s\y))
If nx >= 0And nx<w And ny >= 0And ny<h
If KeyHit(1)End
pixcol=ReadPixelFast(nx,ny,imgBuff)
If pixcol<>-16777216
If array(nx,ny)=0Or ndis<array(nx,ny)
check=1
steps=Ceil(dis)*2
For k=0 To steps
r#=k*1./steps
offx#=Int(s\x+(c\x-s\x)*r)
offy#=Int(s\y+(c\y-s\y)*r)
pixcol2=ReadPixelFast(offx,offy,imgBuff)
If pixcol2=-16777216
check=0
Exit
EndIf
Next
If check
array(nx,ny)=ndis
newCell.cell=New cell
newCell\x=nx
newCell\y=ny
newCell\dis=ndis
EndIf
EndIf
EndIf
EndIf
EndIf
Next
Next
o.oldCell=New oldCell
o\x=c\x
o\y=c\y
o\dis=c\dis
Delete c
c=First cell
Wend
For o.oldCell=Each oldCell
bordersWhite=0
For dy=-1To 1
For dx=-1To 1
If dx<>0Or dy<>0
nx=o\x+dx
ny=o\y+dy
If nx>=0And nx<w And ny>=0And ny<h
pixcol=ReadPixelFast(nx,ny,imgBuff)
If (pixcol=-1And array(nx,ny)=0)Or array(nx,ny)>o\dis+9
bordersWhite=1
Exit
EndIf
EndIf
EndIf
Next
If bordersWhite Exit
Next
If bordersWhite
ns.start=New start
ns\x=o\x
ns\y=o\y
ns\dis=o\dis
s2.start=First start
While s2\nex<>Null
If ns\dis<s2\nex\dis
Exit
EndIf
s2=s2\nex
Wend
ns\nex=s2\nex
s2\nex=ns
EndIf
Delete o
Next
EndIf
s2=s
s=s\nex
Delete s2
Wend
maxDis=0
For j=0To h
For i=0To w
If array(i,j)>maxDis maxDis=array(i,j)
Next
Next
For j=0To h
For i=0To w
dis2#=array(i,j)*360./maxDis
If array(i,j) <> 0
colr=col(dis2,0,0)
colg=col(dis2,0,1)
colb=col(dis2,0,2)
newcol=colr*256*256+colg*256+colb
WritePixelFast(i,j,newcol,imgBuff)
EndIf
Next
Next
UnlockBuffer(imgBuff)
DrawImage image,0,0
Function col(ang1#,ang2#,kind)
While ang1>360
ang1=ang1-360
Wend
While ang1<0 
ang1=ang1+360
Wend
While ang2>180
ang2=ang2-360
Wend
While ang2<-180
ang2=ang2+360
Wend
a3#=ang2/180.
If ang1>300
diff#=(ang1-300)/60.
r=255
g=0
b=255*(1-diff)
ElseIf ang1>240
diff#=(ang1-240)/60.
r=255*diff
g=0
b=255
ElseIf ang1>180
diff#=(ang1-180)/60.
r=0
g=255*(1-diff)
b=255
ElseIf ang1>120
diff#=(ang1-120)/60.
r=0
g=255
b=255*diff
ElseIf ang1>60
diff#=(ang1-60)/60.
r=255*(1-diff)
g=255
b=0
Else
diff#=(ang1-00)/60.
r=255
g=255*diff
b=0
EndIf
If a3>0
r2=r+a3*(255-r)
g2=g+a3*(255-g)
b2=b+a3*(255-b)
Else
r2=r+a3*r
g2=g+a3*g
b2=b+a3*b
EndIf
If r2>255
r2=255
ElseIf r2<0
r2=0
EndIf
If g2>255
g2=255
ElseIf g2<0
g2=0
EndIf
If b2>255
b2=255
ElseIf b2<0
b2=0
EndIf
If kind=0
Return r2
ElseIf kind=1
Return g2
ElseIf kind=2
Return b2
Else
Return 0
EndIf
End Function

আসলে, আমি এটিকে ঘৃণা করি যে এটি আসলের সাথে তুলনা করে কতটা অপঠনযোগ্য। (যা ঘটনাক্রমে 5305 বাইট। এবং এটি শীঘ্রই কোনও সময় জিতছে না। : P: P


2

সি ++ / এসএফএমএল: 1271 1235 1226 বাইট

-23 বাইট ব্যবহারকারীর জন্য ধন্যবাদ 202729 -9 বাইট জ্যাকারিকে ধন্যবাদ ý

#include<SFML\Graphics.hpp>
#include<iostream>
#define V std::vector
#define P e.push_back
#define G(d,a,b,c) case d:return C(a,b,c);
#define FI(r,s)(std::find_if(e.begin(),e.end(),[&a](const T&b){return b==T{a.x+(r),a.y+(s),0};})!=e.end())
using namespace sf;using C=Color;struct T{int x,y,c;bool operator==(const T&a)const{return x==a.x&&y==a.y;}};int max(V<V<int>>&v){int m=INT_MIN;for(auto&a:v)for(auto&b:a)m=b>m?b:m;return m;}C hsv2rgb(int t){int ti=t/60%6;float f=t/60.f-ti,m=(1.f-f)*255,n=f*255;switch(ti){G(0,255,n,0)G(1,m,255,0)G(2,0,255,n)G(3,0,m,255)G(4,n,0,255)G(5,255,0,m)default:throw std::exception();}}void r(Image&a,int x,int y){auto d=a.getSize();V<V<int>>m(d.x,V<int>(d.y));int i=0,j,c=0,t;for(;i<d.y;++i)for(j=0;j<d.x;++j)m[j][i]=a.getPixel(j,i)==C::Black?-1:0;V<T>e{{x,y,1}};while(e.size()){V<T>t=std::move(e);for(auto&a:t){m[a.x][a.y]=a.c;if(a.x>0&&m[a.x-1][a.y]==0&&!FI(-1,0))P({a.x-1,a.y,a.c+1});if(a.y>0&&m[a.x][a.y-1]==0&&!FI(0,-1))P({a.x,a.y-1,a.c+1});if(a.x<m.size()-1&&m[a.x+1][a.y]==0&&!FI(1,0))P({a.x+1,a.y,a.c+1});if(a.y<m[0].size()-1&&m[a.x][a.y+1]==0&&!FI(0,1))P({a.x,a.y+1,a.c+1});}}c=max(m)-1;for(i=0,j;i<d.y;++i)for(j=0;j<d.x;++j)if(m[j][i]>0)a.setPixel(j,i,hsv2rgb(360.f*(m[j][i]-1)/c));}

sf::Image(পরিবর্তন করা হবে না) পরামিতি এছাড়াও আউটপুট। আপনি এটির মতো ব্যবহার করতে পারেন:

sf::Image img;
if (!img.loadFromFile(image_filename))
    return -1;

r(img, 0, 0);

if (!img.saveToFile(a_new_image_filename))
    return -2;

প্রথম প্যারামিটারটি হ'ল চিত্রের ইনপুট (এবং আউটপুট), দ্বিতীয় এবং তৃতীয় প্যারামিটারগুলি xএবং yপ্যারামিটার যেখানে এটি শুরু করা দরকার


স্যুইচ কেসটি এতটাই অপব্যয়যুক্ত বলে মনে হচ্ছে যে সম্ভবত কোনও ম্যাক্রো সংজ্ঞা কার্যকর হবে ... এছাড়াও `` এ setPixel(j, i,hsv2এবং FI(xm,ym) (std::find_ifসত্যই প্রয়োজনীয়?
ব্যবহারকারী 202729

আপনি G(d,a,b,c)এবং এর মধ্যে স্থান সরাতে পারেন case d:। এছাড়াও, এর মধ্যে case d:এবং return C(a,b,c)স্থানটিও বিনা শর্তে রয়েছে। ক্রিয়াকলাপগুলির (b>m?b:m)প্রয়োজন হয় না, এবং (t/60)%6=> t/60%6অপারেশনের ক্রম অনুসারে।
জাকারি

আপনার সম্ভবত নাম পরিবর্তন করতে হবে xmএবং ymভেরিয়েবলের সংক্ষিপ্ত নামগুলি করতে হবে
জাকারিয়া

আমার মনে হয় এটা মধ্যে স্থান অপসারণ করা সম্ভব G(d,a,b,c)এবং case, FI, ti, এবং hsv2rgbপ্রতিটি একটি সংক্ষিপ্ত নামে প্রতিস্থাপিত হতে পারে।
জাকারিয়া

1

সি ++, 979 969 898 859 848 বাইট

#include<cstdio>
#include<cstdlib>
#define K 400
#define L 400
#define M (i*)malloc(sizeof(i))
#define a(C,X,Y)if(C&&b[Y][X].c){t->n=M;t=t->n;b[Y][X].d=d+1;t->n=0;t->c=X;t->d=Y;}
#define A(n,d)case n:d;break;
#define F fgetc(f)
#define W(A,B) for(A=0;A<B;A++){
struct i{int c;int d;int v;i*n;}b[L][K]={0},*h,*t;float m=0;int main(){FILE*f=fopen("d","r+b");int x,y,d=0;W(y,L)W(x,K)b[y][x].c=F<<16|F<<8|F;}}rewind(f);x=165,y=155;h=M;h->c=x;h->d=y;b[y][x].d=d;t=h;while(h){i*p=b[h->d]+h->c;if(p->v)h=h->n;else{p->v=1;x=h->c;y=h->d;d=p->d;m=d>m?d:m;a(x>0,x-1,y)a(x<K-1,x+1,y)a(y>0,x,y-1)a(y<L-1,x,y+1)}}W(y,L)W(x,K)i p=b[y][x];unsigned char n=-1,h=p.d/(m/n),R=h%43*6,Q=n*(n-(n*R>>8))>>8,t=n*(n-(n*(n-R)>>8))>>8,r,g,b;switch(h/43){A(0,n,t,0)A(1,Q,n,0)A(2,0,n,t)A(3,0,Q,n)A(4,t,0,n)A(5,n,0,Q)}d=h?r|g<<8|b<<16:p.c?-1:0;fwrite(&d,1,3,f);}}}
  • ইনপুট: আরজিবি ডেটা ফাইল (ফাইলটিতে রয়েছে: ডি)
  • আউটপুট: আরজিবিএ আরজিবি ডেটা ফাইল (ফাইলে আউটপুটড: ডি)
  • উদাহরণ: ডিপথ 8-আকার "400x400" টেস্ট.পিএনজি রূপান্তর করুন
  • দ্রষ্টব্য: চিত্রের আকার এবং শুরুটি উত্স স্তরে নিয়ন্ত্রণ করা হয়, যদি এটি একটি সমস্যা হয় তবে 50 বাইট বা কিছু যুক্ত করা যায় - আমি কেবল এটি সত্যবাদী হওয়ার জন্য এটি পরিবর্তন করার যত্ন করি নি।

হুবহু সরাসরি "উনগল্ফ" নয় তবে এটি সি প্রোটোটাইপ যা আমি প্রথমে উপহাস করেছি:

#include "stdio.h"
#include "stdlib.h"

struct i{
    unsigned int c;
    int d;
    int v;
}b[400][400]={0};

typedef struct q{
    int x;
    int y;
    struct q *n;
}q;
q *qu;
q *t;
float m=0;
int get_dist(int x, int y)
{
    int d = 0;

}

void flood(int x,int y,int d){
    qu=malloc(sizeof(q));
    qu->x=x;qu->y=y;b[y][x].d=d;
    t=qu;
    while(qu){
        struct i *p = &b[qu->y][qu->x];
        if(p->v){qu=qu->n; continue;}
        p->v=1;x=qu->x;y=qu->y;d=p->d;
        #define a(C,X,Y) if(C&&b[Y][X].c){t->n=malloc(sizeof(q));t=t->n;b[Y][X].d=d+1;t->n=0;t->x=X;t->y=Y;}
        a(x>0,x-1,y);
        a(x<399,x+1,y);
        a(y>0,x,y-1);
        a(y<399,x,y+1);
        m=p->d>m?p->d:m;
    }
}

unsigned int C(int h)
{
    int r=0,g=0,b=0;
    int s=255,v=255;
    unsigned char R, qq, t;

    R = h%43*6; 

    qq = (v * (255 - ((s * R) >> 8))) >> 8;
    t = (v * (255 - ((s * (255 - R)) >> 8))) >> 8;

    switch (h / 43){
        case 0: r = v; g = t; break;
        case 1: r = qq; g = v; break;
        case 2: g = v; b = t; break;
        case 3: g = qq; b = v; break;
        case 4: r = t; b = v; break;
        case 5: r = v; b = qq; break;
    }

    return r|(g<<8)|(b<<16)|255<<24;
}

#define F fgetc(f)
int main()
{
    FILE *f=fopen("d", "r+b");
    for(int y=0; y<400; y++){
        for(int x=0; x<400; x++){
            b[y][x].c = (F<<24)|(F<<16)|(F<<8);
        }
    }
    rewind(f);
    flood(165,155,1);
    m/=255.f;
    for(int y=0; y<400; y++){
        for(int x=0; x<400; x++){
            struct i p = b[y][x];
            unsigned int h = C(p.d/m);
            int o = p.c?-1:255<<24;
            if(p.d)fwrite(&h,4,1,f);
            else fwrite(&o,4,1,f);
        }
    }
}

অনেক ধারণাগুলি একই রকম থাকে তবে ছোট্ট পরিবর্তনগুলির অবিস্মরণ অবশ্যই আছে। এটি সংকলন করতে সি হিসাবে আপনাকে সি 11 ব্যবহার করতে হবে (সি 99 সম্ভবত কাজ করবে তবে আমি কেবল কঠোরভাবে সি 11 তে পরীক্ষা করেছি)।
আমি এই চ্যালেঞ্জটি বেশ উপভোগ করেছি, আমাকে নতুন কিছু চেষ্টা করার ধারণা দেওয়ার জন্য ধন্যবাদ :)
সম্পাদনা করুন: গল্ফ আরও ভাল চাই।
সম্পাদনা 2: দুটি স্ট্রাক মার্জ করা হয়েছে যাতে আমার পিক্সেল স্ট্রাক্ট এবং সারি একই হয়, কিছুটা বেশি ম্যাক্রো অপব্যবহার হয় এবং 255 এর প্রত্যাবর্তিত ব্যবহার যেমন স্বাক্ষরবিহীন অক্ষরের একটি সিরিজ সংজ্ঞায়িত করার সময় এটি -1 হিসাবে সংজ্ঞায়িত করা যায় এবং শেষ পর্যন্ত একটি ফাংশন কল সরিয়ে ফেলা হয়।
এডিট 3: আরও কয়েকটি ভেরিয়েবল, অপারেটর অগ্রাধিকারের
টুইটগুলি এবং আরবিবিতে আলফা চ্যানেল সংরক্ষণ করে আউটপুট পুনরায় ব্যবহার করা হয়েছে সম্পাদনা 4: আমি মনে করি আমি এখন এটি সম্পন্ন করেছি, কিছু পয়েন্টার গাণিতিক পরিবর্তন এবং সামান্য নিয়ন্ত্রণ প্রবাহের টুইটগুলি।


0

পাইথন 3 এবং ম্যাটপ্ল্লোব, 251 বাইট

from pylab import*
def f(i,p):
    h,w,_=i.shape;o=full((h,w),inf);q=[p+(0,)]
    while q:
        x,y,d=q.pop(0)
        if w>x>=0and h>y>=0and i[y,x,0]:o[y,x]=d;i[y,x]=0;d+=1;q+=[(x-1,y,d),(x+1,y,d),(x,y-1,d),(x,y+1,d)]
    imshow(i);imshow(o,'hsv')

ইনপুটটি একটি এমএক্সএনএক্স 3 নম্পি অ্যারে যা ম্যাটপ্ল্লোলিবের imshow()ফাংশন দ্বারা ফিরে আসে । ইনপুটটি ফাংশনটির মাধ্যমে সংশোধিত হয়েছে তাই এটি আগে কপি করা উচিত। এটি ম্যাটপ্লটলিব "ইন্টারেক্টিভ" মোডে থাকলে স্বয়ংক্রিয়ভাবে চিত্রটি প্রদর্শিত হয়; অন্যথায় একটি কলটি show()আরও 7 বাইটের জন্য যুক্ত করা উচিত।

আউটপুটটি প্রথমে আসল চিত্রটি প্রদর্শন করে এবং এরপরে রেনবো চিত্রটি উপরে প্রদর্শন করে তৈরি করা হয়। ম্যাটপ্ল্লোব সুবিধামতভাবে ইনফ এবং ন্যানকে স্বচ্ছ হিসাবে বিবেচনা করে তাই কালো এবং সাদা চিত্রটি দেখায়।

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.