জলদস্যু ট্রেজার


18

জলদস্যুদের দ্বারা লুকানো কোনও ধন খুঁজে পাওয়া সত্যিই সহজ। আপনার যা প্রয়োজন তা হ'ল মানচিত্র is এটি বহুলভাবে জানা যায় যে জলদস্যুরা হাতের সাহায্যে মানচিত্র আঁকেন এবং অ্যালগরিদমকে নিম্নলিখিত উপায়ে একটি স্থান খুঁজতে বর্ণনা করেন: "একাকী খেজুর গাছের কাছে দাঁড়াও, 30 টি ধাপ বনের দিকে, 15 হ্রদের দিকে, ..."

এই জাতীয় রুট দিয়ে ভ্রমণ একটি দৃশ্যাবলী দেখার জন্য একটি দুর্দান্ত সুযোগ ... তবে আজকাল কারও কাছে এর জন্য সময় নেই। এজন্য ধনতল সন্ধানকারীরা আপনাকে এমন একটি প্রোগ্রাম লিখতে বলেছেন যা কোনও প্রদত্ত মানচিত্র ব্যবহার করে কোনও ধনীর সঠিক অবস্থান নির্ধারণ করতে পারে।


ইনপুট

ইনপুটটিতে একাধিক নির্দেশাবলীর সমন্বয়ে <Direction> <Distance>কমা দিয়ে আলাদা করা হয় (যেগুলির প্রত্যেকটি একটি সাদা স্থান অনুসরণ করে)।

দিকনির্দেশ নিম্নলিখিতগুলির মধ্যে একটি:
N- উত্তর, S- দক্ষিণ, E- পূর্ব, W- পশ্চিম,
NE- উত্তর-পূর্ব, NW- উত্তর-পশ্চিম, SE- দক্ষিণ-পূর্ব, SW- দক্ষিণ-পশ্চিম।

দূরত্ব একটি পূর্ণসংখ্যা (1000 1) হয়।

আউটপুট

ফল হ'ল স্থানাঙ্কগুলি যেখানে আপনি কমা এবং একটি সাদা স্থানের সাথে পৃথক করে তিনটি দশমিক স্থান নির্দেশাবলী শেষ করে শেষ করেন। শুরুর অবস্থানের শূন্য স্থানাঙ্ক রয়েছে (0, 0)।

প্রথম স্থানাঙ্ক হয় এক্স (পূর্ব মানে স্থানাঙ্ক শূন্য কম, ওয়েস্ট মানে শূন্য চেয়ে বড়)।
দ্বিতীয় তুল্য হয় ওয়াই (উত্তর উপায়ে আরো শূন্য থেকে দক্ষিণ মানে কম শূন্য থেকে)।


উদাহরণ

1। N 3, E 1, N 1, E 3, S 2, W 1

    3.000, 2.000

2। NW 10

    -7.071, 7.071

3। NE 42, NW 42, SE 42, SW 42

    0.000, 0.000


উত্স (ইউক্রেনীয়) ইনপুট ফর্ম্যাটটি সেখানে আলাদা।


8
লোগোতে এটি করার জন্য বোনাস পয়েন্ট? ;)
পিটার টেলর 21

@ পিটার আউটপুট ফর্ম্যাটটি কঠোর ... তবে আমরা দেখতে পাচ্ছি যে লোকেরা ছবিটি পছন্দ করে কিনা: ডি
ওলেহ প্রিপিন

1
প্রথম উদাহরণ আউটপুট হওয়া উচিত -3.000, 2.000
লোজ্যাকার

ইউসিবি লোগো সহ আউটপুট ফর্ম্যাটটি পাওয়া যায় (print (word (form xcor 4 3) ",) (form ycor 4 3))। তবে আমি নিশ্চিত না যে ইনপুট পার্সিং করা কত সহজ হবে।
পিটার টেলর

@ লাউজ্যাকার হ্যাঁ, ধন্যবাদ আসলে, ইনপুটটি ভুল ছিল।
ওলেহ প্রিপিন

উত্তর:


7

রুবি 1.9, 175 171 162 153 130 120 117

l=0
gets.scan(/(\w+) (\d+)/){|d,n|l+=n.to_i*?i.to_c**%w[E NE N NW W SW S SE].index(d).quo(2)}
puts'%.3f, %.3f'%l.rect

?i.to_c1.i-4 বাইটের জন্য সংক্ষিপ্ত করা যেতে পারে ।
মেগাটম

3

হাস্কেল (২৯১)

import Text.Printf
d=sqrt(0.5)
f"N"n(x,y)=(x,y+n)
f"S"n(x,y)=(x,y-n)
f"E"n(x,y)=(x+n,y)
f"W"n(x,y)=(x-n,y)
f[a,b]n(x,y)=(s,t)where(s,_)=f[b](d*n)(x,y);(_,t)=f[a](d*n)(x,y)
p[]=(0,0)
p(a:b:c)=f a(read b::Float)$p c
s(a,b)=printf"%.3f, %.3f"a b
main=getLine>>=putStrLn.s.p.words.filter(/=',')

প্যাটার্ন গার্ডগুলি ব্যবহার করতে চ এর সংজ্ঞা কীভাবে পরিবর্তন করা যায়? তাদের কাছে লাইন ব্রেকের প্রয়োজন নেই এমন চমৎকার সম্পত্তি রয়েছে এবং এক্ষেত্রে আরও বংশবৃদ্ধি হওয়া উচিত। এছাড়াও, ইন্টারঅ্যাক্ট ব্যবহার করুন।
FUZxxl

3

সি 99 (319 টি বর্ণ)

#define B ;break;
#include<math.h>
#include<stdio.h>
float x,y,w,z,j;int
main(void){int
k;char
c[3];while(scanf("%s%d,",c,&k)==2){j=k;w=1;switch(c[1]){case'E':w=3;default:w-=2;j=sqrt(k*k/2)B
case
0:w=z=0;}switch(*c){case'N':z=1
B
case'S':z=-1
B
case'E':w=1
B
default:w=-1;}x+=w*j;y+=z*j;}printf("%5.3f, %5.3f\n",x,y);}

ইনপুট ইন stdin, আইডোন এ পরীক্ষা চালানো :)


3

পাইথন, 158 154 150 চর

p=0j
for s in raw_input().split(','):c,d=s.split();v=sum(dict(N=1j,E=1,S=-1j,W=-1)[x]for x in c);p+=v*int(d)/abs(v)
print'%.3f, %.3f'%(p.real,p.imag)

আপনার প্রকৃতপক্ষে 158 টি অক্ষর রয়েছে, 158 নয়
লোজ্যাকার

আমি অনুমান করি যে আমার দরকার নেই তবে আমি সাধারণত পিছনের নিউলাইনটি গণনা করি।
কিথ র্যান্ডাল

[157] লাইন 1: D=dict(N=1j,E=1,S=-1j,W=-1)[153] লাইন 2: jআসলেই দরকার? [152] লাইন 3-4: আপনি যদি পাইথন 3, raw_input→ এ স্যুইচ করেন inputএবং আপনার পরে বন্ধনী ব্যবহার করতে হয় তবে আপনি print2 টি অক্ষর সংরক্ষণ করেন [150]
ওলেহ প্রাইপিন

1
@ ব্ল্যাকস্পেরিট: ডিক অপ্টিমাইজেশনের জন্য ধন্যবাদ। সমস্ত দিকনির্দেশনা ই এবং ডাব্লু ক্ষেত্রে জে 2 নং লাইনের প্রয়োজন, ফলস্বরূপ পিটির জন্য .realএবং .imagকাজ করার জন্য জটিল হওয়া দরকার ।
কিথ র্যান্ডাল

1
ইনট ক্লাসে দু'জন imagএবং real
অ্যাটর্স রয়েছে

3

জাভাস্ক্রিপ্ট, 179 164 170 168 158 156 153 অক্ষর

prompt(X=Y=0).replace(/(N|S)?(.)? (\d+)/g,
        function(m,y,x,n){
            n/=x&&y?Math.SQRT2:1
            Y+=y?y<'S'?n:-n:0
            X+=x?x<'W'?n:-n:0
        })
alert(X.toFixed(3)+', '+Y.toFixed(3))
  • 170: স্থির নির্ভুলতার সমস্যা
  • 168: এর (E|W)সাথে রেগেক্সে প্রতিস্থাপন করা হয়েছে(.)
  • 158: পরিবর্তনশীল সঙ্গে ফাংশনে পুনরাবৃত্ত যুক্তি প্রতিস্থাপন d
  • 156: nনতুন ভেরিয়েবলের পরিবর্তে পুনরায় ব্যবহৃত হয়েছেd
  • 153: ব্যক্তিগতভাবে, আমি মনে করি এই সম্পাদনাটি এটি দশগুণ খারাপ করে তোলে, তবে এটি তিনটি অক্ষর ছোট। এটি এমন মানহীন আচরণের ভিত্তিতে যা আপনি RegExp অবজেক্টগুলিকে ফাংশন হিসাবে কল করতে পারেন: এর /./g('string')মতো /./g.exec('string'):

    for(p=prompt(X=Y=0),R=/(N|S)?(.)? (\d+)/g;[,y,x,n]=R(p)||0;X+=x?x<'W'?n:-n:0)n/=x&&y?Math.SQRT2:1,Y+=y?y<'S'?n:-n:0;alert(X.toFixed(3)+', '+Y.toFixed(3))


1
দুর্ভাগ্যক্রমে, q = .707 রাউন্ডিং ত্রুটির কারণে "NW 10" ইনপুট ব্যর্থ হয়েছে; আমি মনে করি আপনার "কিউ = ম্যাথ.এসকিউআরটি 1_2" দরকার যা এতে 8 টি অক্ষর যুক্ত করে। অন্যদিকে, আপনি "(ই | ডাব্লু) কে প্রতিস্থাপন করতে পারেন?" সঙ্গে "(.)?" যেহেতু আপনি ইতিমধ্যে উত্তর / দক্ষিণ / উভয়ই প্রতিষ্ঠিত করেছেন এবং ইনপুটটি সুসংহত হয়েছে, 2 টি অক্ষর সাশ্রয় করে।
ডকম্যাক্স

রেগেক্স বিটের জন্য ধন্যবাদ। যথার্থতার ইস্যু হিসাবে, আমি এর পরিবর্তে এসকিউআরটি 2 ব্যবহার করেছি এবং গুণকে বিভাগে স্যুইচ করেছি।
কেসি চু

2

হাস্কেল, ১৯৯ টি চরিত্র

import Text.Printf
import Complex
i=0:+(1::Float)
e 'S'= -i
e d=i^mod(fromEnum d-1)4
g p(d:s:t)=g(p+(signum.sum.map e)d*(fst(reads s!!0):+0))t
g(x:+y)[]=printf"%.3f, %.3f"x y
main=interact$g 0.words

1

স্কালা ( 367 , 332)

var (x,y,s)=(.0,.0,.7071);args.mkString(" ").split(",").foreach{m=>val a=m.trim.split(" ");var (n,u,v)=(a(1).toInt,.0,.0);a(0) match{case "N"=>v=1;case "S"=>v= -1;case "E"=>u=1;case "W"=>u= -1;case "NW"=>{u= -s;v=s};case "NE"=>{u=s;v=s};case "SW"=>{u= -s;v= -s};case "SE"=>{u=s;v= -s}};x += n*u;y += n*v};printf("%1.3f %1.3f\n",x,y)

1

জাভা (459) (445) (402) (382) (363) (352)

import java.util.*;class
M{public
static void main(String[]a){double
x=0,y=0;Scanner
s=new
Scanner(System.in);s.useDelimiter("\\W+");while(s.hasNext()){String
d=s.next();double
z=Math.sqrt(d.length());int
w=s.nextInt();y+=(d.contains("N")?w:d.contains("S")?-w:0)/z;x+=(d.contains("E")?w:d.contains("W")?-w:0)/z;}System.out.format("%1.3f %1.3f",x,y);}}

স্টিডিন ইনপুট


1

পাওয়ারশেল, 178

$input-split','|%{,@{N=0,1
NE=($s=.707106781186548),$s
E=1,0
SE=$s,-$s
S=0,-1
SW=-$s,-$s
W=-1,0
NW=-$s,$s}[($a=-split$_)[0]]*$a[1]}|%{$x+=$_[0]
$y+=$_[1]}
'{0:N3}, {1:N3}'-f$x,$y

এটি সম্ভবত characters2 / 2 এর যথার্থতা হ্রাস করে 10 টি অক্ষর পর্যন্ত হারাতে পারে।



0

গ্রোভি (215)

x=0.0;y=0.0;args.join(' ').split(', ').each{d=it.split(' ');c=d[0]==~/../?Math.sqrt(2):1;s=d[1] as int;a=['N':1,'S':-1,'E':1,'W':-1];m=d[0]=~/N|S/;y+=m?a[m[0]]*(s/c):0;m=d[0]=~/E|W/;x+=m?s/c*a[m[0]]:0};print "$x,$y"

প্রোগ্রাম আর্গুমেন্ট হিসাবে ইনপুট পড়া। উদাহরণ:

groovy golf.groovy NW 10, SW 10, W 10


আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.