পাইথন 97 (জটিল পয়েন্ট ছাড়া)
def t(p):return len(set(p))-1==len(set([pow(pow(a-c,2)+pow(b-d,2),.5)for a,b in p for c,d in p]))
এটি যে কোনও ক্রমে [(x, y), (x, y), (x, y), (x, y)] পয়েন্ট টিপলগুলির তালিকা নেবে এবং সদৃশ বা পয়েন্টের ভুল সংখ্যাকে পরিচালনা করতে পারে। অন্যান্য অজগর উত্তরের মতো এর জন্য জটিল পয়েন্টের প্রয়োজন নেই।
আপনি এটি পরীক্ষা করতে পারেন:
S1 = [(0,0),(1,0),(1,1),(0,1)] # standard square
S2 = [(0,0),(2,1),(3,-1),(1,-2)] # non-axis-aligned square
S3 = [(0,0),(1,1),(0,1),(1,0)] # different order
S4 = [(0,0),(2,2),(0,2),(2,0)] #
S5 = [(0,0),(2,2),(0,2),(2,0),(0,0)] #Redundant points
B1 = [(0,0),(0,2),(3,2),(3,0)] # rectangle
B2 = [(0,0),(3,4),(8,4),(5,0)] # rhombus
B3 = [(0,0),(0,0),(1,1),(0,0)] # only 2 distinct points
B4 = [(0,0),(0,0),(1,0),(0,1)] # only 3 distinct points
B5 = [(1,1),(2,2),(3,3),(4,4)] # Points on the same line
B6 = [(0,0),(2,2),(0,2)] # Not enough points
def tests(f):
assert(f(S1) == True)
assert(f(S2) == True)
assert(f(S3) == True)
assert(f(S4) == True)
assert(f(S5) == True)
assert(f(B1) == False)
assert(f(B2) == False)
assert(f(B3) == False)
assert(f(B4) == False)
assert(f(B5) == False)
assert(f(B6) == False)
def t(p):return len(set(p))-1==len(set([pow(pow(a-c,2)+pow(b-d,2),.5)for a,b in p for c,d in p]))
tests(t)
এটি কিছুটা ব্যাখ্যা করে নেবে, তবে সামগ্রিক ধারণাটি হল যে একটি বর্গক্ষেত্রে পয়েন্টগুলির মধ্যে কেবল তিনটি দূরত্ব রয়েছে (সাইড, ডায়াগোনাল, জিরো (নিজের সাথে তুলনা করা পয়েন্ট)):
def t(p):return len(set(p))-1==len(set([pow(pow(a-c,2)+pow(b-d,2),.5)for a,b in p for c,d in p]))
- টিপলগুলির একটি তালিকা পি এর জন্য (x, y)
- সেট (পি) ব্যবহার করে সদৃশগুলি সরান এবং তারপরে দৈর্ঘ্যটি পরীক্ষা করুন
- প্রতিটি পয়েন্টের সংমিশ্রণ পান (a, b এর জন্য p, d এর জন্য পি)
- প্রতিটি বিন্দু থেকে প্রতিটি পয়েন্টে দূরত্বের তালিকা পান
- মাত্র তিনটি অনন্য দূরত্ব রয়েছে তা পরীক্ষা করতে সেট ব্যবহার করুন - জিরো (নিজের তুলনায় পয়েন্ট) - পার্শ্ব দৈর্ঘ্য - তির্যক দৈর্ঘ্য
কোডের অক্ষরগুলি সংরক্ষণ করতে আমি আছি:
- একটি 1 চর ফাংশন নাম ব্যবহার করে
- একটি 1 লাইন ফাংশন সংজ্ঞা ব্যবহার করে
- অনন্য পয়েন্টের সংখ্যা 4 হওয়ার পরিবর্তে আমি পরীক্ষা করে দেখি যে এটি -1 বিভিন্ন পয়েন্ট দৈর্ঘ্য (সংরক্ষণ == 3 ==)
- একটি [0], একটি [1] ব্যবহার না করে, সি এর জন্য পিতে ডি, পি পেতে একটি, বি পাওয়ার জন্য তালিকা এবং টিপল আনপ্যাকিং ব্যবহার করুন
- স্কয়ারটি (এক্স) পাওয়ার জন্য গণিতের পরিবর্তে পা (x, .5) ব্যবহার করে
- পরে স্পেস স্থাপন না)
- ভাসা উপর একটি নেতৃস্থানীয় শূন্য না
আমি আশঙ্কা করি যে কেউ এই পরীক্ষার কেস খুঁজে পেতে পারে যা এটি ভেঙে যায়। সুতরাং দয়া করে এবং সঠিক করুন। উদাহরণস্বরূপ, আমি কেবল তিনটি দূরত্ব পরীক্ষা করি, পরিবর্তে একটি অ্যাবস () না করে পাশের দৈর্ঘ্য এবং হাইপোপেনিউস পরীক্ষা করে, এটি একটি ত্রুটি বলে মনে হয়।
প্রথমবার আমি কোড গল্ফ চেষ্টা করেছি। আমি যদি বাড়ির কোনও নিয়ম ভঙ্গ করে থাকি তবে সদয় হন।