थार वह उड़ गया!


21

बेनाम: Arr ... बेनाम: वहाँ अहो, मुझे maties! अनफ़रेल था 'मेनसेल! स्टारबोर्ड से भरा हुआ! आह, लगता है कि 'yer बालों में हवा!

सही है, मुझे दिल से ... मुझे जरूरत है 'थोड़ा सा येर कोडिन' कौशल! मुझे चालक दल मेसफेल से अधिक आधुनिक माना जाता है ... मैं अभी भी 'वें' कम्पास के 'वें' अंक देख रहा हूं ( अधिक जानकारी के लिए यहां देखें , Arrr ...), जबकि मेरे चालक दल हमेशा 'एक हेडिन' हैं। । मैं चाहते हैं 'कन्वर्टिन का एक आसान तरीका' इस दुविधा को वे एक हेडिन कहते हैं, जिसे मैं समझने में सक्षम हूं, अर्र!

मुझे क्या जरूरत है 'कोड था' एक नंबर का इनपुट 'बी टेकिन' हो सकता है (दशमलव ठीक हैं) ऐसा था ' 0 <= the headin' < 360और यह स्पिटिन' आउट थ 'उत्तर के रूप में वें' निकटतम कम्पास बिंदु 'होगा! अरे!

यहाँ कुछ उदाहरण हैं:

> heading 0.1

North

> heading 11.25

North by East

> heading 22.7

North Northeast

> heading 44.99

Northeast

> heading 91

East

अब, यदि आप 'हेडिन' हो तो गिविन '' ऐसा हो कि यह बिल्कुल दो कम्पास बिंदुओं के मध्य में गिर जाए, डॉन 'यू फ्रेट्टिन', मुझे हार्दिक ... मुझे उम्मीद है कि 'थ' कोड को थूक देना होगा Between <point 1> and <point 2>, जैसे heading 5.625कहेंगे कि Between North and North by East यह केवल एक हेडिन के लिए होता है 'था' संतुष्ट होना 'समीकरण' H = 5.625 + 11.25(N)जहां एच वें 'हेडिन' हो और एन 0 और 31 के बीच पूर्णांक हो ...

दो प्रतिबंध '...

1) मैं नहीं चाहता हूँ कि आप 'पॉइंट्स के लिए स्टॉरिन' यार डेटा के लिए सरणियों का उपयोग करें या वें 'हैडिन ... थ' चिटिन हो ', सर,' यू गेटिन 'मी टू ब्लंडरबस। " t 'पुराने दिनों की तरह, जूस' की गणना करें! अरे!

2) सबसे छोटा कोड जीतता है, या मैं makin 'चलता हूं' तख्ती ... Arrr!


10
'एक सवाल में 50 (एपोस्ट्रोपे)। सलाम! : डी
वासि

क्या एक वस्तु का उपयोग करना जावास्क्रिप्ट में संख्यात्मक कुंजियों के साथ धोखा है? मेरा मतलब है विएर्र! क्या यह चेटिन है ''
टिम सेगिन

1
क्या यह "N 0 और 31 समावेशी के बीच पूर्णांक नहीं होना चाहिए"?
nwellnhof

@nwellnhof तुम सही हो! अपडेट किया गया ... :)
वैल्ली वेस्ट

1
मुझे लगता है कि आपको एक कोड गोल्फ लॉन्च करना चाहिए, जहां लक्ष्य अपने प्रश्न का अंग्रेजी में अनुवाद करना है।
सर्गिओल

जवाबों:


6

पर्ल 5.10 प्रतिस्थापन का उपयोग करते हुए, 231 228 226 224

@c=(north,east,south,west);
@q=qw(P PbR P-Q QbP Q QbR R-Q RbP);
sub p{$j=$_[0]>>3&3;$_=$q[7&pop];s/P/$c[$j]/;s/Q/$c[$j+1&2]$c[$j|1]/;s/R/$c[$j+1&3]/;s/b/ by /;ucfirst}
$a=<>/11.25+.5;
say$a==int$a&&'Between '.p($a-1).' and ',p$a

पठनीयता के लिए चार नए समाचार जोड़े गए।

संपादित करें: 2 से अधिक बाइट्स का उपयोग करके गोल्फिंग करेंpop । धन्यवाद @Dom हेस्टिंग्स

संपादित करें: 2 बाइट्स का उपयोग कमqw()


22

मैं इस पर बहुत ज्यादा समय बिताता हूँ, यहाँ खजाने की खोज होती है, लेकिन यहाँ जावा में एक समाधान है :

public class Aaaaarrrr {

    public static void main(String[] aaarrrgs) {

        float heading = Float.parseFloat(aaarrrgs[0]);

        final List<String> points = Arrays.asList("North",
                "North by east", "North-northeast", "Northeast by north",
                "Northeast", "Northeast by east", "East-northeast",
                "East by north", "East", "East by south", "East-southeast",
                "Southeast by east", "Southeast", "Southeast by south",
                "South-southeast", "South by east", "South", "South by west",
                "South-southwest", "Southwest by south", "Southwest",
                "Southwest by west", "West-southwest", "West by south", "West",
                "West by north", "West-northwest", "Northwest by west",
                "Northwest", "Northwest by north", "North-northwest",
                "North by west");


        float cp = heading / 360.0f * 32.0f;
        if (cp % 1 == 0.5f)
             System.out.print("Between " + points.get((int)Math.floor(cp)) + " and ");

         System.out.println(points.get(Math.round(cp)));

    }
}

संपादित करें यदि मैं उपरोक्त कोड को कम करता हूं और इसे वास्तविक रूप से बदसूरत बना देता हूं तो यह बन जाएगा:

जावा, 770 वर्ण

import java.util.*;class A{public static void main(String[] r){List<String> l=Arrays.asList("North","North by east","North-northeast","Northeast by north","Northeast","Northeast by east","East-northeast","East by north","East","East by south","East-southeast","Southeast by east","Southeast","Southeast by south","South-southeast","South by east","South","South by west","South-southwest","Southwest by south","Southwest","Southwest by west","West-southwest","West by south", "West","West by north","West-northwest","Northwest by west","Northwest","Northwest by north","North-northwest","North by west");float c=Float.parseFloat(r[0])/360.0f*32.0f;if (c%1==0.5f) System.out.print("Between "+l.get((int)Math.floor(c))+" and ");System.out.println(l.get(Math.round(c)));}}

24
+1 के लिएaaarrrgs
डेंको डर्बीक

3
मुझे यकीन है कि "कम से कम कोड जीत" नियम पर मेरी मदद नहीं की है, लेकिन जब से मैं जावा का उपयोग कर रहा हूँ ...
Jeen Broekstra

मैं इस दृष्टिकोण की प्रशंसा करता हूं, हालांकि आप Arrays.asListकमांड का उपयोग कर रहे हैं , मुझे अपने जावा अज्ञान के लिए यहां क्षमा करें, लेकिन क्या वह स्टोरेज ऐरे का उपयोग नहीं कर रहा है? या यह एक सूची के रूप में सरणी को पेश करने का एक डरपोक तरीका है? ;)
वैलीवेस्ट

@ जीन, क्या आप मुझे दिखा सकते हैं कि आप मिल सकते हैं, अगर आप वास्तव में सम्मान करते हैं और वहां थाह कोड कम करते हैं?
वैलेस्ट

2
@ Eliseod'Annunzio ने आर्ट को रिट किया, मुझे लगा कि आप केवल इसका मतलब है कि मैं इसे नाम और हेडिंग अंतराल के बीच मैपिंग स्टोर करने के लिए उपयोग नहीं कर सकता। यह सरणी (सूची) केवल वास्तविक नामों को संग्रहीत करता है। लेकिन अगर यह नियमों से परे है, तो मुझे लगता है कि इसे switchबदले में (कुछ अतिरिक्त वर्णों के साथ, दुर्भाग्य से) बयान का उपयोग करने के लिए बदला जा सकता है । एक ही कोड के ओह और गाढ़ा संस्करण जोड़ा गया। मुझे लगता है कि यह कैसे काम करता है वास्तव में बदलकर इसे और सीटी देने के बारे में एक सोच होगी।
जेन ब्रोकेस्ट्रा

6

पायथन, 264

n='north'
e='east'
s='south'
w='west'
b=' by '
def f(H):x,y,z=(n,e,s,w,e,s,w,n,n+e,s+e,s+w,n+w)[int(H%360/90)::4];return(x,x+b+y,x+'-'+z,z+b+x,z,z+b+y,y+'-'+z,y+b+x)[int(H%90*4/45)].capitalize()
h=input()+5.625
print h%11.25and f(h)or'Between '+f(h-1)+' and '+f(h)

यह विकिपीडिया पृष्ठ के अनुसार पूंजीकरण का उपयोग करता है और किसी भी संख्या के लिए काम करना चाहिए।


1
Arrr, कि वहाँ एक समारोह का एक चतुर उपयोग हो ...
WallyWest

4

अर्र पायथन, 336

A,R,r=int,input()/360.*32,' by #South#north#West#East#south#North#west#east#-#/#Between#and'.split('#')
a=''.join(r[A(c,16)]for c in'6A608A6928A6802A68A6808A4928A402A4A405A4958A1808A18A1805A1958A108A1A107A1957A1705A17A1707A3957A305A3A302A3927A6707A67A6702A6927A607').split('/')
if R%1==.5:print r[11],a[A(R)],r[12],
print a[A(round(R))]

धन्यवाद @ रानी


मैं यहाँ थोड़ा भ्रमित हूँ @AsksAwayway, वहाँ एक स्ट्रिंग के लेविथान का 'उपयोग' क्या होगा? ... अर्रर ...
वल्लीवेस्ट

यह कम्पास बिंदुओं के नामों की "गणना" करता है। यह कोड आकार को कम करने का एक तरीका है।
अक्सअनीवे

2

पर्ल 5.10, 262 257 254

कुछ पायथन समाधानों में से एक के समान:

$n=north;$e=east;$s=south;$w=west;
@d=($n,$n.$e,$e,$s.$e,$s,$s.$w,$w,$n.$w,$n);
sub p{$j=pop;$i=$j>>2;ucfirst(($d[$i],"$d[$i] by $d[$i+2&~1]","$d[$i+1&~1]-$d[$i|1]","$d[$i+1] by $d[$i&~1]")[$j&3])}
$a=<>/11.25+.5;
say$a==int$a&&'Between '.p($a-1).' and ',p$a

पठनीयता के लिए चार नए समाचार जोड़े गए।

संपादित करें: @ बाइट हेस्टिंग्स के लिए तीन बाइट्स कम धन्यवाद


हे @nwellnhof, बहुत व्यापक लग रहा है! आप ;के अंत में हटाने sub pऔर स्विच shiftकरने के लिए कुछ और चार्ट बचा सकते हैं pop
डोम हेस्टिंग्स

@nwellhoff मुझे नहीं पता था कि पर्ल उनके बिना उद्धरणों में तार को स्वीकार कर सकते हैं? (पुन: पंक्ति १)
वैलीवेस्ट

1
@ Eliseod'Annunzio पर्ल गैर-सख्त मोड में उद्धरण के बिना तार को स्वीकार करता है यदि वे फ़ंक्शन नाम या आरक्षित शब्दों के साथ नहीं टकराते हैं।
nwellnhof
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.