ইউক্লিডিয়ান ভেক্টর


14

দুটি ভেক্টরের এএসসিআইআই আর্ট দেওয়া, ফলাফল ভেক্টরের প্রবণতা এবং ডিগ্রি সন্ধান করুন।


ইনপুট

এটি STDIN এর মাধ্যমে প্রাপ্ত হতে পারে, কোনও স্থানীয় ফাইল থেকে পড়া বা কোনও ফাংশন কলের মাধ্যমে সরবরাহ করা যেতে পারে। এখানে দুটি ভেক্টর ইনপুট উদাহরণ:

^------>
|
|
|
x

এটি 4 ইউনিট উত্তর এবং 7 ইউনিট পূর্বে পরিবর্তন প্রতিনিধিত্ব করে। প্রতিটি ইনপুট এর শুরুর পয়েন্ট একটি x(দশমিক 120) দ্বারা প্রতিনিধিত্ব করা হবে ।

  • সমস্ত ভেক্টরগুলি অনুভূমিক বা উল্লম্ব লাইন।

  • প্রতিটি ভেক্টরের এই চারটি সমাপ্তি বিন্দুর মধ্যে একটি রয়েছে: ^v<>এবং এটি কোনও ড্যাশ ( -, দশমিক 45) বা উল্লম্ব বার ( |, দশমিক 124) দ্বারা গঠিত।

  • বিমানে খালি পয়েন্টগুলি ফাঁকা স্থান (( দশমিক 32)) দিয়ে পূর্ণ ।

  • ইনপুটটি একক হতে পারে x

  • সংলগ্ন ভেক্টরগুলি একে অপরের কাছে সর্বদা লম্ব থাকে।

  • সমস্ত ভেক্টর টিপ-টু লেজ are


আউটপুট

এটি ফলাফল পয়েন্টের স্থানচ্যুতি (প্রারম্ভিক বিন্দু থেকে দূরত্ব) এবং প্রারম্ভিক বিন্দুর তুলনায় এটি যে ডিগ্রিতে চলে গেছে সেটির স্থানচ্যুতি হবে।

উপরের ইনপুটটির জন্য, আউটপুটটি 8.06ইউনিট এবং 60.3ডিগ্রি হওয়া উচিত । প্রত্যেকের অবশ্যই 3 টি গুরুত্বপূর্ণ ব্যক্তিত্ব থাকা উচিত। এখানে 3 টি উল্লেখযোগ্য সংখ্যার কয়েকটি সংখ্যার উদাহরণ রয়েছে:

  • 1.00
  • 60.1
  • 453
  • 7.08
  • 4.50
  • 349

সমস্ত ইউনিট পরিমাপ হবে <= 999


এই সংখ্যাগুলি নীচের বিন্যাসে আউটপুট হওয়া উচিত। এটি উপরের নম্বরগুলি ব্যবহার করছে।

8.06 units @ 60.3 degrees

এটি একটি একক ট্রেলিং স্পেস বা নিউলাইন দ্বারা অনুসরণ করা যেতে পারে।


যদি ইনপুটটি একক হয় x, কোনও স্থানচ্যুতি না করে এবং তাই কোনও স্থানচ্যুতির কোণ না থাকে তবে আউটপুটটি খালি লাইন (একক নতুন লাইন অক্ষর) বা নিম্নলিখিত বিন্যাসে হওয়া উচিত:

0 units @ - degrees

আপনি যদি বোনাসের জন্য যোগ্যতা অর্জনের চেষ্টা করছেন তবে দিকনির্দেশটিও -একইভাবে হওয়া উচিত ।


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

8.06 units @ 60.3 degrees NE

ডিগ্রিগুলি স্ট্যান্ডার্ড প্লেন অনুযায়ী মাপতে হবে।

       90
  135  |  45
      \|/
180 ---x---- 0
      /|\
  225  |  315
      270

0ডিগ্রি পূর্ব, 1 - 89ডিগ্রি উত্তর-পূর্ব, 90উত্তর, ইত্যাদি etc.


বোনাসেস

নিম্নলিখিতটি মোট -50% এর মূল্যবান।

  1. পরিচালনা করা যায় এমন প্রতিটি অতিরিক্ত ভেক্টরের জন্য -10% বোনাস নিন। এই বোনাসটি 3 বার পর্যন্ত প্রয়োগ করা যেতে পারে। ভেক্টর কখনই ওভারল্যাপ বা ক্রস করবে না।

  2. আপনার আউটপুটে কোণের মূল দিক (উত্তর, দক্ষিণ, পূর্ব, পশ্চিম) অন্তর্ভুক্ত থাকলে একটি -10% বোনাস নিন।

  3. যদি আপনার আউটপুটে কোণটির মধ্যবর্তী দিকগুলি (উত্তর-পূর্ব, উত্তর-পশ্চিম, দক্ষিণ-পূর্ব, দক্ষিণ-পশ্চিম) অন্তর্ভুক্ত থাকে তবে -10% বোনাস নিন Take


উদাহরণ

ভিতরে:

x---->
     |
     v

বাইরে:

5.39 units @ 338 degrees

বৈকল্পিকভাবে SE


ভিতরে:

<--------------^
               |
               |
               x

বাইরে:

15.3 units @ 169 degrees

বৈকল্পিকভাবে NW


ভিতরে:

x
|
|<-----^
|      |
v------>

বাইরে:

2.24 units @ 297 degrees

বৈকল্পিকভাবে SE


উদাহরণ (একাধিক ভেক্টর)

ভিতরে:

x--->
    |
    |
    v----------->

বাইরে:

16.3 units @ 349 degrees

বৈকল্পিকভাবে SE


ভিতরে:

<-------^
|       |
|       |
v       |
        |
        |
        x

বাইরে:

8.54 units @ 159 degrees

বৈকল্পিকভাবে NW


ভিতরে:

^-->
|  |
|  v
|
<--------x

বাইরে:

6.32 units @ 162 degrees

বৈকল্পিকভাবে NW


ভেক্টরগুলির কি কখনও এক দিকে শূন্য উপাদান থাকবে? যদি তাই হয় তবে আউটপুট কিসের জন্য হওয়া উচিত x? উত্তর ও উত্তর-পশ্চিমের সীমানা কত?
lirtosiast

আমি তথ্য যোগ করেছি। এটা ইশারা জন্য ধন্যবাদ! @ থমাসকওয়া
জ্যাচ গেটস

আপনার একটি পরীক্ষার কেস যুক্ত করা উচিত যেখানে কেবলমাত্র একটি ভেক্টর রয়েছে, যেমন x-->। ভেক্টর কি পার হতে পারে?
lirtosiast

নিয়মিত ইনপুট দুটি ভেক্টর হবে। একক ব্যতিক্রম খালি x। দু'জনের বেশি থাকতে পারে (যদি বোনাসটি সম্পূর্ণ করার চেষ্টা করা হয়) তবে কম নয়। আমি একাধিক ভেক্টর ইনপুট জন্য উদাহরণ উপর কাজ করছি। কোনও ইনপুটগুলিতে ভেক্টর ক্রস করবে না। @ থমাসকওয়া
জ্যাচ গেটস

আমি তাদের যুক্ত করেছি। @ থমাসকওয়া
জ্যাচ গেটস

উত্তর:


2

জাভাস্ক্রিপ্ট (ES6), 305 বাইট - 50% বোনাস = 152.5 স্কোর

v=>(l=v.search`
`+1,s=v.search`x`,u=0,d="-",v.replace(/[<>v^]/g,(p,i)=>{c=o=>v[i+o]!=q;with(Math)if(p<"?"?c(l,q="|")&c(-l):c(1,q="-")&c(-1))d=(atan2(x=i%l-s%l,y=(i/l|0)-(s/l|0))*180/PI+270)%360,u=sqrt(x*x+y*y)}),u[p="toPrecision"](3)+` units @ ${d[p](3)} degrees`)

ব্যাখ্যা

ইনপুট স্পেস দিয়ে প্যাড করা আবশ্যক। সমস্ত বোনাস ব্যবহার করে।

v=>(
  l=v.search`
`+1,                                                     // l = line length
  s=v.search`x`,                                         // s = index of start point
  u=0,                                                   // u = units
  d=                                                     // d = degrees
  w="-",                                                 // w = cardinal direction
  v.replace(/[<>v^]/g,(p,i)=>{                           // for each endpoint
    c=o=>v[i+o]!=q;                                      // compares cell at offset to char
    with(Math)                                           // save having to write "Math."
      if(p<"?"?c(l,q="|")&c(-l):c(1,q="-")&c(-1))        // check for line branching off
        d=(atan2(
          x=i%l-s%l,                                     // x = relative x
          y=(i/l|0)-(s/l|0)                              // y = relative y
        )*180/PI+270)%360,                               // convert to degrees
        u=sqrt(x*x+y*y),
        w="N S"[sign(y)+1]+"W E"[sign(x)+1]              // get cardinal direction
  }),
  u[p="toPrecision"](3)+` units @ ${d[p](3)} degrees `+w // format output
)

পরীক্ষা


3

পাইথন 2, 238.5 ( 594 562 482 477-50%) বাইট

from math import*
def F(x):s='%.3g'%x;return[[s+'.',s]['.'in s].ljust(4,'0'),s][x>99]
I=input()
V=I.split('\n');N=len(V)
l=max(len(x)for x in V)
q=[' '*(l+2)];V=q+[' '+x.ljust(l+1)for x in V]+q
for k in range(N*l):
 i,j=k/l,k%l;c=V[i+1][j+1]
 if c in'<>^v'and['|'not in zip(*V)[j+1][i:i+3],'-'not in V[i+1][j:j+3]][c>'?']:a,b=i,j
 if c=='x':A,B=i,j
Y=A-a;X=b-B;a=atan2(Y,X)/pi*180%360
print[F(hypot(X,Y))+' units @ '+F(a)+' degrees '+' NS'[cmp(Y,0)]+' EW'[cmp(X,0)],''][I=='x']

ব্যাখ্যা

ইনপুটটিতে প্রতিটি অক্ষর দেখে শুরু এবং শেষের অবস্থানগুলি সন্ধান করে।

শুরু হয় x

প্রতিটি তীর দেখে শেষ পাওয়া যায় (<>^v ) এবং তাদের প্রতিবেশীদের দেখে । প্রতিবেশীরা যদি ভেক্টর অবিরত করে থাকেন তবে তা উপেক্ষা করুন। অন্যথায়, এটিই শেষ।

প্রতিবেশীদের তীরের দিকের দিকে লম্ব দেখুন।

যদি তাদের একটি লম্ব লাইন থাকে তবে এটি একটি অবিরত ভেক্টর।

উদাহরণ ( _স্থান নির্দেশ করে):

_#_   
->_   Neighbors marked by #
_#_ 

___   
->_   (end)
___   

_|_   
->_   (not end)
___ 

___   
->|   (end)
___ 

---   
->_   (end)
___ 

যেহেতু শেষ পয়েন্টটি পাওয়া গেছে, সেখানে প্রচুর ভেক্টর ( 30% বোনাস ) থাকতে পারে।


আপনি কি নিশ্চিত যে এটি অজগর 2 তে কাজ করে? এছাড়াও, আপনি "গণিত আমদানি থেকে" "গণিত আমদানি " থেকে " স্থান সরিয়ে " পরিবর্তন করতে পারেন ।
Rɪᴋᴇʀ

@ রিকারডাব্লু এটি আমার পক্ষে কাজ করে। আইডিয়ন: আদর্শআন .9j86yj\n লাইনব্রেক হিসাবে ব্যবহার করে ...
টিফিল্ড

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