সেই কোণটি কী?


12

এই চ্যালেঞ্জটির লক্ষ্য হ'ল একটি চিত্রের একটি রেখার কোণ নির্ধারণ করা।

ছবিতে বিধি:

  • চিত্রের পটভূমি সাদা হবে ( #FFFFFF)
  • লাইনের স্ট্রোক কালো হবে ( #000000)
  • লাইনটি অ্যান্টি-এলয়েজড হবে না
  • চিত্রটি হবে 100x100 পিক্সেল
  • লাইনটি চিত্রের কেন্দ্রে শুরু হবে
  • লাইনটি নীচে দেখানো শুরু করবে (6-ওক্লক)
  • লাইনটি 50 পিক্সেল দীর্ঘ হবে
  • লাইনের কোণটি শুরু অবস্থান থেকে ঘড়ির কাঁটার বিপরীতে গিয়ে পরিমাপ করা হবে
  • চিত্র কোডেক হয় হবে .jpgবা হয়.png

ইনপুট ফর্ম্যাট হ'ল কমান্ড লাইন আরগ, স্ক্রিপ্ট ইনপুট বা ফাংশন আরগ দ্বারা পাস করা ফাইলের নাম। আউটপুট ফর্ম্যাটটি সহজ - কেবলমাত্র ডিগ্রির সংখ্যা আউটপুট করুন (যেমন 90)।

উত্তরগুলি বর্ণিত পরিমাপের ± 1 ডিগ্রি হতে পারে। এখানে কয়েকটি উদাহরণ চিত্র রয়েছে:

1

ধূসর ব্যাকগ্রাউন্ড সহ 45 ডিগ্রি রেফারেন্স চিত্র image

1

0 ডিগ্রি

2

45 ডিগ্রি

3

50 ডিগ্রি

4

130 ডিগ্রি

6

230 ডিগ্রি

7

324 ডিগ্রি

চিত্রগুলি তৈরি করতে ব্যবহৃত কোডটি এখানে রয়েছে (এটি প্রসেসিংয়ের সাথে কোডযুক্ত ):

int deg = 45;

int centX = width/2, centY = height/2;

background(255);
noSmooth();
line(centX,
     centY,
     centX + sin(radians(deg))*50,
     centY + cos(radians(deg))*50);

saveFrame("line-"+deg+".png");// image codec can be changed here. use '.png' or '.jpg'

1
আমি কি ডাউনটা পেয়েছি? যদি তাই হয় তবে ভোটার কেন ব্যাখ্যা করতে পারতেন?
জে আত্কিন

আমরা কি কেবল এটি প্রদর্শন করতে পারি, এটি কোনও ফাইলে সংরক্ষণ করতে পারি না?
ev3commander

অবশ্যই, অন্যান্য সমস্ত উত্তর এটি করে। আপনার প্রোগ্রামটি যে উত্তর উত্পন্ন করে তা কেবল কনসোলটিতে মুদ্রণ করুন।
জে আতকিন

1
@ জ্যাটিন আমি সাধারণভাবে আপলোড করা পোস্টে ডাউনভোটদের নিয়ে চিন্তা করব না। গ: আমরা সবাই তা পেয়েছি।
অ্যাডিসন ক্রম্প

আচ্ছা বুঝলাম. আমি অবাক হয়েছি কেন আমি কেন একজন পেয়েছি ...
জে আটকিন

উত্তর:


7

পাইথ - 28 26 বাইট

জেএস উত্তর হিসাবে একই ধরণের জোর শক্তি কৌশল ব্যবহার করে।

f!@F+]'zm+50s*48.t.tT7d_U2

স্টিডিন থেকে ফাইলের নাম হিসাবে ইনপুট নেয়।

f                     Filters from 1 till predicate is matched
 !                    Boolean not so that only pixel with zero value matched
  @F+]                Folds by indexing to get pixel value  
   'z                 Reads image filename input
   m         _U2      Maps over both trig ratios
    +50               Adds 50 to pixel value
     *48              Multiplies pixel value by 48
      .t    d         Takes trig ratio with appropriate option
        .t 7          Degrees to radians
          T           Filter var

বাহ, এটি দুর্দান্ত তবে আমি অজানা কথা বলি না। আপনি একটি ব্যাখ্যা যোগ করতে আপত্তি হবে?
জে আতকিন

1
আমি আশা করি অন্যদিকে জাভাস্ক্রিপ্টের একই বাইট গণনা থাকত।
সন্নিবেশকারী নাম এখানে

@ অন্তর্ভুক্তকারীর নাম এখানে আমি আশা করি গ্রোভী বা স্কেলা এই ধরণের গল্ফিংও করতে পারে।
জে আতকিন

@ জ্যাটিন ব্যাখ্যা যুক্ত হয়েছে। আপনার যদি কোনও প্রশ্ন থাকে তবে নির্দ্বিধায় আমাকে চ্যাটে বার্তা দিন।
মালটিসেন

9

জাভাস্ক্রিপ্ট (ES6), 225 227 244 বাইট

আসুন বল ঘূর্ণায়মান:

f=s=>{(i=new Image).src=s;c=document.createElement`canvas`.getContext`2d`;c.drawImage(i,0,0,100,100);for(a=360;a--,r=a/180*(m=Math).PI;)if(!c.getImageData(50+48*m.cos(r),50+48*m.sin(r),1,1).data[1]){alert((450-a)%360);break}}

কেবল চিত্রটির URL টি ফাংশনে প্রেরণ করুন:

f('90deg.png');

সতর্কতা ডিগ্রি ± 1 ব্যাপ্তির মধ্যে। সমস্ত পরীক্ষার কেস পাস করেছে।

Ungolfed

f=s=>{
    // create new image and set source
    (i=new Image).src=s;
    // create canvas and get context
    c=document.createElement`canvas`.getContext`2d`;
    // set width/height to 100px and draw image on canvas
    c.drawImage(i,0,0,100,100);
    // check whether for any degree on the theoretical circle a black pixel is found
    for(a=360;a--,r=a/180*(m=Math).PI;)
        if(!c.getImageData(50+48*m.cos(r),50+48*m.sin(r),1,1).data[1]){
            // wait, it should be ccw and the board is rotated 90 degrees
            alert((450-a)%360);
            break
        }
}

সম্পাদনাগুলি

  • 17 বাইট সংরক্ষিত - অঙ্কিত আমার ক্যানভাস উপাদানটির প্রস্থ এবং উচ্চতা নির্ধারণ করার দরকার নেই।
  • সংরক্ষিত 2 বাইট শর্ত অস্বীকার করে।

আমি মনে করি এটি কাজ করা উচিত (এটি পরীক্ষা করে দেখা হয়নি)। 206 বাইট:s=>{(i=new Image).src=s;with(Math)with(document.createElement`canvas`.getContext`2d`)for(drawImage(i,0,0,100,100),a=360;r=--a/180*PI;)getImageData(50+48*cos(r),50+48*sin(r),1,1).data[1]||alert((450-a)%360)}
ব্যবহারকারী 81655

1
আপনি ভাগ্যবান বলে এই কোডটি কাজ করে। ক্যানভাসটি প্রায় প্রতিবার কলঙ্কিত হবে। বিশেষ সঙ্গে file://। আপনার crossOriginসম্পত্তি সেট করা দরকার । এছাড়াও, ইমেজ লোডিংটি ক্যানভাস তৈরির চেয়ে 0.00001 সেকেন্ড বেশি সময় নিয়ে কাজ করবে না। এছাড়াও, আপনার প্রয়োজন নেই f=, 2 বাইট কেটে ফেলুন। তবে এটি সত্যিই একটি দুর্দান্ত সমাধান !!! এটির জন্য আমার উত্সাহ।
ইসমাইল মিগুয়েল

@ ইসমাইলমিগুয়েল আপনার বিস্তারিত প্রতিক্রিয়ার জন্য ধন্যবাদ। আপনি ঠিক ক্যানভাস সম্পর্কে। শুরুতে আমি ইমেজটি ঘোরানোর এবং মিরর করার চেষ্টা করেছি, যাতে কোণটি রূপান্তরিত হওয়ার দরকার নেই। আপনি যে বিদায় বলতে পারেন! ঝাপসা হয়ে গেছে, সঠিক পিক্সেলটি খুঁজে পেল না। আমি সেই onloadঅংশটি এড়িয়ে গিয়েছিলাম কারণ আমি অন্য চ্যালেঞ্জের মধ্যে পড়েছিলাম ut সুতরাং আমি ভেবেছিলাম এটি ঠিক আছে যে এটি যথেষ্ট দ্রুত লোড হয় ass বেনামি ফাংশন সম্পর্কে আমি কীভাবে এটি গণনা করব তা নিশ্চিত নই। যদি আমি বিচ্ছিন্ন হয়ে f=যাই এবং আমি এটি চালনা করতে চাই তবে আমাকে এটির ()মতো করে আবদ্ধ করতে হবে (s=>{})('arg');। আমি কি বাইট গণনায় এটিকে উপেক্ষা করতে পারি?
সন্নিবেশকারী নাম এখানে

হ্যাঁ, আপনি বাইট গণনা উপেক্ষা করতে পারেন তবে আপনাকে অবশ্যই উল্লেখ করতে হবে যে এটি একটি বেনাম ফাংশন
ইসমাইল মিগুয়েল

5

মতলব, 118 104 বাইট

আমি জটিল আকারের (চিত্রের মাঝে 0) ইমেজের মতো একই আকারের একটি ম্যাট্রিক্স উত্পন্ন করি এবং সেই ম্যাট্রিক্স থেকে রেখার মানগুলি ছাঁটাই। তারপরে গড়ের যুক্তিটি তখন প্রদর্শিত হয়।

সংক্ষিপ্ত কোডের ফলেও নির্ভুলতার উন্নতির পরামর্শ দেওয়ার জন্য @ থমাসকওয়া ধন্যবাদ জানাই !!!

I=imread(input('','s'));
[y,x]=ndgrid(-50:49);
c=y+i*x;
disp(mod(angle(mean(c(~I(:,:,1))))*180/pi+360,360))

1
লাইনের সমস্ত পয়েন্টের গড়ের যুক্তিটি খুঁজে পাওয়া কি কম হবে?
lirtosiast

বাহ, উত্তরটি আমার প্রত্যাশার চেয়ে এটি আরও কম, সুন্দর কাজ!
জে আতকিন

@ থমাসকওয়া সম্পূর্ণরূপে, তবে তবে এটি এতটা সঠিক হবে না, কেননা কেন্দ্রের নিকটবর্তী পিক্সেলগুলি একেবারেই ভুল। আপনি যদি চেষ্টা করতে চান তবে আপনি এই কোডটি অষ্টাভেও চালাতে পারেন, আমার মনে হয়!
flawr

গড়ের যুক্তি (যা লাইনটির কেন্দ্রস্থলের যুক্তিটি একটি ভাল ভাল নির্ভুলতার পক্ষে দেওয়া উচিত), আর্গুমেন্টের অর্থ নয়। সঠিকতা গ্রহণযোগ্য হবে কিনা তা আমি জানি না।
lirtosiast

1
@ থমাসকওয়া দুর্দান্ত ধারণা, ধন্যবাদ! নির্ভুলতা এখন আরও ভাল এবং কোডটি কয়েকটি বাইট সংক্ষিপ্ত =)
flawr

5

মতলব, 86 77 বাইট

মতলব ব্যবহারের অন্য উপায় এখানে:

[I,J]=find(~im2bw(imread(input('','s'))));mode(mod(round(atan2d(J-51,I-51)),360))

এটি ফাইলটি ( ফ্লাওয়ার থেকে চুরি ) পড়ে এবং কালো পিক্সেলের সূচকগুলি খুঁজে পায়। তারপরে, এটি ভেক্টরটি তৈরি করে যা চিত্রের কেন্দ্র থেকে প্রতিটি কালো পিক্সেলের দিকে নির্দেশ করে এবং atan2dকোণটি খুঁজে পেতে, পূর্ণসংখ্য কোণগুলি পেতে গোল করে এবং mod(...,360)সঠিক পরিসরে ফলাফল পেতে চেষ্টা করে। সঠিক কোণটি পেতে (কেন্দ্রের নিকটবর্তী পিক্সেলের জন্য কিছুটা ত্রুটি রয়েছে), সর্বাধিক গণিত কোণটি ধরুন।

পরামর্শের জন্য slvrbld ধন্যবাদ im2bw!


1
আপনার কোডটি [আই, জে] = সন্ধান (~ im2bw (imread (ইনপুট (''))) দিয়ে মোডের (...) এর পূর্বে অংশটি প্রতিস্থাপনের মাধ্যমে 77 বাইটে হ্রাস করা যেতে পারে ;
slvrbld

সুন্দর! ধন্যবাদ আমি নিশ্চিত যে আরও সহজেই করার একটি উপায় ছিল তবে এটি মনে করতে পারিনি।
ডেভিড

3

ল্যাবভিউ, 10098 বাইট

অন্য ল্যাবভিউ কোডটি সেখানে রেখে দেওয়া যাক।

যেহেতু ল্যাবভিউতে বাইটগুলি গণনা করার কোনও আনুষ্ঠানিক উপায় নেই আমি সংরক্ষণ করার সময় ফাইলের আকারটি ব্যবহার করি। বিকল্পভাবে প্রতিটি তারের গণনা এবং 1 কেস হিসাবে 2 হিসাবে ফাংশন হিসাবে এটি 71 এ বেরিয়ে আসে।

1

চিত্রটি লোড করুন, 1 ডি তে ফ্ল্যাট করুন, উভয় পক্ষ থেকে 0 সেকে স্ক্যান করুন এবং প্রথমটি নির্ণয় করুন এবং কোণ পেতে জ্যামিতিটি ব্যবহার করুন।


1
সুন্দর, এটি আকর্ষণীয়। আপনি কীভাবে ল্যাবভিউ প্রোগ্রামগুলি স্কোর করবেন তা মেটাতে জানতে চাইতে পারেন।
জে আতকিন

ইতিমধ্যে কীভাবে স্কোর করা যায় সে সম্পর্কে একটি থ্রেড রয়েছে তবে দুর্ভাগ্যজনকভাবে এখনও কোনও উত্তর নেই
ইউমেল

আচ্ছা বুঝলাম. আমি কেবলমাত্র মার্কিন যুক্তরাষ্ট্রে আমাদের কাছে বাইট গণনাটি আরও বোধগম্য করার জন্য আপনার পোস্টটি সম্পাদনা করেছি
জে আত্কিন

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

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