গ্রিড বক্র হতে পারে। তোমার কত দিন?


12

পাঠ্যের উচ্চতর গ্রিড দ্বারা ডাব্লু প্রশস্ত প্রশস্ত প্রান্তে একটি সরল , উন্মুক্ত , দ্বিমাত্রিক বক্ররেখা চিত্রিত করার বিষয়টি বিবেচনা করুন যেখানে Xবক্রের অংশ উপস্থাপন করে এবং .খালি স্থান উপস্থাপন করে এবং অন্য কোনও অক্ষর ব্যবহার করা হয়নি।

প্রতিটি গ্রিড স্পেসে 8 টি প্রতিবেশী গ্রিড স্পেস রয়েছে, এর মুর পাড়া । সীমানার বাইরে গ্রিডের স্থানগুলি খালি মনে করা হয়।

গ্রিডে একটি বাঁক থাকে যদি এর ঠিক এক থাকে X বা যদি এর একাধিক থাকে Xযেখানে:

  • ঠিক দু'জনের Xকাছে কেবল একটি প্রতিবেশী রয়েছে X। এগুলি বক্ররেখার শেষ বিন্দু।
  • Xশেষের পয়েন্ট প্রতিবেশীদের পাশাপাশি প্রতিটি ঠিক দু'জন X। এগুলি বেশিরভাগ বক্ররেখা গঠন করে।

উদাহরণস্বরূপ, এই গ্রিড যেখানে ডাব্লু = 9 এবং এইচ = 4 একটি বক্ররেখা রয়েছে:

....X....
.X.X.X.X.
X..X..X.X
.XX.....X

তেমনি, এই গ্রিডগুলির (ডাব্লু = 4, এইচ = 3) বক্ররেখা রয়েছে:

....  .X..  ....  ....  .X.X
....  X..X  ..X.  XX..  X.X.
..X.  .XX.  .X..  ....  ....

এই গ্রিডগুলিতে কোনও বক্ররেখা থাকে না:

....  .XX.  ...X  XX..  ....  X.X.
....  X..X  ..XX  XX..  .X.X  .X..
....  .XX.  .X..  ....  ...X  X.X.

সমস্ত প্রতিবেশী জোড় এর মধ্যে দূরত্বগুলি যোগ করে আমরা একটি বক্ররেখার দৈর্ঘ্যটি খুঁজে পেতে পারি X:

  • দুটি orthogonally প্রতিবেশী Xs এর মধ্যে দূরত্ব 1 ইউনিট।

    XX
    X
    X
  • দুটি তির্যক প্রতিবেশী Xs এর মধ্যে দূরত্ব √2 ইউনিট।

    X.
    .X
    .X
    X.

উদাহরণস্বরূপ, গ্রিডে বক্রের দৈর্ঘ্য

XXX.
...X
..X.

হিসাবে কল্পনা করা যেতে পারে

দৈর্ঘ্য উদাহরণ

সুতরাং আমরা দেখতে পাচ্ছি এটি 1 + 1 + √2 + √2 = 4.828427 ...

শুধুমাত্র একটির সাথে একটি বাঁকের দৈর্ঘ্য Xশূন্য।

যখন একটি গ্রিড একটি বক্ররেখা গঠন করে না তার দৈর্ঘ্য ভালভাবে সংজ্ঞায়িত হয় না।

চ্যালেঞ্জ

XS এবং .s এর পাঠ্যের গ্রিড দেওয়া , এতে থাকা বক্রের দৈর্ঘ্য আউটপুট করুন বা অন্য কোনও কিছু যেমন আউটপুট দেয় -1বা Nullগ্রিডের কোনও বক্ররেখা নির্দেশ করতে পারে।

ইনপুট জন্য আপনি প্রয়োজনে Xএবং এর চেয়ে অন্যান্য অক্ষর ব্যবহার করতে পারেন ., এবং প্রয়োজনে এইচ এবং ডব্লু ইনপুট হিসাবে নেওয়া যেতে পারে। নেস্টেড তালিকার হিসাবে ইনপুট বা স্ট্রিংয়ের পরিবর্তে 1s এবং 0s ভরাট ম্যাট্রিক্সও ঠিক আছে।

আপনি বক্রাকার দৈর্ঘ্যের জন্য বিকল্প হিসাবে আউটপুট করতে পারেন বা বিকল্প হিসাবে দুটি এবং পূর্ণসংখ্যার A এবং B কোথায় পাবেন length = A + B*√2

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

পরীক্ষার কেস

XXX.
...X
..X.
2 + 2*√2 = 4.828427...

....X....
.X.X.X.X.
X..X..X.X
.XX.....X
3 + 8*√2 = 14.313708...

....
....
..X.
0 + 0*√2 = 0

.X..
X..X
.XX.
1 + 3*√2 = 5.242640...

....
..X.
.X..
0 + 1*√2 = 1.414213...

....
XX..
....
1 + 0*√2 = 1

.X.X
X.X.
....
0 + 3*√2 = 4.242640...

....
....
....
....
-1

.XX.
X..X
.XX.
-1

...X
..XX
.X..
-1

....
.X.X
...X
-1

X.X.
.X..
X.X.
-1

আমি দ্রাবককে গ্রিডগুলির জন্য তাদের আউটপুট ফর্ম্যাটটি বেছে নেওয়ার মঞ্জুরি দেওয়ার পরামর্শ দিচ্ছি যার কোনও বক্ররেখা নেই (যে কোনও ধারাবাহিক মান যা ফর্ম এম + এন * স্কয়ার্ট (2) কোনও মি, এন-0) নয়)
গ্রেগ মার্টিন

@ গ্রেগ সাউন্ড ভাল লাগছে সম্পন্ন
ক্যালভিনের

[x.x,...,.x.]একটি বৈধ বাঁক না, তাই না?
ম্যাজিক অক্টোপাস উরন

@ কারাসোকম্পুটিং সঠিক
ক্যালভিনের শখ

উত্তর:


3

এমএটিএল , 52 51 বাইট

t2Y6~Z+*ssGt3Y6Z+*tt1=z2=wssGzqE=*Gz1=+?}_q]ssy-h2/

ইনপুট হ'ল শূন্য এবং একের ম্যাট্রিক্স।

আউটপুট হয় B, তারপর A। অ-বক্ররেখা একটি নেতিবাচক দেয় A

এটি অনলাইন চেষ্টা করুন! বা সমস্ত পরীক্ষার কেস যাচাই করুন

ব্যাখ্যা

কার্ভের দৈর্ঘ্য গণনা করতে দুটি 2 ডি কনভোলিউশন 1 ব্যবহার করা হয় : একটি মুর মাস্ক এবং অন্যটি কেবল একটি তির্যক প্রতিবেশী সমন্বিত একটি মুখোশ সহ। ফলাফলগুলি একই আকারের ইনপুট সহ দুটি ম্যাট্রিক হয়, যা যথাক্রমে এম এবং ডি হিসাবে চিহ্নিত করা হবে । এম যেহেতু, প্রতিটি পয়েন্টের জন্য প্রতিবেশীদের মোট সংখ্যা দেয় ডি তির্যক প্রতিবেশীদের সংখ্যা দেয়।

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

কার্ভটি বৈধ কিনা তা নির্ধারণ করা আমার প্রত্যাশার চেয়ে জটিল umbers এটি করার জন্য, কোডটি তিনটি শর্ত পরীক্ষা করে:

  1. এম এর সংখ্যা কি সমান 2? (এটি, একক প্রতিবেশীর সাথে ঠিক দুটি পয়েন্ট ছুঁড়ে দেওয়া হয়?)
  2. এম এর মোট যোগফল ইনপুট কার্ভ টাইম 2বিয়োগের পয়েন্টের সংখ্যার সমান হয় 2? (শর্ত 1 এর সাথে একসাথে, এই দুটি পরীক্ষা করে এম এর মধ্যে দুটি শূন্যের মান সমান হলে 2)
  3. ইনপুট বক্ররেখাতে কি কোনও একক পয়েন্ট থাকে?

1 এবং 2 শর্ত সত্য হলে, বা শর্ত 3 হলে বক্রাকারটি বৈধ।

t       % Implicit input matrix of zeros and ones. Duplicate
2Y6~    % Push [1 0 1; 0 0 0; 1 0 1]
Z+      % 2D convolution, keeping size
*       % Multiply to zero out results for non-curve points. Gives matrix D
ss      % Sum of matrix D
Gt      % Push input again wtice
3Y6     % Push [1 1 1; 1 0 1; 1 1 1]
Z+      % 2D convolution, keeping size
*       % Multiply to zero out results for non-curve points. Gives matrix M
tt      % Duplicate twice
1=z     % Number of ones
2=      % Does it equal 2? This is condition 1
wss     % Swap. Sum of matrix
G       % Push input again
zqE     % Number of nonzeros values minus 1, and then multiplied by 2
=       % Are they equal? This is condition 2
*       % Multiply. This is a logical AND of conditions 1 and 2
G       % Push input again
z1=     % Does it contain exactly one nonzero value? This is condition 3
+       % Add. This is a logical OR with condition 3
?}      % If result was false
  _q    %   Negate and subtract 1. This makes sure we get a negative value
]       % End
ss      % Sum of matrix M
y       % Duplicate sum of matrix D from below
-       % Subtract
h       % Concatenate horizontally
2/      % Divide by 2. Implicitly display

1 কনভলিউশন সাফল্যের মূল চাবিকাঠি


1

পাইথন 3 , 316 315 311 বাইট

আমি মনে করি এটি সমস্ত ক্ষেত্রে কভার করে; কমপক্ষে পরীক্ষার কেসগুলি কাজ করে।

এছাড়াও, এখনও অবশ্যই গল্ফ করার মতো অনেক কিছুই আছে, সম্ভবত শুরুর দিকে যেখানে প্রান্তের মামলাগুলি পরিচালনা করা হয়।

def f(d,R,C):
 s=sum;d=[0]*(C+2),*[[0,*r,0]for r in d],[0]*(C+2);o=-1,0,1;k=[[[(1,0),(0,1)][i*j]for i in o for j in o if d[r+i][c+j]and i|j]for c in range(1,-~C)for r in range(1,-~R)if d[r][c]];w=[x/2for x in map(s,zip(*s(k,[])))]or[0,0];print([w,-1][s(w)!=s([s(z)for z in d])-1or[len(t)for t in k].count(1)>2])

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

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

  1. d,R,C 1. তালিকার একটি তালিকা হিসাবে 1 টি বক্ররেখা এবং 0 টি পটভূমি হিসাবে, 2. সারি এবং কলামের গণনা
  2. 0 এর আগে এবং পরে একটি সারি এবং 0 এর আগে এবং পরে একটি কলাম সন্নিবেশ করান dযাতে আমাদের 2d অ্যারের প্রান্ত সম্পর্কে চিন্তা করতে হবে না
  3. 2 ডি অ্যারে প্রতি 1 এর জন্য, 1 টির জন্য পাড়াটি স্ক্যান করুন এবং সম্পর্কটি তির্যক হলে একটি তালিকায় (1,0) যুক্ত করুন, অন্যথায় (0,1) যুক্ত করুন
  4. সমস্ত টিউপলের সমষ্টি করুন, যাতে (এন, মি) যথাক্রমে তির্যক এবং অ-তির্যক প্রতিবেশীদের সংখ্যা উপস্থাপন করে
  5. সম্পর্কের সংখ্যাটি 1 এর বিয়োগের সংখ্যাটি হ'ল কিনা; যদি না, একটি বক্ররেখা না।

অনুপস্থিত কেসটি নির্দেশ করার জন্য @ হেলকা হোম্বাকে ধন্যবাদ জানাই। গল্ফিং টিপসের জন্য @ টুকুএক্সএক্স এবং @ ট্রেলজেভিয়ারকে ধন্যবাদ


দেখে মনে হচ্ছে d=[[1,0,1],[0,1,0],[1,0,1]]এখানে ব্যর্থ হবে (টেস্টকেস যুক্ত হয়েছে)।
ক্যালভিনের শখ 3

@ হেলকাহোম্বা আপনি ঠিক বলেছেন, আমি এটি পর্যবেক্ষণ করেছি। ধন্যবাদ! এটি স্থির করে (এখন দুর্ভাগ্যক্রমে আরও বাইট সহ)।
নীল

1
s=sum4 বাইট সঞ্চয়
ট্রেলজিভির

0

গণিত, 153 150 বাইট

Switch[Sort[Join@@BlockMap[If[#[[2,2]]<1,Nothing,Tr[Tr/@#]]&,#~ArrayPad~1,{3,3},1]],{1},0,{2,2,3...},1/.#~ComponentMeasurements~"PolygonalLength",_,]&

0S এর জন্য .s এবং 1s এর জন্য 2D অ্যারে নেয় XNullনন-কার্ভগুলির জন্য আউটপুট ।

1/.#~ComponentMeasurements~"PolygonalLength"&

ম্যাথামেটিকায় এটির জন্য একটি 45-বাইট অন্তর্নির্মিত রয়েছে তবে এটি নন-কার্ভগুলির জন্য কিছু সংখ্যা এবং ইনপুটটির জন্য 1 / বর্গ (2) আউটপুট করে {{1}}। এই ব্যয়গুলি 105 টি বাইট সংশোধন করে (গল্ফ করা যেতে পারে?)

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