ঘোরানো আয়তক্ষেত্রের মাত্রা নির্ধারণ করুন


14

এই স্ট্যাক স্নিপেট একটি স্বপক্ষে বেনামে তার মাত্রা, অবস্থান, কোণ, এবং গ্রিড মাত্রার জন্য একটি কালো পটভূমিতে সাদা আয়তক্ষেত্র দেওয়া প্যারামিটার:

<style>html *{font-family:Consolas,monospace}input{width:24pt;text-align:right;padding:1px}canvas{border:1px solid gray}</style><p>grid w:<input id='gw' type='text' value='60'> grid h:<input id='gh' type='text' value='34'> w:<input id='w' type='text' value='40'> h:<input id='h' type='text' value='24'> x:<input id='x' type='text' value='0'> y:<input id='y' type='text' value='0'> &theta;:<input id='t' type='text' value='12'>&deg; <button type='button' onclick='go()'>Go</button></p>Image<br><canvas id='c'>Canvas not supported</canvas><br>Text<br><textarea id='o' rows='36' cols='128'></textarea><script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script><script>function toCart(t,a,n,r){return{x:t-n/2,y:r/2-a}}function vtx(t,a,n){return{x:n.x+t*Math.cos(a),y:n.y+t*Math.sin(a)}}function sub(t,a){return{x:t.x-a.x,y:t.y-a.y}}function dot(t,a){return t.x*a.x+t.y*a.y}function inRect(t,a,n,r){var e=sub(a,t),o=sub(a,n),l=sub(a,r),i=dot(e,o),v=dot(e,l);return i>0&&i<dot(o,o)&&v>0&&v<dot(l,l)}function go(){var t=parseInt($("#gw").val()),a=parseInt($("#gh").val()),n=parseFloat($("#w").val()),r=parseFloat($("#h").val()),e={x:parseFloat($("#x").val()),y:parseFloat($("#y").val())},o=Math.PI*parseFloat($("#t").val())/180,l=Math.sqrt(n*n+r*r)/2,i=Math.atan2(r,n),v=vtx(l,o+i,e),h=vtx(l,o+Math.PI-i,e),u=vtx(l,o-i,e),x=$("#c");x.width(t).height(a).prop({width:t,height:a}),x=x[0].getContext("2d");for(var s="",c=0;a>c;c++){for(var f=0;t>f;f++)inRect(toCart(f+.5,c+.5,t,a),v,h,u)?(s+="..",x.fillStyle="white",x.fillRect(f,c,1,1)):(s+="XX",x.fillStyle="black",x.fillRect(f,c,1,1));a-1>c&&(s+="\n")}$("#o").val(s)}$(go)</script>
( জেএসফিডেল সংস্করণ )

XXছবিতে ..যেখানে কালো পিক্সেল রয়েছে সেখানে এবং যেখানেই সাদা পিক্সেল রয়েছে সেখানে পাঠ্য উপস্থাপনের রয়েছে । (এগুলি স্কুয়েড দেখায় Xএবং হয় .))

একটি প্রোগ্রাম লিখুন যা স্নিপেট দ্বারা উত্পাদিত একটি আয়তক্ষেত্রের পাঠ্য উপস্থাপনা গ্রহণ করে এবং আয়তক্ষেত্রটির আনুমানিক প্রস্থ এবং উচ্চতা, প্রকৃত প্রস্থ এবং উচ্চতার ± 7% এর মধ্যে ফেলে দেয়

আপনার প্রোগ্রামটি স্নিপেট দ্বারা আঁকা যায় এমন সমস্ত সম্ভাব্য আয়তক্ষেত্রের জন্য কার্যকরভাবে কাজ করতে হবে যা সীমাবদ্ধতাগুলি সহ:

  • আয়তক্ষেত্রের প্রস্থ এবং উচ্চতা সর্বনিম্ন 24 হয়।
  • গ্রিডের প্রস্থ এবং উচ্চতা সর্বনিম্ন 26।
  • আয়তক্ষেত্রটি গ্রিডের সীমানার বাইরে কখনও স্পর্শ করে না বা বের হয় না।

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

বিস্তারিত

  • কাঁচা পাঠ্য আয়তক্ষেত্রটিকে ইনপুট হিসাবে ধরুন বা কোনও ফাইলের ফাইলের নাম নিন যা কাঁচা পাঠ্য আয়তক্ষেত্র রয়েছে (স্টিডিন বা কমান্ড লাইনের মাধ্যমে)। আপনি ধরে নিতে পারেন পাঠ্যের আয়তক্ষেত্রটির একটি পিছনের নিউলাইন রয়েছে।
  • আপনি ধরে নিতে পারেন যে পাঠ্যটি আয়তক্ষেত্রটি ইচ্ছে করলে Xএবং বাদে অন্য দুটি স্বতন্ত্র মুদ্রণযোগ্য ASCII অক্ষর থেকে তৈরি হয়েছে .। (নিউলাইনগুলি অবশ্যই নতুন লাইনে থাকবে stay)
  • পূর্ণসংখ্যার হিসাবে পরিমাপ করা প্রস্থ এবং উচ্চতা আউটপুট আউটপুট করুন বা কোনও ক্রমে স্টডআউটে ভাসমান (যেহেতু কোনটি প্যারামিটার দিয়ে আসলে কোনটি নির্ধারণ করার উপায় নেই)। কোন বিন্যাসে স্পষ্টতই দুটি মাত্রা দেখায় জরিমানা, যেমন হয় D1 D2, D1,D2, D1\nD2, (D1, D2), ইত্যাদি
  • কোনও প্রোগ্রামের পরিবর্তে, আপনি এমন একটি ফাংশন লিখতে পারেন যা পাঠ্যটি আয়তক্ষেত্রটিকে স্ট্রিং বা ফাইল নাম হিসাবে গ্রহণ করে এবং ফলাফলটি সাধারণত মুদ্রণ করে বা স্ট্রিং হিসাবে ফেরত দেয় বা দুটি উপাদান দিয়ে তালিকা / টুপল দেয়।
  • মনে রাখবেন XXবা ..আয়তক্ষেত্রের একটি 'পিক্সেল', দুটি নয়।

উদাহরণ

যাত্রা। 1

পরামিতি: grid w:60 grid h:34 w:40 h:24 x:0 y:0 θ:12(স্নিপেট ডিফল্ট)

ইনপুট

XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX....XXXXXXXXXXXXXXXXXXXXXXXXXX
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX............XXXXXXXXXXXXXXXXXXXXXXXXXX
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX........................XXXXXXXXXXXXXXXXXXXXXXXX
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX..................................XXXXXXXXXXXXXXXXXXXXXXXX
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX............................................XXXXXXXXXXXXXXXXXXXXXXXX
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX....................................................XXXXXXXXXXXXXXXXXXXXXXXX
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX..............................................................XXXXXXXXXXXXXXXXXXXXXXXX
XXXXXXXXXXXXXXXXXXXXXXXX..........................................................................XXXXXXXXXXXXXXXXXXXXXX
XXXXXXXXXXXXXXXX..................................................................................XXXXXXXXXXXXXXXXXXXXXX
XXXXXXXXXXXXXXXX..................................................................................XXXXXXXXXXXXXXXXXXXXXX
XXXXXXXXXXXXXXXX..................................................................................XXXXXXXXXXXXXXXXXXXXXX
XXXXXXXXXXXXXXXXXX................................................................................XXXXXXXXXXXXXXXXXXXXXX
XXXXXXXXXXXXXXXXXX..................................................................................XXXXXXXXXXXXXXXXXXXX
XXXXXXXXXXXXXXXXXX..................................................................................XXXXXXXXXXXXXXXXXXXX
XXXXXXXXXXXXXXXXXX..................................................................................XXXXXXXXXXXXXXXXXXXX
XXXXXXXXXXXXXXXXXX..................................................................................XXXXXXXXXXXXXXXXXXXX
XXXXXXXXXXXXXXXXXXXX..................................................................................XXXXXXXXXXXXXXXXXX
XXXXXXXXXXXXXXXXXXXX..................................................................................XXXXXXXXXXXXXXXXXX
XXXXXXXXXXXXXXXXXXXX..................................................................................XXXXXXXXXXXXXXXXXX
XXXXXXXXXXXXXXXXXXXX..................................................................................XXXXXXXXXXXXXXXXXX
XXXXXXXXXXXXXXXXXXXXXX................................................................................XXXXXXXXXXXXXXXXXX
XXXXXXXXXXXXXXXXXXXXXX..................................................................................XXXXXXXXXXXXXXXX
XXXXXXXXXXXXXXXXXXXXXX..................................................................................XXXXXXXXXXXXXXXX
XXXXXXXXXXXXXXXXXXXXXX..................................................................................XXXXXXXXXXXXXXXX
XXXXXXXXXXXXXXXXXXXXXX..........................................................................XXXXXXXXXXXXXXXXXXXXXXXX
XXXXXXXXXXXXXXXXXXXXXXXX..............................................................XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
XXXXXXXXXXXXXXXXXXXXXXXX....................................................XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
XXXXXXXXXXXXXXXXXXXXXXXX............................................XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
XXXXXXXXXXXXXXXXXXXXXXXX..................................XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
XXXXXXXXXXXXXXXXXXXXXXXX........................XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
XXXXXXXXXXXXXXXXXXXXXXXXXX............XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
XXXXXXXXXXXXXXXXXXXXXXXXXX....XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

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

  • 40 24
  • 24 40
  • [40.0, 24.0]
  • 42.8, 25.68 (+ + 7%)
  • 37.2, 22.32 (-7%)

যাত্রা। 2

পরামিতি: grid w:55 grid h:40 w:24.5 h:24 x:-10.1 y:2 θ:38.5

ইনপুট

XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX..XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX......XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX............XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXX..............XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
XXXXXXXXXXXXXXXXXXXXXXXXXXXX..................XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
XXXXXXXXXXXXXXXXXXXXXXXXXX......................XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
XXXXXXXXXXXXXXXXXXXXXX............................XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
XXXXXXXXXXXXXXXXXXXX..............................XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
XXXXXXXXXXXXXXXXXX..................................XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
XXXXXXXXXXXXXXXX......................................XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
XXXXXXXXXXXX............................................XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
XXXXXXXXXX................................................XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
XXXXXXXX..................................................XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
XXXXXX......................................................XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
XX............................................................XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
XX..............................................................XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
XX................................................................XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
XXXX..............................................................XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
XXXXXX..............................................................XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
XXXXXXXX............................................................XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
XXXXXXXXXX......................................................XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
XXXXXXXXXX....................................................XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
XXXXXXXXXXXX................................................XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
XXXXXXXXXXXXXX............................................XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
XXXXXXXXXXXXXXXX......................................XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
XXXXXXXXXXXXXXXXXX..................................XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
XXXXXXXXXXXXXXXXXX................................XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
XXXXXXXXXXXXXXXXXXXX..........................XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
XXXXXXXXXXXXXXXXXXXXXX......................XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
XXXXXXXXXXXXXXXXXXXXXXXX..................XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
XXXXXXXXXXXXXXXXXXXXXXXX................XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
XXXXXXXXXXXXXXXXXXXXXXXXXX..........XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
XXXXXXXXXXXXXXXXXXXXXXXXXXXX......XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXX..XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

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

  • 24.0 24.5
  • 25.68 26.215 (+ + 7%)
  • 22.32 22.785 (-7%)

স্কোরিং

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


কোনও সমাধান গ্রহণের জন্য যথাযথ প্রয়োজনীয়তাগুলি মেটানো উচিত নয়? আপনি যেটিকে গ্রহণ করেছেন তা নির্দিষ্ট ইনপুট মানগুলির জন্য খুব দূরে।
রেটো কোরাাদি

উত্তর:


6

মতলব, 226 বাইট

ধারণাটি সহজ: প্রথমে আমি আয়তক্ষেত্রটি কতটা পরিণত হয়েছিল তা অনুসন্ধান করার চেষ্টা করি, তারপরে চিত্রটি এমনভাবে ঘুরিয়ে দিন যাতে আয়তক্ষেত্রটি খাড়া। তারপরে আমি সারি কলামগুলির সমস্ত পিক্সেল স্পষ্টভাবে 'যোগ' করেছি এবং প্রস্থ এবং উচ্চতা নির্ধারণের জন্য কতগুলি অঙ্কের গড় (সাধারণ প্রান্তিককরণ) এর চেয়ে উপরে above এই সহজ পদ্ধতিটি আশ্চর্যজনকভাবে নির্ভরযোগ্যভাবে কাজ করে।

আমি কীভাবে কোণটি সনাক্ত করতে পারি?

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

কমানোর মানদণ্ড

আরও চিন্তাভাবনা: অবিচ্ছিন্ন কোণ অনুসন্ধানে অনেক অক্ষর লাগে বলে আমি কতটা গল্ফ হতে পারি তা নিশ্চিত নই এবং আমি সন্দেহ করি যে আপনি এটি অপ্টিমাইজেশন পদ্ধতিতে অন্তর্নির্মিতভাবে অর্জন করতে পেরেছিলেন, কারণ আপনি দেখতে পাচ্ছেন যে অনেকগুলি স্থানীয় মিনিমা রয়েছে যে আমরা খুঁজছি না। কোণের জন্য একটি ছোট ধাপের আকার চয়ন করে আপনি সহজেই নির্ভুলতার (বড় চিত্রগুলির জন্য) উন্নতি করতে পারেন এবং কেবল 360 ° এর পরিবর্তে 90 search অনুসন্ধান করতে পারেন যাতে আপনি এর 0:360সাথে প্রতিস্থাপন করতে পারেন 0:.1:90বা এরকম কিছু করতে পারেন। তবে যাইহোক, আমার কাছে চ্যালেঞ্জটি গল্ফিংয়ের চেয়ে আরও শক্তিশালী অ্যালগরিদম সন্ধান করছিল এবং আমি নিশ্চিত যে গল্ফিংয়ের ভাষাগুলির প্রবেশদ্বারগুলি আমার জমাটি অনেক পিছনে ফেলে দেবে =)

PS: কারও মতলব / অক্টাভা থেকে সত্যই একটি গল্ফ করা ভাষা নেওয়া উচিত।

আউটপুট

উদাহরণ 1:

 25    39

উদাহরণ 2:

 25    24

কোড

Golfed:

s=input('');r=sum(s=='n');S=reshape(s',nnz(s)/r,r)';S=S(:,1:2:end-2)=='.';m=Inf;a=0;for d=0:360;v=sum(1-~diff(sum(imrotate(S,d))));if v<m;m=v;a=d;end;end;S=imrotate(S,a);x=sum(S);y=sum(S');disp([sum(x>mean(x)),sum(y>mean(y))])

Ungolfed:

s=input('');
r=sum(s=='n');              
S=reshape(s',nnz(s)/r,r)'; 
S=S(:,1:2:end-2)=='.';    
m=Inf;a=0;
for d=0:360;                 
    v=sum(1-~diff(sum(imrotate(S,d))));
    if v<m;
        m=v;a=d;
    end;
end;
S=imrotate(S,a);
x=sum(S);y=sum(S');
disp([sum(x>mean(x)),sum(y>mean(y))])

7

সিজেম, 68 65 64 বাইট

এটি আরও কিছুটা গল্ফ করা যেতে পারে ..

qN/2f%{{:QN*'.#Qz,)mdQ2$>2<".X"f#_~>@@0=?Qz}2*;@@-@@-mhSQWf%}2*;

কিভাবে এটা কাজ করে

আপনি যদি এটি সম্পর্কে চিন্তা করেন তবে যুক্তিটি বেশ সহজ।

ইনপুট X.সংমিশ্রণগুলি থেকে আমাদের সমস্ত প্রয়োজন দুটি সংলগ্ন পক্ষের 3 টি স্থানাঙ্ক। আমরা সেগুলি এখানে কীভাবে পেয়েছি:

First

আয়তক্ষেত্রের যে কোনও .স্থানে, পুরো ইনপুটটিতে প্রথমটি কোণার একটি হতে চলেছে। উদাহরণ স্বরূপ..

XXXXXXXXXXXXXX
XXXXXXX...XXXX
XXXX.......XXX
X............X
XX.........XXX
XXXX...XXXXXXX
XXXXXXXXXXXXXX

এখানে প্রথমটি .য় এনডি লাইনে, ৮ কলামে রয়েছে।

তবে এটি নয়, .ডান প্রান্তের সমন্বয় পেতে আমাদের কিছু সামঞ্জস্য করতে হবে এবং সেই লাইনের রান প্রস্থকে স্থানাঙ্কগুলিতে যুক্ত করতে হবে।

Second

যদি আমরা উপরের আয়তক্ষেত্রটি স্থানান্তর করি (নতুন লাইনের উপর ভিত্তি করে), তবে নীচের বাম কোণটি উপরের পদক্ষেপের স্থান নেয় takes তবে এখানে, আমরা .রান দৈর্ঘ্যের জন্য ক্ষতিপূরণ দিচ্ছি না কারণ আমরা যেভাবেই প্রান্তের নীচের বাম দিকের স্থানাঙ্কটি পেতে চাইতাম (যা ট্রান্সপোজড আকারে এখনও প্রথম সম্মুখীন হবে .)

Rest two

বাকি দুটি স্থানাঙ্কের জন্য, আমরা খালি অনুভূমিকভাবে উল্টাতে, আয়তক্ষেত্রটি এবং উপরের দুটি পদক্ষেপটি সম্পাদন করি। এখানকার একটি কোণ প্রথম দুটি থেকে সাধারণ হবে।

সমস্ত 4 পাওয়ার পরে, আমরা সহজেই দূরত্বগুলি পেতে কিছু সাধারণ গণিত করি।

এখন এটি সবচেয়ে সঠিক পদ্ধতি নয়, তবে এটি ত্রুটি মার্জিনের মধ্যে এবং আয়তক্ষেত্রের সমস্ত সম্ভাব্য প্রবণতার জন্য ভালভাবে কাজ করে।

কোড সম্প্রসারণ (বিট পুরানো)

qN/2f%{{:QN*'.#Q0=,)md}:A~1$Q='.e=+QzA@@-@@-mhSQWf%}2*;
qN/2f%                               e# Read the input, split on newlines and squish it
      {   ...   }2*                  e# Run the code block two times, one for each side  
{:QN*'.#Q0=,)md}:A~                  e# Store the code block in variable A and execute it
 :QN*                                e# Store the rows in Q variable and join by newlines
     '.#                             e# Get the location of the first '.'
        Q0=,)                        e# Get length + 1 of the first row
             md                      e# Take in X and Y and leave out X/Y and X%Y on stack
1$Q=                                 e# Get the row in which the first '.' appeared
    '.e=+                            e# Get number of '.' in that row and add it to X%Y
         QzA                         e# Transpose the rows and apply function A to get
                                     e# the second coordinate
            @@-@@-                   e# Subtract resp. x and y coordinates of the two corners
                  mh                 e# Calculate (diff_x**2 + diff_y**2)**0.5 to get 1 side
                    SQWF%            e# Put a space on stack and put the horizontally flipped
                                     e# version of the rows/rectangle all ready for next two
                                     e# coordinates and thus, the second side

এটি এখানে অনলাইনে চেষ্টা করুন


50x50 এর গ্রিড আকার, 45x45 আয়তক্ষেত্র আকার এবং কোণ ব্যবহার করে দেখুন -2। ত্রুটিটি প্রায় 28%। আমি অনুরূপ দৃষ্টিভঙ্গি চেষ্টা করেছি (এটি আমার প্রাথমিক ধারণা ছিল, আপনার দেখার আগে) এবং এটিকে যথাযথভাবে পাওয়া প্রত্যাশার চেয়ে কৌশলযুক্ত হতে পারে, বিশেষত যদি পক্ষগুলি অনুভূমিক / উল্লম্বের কাছাকাছি থাকে। তারা ত্রিভুজ কাছাকাছি যদি দুর্দান্ত কাজ করে। আমি মনে করি এটির জন্য আরও যুক্তি প্রয়োজন (উদাহরণস্বরূপ তির্যক দিকের চরমগুলি অনুসন্ধান করা) বা সম্পূর্ণ ভিন্ন পদ্ধতির দরকার।
রেটো কোরাডি

পুনঃটুইট এটি কেবল কারণ যে সমস্ত নেতিবাচক কোণগুলির .প্রথম স্থির পরিবর্তে দ্বিতীয় স্থানাঙ্কের প্রস্থ সামঞ্জস্য প্রয়োজন need ঠিক করবে. সংক্ষিপ্ত স্থির করা উচিত।
অপ্টিমাইজার

1
@ রিটোকোরাদি এখনই ঠিক করা উচিত।
অপ্টিমাইজার

কোণ 0 দিয়ে 40x24 আয়তক্ষেত্রটি চেষ্টা করুন
রেটো কোরাডি

পুনঃটুইট করুন আপাতত অগ্রহণযোগ্য।
ক্যালভিনের

5

পাইথন 3, 347 337 বাইট

এটি আমার প্রত্যাশার চেয়ে শক্ত হয়ে উঠল। কাজ চলছে...

def f(s):
 l=s.split('\n');r=range;v=sorted;w=len(l[0]);h=len(l);p=[[x,y]for x in r(w)for y in r(h)if'X'>l[y][x]];x,y=[sum(k)/w/h for k in zip(*p)];g=[[x/2,y]];d=lambda a:((a[0]/2-a[2]/2)**2+(a[1]-a[3])**2)**.5
 for i in r(3):g+=v(p,key=lambda c:~-(c in g)*sum(d(j+c)for j in g))[:1]
 print(v(map(d,[g[1]+g[2],g[2]+g[3],g[1]+g[3]]))[:2])

একটি ফাংশন নির্ধারণ fএকটি আর্গুমেন্ট স্ট্রিং গ্রহণ এবং stdout- এ ফলাফলের মুদ্রণ।

পাইথ, 87 84 82 81 75 72 71 বাইট

(আমি যখন বাড়িতে থাকি তখন পর্যবেক্ষণ করা সম্ভব হয়)

Km%2d.zJf<@@KeThTG*UhKUKPSm.adfqlT2ytu+G]ho*t}NGsm.a,kNGJ3]mccsklhKlKCJ

ওয়ে এখনও অনেক দীর্ঘ। মূলত পূর্ববর্তী একটি বন্দর। পাইথের .aইউক্লিডিয়ান দূরত্বকে ভালবাসা । STDIN এর মাধ্যমে ইনপুট নেয় এবং STDOUT এর মাধ্যমে আউটপুট দেয়। অ-আয়তক্ষেত্রযুক্ত অক্ষরটি লোয়ার-কেস হওয়ার আশা করে x(ভাল, ASCII মান 98 বা আরও বেশি কিছু সহ)।

অ্যালগরিদম

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


পাইথ সলিউশনটি মোটেই কাজ করে না। ওপি থেকে দুটি উদাহরণ [33.0, 59.0]পরিবর্তে [40, 24]এবং [39.0, 54.0]পরিবর্তে ফলাফল দেয় [24.0, 24.5]
জাকুব

@ জাকুব অদ্ভুত আমি বাড়ি ফিরে একবার তদন্ত করব। দুর্ভাগ্যক্রমে আমি 9 ই জুন অবধি ল্যাপল্যান্ডে ক্লাস ভ্রমনে আছি।
পূর্বকুডারী

দুর্ভাগ্যক্রমে; ল্যাপল্যান্ডে আমি কোনও ট্রিপ ডাকব না ;-)
জাকুব

0

পাইথন 2, 342 বাইট

import sys
r=[]
h=.0
for l in sys.stdin:w=len(l);r+=[[x*.5,h]for x in range(0,w,2)if l[x:x+2]=='..'];h+=1
x,y=.0,.0
for p in r:x+=p[0];y+=p[1]
n=len(r)
x/=n
y/=n
m=.0
for p in r:
 p[0]-=x;p[1]-=y;d=p[0]**2+p[1]**2
 if d>m:m=d;u,v=p
m=.0
for p in r:
 d=p[0]*v-p[1]*u
 if d>m:m=d;s,t=p
print ((u-s)**2+(v-t)**2)**.5+1,((u+s)**2+(v+t)**2)**.5+1

এটি @ পিটু 1998 এর অ্যালগরিদম থেকে অনুপ্রেরণা নিয়েছে। এটি কেন্দ্র থেকে দূরে অবস্থিত একটি কোণকে নির্ধারণ করার ধারণা নেয়, তবে সেখান থেকে পৃথক:

  • আমি দ্বিতীয় কোণটি বিন্দু হিসাবে ভেক্টরের সাথে কেন্দ্র থেকে প্রথম কোণে পয়েন্ট হিসাবে নির্ধারণ করি। এটি কেন্দ্র থেকে প্রথম কোণে লাইন থেকে বৃহত্তম দূরত্ব সহ বিন্দু দেয়।
  • তৃতীয় কোণার অনুসন্ধান করার দরকার নেই কারণ এটি কেন্দ্রের তুলনায় এটি কেবলমাত্র দ্বিতীয় কোণার মিরর চিত্র।

সুতরাং কোড এই ক্রম অনুসরণ করে:

  • প্রথম লুপটি ইনপুটটিতে থাকা লাইনগুলির ওপরে এবং rআয়তক্ষেত্রের পয়েন্টগুলির একটি তালিকা তৈরি করে ।
  • দ্বিতীয় লুপটি আয়তক্ষেত্রের কেন্দ্র প্রদান করে সমস্ত আয়তক্ষেত্রের পয়েন্টের গড় গণনা করে।
  • তৃতীয় লুপটি কেন্দ্র থেকে দূরত্বে অবস্থিত। এটি প্রথম কোণ। একই সময়ে, এটি তালিকার পয়েন্টগুলি থেকে কেন্দ্রকে বিয়োগ করে, যাতে পয়েন্ট স্থানাঙ্কগুলি বাকি গণনার জন্য কেন্দ্রের সাথে তুলনামূলকভাবে থাকে।
  • চতুর্থ লুপটি প্রথম কোণে ভেক্টর সহ বৃহত্তম ক্রস পণ্য সহ পয়েন্টটি সন্ধান করে। এটি দ্বিতীয় কোণ।
  • প্রথম কোণ এবং দ্বিতীয় কোণার মধ্যবর্তী দূরত্ব এবং প্রথম কোণার এবং দ্বিতীয় কোণার মিরর চিত্রের মধ্যে দূরত্ব মুদ্রণ করে।
  • 1.0মূল দূরত্ব গণনাগুলি পিক্সেল সূচকগুলি ব্যবহার করে কারণ দূরত্বগুলিতে যুক্ত করা হয়। উদাহরণস্বরূপ, যদি আপনার 5 পিক্সেল থাকে তবে সর্বশেষ এবং প্রথম পিক্সেলের সূচকের মধ্যে পার্থক্য ছিল মাত্র 4, যা চূড়ান্ত ফলাফলের জন্য ক্ষতিপূরণ প্রয়োজন।

যথার্থতা বেশ ভাল। দুটি উদাহরণের জন্য:

$ cat rect1.txt | python Golf.py 
24.5372045919 39.8329756779
$ cat rect2.txt | python Golf.py 
23.803508502 24.5095563412

0

পাইথন 2, 272 বাইট

এটি আমার আগেরটির চেয়ে একেবারে পৃথক পৃথক অ্যালগরিদম হওয়ার কারণে এটি একটি পৃথক উত্তর হিসাবে পোস্ট করা:

import sys,math
y,a,r=0,0,0
l,t=[1<<99]*2
for s in sys.stdin:
 c=s.count('..')
 if c:a+=c;x=s.find('.')/2;l=min(l,x);r=max(r,x+c);t=min(t,y);b=y+1
 y+=1
r-=l
b-=t
p=.0
w,h=r,b
while w*h>a:c=math.cos(p);s=math.sin(p);d=c*c-s*s;w=(r*c-b*s)/d;h=(b*c-r*s)/d;p+=.001
print w,h

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

যদি আপনি কোনও স্কেচের দিকে লক্ষ্য করেন তবে / আয়তক্ষেত্রের আকার এবং ঘূর্ণন কোণ সহ বাউন্ডিং বাক্সের প্রস্থ ( wb) এবং উচ্চতা ( hb) গণনা করা মোটামুটি সহজ :whp

wb = w * cos(p) + h * sin(p)
hb = w * sin(p) + h * cos(p)

wbএবং hbসরাসরি চিত্র থেকে বের করা যেতে পারে। পিক্সেলের aসংখ্যা গণনা করে আমরা দ্রুত আয়তক্ষেত্রের মোট ক্ষেত্রটি বের করতে পারি ..। যেহেতু আমরা একটি আয়তক্ষেত্রটি নিয়ে কাজ করছি, এটি আমাদের অতিরিক্ত সমীকরণ দেয়:

a = w * h

সুতরাং আমরা 3 অজানা (3 সমীকরণ আছে w, hএবং p), যা অজানা নির্ধারণ করতে যথেষ্ট। একমাত্র বমর হ'ল সমীকরণগুলিতে ত্রিকোণমিতিক ফাংশন থাকে এবং কমপক্ষে আমার ধৈর্য এবং গণিত দক্ষতার সাথে সিস্টেমটি সহজে বিশ্লেষণযোগ্যভাবে সমাধান করা যায় না।

আমি যা প্রয়োগ করেছি তা হ'ল কোণটির জন্য একটি নিষ্ঠুর শক্তি অনুসন্ধান p। একবার pদেওয়া হয়ে গেলে উপরের প্রথম দুটি সমীকরণ দুটি লিনিয়ার সমীকরণের একটি সিস্টেমে পরিণত হয়, যার সমাধান করা যায় wএবং h:

w = (wb * cos(p) - hb * sin(p)) / (cos(p) * cos(p) - sin(p) * sin(p))
h = (hb * cos(p) - wb * sin(p)) / (cos(p) * cos(p) - sin(p) * sin(p))

এই মানগুলির সাথে, আমরা পরে w * hআয়তক্ষেত্রের পরিমাপ করা ক্ষেত্রের সাথে তুলনা করতে পারি । দুটি মান আদর্শভাবে এক পর্যায়ে সমান হবে। এটি অবশ্যই ভাসমান পয়েন্ট গণিতে ঘটবে না।

w * hকোণ বাড়ার সাথে সাথে এর মান হ্রাস পায়। সুতরাং আমরা ০.০ কোণে শুরু করব এবং তারপরে কোণটি ছোট ছোট পদক্ষেপের মাধ্যমে w * hবাড়িয়েছি যতক্ষণ না প্রথমবার পরিমাপ করা জায়গার চেয়ে কম হয়।

কোডটিতে দুটি প্রধান পদক্ষেপ রয়েছে:

  1. ইনপুট থেকে বাউন্ডিং বক্সের আকার এবং আয়তক্ষেত্রের অঞ্চলটি বের করুন।
  2. সমাপ্তির মানদণ্ড না পৌঁছানো পর্যন্ত প্রার্থীদের কোণগুলিতে লুপ করুন।

আউটপুটটির নির্ভুলতা আয়তক্ষেত্রগুলির জন্য ভাল যেখানে প্রস্থ এবং উচ্চতা উল্লেখযোগ্যভাবে পৃথক। এটি প্রায় বর্গক্ষেত্র এবং 45 ডিগ্রি কাছাকাছি ঘোরানো আয়তক্ষেত্রগুলির সাথে কিছুটা ইফিশিয়াল হয়, পরীক্ষার উদাহরণ 2 এর সবেমাত্র 7% ত্রুটি বাধা পরিষ্কার করে।

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

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