এই রেখাটি কি সেই বর্গাকার মধ্য দিয়ে যায়?


19

নীচে প্রদর্শিত প্রতিটি গ্রিডের নীচে-বাম কোণে স্থানাঙ্ক দ্বারা লেবেলযুক্ত প্রতিটি গ্রিডকে 1x1 গ্রিডে প্রথম কোয়াড্রেন্ট (ধনাত্মক এক্স-অক্ষ, ধনাত্মক y- অক্ষ এবং উত্স সহ) ভাগ করুন:

নোট করুন যে প্রতিটি গ্রিডে এর সীমানা এবং এর শীর্ষগুলি রয়েছে। গাণিতিক চিহ্ন ব্যবহার করে গ্রিড লেবেলযুক্ত (মি, এন) বর্গক্ষেত্রকে উপস্থাপন করবে {(x,y) | m ≤ x ≤ m+1, n ≤ y ≤ n+1}


আকারে একটি সরল রেখা দেওয়া ax+by+c=0পূর্ণসংখ্যার সঙ্গে a, bএবং c, এবং একটি গ্রিড দ্বারা প্রতিনিধিত্ব (m,n)লাইন গ্রিড, অর্থাত্ কিনা দেওয়া গ্রিড যে কোনো স্থানে লাইন হয় মাধ্যমে প্রেরণ করা হোক না কেন, আউটপুট।


a  b  c m n output
1  1  0 0 0 true
1  1  0 1 1 false
1  1  0 0 2 false
1  1 -3 0 1 true
1  1 -3 0 0 false
2 -1  0 1 1 true
2 -1  0 1 0 false
2 -1  0 0 2 true
2 -1  0 0 1 true
2 -1  0 1 2 true
2  0 -1 0 0 true
2  0 -1 0 1 true
2  0 -1 0 2 true
2  0 -1 1 0 false
2  0 -1 1 1 false
0  2 -1 0 0 true
0  2 -1 1 0 true
0  2 -1 2 0 true
0  2 -1 0 1 false
0  2 -1 1 1 false
1  0 -1 0 0 true
1  0 -1 0 1 true
1  0 -1 0 2 true
1  0 -1 1 0 true
1  0 -1 1 1 true

মন্তব্যে আরও টেস্টকেস প্রস্তাব করুন।


এটি । বাইট জিতে সংক্ষিপ্ত উত্তর। স্ট্যান্ডার্ড লুফোলস প্রযোজ্য।


1
অবশ্যই আমাদের ধরে নিতে সক্ষম হওয়া উচিত যে a এবং b উভয়ই 0 নয়, যেহেতু গ শূন্য হয় সেখানে অসীম রেখা থাকতে পারে এবং সিটি যদি শূন্য হয় তবে কোনও রেখা থাকতে পারে না।
এরিক আউটগলফার

আমি দুটি বা আরও বেশি অ্যারে হিসাবে ইনপুট পেতে পারি, বলুন [a, b, c](লাইন) এবং [m, n](বর্গ)?
এরিক দি আউটগলফার

@ এরিকথ আউটগলফার আমি অবাক হয়েছি যে মেটাতে নেই।
ফুটো নুন


উত্তর:


5

পাইথন 3, 84 66 বাইট

প্রথম গল্ফ, প্রথম ব্যর্থ (সম্ভবত)।

সরাসরি ইনপুট পরিবর্তে একটি ফাংশন ব্যবহার করে 18 বাইট শেভ করার জন্য রডকে ধন্যবাদ জানাই।

def f(a,b,c,m,n):f=-(a*m+c)/b;g=f-a/b;print(min(f,g)<=n<=max(f,g))

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

ব্যাখ্যা:

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



2
পিপিসিজিতে আপনাকে স্বাগতম!
betseg

1
এর জন্য m + 1 এর পাশাপাশি n + 1 এর বিপরীতে পরীক্ষা করার দরকার নেই?
নীল

3
শূন্য দ্বারা বিভাগ যখন bহয় 0
অলিভিয়ার গ্রাগোয়ার

এছাড়াও, এটি লিকি নুন দ্বারা হাইলাইট করা বেশ কয়েকটি পরীক্ষার কেস পাস করে না ।
অলিভিয়ার গ্রাগোয়ার

5

জেলি , 10 বাইট

ż‘{Œpæ.ṠE¬

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

পটভূমি

আমার আগে অন্যান্য উত্তরের মতো এটিও এই সত্যের উপর নির্ভর করে যে একটি সরলরেখা বিমানটিকে দুটি আধা-বিমানে বিভক্ত করে। আয়তক্ষেত্রটি হয় এই সেমি-প্লেনগুলির একটির মধ্যে (রেখার সাথে কোনও ছেদ নেই) বা উভয় সেমিপ্লেনকে ছেদ করে (এবং এইভাবে রেখাটি তাদের পৃথক করে)।

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

ż‘{Œpæ.ṠE¬  Main link. Left argument: [m, n]. Right argument: [a, b, c]

 ‘{         Increment left; yield [m+1, n+1].
ż           Zipwith; yield [[m, m+1], [n, n+1]].
   Œp       Cartesian product; yield [[m, n], [m, n+1], [m+1, n], [m+1, n+1]].
     æ.     Take the dot products with [a, b, c], mapping each [x, y] to ax+by+c.
       Ṡ    Take the signs.
        E   Test the signs for equality.
         ¬  Logical NOT.

4

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

lambda a,b,c,m,n:min(0,a,b,a+b)<=-a*m-b*n-c<=max(0,a,b,a+b)

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

রেখার কোন দিকটি বিন্দুর চিহ্ন দ্বারা আমরা তা বলতে পারি a*x+b*y+c। লাইনটি বর্গক্ষেত্রের মধ্য দিয়ে যায় (স্পর্শ গণনা করে) যতক্ষণ না চারটি (m,n),(m,n+1),(m+1,n),(m+1,n+1)লম্বা লাইন একই পাশের কঠোরভাবে থাকে। আমরা এই মানগুলিকে একটি নিষ্কর্ষে প্লাগ করতে পারি a*m+b*n+cচারটি স্থির ধ্রুবকটি বের করতে :

a*m+b*n+c
a*m+b*n+c+a
a*m+b*n+c+b
a*m+b*n+c+a+b

সুতরাং, এই চারটি মান সমস্ত ধনাত্মক বা সমস্ত নেতিবাচক না হলে লাইনটি বর্গক্ষেত্রের মধ্য দিয়ে যায়। সুতরাং, এটি তাদের সর্বনিম্ন হওয়া <=0এবং সর্বাধিক হওয়া যথেষ্ট >=0

min(a*m+b*n+c,a*m+b*n+c+a,a*m+b*n+c+b,a*m+b*n+c+a+b)<=0<=max(a*m+b*n+c,a*m+b*n+c+a,a*m+b*n+c+b,a*m+b*n+c+a+b)

a*m+b*n+cপ্রতিটি অংশ থেকে সাধারণকে বিয়োগ করে কোড দেয়।

কিছুটা দীর্ঘতর পন্থা হ'ল লক্ষণগুলির সেট (+, 0, -) এর দৈর্ঘ্য কমপক্ষে 2 রয়েছে কিনা তা পরীক্ষা করা।

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

lambda a,b,c,m,n:len({cmp(a*m+b*n+c,-d)for d in(0,a,b,a+b)})>1

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


3

গণিত, 60 55 বাইট

Solve[m#+n#2==-#3&&#4<=m<=#4+1&&#5<=n<=#5+1,{m,n}]!={}&

@ মার্টিনএেন্ডারে থ্রেক্স -5 বাইটস

ইনপুট ফর্ম

[একটি, B, C, এম, এন]


2
আহ, আমি আশা করি প্রতিটি ভাষার একটি Solveফাংশন ছিল ...
এরিক দি আউটগলফার

3

ব্যাচ, 66 বাইট

@cmd/cset/a"q=%1*%4+%2*%5+%3,((-(q+%1)*(q+%2)&-q*(q+%1+%2))>>31)+1

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


1

গণিত, 50 বাইট

-4<Tr@Sign[Tuples@{{#,#+1},{#2,#2+1}}.{##4}+#3]<4&

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

লাগে m, n, c, a, bএই ক্রমে ইনপুট হিসাবে ।

ব্যাখ্যা: Tuples@{{#,#+1},{#2,#2+1}}বর্গক্ষেত্রের চারটি কোণার স্থানাঙ্কের একটি তালিকা তৈরি করে, তারপরে বিন্দু পণ্যটি .{##4}(যার অর্থ {#4, #5}) দিয়ে নেওয়া এবং এর জন্য +#3গণনা যুক্ত ax + by + cকরাx,y প্রতিটি কোণায়। লাইনটি যদি বিন্দুর মধ্য দিয়ে যায় তবে এটি শূন্য; লাইনটি যদি উত্স থেকে আরও দূরে থাকে তবে এটি নেতিবাচক; এবং যদি লাইনটি উত্সটির নিকটবর্তী হয় তবে এটি ইতিবাচক - তাই আমরা Signএই চারটি মানের মধ্যে পরীক্ষা করব । লাইনটি বর্গক্ষেত্রের বাইরে চলে যায় এবং কেবল যদি চারটি মান 1 বা চারটি মান হয় -1 হয়, তাই আমরা পরীক্ষা করে দেখি যে তাদের যোগফল কঠোরভাবে -4 এবং 4 এর মধ্যে রয়েছে।

(এই উত্তরে অস্পষ্টভাবে আমার উত্তর দ্বারা অনুপ্রাণিত হয় এই প্রশ্নের ।)


1

পাইথন 2, 147 110 বাইট

def f(a,b,c,m,n):
 if b:d=sorted((-a*x-c)/float(b)for x in(m,m+1));return d[0]-1<=n<=d[1]
 return m<=-c/a<=m+1

এবং লিকি নুনকে একটি বিশাল ধন্যবাদ!

Tio।




@ ল্যাকিয়ুন, বাহ অসাধারণ!
ড্যানিয়েল



1

পাইথন , 54 বাইট

lambda a,b,c,m,n:abs(2*(a*m+b*n+c)+a+b)<=abs(a)+abs(b)

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

(পরীক্ষার স্ক্রিপ্টের জন্য xnor ধন্যবাদ।)

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

লাইনটি এম + 1/2 + এক্স , এন + 1/2 + y এর মাধ্যমে যায় যদি এবং কেবল যদি

a ⋅ ( এম + ১/২ + এক্স ) + বি ⋅ ( এন + ১/২ + ) + সি = 0
⇔ 2⋅ ( এম + বিএন + সি ) + + বি = −2⋅ x - 2⋅ বিy

কারও পক্ষে এটি সম্ভব x |, | y | ≤ 1/2 যদি এবং কেবলমাত্র | 2⋅ ( am + bn + c ) + a + b | ≤ | | + | |


1

জাভা (ওপেনজেডিকে 8) , 71 বাইট

(a,b,c,x,y)->(0<a?0:a)+(0<b?0:b)<=(x=-a*x-b*y-c)&x<=(0>a?0:a)+(0>b?0:b)

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

Xnor এর পাইথন সমাধানের বন্দর।

আসল সমাধান, জাভা-র আকার / লাইন ছেদটি অন্তর্নির্মিত (108 বাইট) ব্যবহার করে

(a,b,c,x,y)->b==0?x<=-c/a&-c/a<=x+1:new java.awt.Rectangle(x,y,1,1).intersectsLine(x,c=(c+a*x)/-b,x+1,c-a/b)

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

ক্রেডিট

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