কম্পাসের 32 পয়েন্টের একটিতে ডিগ্রি রূপান্তর করুন


13

32-পয়েন্টের কমপাসটি ... আকর্ষণীয়, কমপক্ষে বলতে চাই।

ভাবমূর্তি

উইকিমিডিয়া কমন্সের মাধ্যমে ডেনেলসন ৩৩ (নিজস্ব কাজ) [ জিএফডিএল বা সিসি-বাই-এসএ -৩.০ ] দ্বারা

আপনার চ্যালেঞ্জটি হ'ল একটি ডিগ্রি পরিমাপ করা, এবং 32-পয়েন্টের কম্পাসের দিকে এটি রূপান্তরিত করা।

প্রতিটি দিক পূর্বের তুলনায় 11.25 (360/32) ডিগ্রি বেশি। উদাহরণস্বরূপ, এন (উত্তর) 0 ডিগ্রি, এনবিই (পূর্বে উত্তর) 11.25 ডিগ্রি, এনএনই (উত্তর-উত্তর পূর্বে) 22.5 ডিগ্রি, ইত্যাদি,

আপনার কীভাবে দিকনির্দেশগুলি পাওয়ার কথা রয়েছে,

  • 0 ডিগ্রি এন, 90 ডিগ্রি ই, 180 ডিগ্রি এস, এবং 270 ডিগ্রি ডাব্লু।

    • এগুলিকে কার্ডিনাল দিকনির্দেশ বলা হয়।
  • কার্ডিনাল দিকগুলির মধ্যবর্তী অর্ধেক পয়েন্টগুলি কেবল সেই কার্ডিনাল দিক যা সেগুলি সংক্ষিপ্ত করে রাখে। এন বা এস সর্বদা প্রথম হয় এবং ডাব্লু বা ই সর্বদা দ্বিতীয় হয়।

    • এগুলিকে অর্ডিনাল দিকনির্দেশ বলা হয়।
  • কার্ডিনাল এবং অর্ডিনাল দিকের মাঝামাঝি পয়েন্টগুলি হ'ল দিকগুলি যেগুলি তারা আবারও "-" এর সাথে সম্মতিযুক্ত, আবার একত্রিত হয়ে থাকে। মূল দিকনির্দেশগুলি প্রথমে যায়, অর্ডিনাল দ্বিতীয়।

    • এগুলিকে মাধ্যমিক-আন্তঃকার্ডিনাল দিকগুলি বলা হয়।
  • মাধ্যমিক-আন্তঃকার্ডিনাল দিকনির্দেশ এবং অন্যান্য দিকনির্দেশগুলির মধ্যে অর্ধেক পয়েন্টগুলি হ'ল "দিকনির্দেশনা" যে দিকের নিকটতম কার্ডিনাল দিকটি (অবশ্যই তাদের পাশের দিক ছাড়া অন্যটি))

    • এগুলি কী বলা হয় আমার কোনও ধারণা নেই: পি

যদি এই সমস্ত ব্যাখ্যা আপনার মস্তিষ্ককে আমার যতটা ব্যথা দেয় তবে আপনি এই চার্টটি উল্লেখ করতে পারেন:

1   North               N
2   North by east       NbE
3   North-northeast     NNE
4   Northeast by north  NEbN
5   Northeast           NE
6   Northeast by east   NEbE
7   East-northeast      ENE
8   East by north       EbN
9   East                E
10  East by south       EbS
11  East-southeast      ESE
12  Southeast by east   SEbE
13  Southeast           SE
14  Southeast by south  SEbS
15  South-southeast     SSE
16  South by east       SbE
17  South               S
18  South by west       SbW
19  South-southwest     SSW
20  Southwest by south  SWbS
21  Southwest           SW
22  Southwest by west   SWbW
23  West-southwest      WSW
24  West by south       WbS
25  West                W
26  West by north       WbN
27  West-northwest      WNW
28  Northwest by west   NWbW
29  Northwest           NW
30  Northwest by north  NWbN
31  North-northwest     NNW
32  North by west       NbW

এখানে একটি আরও বিশিষ্ট চার্ট এবং কম্পাসের পয়েন্টগুলির সম্ভবত আরও ভাল ব্যাখ্যা।

আপনার চ্যালেঞ্জটি হ'ল ডিগ্রিগুলিতে ইনপুট নেওয়া এবং এটির সংক্ষিপ্তসার সহ কমপাসের দিকনির্দেশের সম্পূর্ণ নাম আউটপুট।

পরীক্ষার কেস:

Input  Output
0      North N
23.97  North-northeast NNE
33.7   Northeast by north NEbN
73.12  East-northeast ENE
73.13  East by north EbN
219    Southwest by south SWbS
275    West W
276    West by north WbN
287    West-northwest WNW

সমস্ত মূলধন অবশ্যই পরীক্ষার ক্ষেত্রে সংরক্ষণ করা উচিত in দশমিক স্থান সর্বাধিক সংখ্যা 2. সমস্ত ইনপুট সংখ্যা বেশি হবে এর চেয়ে বড় বা 0 সমান, এবং 360. কম যদি একটি দশমিক বিন্দু উপস্থিত থাকলে, সেখানে উভয় পক্ষের সংখ্যার হতে হবে (আপনি হ্যান্ডেল করতে হবে না হয় .1বা 1.)।

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


@ ওয়েলওয়েস্ট হুম, এটি অ্যারের অনুমতি দেয়, এর আলাদা মূলধন থাকে এবং এর মধ্যে "কোনও" থাকে না, তবে আমি এটি লক্ষ্য করিনি (সম্ভবত ... আকর্ষণীয় শিরোনামের কারণে: পি)। এটিকে যথেষ্ট আলাদা করার জন্য আমি কী করতে পারি তা আমি দেখতে পাচ্ছি ...
ডোরকনব

3
@WallyWest সেখানে এখন আপনাকে সংক্ষিপ্তসারও আউটপুট করতে হবে। অন্যান্য সমস্ত তফাতগুলির সাথে এটি এটিকে নন-ডুপ করতে যথেষ্ট হবে। (ওহ, এটিরও খুব ক্ষতি হয়েছে)
ডোরকনব

@WallyWest আপনার আগের প্রশ্নের "আর" তে কোনও উত্তর নেই ("সি" তে কোনও উত্তরও ছিল না!) আমি আশা করি এবার আমরা কিছুটা দেখব, শিপমেটরা!
স্তর নদী সেন্ট

যদি -360 থেকে 360 ডিগ্রি (নেতিবাচক মানে ঘড়ির কাঁটার বিপরীতে) এবং বোনাস থাকত তবে আরও মজা হত!
মুকুল কুমার

কোনও চ্যালেঞ্জ খুঁজছেন না এমন লোকদের জন্য, সহজ সমাধান হ'ল সম্ভাব্য আউটপুটটি অনুসন্ধান করা যার জন্য ইনপুট কোণ থেকে দূরত্ব নূন্যতম হয়, একটি অনুসন্ধান টেবিল কোণ <-> নাম ব্যবহার করে।
রিভনফল

উত্তর:


4

পার্ল, 250 236 231 188 187

সম্পাদনা করুন: প্রতিসম ব্যবহারের কিছুটা বাইট (যেমন আমি @ বাবাজার সমাধানে দেখেছি)

+ সম্পাদনা করুন: এবং কিছু অশুভ কৌশল ...

+ সম্পাদনা করুন : আমি যেখানে শুরু করেছি সেখানে ফিরে এসেছি (তালিকার সাথে কাজ করছি, স্ট্রিং নয়), এবং আরও প্রতিসাম্যতা = 1 বাইট বন্ধ এবং পুরোটা অনেক খারাপ।

$_=((@_=(1,@_=qw(1b3 1-13 13b1 13 13b3 3-13 3b1),3,map{y/1/2/r}reverse@_)),map{y/312/421/r}@_)[int<>/11.25+.5];print ucfirst s/\w/(' by ',north,south,east,west)[$&]/ger,' ',y/1-4-/NSEW/dr

প্রিটি-প্রিন্ট:

$_=(
    (@_=
        (
            1,
            @_=qw(1b3 1-13 13b1 13 13b3 3-13 3b1),
            3,
            map{y/1/2/r}reverse@_
        )
    ),map{y/312/421/r}@_
)[int<>/11.25+.5];

print ucfirst s/\w/(' by ',north,south,east,west)[$&]/ger,' ',y/1-4-/NSEW/dr

5.014 rমোডিফায়ারের কারণে প্রয়োজনীয় ।


আপনার কোডে আপনার টাইপ রয়েছে: সোথথ দক্ষিণ হতে হবে (২ য় বিবৃতি যা এস / বি /
রোননডেক্স

প্রথম 3 টি রেজিেক্সপগুলি y / NS / SN / দ্বারা প্রতিস্থাপন করা যেতে পারে; 10 টি চর জন্য
bazzargh

@ বাজজার, হ্যাঁ, এবং কেবল তা নয় ;-)
ব্যবহারকারী 2846289

6

জাভাস্ক্রিপ্ট 470 453 438 434 432 421 404

s=String;s.prototype.a=s.prototype.replace;var a=prompt()/11.25,a=a+0.5|0,b,k,c=a,d=c%8,c=c/8|0,e=["north","east","south","west"],f,g,h;f=e[c];g=e[(c+1)%4];h=f==e[0]|f==e[2]?f+g:g+f;b="1;1 by 2;1-C;C by 1;C;C by 2;2-C;2 by 1".split(";")[d].a(1,f).a(2,g).a("C",h);k=b.a(/north/g,"N").a(/east/g,"E").a(/south/g,"S").a(/west/g,"W").a(/by/g,"b").a(/[\s-]/g,"");b=b[0].toUpperCase()+b.slice(1);alert(b+" "+k)

আপনি এই কোডটি আপনার কনসোলটিতে অনুলিপি করতে পারেন এবং এটি সম্পাদন করতে পারেন। এটি আপনাকে ডিগ্রি ইনপুট জিজ্ঞাসা করে এবং ফলাফলটি আউটপুট করেalert();

অগল্ফড জাভাস্ক্রিপ্ট এই ফিডলটিতে পাওয়া যাবে: http://jsfiddle.net/AezL3/11


+1 ভাল তবে সতর্ক থাকুন: "পরীক্ষার ক্ষেত্রে যেমন সমস্ত ক্যাপিটালাইজেশন সংরক্ষণ করা উচিত" "

@ বেনহ কোন পরীক্ষার মামলাটি মূলধন চেক ব্যর্থ করে? এই জন্য ধন্যবাদ, বিটিডব্লিউ। এটি আমার ওয়েব ইন্টারফেসের জন্য কার্যকর যা আমি লিখছি।
স্টিভেন লু

যাইহোক, এটি 355 ডিগ্রি থেকে 360 ডিগ্রি পর্যন্ত মারা যায়। ফিক্স সহজ। কেবল calcPoint(32)0 যা করেন তা করুন, যাতে আপনি এটির সাথে %32বা অন্য কোনও অনুরূপ করতে পারেন ।
স্টিভেন লু

@ স্টিভেনলু আপনার অর্থটি বোঝার জন্য আমাকে কিছুটা সময় নিয়েছিল তবে এই লাইনটি var name = calcPoint(input % 32);কৌশলটি করে
অরওলোফিল

4

হাস্কেল 415 372 347 330 317 304 301 সি

@ ভাদিমআর এর (এবং প্রতিসামগ্রীর পিছনে!) এর মত সমাধানে রূপান্তরিত হয়েছিল। ব্যবহার: h 219আউটপুট"Southwest by south SWbS"

d"N"="north"
d"S"="south"
d"E"="east"
d"W"="west"
d"b"=" by "
d"-"="-"
d(x:y)=d[x]++d y
e(x:y)=x:tail(d$x:y)
k 'N'='S'
k 'S'='N'
k 'E'='W'
k x=x
r="N NbE N-NE NEbN NE NEbE E-NE EbN E EbS E-SE SEbE SE SEbS S-SE SbE "
p=words$r++(map k r)
g x=p!!mod(round$x/11.25)32
h x=e(g x)++(filter(/='-')$' ':g x)

আরও তিনটি চর গেছে, ধন্যবাদ @ শিওনা।


drop 1লেজ হিসাবে একই। এছাড়াও যদি আমার ভুল না e l@(x:_)=x:tail$d lহয় তবে আপনি আরও একটি চর শেভ করতে পারেন ।
shiona

বিশ্বাস করতে পারছি না আমি এটা মিস করেছি ধন্যবাদ!
বাজরাঘ

0

পাইথন 3.8 , 482 438 424 বাইট

lambda h:' '.join([b(h),a(a(a(b(h)),1),d={' by ':'b','-':''})])
L=str.lower
c={'North':'N','East':'E','South':'S','West':'W'}
a=lambda t,l=0,d=c:[*(t:=t.replace([i,L(i)][l],d[i])for i in[*d])][-1]
b=lambda h,k=[*c]:a('W|W by x|W-z|Z by w|Z|Z by x|X-z|X by w'.split('|')[int((q:=h*4/45+.5)%8)],d={'W':(W:=[*k][(v:=int(q//8)%4)]),'X':(X:=[*k][(v+1)%4]),'w':(w:=L(W)),'x':(x:=L(X)),'Z':(Z:=[W+x,X+w][W in'EastWest']),'z':L(Z)})

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

টনি গুডউইনের উত্তরটি কিছু গল্ফ করার পরে আমি এটাই পেয়েছি ; টিআইও লিঙ্কটি কোনও মন্তব্যের জন্য দীর্ঘ না হওয়ার কারণে তার নিজের উত্তরে পোস্ট করা হয়েছে। তিনি যদি উপরের উত্তরটি আপডেট করতে চান তবে আমি এই উত্তরটি মুছব।

আমি ধরে নিচ্ছি যে সম্পূর্ণ প্রোগ্রামের চেয়ে সমাধান হিসাবে কোনও ফাংশন জমা দেওয়া গ্রহণযোগ্য। যদি তা না হয় তবে এখানে 426 বাইটে একটি সম্পূর্ণ প্রোগ্রাম।

আমি আশা করি এখনও ছোট করার জন্য অনেক কিছু করা যেতে পারে b

সম্পাদনা করুন: মার্জিক ওয়ালরাস সৌজন্যে 44 বাইট বন্ধ গল্ফড। এখনও মনে হয় না যে bগল্ফ করা হচ্ছে।

Edit2: dicts unpacking পরিবর্তে ব্যবহার করার মাধ্যমে অন্যদের 14 কামিয়ে keys()এবং items()


-1

পাইথন, 2103 1647 1103 1034 924 889 848 বাইট

খুব দেরী, আমি জানি। চ্যালেঞ্জের জন্য ধন্যবাদ, আমি আমার পাই এর সাথে বাতাসের দিকনির্দেশের জন্য একটি চৌম্বকীয় কেন্দ্র স্থাপন করছি, এবং আবহাওয়ার পূর্বাভাসের অ্যালগরিদমগুলিতে ফিড দেওয়ার জন্য এই জাতীয় 16 পয়েন্টের কম্পাস সমাধান চাই। আমার সমস্ত কোড পাইথনে রয়েছে, তাই এখানে পাইথনে ইতিমধ্যে পোস্ট করা জাভাস্ক্রিপ্ট সমাধানের সংস্করণ রয়েছে তবে অতিরিক্ত মোচড় দিয়ে আপনি 32 অথবা 16, অথবা ভেরিয়েবলের জে কম্পাসের 8 পয়েন্ট উল্লেখ করতে পারেন এবং আমি অফসেট পরিবর্তন করেছি এর আগে বিবৃতিতে ডিগ্রি হেড, পয়েন্টের সংখ্যার উপর নির্ভর করে। আমি প্রশ্নের কেস প্রয়োজনীয়তা পূরণ করেছি তা নিশ্চিত করার জন্য আমি একটি পরিবর্তিত পুনরায় নাম অ্যালগরিদম (এবং ব্যবহারযোগ্য ভেরিয়েবলগুলি শব্দটি নষ্ট না করে পুনরায় নামকরণ করতে পারি!) ব্যবহার করেছি।

আমি জানি যে এটি জিতবে না, যেহেতু পাইথন আরও শব্দযুক্ত, এবং আমিও am

সংক্ষিপ্ত সংস্করণ:

  def a(t,d,l):
    for i,j in d.items():
      if l:
        i=i.lower()
      t=t.replace(i,j)
    return t
  def b(h,q):
    p=32
    r=360
    h=(h+(r/q/2))/(r/p)
    j=int(int(int(h %8)%8/(p/q))*p/q)
    h=int(h/8)%4
    k=c.keys()
    u=['W','W by x','W-z','Z by w','Z','Z by x','X-z','X by w']
    d={}
    d['W']=list(k)[h]
    d['w']=d['W'].lower()
    d['X']=list(k)[(h+1)%4]
    d['x']=d['X'].lower()
    if(d['W']=='North' or d['W']=='South'):
      d['Z']=d['W']+d['x']
    else:
      d['Z']=d['X']+d['w']
    d['z']=d['Z'].lower()
    return a(u[j],d,0)
  def g(n):
    n=a(n,c,0)
    n=a(n,c,1)
    d={'by':'b',' ':'','-':''}
    return a(n,d,0)
  def v(m):
    while True:
      try:
        return float(input(m))
      except ValueError:
        print("?")
  c={'North':'N','East':'E','South':'S','West':'W'}
  while True:
    h=v("?")
    n=b(h,32)
    print(h,n,g(n))

সাফ সংস্করণ

            import math
            import sys

            def calcPoint(degHead, points):
                maxPoints=32
                if points not in(8,16,32):
                    sys.exit("not a good question")
                degHead=(degHead+(360/points/2))/(360/maxPoints)
                j =int(int( int(degHead  % 8)%8/(maxPoints/points))*maxPoints/points)
                degHead = int(degHead / 8) % 4
                cardinal = ['North', 'East', 'South', 'West']
                pointDesc = ['W', 'W by x', 'W-z', 'Z by w', 'Z', 'Z by x', 'X-z', 'X by w']#vars not compass points
                W = cardinal[degHead]
                X = cardinal[(degHead + 1) % 4]
                w=W.lower()
                x=X.lower()
                if (W == cardinal[0] or W == cardinal[2]) :
                    Z =W + x
                else:
                    Z =X + w
                z=Z.lower()
                return pointDesc[j].replace('W', W).replace('X', X).replace('w', w).replace('x', x).replace('Z', Z).replace('z', z);

            def getShortName(name): 
                return name.replace('North', 'N').replace('East', 'E').replace('South', 'S').replace('West', 'W').replace('north', 'N').replace('east', 'E').replace('south', 'S').replace('west', 'W').replace('by', 'b').replace(' ', '').replace('-', '')

            def input_number(msg, err_msg=None):
                while True:
                    try:
                        return float(input(msg))
                    except ValueError:
                        sys.exit("not a number")

            while True:
                headingCalib=input_number("input a number: ")
                print (headingCalib, end=' ')
                name = calcPoint(headingCalib,32) #degrees heading, points of compass 8,16 or 32)
                print (name, end=' ')
                shortName = getShortName(name)
                print (shortName)

4
এই উত্তরটি গল্ফ করার কোনও প্রয়াস দেখায় না এবং তাই চ্যালেঞ্জের গুরুতর প্রতিযোগী হিসাবে এটি মুছে ফেলার বিষয় নয়
পিপ্পারি

ফেয়ার পয়েন্ট - আমি এখন গল্ফ করার চেষ্টা পোস্ট করেছি।
টনি শুভউইন

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

ধন্যবাদ জো, আমি আবার সংস্করণ আপডেট করেছি। আমি সব পেয়েছি?
টনি শুভউইন

কার্ডিনালগুলির জন্য একটি অভিধানের পুনঃব্যবহার করা আরও ভাল। এখন ধারণার বাইরে। আশা করি যোগ্যতা অর্জনের পক্ষে যথেষ্ট?
টনি গুডউইন
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.