থর সে উড়ে!


21

আরে ... আহো ওখানে, ম্যাটিস! আনসারল থ 'মইনসেইল! স্টারবোর্ডে পূর্ণ! আহ্, তোর চুলের বাতাস লাগছে!

ঠিক আছে, আমার হৃদয় ... আমার দরকার 'কিছুটা ইয়ার কোডিন' দক্ষতা! আমার ক্রুরা আমার চেয়ে অনেক বেশি আধুনিকী ... আমি তখনও কমপাসের 'পয়েন্ট' পয়েন্টের চেয়ে বেশি হয়ে উঠছি ( আরও তথ্যের জন্য এখানে দেখুন, আরর ...) যখন ক্রু সবসময় আমাকে 'হেডিন' রাখে .. আমি এই রূপান্তরকে 'কনভার্টিনের একটি সহজ উপায়' হতে চাই এবং তারা যে বিষয়টি বুঝতে সক্ষম হতে পারে তাতে একটি হেডিন বলে!

আমার যা দরকার তা হ'ল কোড থা 'হ'ল তাকিন' এমন একটি সংখ্যার ইনপুট ( 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 সমেতের সমষ্টি হতে পারে এমন সমীকরণ যেখানে ' থা 'হতে হবে তা সন্তুষ্ট করুন' for

দুটি বিধিনিষেধ ...

1) আমি আপনাকে 'স্টোরিনের জন্য অ্যারের ব্যবহার করতে চাই না' পয়েন্টগুলির জন্য বা 'হেডিন'স ... থা' চেইটিন হও ', স্যার, আপনি আমাকে ব্লুন্ডারবাসের স্বাদ পাবেন ... এটি হয়েছে t 'গণনা করা, ঠিক' মত 'পুরানো দিন! আরেরে!

2) সংক্ষিপ্ততম কোডটি জিতেছে, বা আমি মেকিন হয়ে যাব 'তুমি হাঁটা তক্তা' ... আরআর!


10
50 '(আপোসট্রোফ) একক প্রশ্নে। সালাম জানানো! : ডি
ওয়াসি

জাভাস্ক্রিপ্টে কোনও কী ব্যবহার করছেন সংখ্যা কীগুলি প্রতারণা করে? মানে ইয়াহার! চেইটিন হও, ল্যান্ডলবার?
টিম সেগুইন

1
এটি "0 এবং 31 সমেতের মধ্যে পূর্ণসংখ্যা হওয়া উচিত" না?
নয়েলহোফ

আপনি ঠিক বলেছেন! আপডেট হয়েছে ... :)
ওয়েলওয়েস্ট

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। ধন্যবাদ @ ডম হেস্টিংস

সম্পাদনা: 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
আমি নিশ্চিত যে এটি "সবচেয়ে সংক্ষিপ্ত কোড জিততে" নিয়মে আমাকে সহায়তা করে নি, তবে যেহেতু আমি যাইহোক জাভা ব্যবহার করছি ...
জিন ব্রুকস্ট্র্রা

আমি এই পদ্ধতির প্রশংসা করছি, যদিও আপনি Arrays.asListকমান্ডটি ব্যবহার করছেন , আমার জাভা অজ্ঞতার জন্য আমাকে এখানে ক্ষমা করুন, কিন্তু এটি কোনও স্টোরেজ অ্যারে ব্যবহার করে না? অথবা এটি কোনও তালিকা আকারে অ্যারে প্রবর্তন করার একটি লুক্কায়িত উপায়? ;)
ওয়েলওয়েস্ট

@ জিন, আপনি কি আমাকে দেখাতে পারবেন যদি আপনি সেখানে সম্মতি জানাতে এবং থা কোডটি কমিয়ে দিতে পারেন তবে আপনি কী পেতে পারেন?
ওয়েলওয়েস্ট

2
@ এলিসেড'আন্নুজিও অ্যারেটি ছড়িয়ে দিয়েছিল, আমি ভেবেছিলাম আপনি কেবলমাত্র নাম এবং শিরোনামের অন্তরগুলির মধ্যে একটি ম্যাপিং সংরক্ষণ করতে এটি ব্যবহার করতে পারছেন না। এই অ্যারে (তালিকা) কেবলমাত্র আসল নাম সংরক্ষণ করে। তবে যদি এটি নিয়মের বাইরে থাকে তবে আমি কল্পনা করি switchপরিবর্তে কোনও বিবৃতি ব্যবহার করার জন্য এটি পরিবর্তন করা যেতে পারে (দুর্ভাগ্যক্রমে কয়েকটি অতিরিক্ত অক্ষর সহ)। ওহ এবং একই কোডের কনডেন্সড সংস্করণ যুক্ত হয়েছে। এটি আরও কীভাবে কাজ করে তা পরিবর্তনের মাধ্যমে আমি আরও ঝকঝকে ভাব করব a
জিন ব্রুকস্ট্র্রা

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)

এটি উইকিপিডিয়া পৃষ্ঠা অনুযায়ী মূলধন ব্যবহার করে এবং যে কোনও সংখ্যার জন্য কাজ করা উচিত।



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

ধন্যবাদ @ জিন


আমি এখানে @ বিভ্রান্ত হয়ে যাই হোক যাই হোক, যাইহোক, সেখানে স্ট্রিংয়ের লিবিয়াথনের 'থা' ব্যবহার কী হবে? ...
আরআর

এটি কম্পাস পয়েন্টগুলির নাম "গণনা" করে। এটি কোডের আকার হ্রাস করার একটি উপায়।
জিজ্ঞাসা করুন যাইহোক

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

পাঠযোগ্যতার জন্য চারটি নতুন লাইন যুক্ত হয়েছে।

সম্পাদনা: @ ডোম হেস্টিংসকে তিন বাইট কম ধন্যবাদ


আরে @ ননহ্নহোফ, দেখতে বেশ বিস্তৃত দেখাচ্ছে! আপনি ;শেষে আরও কিছু অক্ষর মুছতে sub pএবং স্যুইচ shiftকরতে পারেন pop
ডম হেস্টিংস

@ নোহলহফ আমি জানতাম না পার্ল তাদের উক্তিগুলিতে না থাকলে স্ট্রিং গ্রহণ করতে পারে? (পুনরায়: লাইন 1)
ওলি ওয়েস্ট

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