আপনি এটিকে কেন্দ্র করে ডাকেন, আমি এটিকে কোড গল্ফ বলি


16

"আসুন আমরা এটির মুখোমুখি হই, প্রান্তিক চিত্রগুলি স্বর্গের সামান্য উপহারের মতো। স্বাগতম, তবে অপ্রত্যাশিত।" - জিওবিটস

যে কেউ এই চ্যালেঞ্জটি জিতবে তার কাছে +10000 খ্যাতি।

নিয়মাবলী:

1) আপনি একটি প্রোগ্রাম তৈরি করতে হবে।

2) ইনপুটটি একটি চিত্র হবে তবে তা ফাইল হিসাবে পাস করা হয় বা সংখ্যার একটি তালিকা আপনার উপর নির্ভর করে।

3) আউটপুট এমন একটি ফাইল হবে যা পেইন্টে খোলার পরে (বা অনুরূপ) চিত্র প্রান্তিককরণ দেখায়।

4) ক্যানভাসের আকার সর্বদা 100 x 100 এবং 2000 x 2000 পিক্সেলের মধ্যে থাকবে। এটি সর্বদা একটি আয়তক্ষেত্র হবে তবে সর্বদা বর্গক্ষেত্র নয়।

5) চিত্র বা মজাদার ইউআরএল যাদুগুলির কোনও হার্ড কোডিং নেই।

)) কোনও বাহ্যিক গ্রন্থাগার ব্যবহার করার দরকার নেই।

কেন্দ্রীয়করণের জন্য গাইড (জোশপবারন ভেরিয়েন্ট)

কোনও অক্ষকে যদি 1 ম সাদা (255,255,255,> 0 আরজিবা) বা স্বচ্ছ (x, y, z, 0 rgba) ক্যানভাসের প্রান্ত থেকে সমান দূরত্ব (প্লাস বা বিয়োগ 1 পিক্সেল) হয় তবে একটি চিত্র কেন্দ্রিক হিসাবে সংজ্ঞায়িত হবে।

এটি নিম্নলিখিত পদ্ধতিটি অর্জন করতে পারে (এবং এটি দ্বারা যাচাই করা হবে)।

1) বস্তুর চারপাশে একটি বাউন্ডিং বক্স কল্পনা করুন। (সহায়তার জন্য কালো রেখা যুক্ত করা হয়েছে)

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

2) অবজেক্টের প্রান্তটি ক্যানভাসের যথাযথ প্রান্ত থেকে সমান দূরত্ব না হওয়া অবধি অবধি সরান।

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

৩) এবার কালো রেখাগুলি ভুলে যাও।

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

ইনপুট:

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

আউটপুট:

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

এখানে আরও ইনপুট ।

এবং এখানে সম্পর্কিত আউটপুট ।

+10000 প্রতিনিধিত্ব একটি মিথ্যা।


প্রোগ্রামটি সম্পূর্ণ সাদা / স্বচ্ছ চিত্রগুলি হ্যান্ডেল করা উচিত?
ক্রিশ্চিয়ান লুপাস্কু

যেহেতু কেন্দ্রে কিছুই নেই, একই চিত্রটি ফেরত দেওয়া উচিত। খালি জায়গা ছাড়া চিত্রগুলির জন্য একই S
জোশপবারন

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

দুঃখিত, তবে ব্যাখ্যাটি স্পষ্ট। আরবিজিএ কোড দেওয়া আছে।
জোশপবারন

বিবরণে, আপনি একটি প্রান্ত থেকে 1 ম সাদা / স্বচ্ছ পিক্সেলের দূরত্ব সম্পর্কে কথা বলছেন। আপনি প্রথম অ- শ্বেত মানে না ? অন্যথায় সমস্ত নমুনা ইনপুট ইতিমধ্যে সমাধান, কারণ প্রতিটি প্রান্ত থেকে প্রথম সাদা পিক্সেলের দূরত্ব 0, সুতরাং যারা দূরত্বগুলি সব সমান।
রেটো কোরাডি

উত্তর:


0

পাইথন 3, 120 205 বাইট

সম্পাদনা : আউটপুট চিত্রের ইনপুট হিসাবে একই আকার থাকতে হবে, স্ক্রিপ্ট দীর্ঘ হয় ...

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

from PIL.Image import*;from PIL.ImageOps import*
c='RGB';i=open(input()).convert(c);w,h=i.size
o,a=new(c,(w,h),'white'),i.crop(invert(i).getbbox())
e,f=a.size;o.paste(a,((w-e)//2,(h-f)//2));o.save('o.png')

পূর্ববর্তী সংস্করণটি সবেমাত্র ইনপুট চিত্রটি ক্রপ করেছে:

from PIL.Image import*;from PIL.ImageOps import*
i=open(input()).convert('RGB')
i.crop(invert(i).getbbox()).save('o.png')

উভয় স্ক্রিপ্ট স্ট্যান্ডিন থেকে চিত্র ফাইলের নাম পড়ে এবং আউটপুট চিত্র 'o.png' হিসাবে সংরক্ষণ করে। উদাহরণ স্বরূপ :

python3 script.py <<< s2rMqYo.png

এটি কমপক্ষে পিএনজি চিত্র গ্রহণ করে (সম্ভাব্যভাবে একটি আলফা চ্যানেল সহ) - প্রশ্নকর্তার দ্বারা সরবরাহিত সেটে পরীক্ষিত 'ঠিক আছে'।

... আমার পুরষ্কারের জন্য অপেক্ষা করছি):


1
আমি এই মুহুর্তে পরীক্ষা করতে পারছি না, তবে আউটপুট ক্যানভাস আকারটি ইনপুট ক্যানভাস আকারের সাথে মেলে?
জোশপবারন

1
আপনার ভবিষ্যতের শেল প্রয়াসের জন্য টিপস: python3 script.py <<< s2rMqYo.pngএটি পরিষ্কার
আন্ডারগ্রাউন্ডোমোরিলে

1
আউটপুট অবশ্যই ইনপুট হিসাবে একই আকার হতে হবে, হ্যাঁ।
জোশপাবারন

3
আপনি একটি লাইব্রেরি (পিআইএল) ব্যবহার করছেন, যা অনুমোদিত নয়। (পিআইএলকে স্ট্যান্ডার্ড লাইব্রেরির অংশ বলা যায় না, কারণ এটি পাইথনের সাথে ডিফল্টরূপে অন্তর্ভুক্ত থাকে না))
মেরিনাস

2
@ মারিনাস আমি মনে করি যে এটি কিছুটা কঠোর .. এটি বিপুল সংখ্যক প্রোগ্রামিং ভাষাকে পৃথক করে।
বিটা ক্ষয়

2

এইচটিএমএল 5 + জাভাস্ক্রিপ্ট (ইএস 5), 515 বাইট

এই গণনাটিতে এইচটিএমএল ট্যাগগুলি প্রোগ্রামের অংশ হিসাবে অন্তর্ভুক্ত রয়েছে। যদি আপনি কেবল চিত্রের প্রসেসিং কোড গণনা করেন তবে এটি ফাংশন র‌্যাপার সহ 376 বাইট

<canvas id=o></canvas><script>f=function(p){o=new Image();o.crossOrigin='Anonymous';o.src=p;o.onload=function(){v=document.getElementById('o'),c=v.getContext('2d');v.width=l=w=o.width;v.height=t=h=o.height;c.drawImage(o,0,0);for(k=255,d=c[g='getImageData'](0,0,w,h).data,r=b=i=0;i<d.length;)if((d[i++]<k||d[i++]<k||d[i++]<k)&&d[i++]){x=i/4%w;y=~~(i/4/w);l=l<x?l:x;t=t<y?t:y;b=b>y?b:y;r=r>x?r:x}n=c[g](l,t,r-l+1,b-t+1);c.clearRect(0,0,w,h);c.putImageData(n,(w-r+l)/2,(h-b+t)/2)}}</script><input onblur=f(this.value)>

ইনপুট

একটি চিত্রের একটি URL।

সুরক্ষা বিধিনিষেধ

যেহেতু এই প্রোগ্রামটি ব্রাউজার পরিবেশে চলছে, কেবলমাত্র CORS- সক্ষম চিত্রগুলির URL গুলি কাজ করবে। ইমগুর সিওআরএস সক্ষম।

আইই 10, সিওআরএস সমর্থন করে না। আমি এখনও আইই 11 তে পরীক্ষা করিনি তবে এটি ক্রোম এবং ফায়ারফক্সে কাজ করে।

কীভাবে চালাবেন

  1. ইনপুট ক্ষেত্রে কোনও URL এ টাইপ করুন / আটকান।
  2. ইনপুট ক্ষেত্র থেকে ডি-ফোকাস (ট্যাব / ক্লিক আউট)।

আউটপুট

এটি পৃষ্ঠায় ক্যানভাসে আউটপুট দেয়।

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

ডেমো

জাভাস্ক্রিপ্ট কোডটি scriptউপাদানটি থেকে সরানো হয়েছে এবং স্ট্যাক স্নিপেটের জন্য উপযুক্ত জায়গায় স্থাপন করা হয়েছে:

f = function(p) {
  o = new Image();
  o.crossOrigin = 'Anonymous';
  o.src = p;
  o.onload = function() {
    v = document.getElementById('o'), c = v.getContext('2d');
    v.width = l = w = o.width;
    v.height = t = h = o.height;
    c.drawImage(o, 0, 0);
    for (k = 255, d = c[g = 'getImageData'](0, 0, w, h).data, r = b = i = 0; i < d.length;)
      if ((d[i++] < k || d[i++] < k || d[i++] < k) && d[i++]) {
        x = i / 4 % w;
        y = ~~(i / 4 / w);
        l = l < x ? l : x;
        t = t < y ? t : y;
        b = b > y ? b : y;
        r = r > x ? r : x
      }
    n = c[g](l, t, r - l + 1, b - t + 1);
    c.clearRect(0, 0, w, h);
    c.putImageData(n, (w - r + l) / 2, (h - b + t) / 2)
  }
}
<canvas id=o></canvas>
<input onblur=f(this.value)>


এজ এ কাজ করার বিষয়টি নিশ্চিত করেছেন। আমি ভাবছি এটি আই 11 এও কাজ করবে।
অ্যালেক্স ভ্যান লিউ

0

প্রক্রিয়াজাতকরণ 2 - 323 450

চিত্রটি স্কেচের ডেটা ফোল্ডারে f.png ফাইল থেকে পড়ে। চিত্র স্থাপন করে এবং এটির সীমা নির্ধারণ করে। সঠিক অবস্থান গণনা করে এবং চিত্রটি সঠিকভাবে স্থানান্তরিত করে।

PImage p=loadImage("h.png");int a,b,c,d,x,y,w,i,n,m,t;a=w=p.width;c=i=p.height;clear();size(w,i,P2D);x=y=b=d=t=0;image(p,0,0);loadPixels();while(x<w*i){if(pixels[x]==color(255))t=1;x++;}x=0;background(255);image(p,0,0);loadPixels();while(y*w+x<w*i){if(pixels[y*w+x]!=color(255)){if(x<a)a=x;if(x>b)b=x;if(y<c)c=y;if(y>d)d=y;}x++;if(x==w){x=0;y++;}}n=(w-(b-a))/2;m=(i-(d-c))/2;clear();if(t>0)background(255);image(p,n-a,m-c);loadPixels();save("g.png");

পাঠযোগ্য সংস্করণ:

PImage p=loadImage("h.png");
int a,b,c,d,x,y,w,i,n,m,t;
a=w=p.width;
c=i=p.height;
clear();
size(w,i,P2D);
x=y=b=d=t=0;
image(p,0,0);
loadPixels();
while(x<w*i)
{
 if(pixels[x]==color(255))t=1;
 x++;
}
x=0;
background(255);
image(p,0,0);
loadPixels(); 
while(y*w+x<w*i)
{
 if(pixels[y*w+x]!=color(255))
 {
   if(x<a)a=x;
   if(x>b)b=x;
   if(y<c)c=y;
   if(y>d)d=y;
 }
 x++;
 if(x==w){x=0;y++;}
}
n=(w-(b-a))/2;
m=(i-(d-c))/2;
clear();
if(t>0)background(255);
image(p,n-a,m-c);
loadPixels();
save("g.png");

উদাহরণ আউটপুট:

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

আপনি এখানে প্রক্রিয়াজাতকরণ পেতে পারেন


আপনি দয়া করে আমার তুলনা করার জন্য একটি নমুনা আউটপুট ফাইল সরবরাহ করতে পারেন?
জোশপবারন

এটি দুর্দান্ত ... তবে বেশ নয়। ইনপুট চিত্রগুলির স্বচ্ছ পটভূমি রয়েছে।
জোশপবারন

1
"চিত্রটি f.png ফাইল থেকে পড়েছে"। সত্যি? আপনার কোডে আমি এই লাইনটি দেখতে পাচ্ছি: PImage p=loadImage("h.png");একেবারে শীর্ষে।
স্যার পাইথন

color(-1)এবং background(-1)প্রতিটি 1 বাইট যথাক্রমে color(255)এবং এর চেয়ে কম background(255)হয়। এবং আমার মনে হয় অপসারণ করতে পারেন P2Dমধ্যে sizeকল
Kritixi Lithos
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.