मेरा रोबोट लैब बच गया है!


13

मेरे रोबोट ने किसी तरह कम परिचालित किया है और बेतरतीब ढंग से मेरी प्रयोगशाला से कहीं दूर चला गया है!

सौभाग्य से, जब भी वह ऐसा करता है, तो उसका शट-डाउन क्रम शुरू हो जाता है, जिससे वह स्विच ऑफ करने से पहले बेतरतीब ढंग से मुड़ने और पांच राउंड के लिए सामना करने की दिशा में पर्याप्त समय देता है। उनके gyro और एक्सेलेरोमीटर फ़ंक्शंस अभी भी डेटा को लैब में वापस भेज रहे हैं जबकि वह अभी भी चालू है।

उदाहरण के लिए, डेटा हमेशा दो संख्याओं के पांच सेटों के रूप में आएगा।

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

आपका मिशन, गोल्फरों को) रोबोट के उन्मत्त रन का अनुकरण करना है और a1:d1,a2:d2,a3:d3,a4:d4,a5:d5जहां a(n) घड़ी के कोण (डिग्री में) के रूप में संख्याओं के पांच सेटों को प्रदर्शित करके अनुक्रम को चालू करना -179<=a<=+180है ताकि रोबोट अपने वर्तमान शीर्ष से चालू हो जाएगा ( शुरू में यह शून्य हेडिंग पर होता है इससे पहले कि यह एमोक चलता है और पहली बार मुड़ता है), और d(n) पैरों में वह दूरी है जो अगले हेडिंग परिवर्तन से पहले चलती है जो कि ऐसा है 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 फीट दौड़ सकता है ...

आपके द्वारा खिलाया गया डेटा हमेशा पूर्णांक मानों में होगा ... रोबोट पूर्णांक श्रेणियों में बदल जाएगा, और पूर्णांक श्रेणी में चलेगा। हालांकि, आउटपुट मान फ्लोट होंगे ...

यह कोड-गोल्फ है। सबसे छोटा कोड जीतता है ... अब जाओ मेरे रोबोट को ढूंढो!

PS: मेरे "3 दशमलव स्थानों तक सटीकता" के संदर्भ में, यदि आप शीर्षक प्रदान कर सकते हैं (डिग्री में, 3 दशमलव स्थानों का न्यूनतम स्तर तक) और पैरों में दूरी भी (मिनट 3 दशमलव स्थानों के लिए भी सटीक) -5 बाइट बोनस मिलेगा)।


1
@IsmaelMiguel और @OP - मैं शायद इसके लिए शूट करने जा रहा हूं, लेकिन आप इसे अपने दम पर साइन के -180 < a <= +180रूप में इस्तेमाल कर सकते हैं, लेकिन <AFAIK से कम नहीं ...
जॉर्ज

1
@ जॉर्ज आप सही हैं, लेकिन वैलीवेस्ट जो कह रहा है वह गलत है। "-179 <= a <= 180 परिणाम सभी 360 संभव पूर्णांक शीर्षकों में" -> यह गलत है क्योंकि 361 शीर्षक हैं। या रोबोट को -180º पर जाने की अनुमति नहीं है?
इस्माइल मिगुएल

1
@IsmaelMiguel यह -180 डिग्री जाना अनुमति दी है कि ठीक उसी रूप में 180 है, क्योंकि
दरवाज़े

1
यह गलत है। + 180 + का अर्थ है एक आधा-मोड़ घड़ी की दिशा में। -180 -1 का अर्थ है आधा-घड़ी एंटी-क्लॉकवाइज (या वामावर्त, जैसा आप पसंद करते हैं)। अगर रेंज -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 {…}ब्लॉक के अंदर को छोड़कर , जहां $_वास्तव में डेटा बनाने वाली संख्या जोड़े के मूल्य पर ले जाता है)
  • $/रखती है जो ungolfed संस्करण में है ($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)

कैसे PHP गिनती में रूबी को हरा दिया ?! >: O अधिक गोल्फ के लिए कुछ रास्ता खोजना होगा ...

संपादित करें: मैंने PHP उत्तर को हराया, लेकिन इसे लिखने वाले उपयोगकर्ता ने मुझे ऐसा करने में मदद की! उसके पास जाओ; वह इसके हकदार हैं :-P

एक और संपादन: गह! उसने मुझे फिर से पास कर दिया! आप बहुत योग्य प्रतिद्वंद्वी हैं, @ मैथियोरोडिक; बधाई हो, मुझे आपको जीतने देना है ;-)

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

Ungolfed कोड (और थोड़ा बहुत पुराना संस्करण):

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

पाँच यादृच्छिक कोण होने के बाद उत्तर की ओर मुख किए हुए रोबोट कैसा है?
वैलीवेस्ट

@WallyWest मैं इस धारणा के तहत था कि अभिविन्यास रोबोट के शुरुआती कोण को चिह्नित करता है, सही? मैं इसे केवल 3 अतिरिक्त वर्णों के लिए समाप्ति कोण चिह्नित कर सकता था।
दरवाज़े

नहीं, यह हमेशा कोड के निष्पादन में उत्तर (हेडिंग 0) के कारण होता है ... तब यह मुड़ता है, चलता है, मुड़ता है, चलता है, मुड़ता है, चलता है, फिर मुड़ता है और फिर चलता है ... इससे पहले कि वह नीचे की ओर बिखर जाए। यह अंतः Orientationखंड का सामना करना पड़ रहा है यह अंतिम कोण की आवश्यकता होगी ।
वैलीवेस्ट

@AllyWest आह, ठीक है, संपादित। क्या यह ठीक है अगर अभिविन्यास 0 ... 360 में नहीं है, या हमें इस पर क्या करना है % 360?
दरवाज़े

आप 11 वर्णों को कोड के अनुसार घोषित M=Mathऔर P=M::PIबदल सकते हैं - और दूसरे के बाद अंतरिक्ष से छुटकारा पाकर एक और चरित्र puts
डेविड हेरमैन

5

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


लगता है कि पर्ल ने आखिरी समय में हम दोनों को केवल हरा दिया। : -O
दरवाज़े

@ डोरकोन यूप, सॉरी :)
मूक

निश्चित रूप से। मौक, आपने केवल 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 पर करें )

Ungolfed संस्करण:

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

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