कम्पास के 32 बिंदुओं में से एक में डिग्री परिवर्तित करें


13

32-बिंदु कम्पास ... दिलचस्प है, कम से कम कहने के लिए।

छवि

विकिमीडिया कॉमन्स के माध्यम से डेनसेलोन 83 (खुद का काम) [ GFDL या CC-BY-SA-3.0 ]

आपकी चुनौती एक डिग्री माप लेना है, और इसे 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

सभी पूंजीकरण को संरक्षित किया जाना चाहिए, जैसा कि परीक्षण मामलों में है। दशमलव स्थानों की अधिकतम संख्या 2 है। सभी इनपुट नंबर 0 से अधिक या बराबर होंगे, और 360 से कम होंगे। यदि एक दशमलव बिंदु मौजूद है, तो दोनों तरफ अंक होंगे (आपको संभालना नहीं है .1या 1.)।

यह , इसलिए बाइट्स में सबसे छोटा कोड जीत जाता है।


@ हेमस्टेस्ट हम्म, यह एक सरणियों की अनुमति देता है, अलग-अलग पूंजीकरण होता है, और कोई "बीच में" नहीं होता है, लेकिन मैंने ध्यान नहीं दिया (संभवतः ... दिलचस्प शीर्षक: पी)। मैं क्या मैं ... यह अलग पर्याप्त बनाने के लिए क्या कर सकते हैं देखेंगे
दरवाज़े

3
@WallyWest, अब आपको संक्षिप्त नाम भी आउटपुट करना होगा। अन्य सभी अंतरों के साथ, यह एक गैर-डुबकी बनाने के लिए पर्याप्त होना चाहिए। (ओह, यह भी इस एक डैश भी है)
दरवाज़े

@AllyWest आपके पिछले प्रश्न का "R" में कोई उत्तर नहीं है ("C" में कोई भी नहीं थे!) मुझे उम्मीद है कि हम इस बार, शिपयम्स में कुछ देखेंगे!
लेवल रिवर सेंट

अधिक मज़ा होता अगर -360 से 360 डिग्री (नकारात्मक मतलब एंटी-क्लॉकवाइज) और एक बोनस से इनपुट होते थे!
मुकुल कुमार

एक चुनौती की तलाश में नहीं लोगों के लिए, आसान समाधान संभव आउटपुट खोजना है जिसके लिए लुकअप टेबल कोण <-> नाम का उपयोग करके इनपुट कोण से दूरी न्यूनतम है।
Rivenfall

जवाबों:


4

पर्ल, 250 236 231 188 187

संपादित करें: समरूपता के दोहन से कुछ बाइट्स (जैसा कि मैंने @bazzargh समाधान में देखा है)

+ संपादित करें: और कुछ बुरी चाल ...

+ संपादित करें : मैं जहां से शुरू किया था (सूची के साथ काम कर रहा हूं, स्ट्रिंग नहीं), और अधिक समरूपता का शोषण करना = 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संशोधक की वजह से आवश्यक है ।


आपके पास अपने कोड में एक टाइपो है: खट्टा दक्षिण होना चाहिए (दूसरा कथन जो s / b / से
RononDex

उन पहले 3 regexps को y / NS / SN / द्वारा प्रतिस्थापित किया जा सकता है; 10 वर्णों के लिए
17

@bazzargh, हाँ, और इतना ही नहीं ;-)
user2846289

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();

Ungolfed Javascript इस फिडेल पर पाई जा सकती है: http://jsfiddle.net/AezL3/11


+1 अच्छा है, लेकिन सावधान रहें: "सभी पूंजीकरण को संरक्षित किया जाना चाहिए, जैसा कि परीक्षण मामलों में है।"

@ कौन सा परीक्षण मामला पूंजीकरण की जाँच में विफल रहता है? इसके लिए धन्यवाद, btw। यह मेरे वेब इंटरफेस मैं लिख रहा हूँ के लिए काम में आया।
स्टीवन लू

वैसे, यह 355 डिग्री से 360 डिग्री तक मरता है। फिक्स आसान है। बस calcPoint(32)वही करें जो 0 करता है, इसलिए आप ऐसा कर सकते हैं %32
स्टीवन लू

@StevenLu मुझे यह पता लगाने में कुछ समय लगा कि आपका क्या मतलब है, लेकिन यह लाइन इस var name = calcPoint(input % 32);काम को
अंजाम देती है

4

हास्केल 415 372 347 330 317 304 301C

@ VadimR's (और सममिति के पीछे!) जैसे समाधान पर धर्मान्तरित। उपयोग: 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)

3 और चर गए, धन्यवाद @ शशि।


drop 1पूंछ के समान है। इसके अलावा अगर मैं गलत नहीं हूँ तो आप e l@(x:_)=x:tail$d lअभी भी एक और चार दाढ़ी बनाने के लिए कर सकते हैं ।
शियोना

विश्वास नहीं कर सकता कि मैं चूक गया। धन्यवाद!
बजरगह

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)})

इसे ऑनलाइन आज़माएं!

यह मुझे सद्भाव के उत्तर के कुछ गोल्फ के बाद मिला है ; TIO लिंक एक टिप्पणी के लिए बहुत लंबा होने के कारण अपने स्वयं के उत्तर पर पोस्ट किया गया। यदि वह ऊपर दिए गए अपने उत्तर को अपडेट करना चाहता है, तो मैं इस उत्तर को हटा दूंगा।

मैं यह मान रहा हूं कि पूर्ण कार्यक्रम के बजाय एक समाधान के रूप में एक कार्य प्रस्तुत करना स्वीकार्य है। यदि नहीं, तो यहां 426 बाइट्स पर एक पूरा कार्यक्रम है।

मुझे उम्मीद है कि अभी भी बहुत कुछ किया जा सकता है b

संपादित करें: 44 बाइट्स से बाहर निकले, राजसी वालरस के सौजन्य से। अभी भी ऐसा महसूस नहीं होता कि bकिया जा रहा है।

EDIT2: dicts खोल के बजाय का उपयोग करके एक और 14 बंद मुंडा keys()और items()


-1

पायथन, 2103 1647 1103 1034 924 889 848 बाइट्स

बहुत देर से, मुझे पता है। चुनौती के लिए धन्यवाद, मैं अपने पीआई के साथ हवा की दिशा के लिए एक मैग्नेटोमीटर स्थापित कर रहा हूं, और इस तरह के मौसम पूर्वानुमान एल्गोरिदम को खिलाने के लिए इस तरह के कम्पास समाधान का 16 बिंदु चाहता था। मेरा सभी कोड पाइथन में है, इसलिए यहां पहले से ही पाइथन में पोस्ट किए गए जावास्क्रिप्ट सॉल्यूशन का वर्जन है, लेकिन एक अतिरिक्त ट्विस्ट के साथ, जिसे आप वेरिएबल j पर कम्पास के 32, 16, या 8 पॉइंट्स में से किसी एक को निर्दिष्ट कर सकते हैं और मैंने ऑफसेट को बदल दिया है अंकों की संख्या के आधार पर, इससे पहले कथन में degHead करें। मैंने प्रश्न के मामले की आवश्यकताओं को पूरा करने के लिए एक संशोधित नाम बदलकर इस्तेमाल किया (और इस्तेमाल किए गए चर जिन्हें मैं शब्दों को भ्रष्ट किए बिना नाम बदल सकता था!) ​​का उपयोग किया।

मुझे पता है कि यह जीत नहीं होगी, क्योंकि पायथन अधिक चिंताजनक है, और इसलिए मैं।

लघु संस्करण:

  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
यह जवाब गोल्फिंग में कोई प्रयास नहीं दिखाता है और इसलिए इसे हटाने के लिए चुनौती के लिए गंभीर दावेदार के रूप में नहीं है
pppery

उचित बिंदु - मैंने अब गोल्फिंग में प्रयास पोस्ट किया है।
टोनी गुडविन

आपको अपनी अधीनता में इतना आक्रोश क्यों है? यह आपके उत्तर का हिस्सा प्रतीत नहीं होता है, इसलिए मुझे इसके बारे में जानकारी नहीं है। आप इसे बहुत अधिक गोल्फ कर सकते हैं, बस सभी अतिरिक्त व्हाट्सएप को हटाकर, चर नामों और घोषणाओं को छोटा कर सकते हैं, और निरर्थक चर को पूरी तरह से हटा सकते हैं
जो राजा

धन्यवाद जो, मैंने संस्करण को फिर से अपडेट किया है। क्या मुझे यह सब मिला?
टोनी गुडविन 22

कार्डिनल्स के लिए एक शब्दकोश का बेहतर इस्तेमाल किया। अब विचारों से बाहर। उम्मीद है कि क्वालीफाई करने के लिए पर्याप्त है?
टोनी गुडविन
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.