আমার রোবট ল্যাব থেকে পালিয়ে গেছে!


13

আমার রোবটটি কোনওভাবে সংক্ষিপ্তভাবে প্রচারিত হয়েছে এবং এলোমেলোভাবে আমার ল্যাব থেকে কোথাও চলেছে!

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

উদাহরণস্বরূপ ডেটা সর্বদা দুটি সংখ্যার পাঁচ সেট আকারে আসবে।

12:234,-135:47,-68:230,140:324,127,87

আপনার মিশন, গল্ফাররা হ'ল) ​​রোবটের ক্রান্তিকর রানটি অনুকরণ করুন এবং পাঁচটি সংখ্যার আকার প্রদর্শন করে ক্রম ঘুরিয়ে দিন a1:d1,a2:d2,a3:d3,a4:d4,a5:d5যেখানে a(এন) ক্লকওয়াইজ এঙ্গেল (ডিগ্রীতে) এমনভাবে রয়েছে যে -179<=a<=+180রোবটটি তার বর্তমান শিরোনাম থেকে ফিরে যাবে ( প্রথমদিকে শৌখিন দৌড়ানোর আগে এটি শূন্যের শিরোনামে থাকে এবং প্রথমবারের দিকে মোড় নেয়) এবং d(এন) পরবর্তী শিরোনাম পরিবর্তনের আগে পায়ে যে দূরত্ব চলে তা হ'ল এই জাতীয় 0<=d<=500পা; এবং খ) ল্যাব থেকে গণনা শিরোনাম (যা শূন্যের শিরোনামের মুখোমুখিও), পায়ে দূরত্ব (3 দশমিক স্থানে যথাযথতা উত্সাহিত করা হয়, আপনি যদি করেন তবে -5 বাইট) এবং ওরিয়েন্টেশন শিরোনাম (ডিগ্রীতে) আমার রোবটটি যেখানে মুখোমুখি হচ্ছে যখন এটি বন্ধ হয়ে গেছে।

সহজ উদাহরণ:

Data: 0:1,45:1,90:1,90:1,90:1
Heading: 0
Distance: 1
Orientation: -45

এলোমেলো টার্ন এবং দূরত্ব কেবল এলোমেলো। কোনও সেট মানকে কঠোর কোডিং করতে হয় না, আমাদের অবশ্যই কোডের মধ্যে এলোমেলোতা দেখতে হবে।

এলোমেলোভাবে সীমাবদ্ধতা: কোনও ঘড়ি বা তারিখ ভিত্তিক উল্লেখ নেই, randomকোডের মধ্যে আমাদের একটি নেটিভ রেফারেন্স দেখতে হবে । আপনি যখনই এই কোডটি চালান, এলোমেলোতা অবশ্যই প্রতিটি টার্ন-রান রাউন্ডের সাথে ঘুরিয়ে দেওয়ার সম্ভাব্য কোণগুলির 360 টির 1 টি দেখানোর সম্ভাবনা সহ নিজেকে উপস্থিত করতে হবে। সুতরাং রোবটটি এক মোড় থেকে--36 ডিগ্রি ঘুরে এবং তারপরে +157 ডিগ্রি ঘুরতে পারে, তারপরে +2 ডিগ্রির আরেকটি পালা -116 ডিগ্রি আরেকটি টার্ন এবং চূড়ান্ত টার্নে +42 ডিগ্রি একটি চূড়ান্ত টার্ন হতে পারে। প্রতিটি এলোমেলো কোণ উত্পাদন সহ কমপক্ষে 360 টি পৃথক মান অবশ্যই (-179 +180 ডিগ্রি সহ) অন্তর্ভুক্ত করা আবশ্যক।

দূরত্বের দৌড়ে বিধিনিষেধগুলি: একইভাবে সেট করা হয়েছে, রোবট চালাতে পারে এমন 501 সম্ভাব্য দূরত্ব রয়েছে (0 এবং 500 ফুট অন্তর্ভুক্ত), সুতরাং আমি রোবটের চলমান দূরত্ব নির্ধারণ করার সময় এলোমেলোতাও উপলব্ধ হওয়ার প্রত্যাশা করি। রোবটটি তাত্ত্বিকভাবে তার প্রতিটি রাউন্ডের সাথে 45, 117, 364, 27 এবং 6 ফুট চলতে পারে ...

আপনাকে দেওয়া ডেটা সর্বদা পূর্ণসংখ্যার মানগুলিতে থাকবে ... রোবটটি ডিগ্রির পূর্ণসংখ্যার রেঞ্জগুলিতে পরিণত হবে এবং দূরত্বের পূর্ণসংখ্যার ব্যাপ্তিতে চলবে। আউটপুট মানগুলি তবে ভাসমান হবে ...

এটি কোড-গল্ফ। সংক্ষিপ্ততম কোড জিতেছে ... এখন আমার রোবটটি সন্ধান করুন!

পিএস: আমার "3 দশমিক স্থানের যথাযথতা" এর প্রসঙ্গে, আপনি যদি শিরোনামটি (ডিগ্রিতে, তিন দশমিক জায়গার একটি ন্যূনতম স্থানে) সরবরাহ করতে পারেন এবং পায়ে একটি দূরত্ব (একটি নূন্যতম 3 দশমিক স্থানের সাথেও সঠিক) আপনি দিতে পারেন একটি -5 বাইট বোনাস পাবেন)


1
@ ইসমাইল মিগুয়েল এবং @ ওপ - আমি সম্ভবত এটির জন্য গুলি চালাতে যাচ্ছি, তবে আপনি নিজের উপায়ে সাইন -180 < a <= +180হিসাবে এএফএইকে অন্তর্ভুক্ত না করে ব্যবহার করতে পারলেন <না ...
জর্জ

1
@ জর্জিএইচ আপনি সঠিক বলেছেন, তবে ওয়ালি ওয়েস্ট যা বলছেন তা ভুল। "-179 <= a <= 180 সমস্ত 360 টি সংখ্যার পূর্ণসংখ্যার শিরোনামে ফলাফল" -> এটি ভুল কারণ 361 শিরোনাম রয়েছে। অথবা রোবটকে -180º এ যাওয়ার অনুমতি নেই?
ইসমাইল মিগুয়েল

1
@IsmaelMiguel এটা -180 ডিগ্রী যেতে অনুমতি দেওয়া হয় যে ঠিক একই হিসাবে 180. কারণ
Doorknob

1
এটা ভুল। + 180º মানে ঘড়ির কাঁটার দিকে অর্ধ-পালা। -180º মানে ঘড়ির কাঁটার বিপরীতে আধ ঘুরিয়ে দেওয়া (বা আপনি যেমন পছন্দ করেন তেমন ঘড়ির কাঁটার দিকে)। যদি পরিসীমা -179 <= a <= + 180 হয় তবে রোবটটি 180º ঘড়ির কাঁটার দিকে ঘুরিয়ে দিতে পারে না। কেন? সে আটকে যাবে -179º! সম্ভবত সে কারণেই তার শর্ট সার্কিট ছিল ...
ইসমাইল মিগুয়েল

1
@ ওয়াল্যুয়েস্ট আমি বোকা নই এবং আপনি কী বলতে চাইছেন তা আমি বুঝতে পেরেছি। আমি কেবল বলছি যে রেঞ্জটি ঠিক করা উচিত।
ইসমাইল মিগুয়েল

উত্তর:


2

পার্ল 6: 188 184 অক্ষর - 5 = 180 পয়েন্ট

$_=((-179..180).pick=>(^501).pick)xx 5;my$o;$/=([+] .map:{unpolar .value,$o+=.key/($!=180/pi)}).polar;say "Data: {.fmt("%d:%d",",")}
Heading: {$1*$!}
Distance: $0
Orientation: {$o*$!}"

সাদা স্থান সহ গল্ফ:

$_ = ((-179..180).pick => (^501).pick) xx 5;
my $o;
$/ = ([+] .map: {
    unpolar .value, $o += .key / ($!=180/pi)
}).polar;
say "Data: {.fmt("%d:%d", ",")}
Heading: {$1*$!}
Distance: $0
Orientation: {$o*$!}"

Ungolfed:

my &postfix:<°>  = */180*pi; # Deg → Rad
my &postfix:<㎭> = */pi*180; # Rad → Deg

my @data = ((-179..180).pick => (0..500).pick) xx 5;
say "Data: @data.fmt("%d:%d", ",")";

my $cum-angle = 0;
my $complex = [+] @data.map: {unpolar .value, $cum-angle += .key°}
my ($dist, $ang) = $complex.polar;

say "Heading: ",     $ang.㎭;
say "Distance: ",    $dist;
say "Orientation: ", $cum-angle.㎭;

এই জটিল সংখ্যার ডেটা সক্রিয় unpolar, রাখে তাদের যোগফল মধ্যে $complex, এবং তারপর হিসাবে পোলার স্থানাঙ্ক পায় $dist, $ang

ক্রমযুক্ত কোণটি $cum-angleসংগ্রহ করা হয় কারণ ল্যাবগুলির মধ্য দিয়ে প্রান্তিক কোণগুলি রোবটের সাথে সম্পর্কিত এবং কারণ আমাদের আউটপুটে রোবটের চূড়ান্ত কোণ প্রয়োজন।

নমুনা আউটপুট:

Data: -73:230,-144:453,-151:274,-52:232,88:322
Heading: -5.33408558001246
Distance: 378.74631610127
Orientation: -332

গল্ফটি ব্যবহার করার একমাত্র আসল কৌশলটি হ'ল এটি (মিস) পার্ল 6 এর বিশেষ 3 টি ভেরিয়েবলগুলিকে ভাল প্রভাবের জন্য ব্যবহার করে:

  • $! রেডিয়ানস ↔ ডিগ্রি জন্য ব্যবহৃত হয়
  • $_ডেটা ধারণ করে এবং যে কোনও কিছুই দেখতে একাকী মনে হয় তার .method()অর্থ আসলে $_.method()( map {…}ব্লকের অভ্যন্তর ব্যতীত যেখানে $_ডেটা তৈরির ক্ষেত্রে সংখ্যার জোড়ার মান গ্রহণ করা হয়)
  • $/অসম্পূর্ণ সংস্করণে যা আছে তা ধরে রাখে ($dist, $ang)$0এবং $1আসলে অর্থ $/[0], অর্থাত্ $dist, এবং $/[1], অর্থাত্,$ang

নিস! আপনি এখনও 188 থেকে 184 এর মতো নীচে যেতে পারেন:$_=((-179..180).pick=>(^501).pick)xx 5;my$o;$/=([+] .map:{unpolar .value,$o+=.key/($!=180/pi)}).polar;say "Data: {.fmt("%d:%d",",")} Heading: {$1*$!} Distance: $0 Orientation: {$o*$!}"
ম্যাথিউ রডিক

@ ম্যাথিউরডিক ওহ, খুব ভাল! ধন্যবাদ! দুর্ভাগ্যক্রমে, পরে স্থানটি .map:বাধ্যতামূলক
মউক

ওহ, আমি স্থান সম্পর্কে ভুল ছিলাম, শীতল :)
মউক

10

রুবি, 274 252 249 245 214 211 207 204 202 টি অক্ষর (-5 = 197)

কীভাবে পিএইচপি রুবিকে চর গণনাতে পরাজিত করেছিল ?! >: হে গল্ফ করার আরও কিছু উপায় অবশ্যই খুঁজে বার করতে হবে ...

সম্পাদনা: আমি পিএইচপি উত্তরটি পরাজিত করেছি, তবে যে ব্যবহারকারী এটি লিখেছিলেন তা করতে আমাকে সহায়তা করেছিল! তাকে উঁচুতে দাও; তিনি এর প্রাপ্য :- পি

আরেকটি সম্পাদনা: গাহ! তিনি আমাকে আবার পাস! আপনি খুব যোগ্য প্রতিপক্ষ, @ ম্যাথিউরডিক; অভিনন্দন, আমি আপনাকে জিততে হবে ;-)

P=(M=Math)::PI
puts"Data: #{([x=y=a=0]*5).map{a+=o=rand -179..e=180;x+=M.sin(b=a*P/e)*d=rand 500;y+=d*M.cos b;"#{o}:#{d}"}*?,}
Heading: #{M.atan(y/x)/P*-e+90}
Distance: #{M.hypot x,y}
Orientation: #{a}"

অবহেলিত কোড (এবং কিছুটা পুরানো সংস্করণ):

data = Array.new(5) { [rand(-179..180), rand(0..500)] }
puts "Data: #{data.map{|x|"#{x[0]}:#{x[1]}"}.join ?,}"
x, y, a = [0] * 3
data.each do |o, d|
    a += o
    x += Math.sin(a * Math::PI / 180) * d
    y += Math.cos(a * Math::PI / 180) * d
end
puts "Heading: #{Math.atan(y / x) / Math::PI * -180 + 90}
Distance: #{Math.sqrt(x * x + y * y)}
Orientation: #{a}"

নমুনা আউটপুট:

c:\a\ruby>robotgolf
Data: 94:26,175:332,14:390,159:448,-45:20
Heading: 124.52305879195005
Distance: 279.5742334385328
Orientation: 397

পাঁচটি এলোমেলো কোণে পরিণত হওয়ার পরে রোবোট কীভাবে উত্তরের মুখোমুখি হবে?
ওলিওয়েস্ট

@ ওয়াল্যুয়েস্ট আমি এই ছাপের মধ্যে ছিলাম যে অভিযোজনটি রোবটের প্রথম কোণটি চিহ্নিত করে, সঠিক? আমি এটি কেবলমাত্র 3 টি অতিরিক্ত অক্ষরের জন্য শেষের কোণটি চিহ্নিত করতে পারি।
ডুরকনব

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

@ ওয়েল ওয়েস্ট আহ, ঠিক আছে, সম্পাদিত ওরিয়েন্টেশন 0 ... 360 এ না থাকলে কি ঠিক আছে, বা আমাদের % 360এটির উপর কিছু করতে হবে?
ডুরকনব

আপনি ঘোষিত M=Mathএবং P=M::PIসেই অনুযায়ী কোডটি প্রতিস্থাপন করে 11 টি অক্ষর সংরক্ষণ করতে পারেন - এবং দ্বিতীয়টির পরে স্থান থেকে মুক্তি পেয়ে আরও একটি চরিত্র puts
ডেভিড হেরম্যান

5

পিএইচপি - 238 232 221 212 203 199 টি অক্ষর

for(;$i<5;$h+=$a=rand(-179,181),$x+=cos($b=$a*$k=M_PI/180)*$l=rand(0,501),$y+=$l*sin($b),$d.=($i++?",":"")."$a:$l");echo"Data: $d
Heading: $h
Distance: ".hypot($x,$y)."
Orientation: ".atan2($y,$x)/$k

(এটি এখানে পরীক্ষা করুন: http://ideone.com/dNZnKX )

নন-গল্ফ করা সংস্করণ:

$k = M_PI / 180;
$h = $x = $y = 0;
$d = "";

for ($i=5; $i--;){
    $h += $a = rand(-179,181);
    $x += ($l = rand(0, 501)) * cos($b = $k * $a);
    $y += $l * sin($b);
    $d .= ($d ? "," : "") . "$a:$l";
}

echo "Data: $d\nHeading: $h\nDistance: " . sqrt($x*$x + $y*$y) ."\nOrientation: " . atan2($y, $x)/$k . "\n";

(এটি এখানে পরীক্ষা করুন: http://ideone.com/1HzWH7 )


দেখে মনে হচ্ছে পার্ল শেষ মুহুর্তে কেবল দু'জনকেই পিটিয়েছে। : -ও
ডোরকনবব

@ ডুরকনব ইয়ুপ, দুঃখিত :)
মউক

স্পষ্টভাবে. মওক, আপনি একমাত্র 188 দিয়ে আমাদের সমস্ত প্রচেষ্টা নিশ্চিহ্ন করে দিয়েছিলেন ...
ম্যাথিউ রডিক

3

পাইথন - 264 259 256 258 - 5 = 253 টি অক্ষর

from math import*;import random as R;r,k,d=R.randint,pi/180,[];h=x=y=0;exec"a,l=r(-179,180),r(0,500);d+=[`a`+':'+`l`];h+=a;x+=l*cos(k*a);y+=l*sin(k*a);"*5;print('Data: %s\nHeading: %d\nDistance: %.3f\nOrientation: %d'%(','.join(d),h,hypot(x,y),atan2(y,x)/k))

(এটি http://ideone.com/FicW6e এ পরীক্ষা করুন )

অবরুদ্ধ সংস্করণ:

from math import *
from random import randrange as r

k = pi / 180
h = x = y = 0
d = []
for i in range(5):
    a = r(-179,181)
    l = r(501)
    d += ['%d:%d' % (a, l)]
    h += a
    x += l * cos(k * a)
    y += l * sin(k * a)

print('Data: %s\nHeading: %d\nDistance: %.3f\nOrientation: %f' % (','.join(d), h, sqrt(x*x+y*y), atan2(y,x)/k))

(এটি http://ideone.com/O3PP7T এ পরীক্ষা করুন )

এনবি: অনেক উত্তরগুলির শিরোনামে -5 অন্তর্ভুক্ত থাকে , যখন তাদের প্রোগ্রামটি 3 দশমিক স্থান পর্যন্ত যথার্থতার সাথে দূরত্বকে উপস্থাপন করে না ...


1

পাইথন 301-5 = 296

from math import*
r=__import__("random").randint
o=x=y=0
s=[]
for i in[0]*5:a=r(-179,180);d=r(0,500);o+=a;o+=180*((o<-179)-(o>180));n=pi*o/180;x+=d*cos(n);y+=d*sin(n);s+=["%d:%d"%(a,d)]
print"Data: "+",".join(s)+"\nHeading: %d"%degrees(atan(y/x))+"\nDistance: %f"%sqrt(x**2+y**2)+"\nOrientation: %d"%o

এখানে খুব অভিনব কিছু নয়, বরং ভার্বোস। এটি এমন একটি সমস্যা যার জন্য আমি খুশী নই যে পাইথনের ট্রিগ ফাংশন রেডিয়ানে কাজ করে।

> python robot.py
Data: 17:469,110:383,-146:240,-78:493,62:1
Heading: -17
Distance: 405.435748
Orientation: -35
> python robot.py
Data: -119:363,89:217,129:321,10:159,-56:109
Heading: -79
Distance: 130.754395
Orientation: 53

0

পাইথন 2 = 376 319 টি অক্ষর (দূরত্বের জন্য -5 = 314)

import random,math
h=x=y=0
for i in range(5):
    a=random.randint(-179,180)
    d=random.randint(0,500)
    print '%d:%d,'%(a,d),
    h+=a
    if h>180:
        h-=360
    x+=d*math.cos(h)
    y+=d*math.sin(h)
t=math.sqrt(x**2+y**2)
o=math.atan2(y,x)
print
print 'Heading: %d\nDistance: %3f\nOrientation: %d' % (h,t,o)

নমুনা আউটপুট

-141:245, 56:355, 145:223, -10:80, -38:253,
Heading: 12
Distance: 559.031404
Orientation: -2

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