স্লাইডিং ধাঁধাতে একটি ছবি তৈরি করুন


14

সারসংক্ষেপ

এই চ্যালেঞ্জের লক্ষ্য হ'ল ফরাসি ভাষায় টাকুইন নামে পরিচিত একটি 15-ধাঁধা / স্লাইডিং ধাঁধাটির একটি পূর্বাবস্থায় ফিরিয়ে নেওয়া চিত্র-সংস্করণ তৈরি করা ।

বিবরণ:

গঠিত একটি ইনপুট দেওয়া:

  • একটি চিত্র,
  • একটি পূর্ণসংখ্যা n,
  • অন্য একটি পূর্ণসংখ্যা r,

আপনার প্রোগ্রাম, বা ফাংশন, বা ফিট করে এমন যে কোনও কিছু অবশ্যই ইনপুট হিসাবে একই চিত্র ( যেমন একই আকার এবং ফর্ম্যাট) আউটপুট করতে পারে , তবে এটি নিম্নলিখিত প্রক্রিয়াটির মধ্য দিয়ে গেছে:

  1. চিত্রটি আয়তক্ষেত্রগুলিতে ভাগ করুন ,
  2. এলোমেলোভাবে এই আয়তক্ষেত্রগুলির একটি অপসারণ করুন
  3. বিন্দু (২) দ্বারা প্রভাবিত রেখা / কলাম থেকে এলোমেলো সংখ্যক আয়তক্ষেত্র সরান যাতে তৈরি গর্তটি পূর্ণ হয় এবং এই লাইন / কলামে অন্য একটি উত্পন্ন হয়। 0ফাঁকা কোণে বা প্রান্তে থাকলে এই সংখ্যাটি হতে পারে ।

পুনরাবৃত্তি (3.) rবার।

ব্যাখ্যা:

  • যদি আপনি ধাপে (৩) রেখা থেকে আয়তক্ষেত্রগুলি সরিয়ে নিয়ে থাকেন তবে আপনাকে অবশ্যই পরবর্তী পুনরাবৃত্তির কলাম থেকে আয়তক্ষেত্র সরিয়ে নিতে হবে,
  • যদি আপনি একটি লাইন-ধাপে আয়তক্ষেত্রগুলি বাম থেকে ডানে স্থানান্তরিত করেন তবে অবশ্যই পরবর্তী কাতারে ডান থেকে বামে সরানো হবে, শীর্ষগুলি থেকে নীচে এবং নীচে থেকে উপরে শীর্ষে কলামগুলির জন্য,
  • আপনি ধরে নিতে পারেন যে nএটি চয়ন করা হবে যাতে এটি ছবির পাশগুলির দৈর্ঘ্যকে ভাগ করে দেয়।

একটি শেষ পয়েন্ট:

.gifপুরো প্রক্রিয়াটি দেখায় এমন একটি অ্যানিমেটেড খুব স্বাগত।

আমি নীচের ছবিটি (যা এটি 1024x768) ব্যবহার করার প্রস্তাব দিয়েছি n=16এবং r=100একটি মডেল হিসাবে আপনি অন্য যে কোনও ছবি ব্যবহার করতে পারেন (যতক্ষণ না এটি প্রাসঙ্গিক এবং এসই এর নিয়ম মেনে চলা পর্যন্ত অবশ্যই)।

নোট করুন যে স্ট্যান্ডার্ড লুফোলস নীতিগুলি প্রযোজ্য।

এটি , তাই সংক্ষিপ্ত জমাটি জিতে!

কুকুর, বিড়াল এবং হাঁস প্রেমীদের সন্তুষ্ট করা উচিত!

যেহেতু একটি উদাহরণ অনুরোধ করা হয়েছে, এখানে এক, "হাতে" তৈরি, সঙ্গে n=4এবংr=1

পদক্ষেপ 1 এবং 2

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

পদক্ষেপ 3 : লাইন অনুসারে, বাম দিকে 2 টি আয়তক্ষেত্র

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


উদাহরণটি পরামর্শ দেয় যে আয়তক্ষেত্রগুলি একই আকারের হওয়া দরকার নয়, পুরো চিত্রটি coverাকতে হবে না এবং মূল চিত্রের উপরে আঁকা লাইনগুলিও অন্তর্ভুক্ত করা উচিত। আপনি স্পেসিফিকেশন বা উদাহরণ পরিবর্তন করে এটি স্পষ্ট করতে পারেন?
ট্রাইকোপলাক্স

@ ট্রাইকোপলাক্স: উদাহরণটি হাত দ্বারা আঁকা হয়েছিল রঙ এবং দ্রুততার সাথে with আমি এটি আবারও করব properly
ফ্রেডেরিক

@ ট্রাইকোপ্লেক্স: আমি অবশ্যই স্বীকার করতে পারি যে আমি আপনার বক্তব্য সম্পূর্ণরূপে পাই না, তবে এই উদ্বোধনী লাইনের চ্যালেঞ্জটি বোঝার দরকার নেই, তাই আমি অনুমান করি এটি চালিয়ে যাওয়া অযথা।
ফ্রেডেরিক

move a random number of contiguous rectanglesএটি 0 আয়তক্ষেত্র হতে পারে? (ফাঁকা প্রান্তে / কোণে থাকাকালীন প্রোগ্রামটি আচরণে পরিবর্তন আনতে ব্যথা হবে)
JungHwan Min

@ জংহওয়ানমিন: হ্যাঁ পারে। ভাল মন্তব্য, ধন্যবাদ!
ফ্রেডেরিক

উত্তর:


10

গণিত, 246 বাইট

ImageAssemble@(n=Nest)[k=RandomInteger;q=Reverse;({t,r}=1~k~2;q[o=n[q/@#&,#,r]&@*(n[#&,#,t]&)])[o@#/.{a___,b:_~RepeatedNull~k[Position[o@#,i][[1,2]]-1],i,c___}:>{a,i,b,c}]&,MapAt[(i=#~ImageAdd~1)&,#~ImagePartition~Scaled[1/#2],{1,#2}~k~2],#3]&

বেনামে ফাংশন। ম্যাথমেটিকার Transposeঅপারেটরের সাথে সম্পর্কিত, ইউ + এফ 3 সি 7 রয়েছে । এই ফাংশনটি একটি Imageঅবজেক্ট নেয় এবং একটি Imageঅবজেক্ট রিটার্ন করে ।

নমুনা অ্যানিমেশন, সহ n=16এবংr=100

5000 পুনরাবৃত্তির পরে:

এখানে চিত্র বর্ণনা লিখুন(বড় সংস্করনের জন্য ছবিটিতে ক্লিক করুন)

ব্যাখ্যা

আরম্ভ

n=Nest

মধ্যে Nestফাংশন (পুনরাবৃত্তি অপারেশন) সংরক্ষণ করুন n

k=RandomInteger;q=Reverse;

RandomIntegerফাংশনটি স্টোর করুন kএবং এতে Reverseফাংশন করুন q

চিত্র বিভক্ত করা

#~ImagePartition~Scaled[1/#2]

ইনপুট চিত্রটি (দ্বিতীয় ইনপুট) t 2 টাইলগুলিতে ভাগ করুন।

{1,#2}~k~2

RandomInteger1 এবং দ্বিতীয় ইনপুট এর মধ্যে দুটি এস উত্পাদন করুন। এটি একটি এলোমেলো টাইল নির্বাচন করে।

MapAt[(i=#~ImageAdd~1)&, ..., {1,#2}~k~2]

সেই টাইলকে সাদা করুন। এটি সংরক্ষণ করুন i

মুভিং টাইলস

{t,r}=1~k~2

0 থেকে 1 পর্যন্ত দুটি এলোমেলো পূর্ণসংখ্যা তৈরি করুন এবং সেগুলি যথাক্রমে tএবং rএগুলিতে সঞ্চয় করুন । এটি এলোমেলোভাবে দিক নির্বাচন করে।

o=n[q/@#&,#,r]&@*(n[#&,#,t]&)

ফাংশন সংজ্ঞায়িত o: রচনা

  1. ইনপুট tবার স্থানান্তর একটি ফাংশন ।
  2. প্রতিটি সারির rবার বিপরীত একটি ফাংশন ।
ণ @ #

oইনপুট প্রয়োগ করুন।

Position[o@#,i][[1,2]]

i(সাদা চিত্র) এর কলামটি সন্ধান করুন ।

k[ ... -1]

একটিকে বিয়োগ করুন এবং 0 এবং সেই সংখ্যার মধ্যে একটি এলোমেলো পূর্ণসংখ্যার সন্ধান করুন। এটি এলোমেলোভাবে পছন্দ করে যে কত টাইল সরাতে হবে।

o@#/.{a___,b:_~RepeatedNull~ ... ,i,c___}:>{a,i,b,c}

যখন i(শ্বেত চিত্র) এর আগে উল্লিখিত সংখ্যক টাইলগুলি উপস্থিত হয় , তখন তাদের স্থানগুলি স্যুইচ করুন।

(... q[o= ... ])[ ... ]

oফাংশনটি বিপরীত করুন এবং এটি উপরের অপারেশনের ফলাফলের জন্য প্রয়োগ করুন। এটি চিত্রটিকে বিপরীত করে এবং স্থানান্তরিত করে।

লুপিং এবং চিত্র সমাবেশ

(n=Nest)[ ... ,#3]

উপরের প্রক্রিয়াটি (তৃতীয় ইনপুট) বার বার করুন।

ImageAssemble@

ছবিগুলি একসাথে রাখুন।


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