একটি অবমুক্ত আয়তক্ষেত্র সরান


20

এই চিত্রটি একে অপরের শীর্ষে 7 টি ভিন্ন বর্ণের আয়তক্ষেত্রগুলি আবৃত করে তৈরি হয়েছিল:

প্রধান চিত্র

কালো এবং মেরুন আয়তক্ষেত্রগুলি নিরবচ্ছিন্ন , অর্থাৎ অন্য কোনও আয়তক্ষেত্র তাদের উপরে নেই।

এমন কোনও প্রোগ্রাম লিখুন যা এটির মতো একটি চিত্র গ্রহণ করে এবং ফলাফলের চিত্রটি আউটপুট করে যে কোনও একক অবরুদ্ধকৃত আয়তক্ষেত্রটি সরিয়ে দেয়।

উদাহরণ

যদি আপনি উপরের চিত্রটিতে আপনার প্রোগ্রামটি চালিয়ে যান এবং আউটপুটে এটি পুনরায় চালিয়ে যান, এটি এটির মতো অগ্রসর হতে পারে।

রান 1 - কালো সরানো (মেরুন হতে পারে):

চালান 1

রান 2 - মেরুন সরানো (কেবলমাত্র পছন্দ):

চালান 2

রান 3 - হলুদ সরানো (কেবলমাত্র পছন্দ):

চালান 3

রান 4 - নীল সরানো (সবুজ হতে পারে):

রান 4

5 চালান - সবুজ সরানো (কেবলমাত্র পছন্দ):

রান 5

রান 6 - ব্রাউন সরানো (কেবলমাত্র পছন্দ):

রান 6

রান 7 - লাল সরানো (কেবলমাত্র পছন্দ):

7 চালান

যে কোনও অতিরিক্ত রান একই সাদা চিত্র তৈরি করা উচিত।

আশা করি স্ট্যাক এক্সচেঞ্জ ক্ষতিগ্রস্থ হয়ে এই চিত্রগুলির কোনও সংকোচিত করে নি।

চিত্রটির সর্বদা একটি সাদা ব্যাকগ্রাউন্ড থাকবে এবং প্রতিটি আয়তক্ষেত্রটি একটি অনন্য আরজিবি রঙ হবে যা সাদা নয়।

আপনি ধরে নিতে পারেন যে চিত্রটি সর্বদা ওভারল্যাপিং আয়তক্ষেত্রগুলির সেট হিসাবে ব্যাখ্যা করা যায়। বিশেষত, আপনি ধরে নিতে পারেন যে কোনও নির্দিষ্ট রঙের জন্য, চিত্রটির শীর্ষের নিকটে থাকা রঙের পিক্সেলটি সেই রঙের আয়তক্ষেত্রের শীর্ষ প্রান্তের অংশ। নীচে, বাম এবং ডান প্রান্তের জন্য এটি একইরকম।

সুতরাং, উদাহরণস্বরূপ, এই চিত্রটিতে, লাল আয়তক্ষেত্রের শীর্ষ প্রান্তটি হলুদ আয়তক্ষেত্রের নীচের প্রান্তের ঠিক নীচে হবে, কারণ কমলা আয়তক্ষেত্রটি পুরানো লাল শীর্ষ শীর্ষ প্রান্তটি coveredেকে রেখেছে:

উদাহরণ 1

এই চিত্রটিতে, লাল আয়তক্ষেত্রটি প্রথমে সরানো যেতে পারে (কালো / মেরুন / কমলা / ধূসর পাশাপাশি):

উদাহরণ 2

যখন নীচের আয়তক্ষেত্রের ক্রমটি দ্ব্যর্থক হয়, আপনি তাদের কোনও আদেশ দিতে পারেন।

উদাহরণস্বরূপ, এখানে বাম চিত্রটি মাঝখানে বা ডান হয়ে উঠতে পারে:

উদাহরণ 3 উদাহরণ 4 উদাহরণ 5

আউটপুটে প্যারাডক্সিকাল ওভারল্যাপগুলি থাকা উচিত নয় (তাই এটি চিত্রকের অ্যালগরিদম দিয়ে তৈরি করা সম্ভব হওয়া উচিত)। সুতরাং এই চিত্রটিতে ( ধন্যবাদ ব্যবহারকারী 23013 ) কমলা আয়তক্ষেত্রের নীচে সবুজ হতে হবে:

উদাহরণ 6

অতিরিক্ত তথ্য

  • চিত্র এবং আয়তক্ষেত্রগুলির কোনও মাত্রা থাকতে পারে।
  • আয়তক্ষেত্রগুলি চিত্রের সীমানাকে স্পর্শ করতে পারে।
  • 256 3 - 1 পর্যন্ত আয়তক্ষেত্র পর্যন্ত থাকতে পারে ।
  • যদি ইনপুট পুরোপুরি সাদা হয় তবে আউটপুটটিও একইভাবে হওয়া উচিত।
  • আপনি ইমেজ লাইব্রেরি ব্যবহার করতে পারেন।
  • ইনপুটটি চিত্রের ফাইলের নাম বা কাঁচা চিত্রের ডেটা হওয়া উচিত। এটি স্টিডিন বা কমান্ড লাইন থেকে আসতে পারে।
  • আউটপুট একই বা অন্য কোনও ছবিতে লেখা যেতে পারে, স্টাডাউট থেকে কাঁচা বানানো বা কেবল প্রদর্শিত।
  • যে কোনও সাধারণ লসলেস ট্রুইকালার চিত্র ফাইল ফর্ম্যাট অনুমোদিত।

সবচেয়ে কম বাইটস সহ জমাটি জয়লাভ করে।



প্রযুক্তিগতভাবে প্রয়োজনীয়তার মধ্যে এমন কিছুই নেই যা বলে যে আউটপুটে প্যারাডক্সিকাল ওভারল্যাপ নাও থাকতে পারে। এটি যুক্ত করা উচিত, বা উভয়ই পরীক্ষা মামলার ব্যাখ্যা ঠিক আছে?
জন ডিভোরাক

আপনি কি দয়া করে "ট্রুয়েলর" স্পষ্ট করতে পারেন?
FUZxxl


@ জনডভোরাক আমার কাছে আশা ছিল যে তা নিহিত ছিল তবে, আপনি ঠিক বলেছেন, এটি অস্পষ্ট, তাই আমি এটি সম্পর্কে একটি নোট যুক্ত করেছি।
ক্যালভিনের

উত্তর:


10

সিজেম, 241 বাইট

(নতুন লাইনগুলি সরিয়ে দিয়ে))

rri:Hri:Vri:Q[q~]3/_Qa3*a+_|$W%:Pf{\a#}:AH/:B0ff*
P,,[AHAW%HBz:+_W%V\V]2/
ff{~@@f=/::|1#}0Ua4*t:R;
P0f<
V{H{BI=J=_2$=
0R{"I>! I+V<J>! J+H<"4/+4/z{~~}%:&1$*\)}%);2$-|t
}fJ}fI
[P,{_La#\1$0t1$f-}*;;]
{:TR=2/~\~V\-,>\f{\_3$=@~H\-,>{Tt}/t}~}/
:~Pf=:~
~]S*N

এটি পিপিএম ফাইল ফর্ম্যাট ব্যবহার করে। ব্যবহারের উদাহরণ (চিত্রম্যাগিক ব্যবহার করে):

convert IVYvE.png -compress none ppm:-| (time /path/to/cjam-0.6.4.jar 1.cjam) |display

ঠিক আছে, এটি খুব দীর্ঘ এবং খুব ধীর ... উদাহরণ হিসাবে প্রায় এক মিনিট চলে Run

পরীক্ষা সহজতর করার জন্য আমি পরীক্ষার কেসগুলিকে পুনরায় আকার দিয়েছি (এবং আরও কিছু যুক্ত করেছেন)।

দেখে মনে হচ্ছে রঙের স্থান সম্পর্কিত তথ্যগুলি হারিয়ে গেছে তাই রঙগুলি কিছুটা আলাদা।


2

পাইথন, 690 651 610 606 594 569 বাইট

স্ক্রিপ্ট স্টিডিনের থেকে ছবির নামটি পড়ে।

এটি প্রতিটি আয়তক্ষেত্রের প্রান্তগুলি সনাক্ত করে, তাদের ধারণ করে বিভিন্ন রঙের সংখ্যা অনুসারে বাছাই করুন (অবিকৃত আয়তক্ষেত্রগুলিতে কেবল 1 টি রঙ থাকে এবং তারপরে তালিকার শেষে প্রদর্শিত হবে)

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

পিআইএল আমদানি থেকে এল হিসাবে চিত্র, ডি হিসাবে চিত্র; ]; (ওয়াট, এইচ), q = I.size, I.load ()
আই, জে পণ্যের জন্য (আর (ডাব্লু), আর (এইচ)):
 গ = প্রশ্নঃ [আমি, ঞ]
 যদি সিটিতে জেড: x, y, এক্স, ওয়াই = জেড [সি]; জেড [সি] = [এক্স, ওয়াই, সর্বাধিক (এক্স, আই), সর্বাধিক (ওয়াই, জে)]
 অন্য: জেড [গ] = [আমি, J, 0,0]
সি, (এক্স, ওয়াই, এক্স, জন্য উত্পাদনে (আর (এক্স, এক্স), আর (ওয়াই, ওয়াই))}) জন্য ক্রমানুসারে ([(সি, লেন ({কিউ [g] Y) জেডাইটেম ()] এ, কী = কে) [1: -1]): ও = এল.নিউ (আই.মোড, আই.সাইজ, 0 এক্সএফএফএফএফএফ); [ডি। ড্র (ও) .রেট্যাঙ্গেল (জেড [সি], সি এর জন্য ফিল = সি), _ ইন এন]; ও + = [(ও, সমষ্টি (অ্যাবস (অ্যাব)) টি, জিপ ইন আই (আই.জেডটাটা (), ও.গেটটা ()) এ, জিপ ইন বি (টি, টি))]]
MAX (হে, কী = ট) [0] .show ()

0

জাভা - 1483 বাইট

আমি কোনও দুর্দান্ত কোড গল্ফার নই, এটি পরিষ্কার হয়ে উঠুক; সুতরাং ভার্বোসটি পুরোপুরি জাভা এর দোষ নয় ;-) তবুও এটি সত্যিই মজাদার একটি চ্যালেঞ্জ বলে মনে হয়েছিল। আমি এটিকে এমনভাবে সমাধান করেছি যে - আমি মনে করি - এটি কিছুটা বিরক্তিকর এবং ভার্বোস, তবে ওহে। এটি কাজ করে, এটি (তুলনামূলকভাবে) দ্রুত এবং বিশেষত মজাদার ছিল!

ধারণাটি নিম্নরূপ: উপরের বাম কোণে শুরু থেকে নীচে ডানদিকে প্রতিটি পিক্সেল পরীক্ষা করে দেখুন। এটি কি সাদা পিক্সেল? উপেক্ষা করুন। এটি রঙিন হয়? দুর্দান্ত, আসুন আমরা এটির নজর রাখি এবং এর সীমানা নির্ধারণ করার চেষ্টা করি (উপরের বাম, উপরে ডান, নীচে বাম, নীচে ডানদিকে)।

এটি শেষ হয়ে গেলে, প্রতিটি আয়তক্ষেত্রের অঞ্চলটি পরীক্ষা করুন। এটিতে আয়তক্ষেত্রের বর্ণের চেয়ে আলাদা রঙ রয়েছে? তারপরে কোন আয়তক্ষেত্রটি সেই রঙের সাথে সম্পর্কিত তা সন্ধান করুন এবং ওভারল্যাপিং আয়তক্ষেত্রের জেড-সূচকটি 1 দ্বারা আপডেট করুন।

এবং অবশেষে, জেড-সূচকগুলিকে বিবেচনায় নেওয়ার সময় সমস্ত আয়তক্ষেত্র আঁকুন। এটি সিএসএস এবং অন্যান্য 3 ডি স্টাফ থেকে আপনার জানা জেড-ইনডেক্সের মতো কাজ করে। সর্বনিম্ন জেড-সূচকের সাথে আয়তক্ষেত্রগুলি প্রথম আঁকা, সর্বশেষে সর্বোচ্চ জেড-সূচক।

import java.awt.*;import java.awt.image.*;import java.io.File;import java.util.*;import java.util.List;import javax.imageio.*;class A{class R{public Color k=new Color(-1);public int z;public Point a;public Point b;public Point c;public Point d;}public static void main(String[]w)throws Exception{BufferedImage i=ImageIO.read(new File(w[0]));List<R>r=new Vector<R>();for(int y=0;y<i.getHeight();y++){for(int x=0;x<i.getWidth();x++){Color c=new Color(i.getRGB(x,y));if(c.getRGB()==-1){continue;}R t=null;for(R s:r){if(s.k.equals(c)){t=s;}}if(t==null){t=new A().new R();r.add(t);}if(t.a==null){t.a=new Point(x, y);t.b=new Point(x, y);t.c=new Point(x, y);t.d=new Point(x, y);t.k=new Color(c.getRGB());}if(x<t.a.x){t.a.x=x;t.c.x=x;}if(x>t.b.x){t.b.x=x;t.d.x=x;}t.c.y=y;t.d.y=y;}}for(R s:r){List<Color>b=new Vector<Color>();for(int y=s.a.y;y<=s.c.y;y++){for(int x = s.a.x;x<=s.b.x;x++){if(i.getRGB(x, y)!=s.k.getRGB()){Color a=new Color(i.getRGB(x,y));boolean q=false;for(Color l:b){if(l.equals(a)){q=true;}}if(!q){b.add(a);} else {continue;}R f=null;for(R k:r){if(k.k.equals(a)){f=k;}}f.z=s.z+1;}}}}Collections.sort(r,new Comparator<R>(){public int compare(R a, R b){return a.z>b.z?1:(a.z==b.z?0:-1);}});for(int ii=r.size();ii>0;ii--){BufferedImage d=new BufferedImage(i.getWidth(),i.getHeight(),2);Graphics2D g=(Graphics2D)d.getGraphics();for(R s : r.subList(0, ii)){g.setColor(s.k);g.fillRect(s.a.x,s.a.y,s.b.x-s.a.x,s.c.y-s.a.y);}ImageIO.write(d,"png",new File(r.size()-ii+".png"));}}}

সম্পূর্ণ কোড যা কিছুটা - এবং এটি একটি সংক্ষিপ্ত বিবরণ ;-) - আরও স্পষ্টভাবে লিখিত, এখানে পাওয়া যাবে: http://pastebin.com/UjxUUXRp

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

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