কুকুরটিকে নিয়ে বেড়াতে যাচ্ছি


14

আমার কুকুরটি আমার দিকে ঝুঁকছে, তবে আমি তাকে হাঁটতে হাঁটতে খুব অলস হয়েছি। আমার একটা পরিকল্পনা আছে! আমি কোড গল্ফের লোকদের আমার জন্য এটি করব!

আপনার চ্যালেঞ্জটি একটি কুকুরের পদচারণা অনুকরণ করা। কুকুরটি হাঁটার নিয়ম এখানে রয়েছে:

  • মানব ( H) 0,0একটি (কার্টেসিয়ান) সমন্বয়কারী বিমানে শুরু হবে এবং এলোমেলোভাবে একটি স্পেসে হয় উপরের, বাম, ডান এবং নীচে প্রতি সেকেন্ডে যাবে।
  • কুকুর ( D) একই অবস্থানে শুরু হবে এবং শূন্য, এক, দুই, বা তিনটি ফাঁকা হয় উপরের, বাম, ডান, বা প্রতি সেকেন্ডের নিচে (এলোমেলোভাবে অবশ্যই) চলে যাবে। কুকুরটি কম অনুমানযোগ্য এবং কখনও কখনও দ্রুত চালানো বা পুরোপুরি বন্ধ হয়ে যায়।
  • কুকুরটি কখনও কখনও মানব থেকে (ইউক্লিডিয়ান দূরত্বে) নির্দিষ্ট পরিমাণের একক থেকে বেশি দূরে কিছু পাবে না, এটি জোর দৈর্ঘ্য ( L)। উদাহরণস্বরূপ, যদি Lহয় তবে 6একটি বৈধ অবস্থান হবে H(0,0) D(4,4)(যেহেতু দূরত্বটি প্রায় 5.65 ইউনিট), তবে নয় H(0,0) D(5,4)(প্রায় 6.4 ইউনিট)।
    • যদি কুকুরটি চলাফেরা করে, তখন এটি ফাঁস দূরত্বের প্রয়োজনীয়তা লঙ্ঘন করে, তার নির্ধারিত পথে এটি দূরত্বে যেতে হবে যা দূরত্বের প্রয়োজনীয়তা লঙ্ঘন করে না। উদাহরণস্বরূপ, যদি অবস্থানটি হয় H(0,0) D(3,4)এবং কুকুরটি এলোমেলোভাবে 3 টি স্থান ডান দিকে সরিয়ে নেওয়ার সিদ্ধান্ত নিয়েছে তবে এটি চলে যাবে D(4,4), যেহেতু এটি 6 ইউনিটের বেশি দূরে না পেয়ে দূরে যেতে পারে। (নোট করুন যে এর ফলে 0 টি স্থানের চলাচল হতে পারে, অর্থাত্ কোনও চলাচলই করা যায় না!)
  • বিবিধ নিয়ম: মানব প্রথমে চলে। মানবকে তার চলার পথে জঞ্জাল দৈর্ঘ্য অতিক্রম করতে হবে না। যদি এটি হয় তবে এটি অবশ্যই অন্য দিকটি বেছে নেবে। "র্যান্ডম" এর অর্থ "সমান বিতরণ এবং কোনও নিদর্শন ছাড়াই"।

ইনপুটটি এই ফর্ম্যাটে দেওয়া হবে (এসটিডিআইএন, ফাংশন প্যারামিটার, ফাইল ইত্যাদি হতে পারে):

"<amount of seconds the walk will last> <leash length>"

উদাহরণ স্বরূপ:

300 6 // a 5 minute walk with a 6 yard leash

আপনাকে অবশ্যই এই ফর্ম্যাটে আউটপুট দিতে হবে (STDOUT, ফাংশন রিটার্ন মান, ফাইল ইত্যাদি হতে পারে):

H(0,0) D(0,0)
H(0,1) D(2,0)
H(1,1) D(2,1)
H(1,0) D(2,-1)
...

(লাইন আউটপুট পরিমাণ হবে seconds + 1, যেহেতু H(0,0) D(0,0)লাইন গণনা করা হয় না।)

এটি , তাই বাইটের মধ্যে সংক্ষিপ্ততম কোডটি জিতবে!


4
আপনি যে বিষয়গুলি স্পষ্টভাবে বোঝাতে চেয়েছিলেন, তবে সম্ভবত সেগুলি স্পষ্টভাবেই বলা ভাল: 1. দূরত্বের অর্থ ইউক্লিডিয়ান দূরত্ব, ২. স্থানাঙ্কের বিমানটি কার্টেসিয়ান, পোলার নয় (বা বোয়িং 777); যে বিষয়গুলি পরিষ্কার নয়: ৩. যদি তাদের পদক্ষেপগুলি ফাঁস দৈর্ঘ্যের অতিক্রম করে তবে মানুষ কী করবে? ৪. প্রতিটি ঘুরে, কুকুরটি বা মানব আগে চলে?
জোনাথন ভ্যান মাত্রে

যদি নির্বাচিত দিকটি বৈধ পদক্ষেপের অনুমতি না দেয়: কোনও পদক্ষেপ নেওয়া উচিত নয় বা অন্য কোনও দিক বেছে নেওয়া উচিত?
টিমওয়ালা

কীভাবে ইনপুট পাওয়া উচিত? Stdin? একটি ফাংশন প্যারামিটার খুব ভাল?
টিমওয়োল্লা

1
আমার কুকুরটি কেবল তখনই আমাকে ঘষে।
TheDoctor

@ টিম স্বচ্ছতার জন্য সম্পাদিত; ধন্যবাদ।
ডুরকনব

উত্তর:


2

গল্ফস্ক্রিপ্ট, 140 টি অক্ষর

~.*:L;)[0.].@{['H('1$','*') D('4$','*')'n]@@{[@~]}+[{)}{(}{\(\}{\)\}]:^%{{~2$~@-.*@@-.*+L>!},}:F~.,{rand}:R~=\[.;{.[~}^4R=+{]}+4R*]F-1=\}*;;

উদাহরণ রান ( অনলাইন চেষ্টা করুন ):

> 10 3
H(0,0) D(0,0)
H(0,1) D(0,0)
H(0,0) D(0,2)
H(0,1) D(-1,2)
H(1,1) D(-1,2)
H(1,2) D(-1,4)
H(1,3) D(-1,5)
H(0,3) D(-1,5)
H(-1,3) D(1,5)
H(-1,4) D(1,5)
H(0,4) D(-1,5)

6

কফিস্ক্রিপ্ট - 324 + ফাংশন কল

ডেমো (10 টি ছোঁড়া ব্যবহার করে):

H(0,0) D(0,0)
H(0,-1) D(0,3)
H(-1,-1) D(0,3)
H(-1,-2) D(-1,3)
H(-1,-3) D(-4,3)
H(-1,-2) D(-4,4)
H(-1,-3) D(-5,4)
H(-1,-2) D(-2,4)
H(-1,-3) D(-2,5)
H(-1,-4) D(-2,5)
H(-1,-3) D(-3,5)
H(0,-3) D(-4,5)
H(-1,-3) D(-4,6)
H(-1,-4) D(-2,6)
H(-2,-4) D(-2,6)
H(-3,-4) D(-5,6)
H(-4,-4) D(-5,6)
H(-4,-3) D(-5,8)
H(-5,-3) D(-2,8)
H(-5,-2) D(-2,8)
H(-5,-3) D(-2,5)

কোড:

w=(i)->
    [s,l]=i.split ' ';m=Math;h=[0,0];d=[0,0];r=->(4*m.random())|0
    a=->m.abs(h[0]-d[0])**2+m.abs(h[1]-d[1])**2<=l**2
    b=(x)->if x%2 then 1else-1
    for i in[0..s]
        console.log "H(#{h}) D(#{d})"
        loop
            H=h.slice();x=r();h[(x/2)|0]+=b x;break if a();h=H
        D=r();x=r();(d[(x/2)|0]+=b x;d[(x/2)|0]-=b x if!a())while D-->0

দীর্ঘ কোড:

human = [ 0, 0 ]
doge = [ 0, 0 ]
randomDirection = -> [ 'u', 'd', 'l', 'r' ][(4*Math.random())|0]
allowed = -> Math.abs(human[0] - doge[0]) ** 2 + Math.abs(human[1] - doge[1]) ** 2 <= leash**2
leash = 0
walk = (input) ->
    [ seconds, leash ] = input.split ' '
    for i in [0..seconds]
        console.log "H(#{human}) D(#{doge}) #{Math.sqrt Math.abs(human[0] - doge[0]) ** 2 + Math.abs(human[1] - doge[1]) ** 2}"
        valid = no
        loop
            oldHuman = human.slice()
            switch randomDirection()
                when 'u'
                    human[0]--
                when 'd'
                    human[0]++
                when 'l'
                    human[1]--
                when 'r'
                    human[1]++

            if allowed()
                break
            else
                human = oldHuman

        dogeDistance = (Math.random() * 4)|0
        switch randomDirection()
            when 'u'
                while dogeDistance-- > 0
                    doge[0]--
                    doge[0]++ if !allowed() 
            when 'd'
                while dogeDistance-- > 0
                    doge[0]++
                    doge[0]-- if !allowed() 
            when 'l'
                while dogeDistance-- > 0
                    doge[1]--
                    doge[1]++ if !allowed() 
            when 'r'
                while dogeDistance-- > 0
                    doge[1]++
                    doge[1]-- if !allowed() 
walk "10 2"

4

রুবি, 189 177

আমি সম্ভবত এটি কিছুটা ফেলে দিতে পারি। আমি ভালবাসি না j

h=d=0;e,l=$*
def j;[1,-1,?i,'-i'].sample.to_c end
0.upto(e.to_i){puts'H(%d,%d) D(%d,%d)'%(h.rect+d.rect)
1 while((g=h+j)-d).abs>l.to_i
h,s=g,j
3.times{d+=s if(d+s-h).abs<=l.to_i}}

Ungolfed:

h=d=0 # use complex numbers since it has distance built in
time,leash=$*

def randomDirection
  [1,-1,'i','-i'].sample.to_c 
end

0.upto(time.to_i) { # (1 + time) times
  puts"H(%d,%d) D(%d,%d)"%(h.rect+d.rect) # that's [h.real, h.imag, d.real, d.imag]

  # find a newH that doesn't violate the leash
  newH = h + randomDirection
  while((g-d).abs > leash.to_i) 
    newH = h + randomDirection
  end

  h = newH

  newD = randomDirection
  3.times{
    # keep adding newD until you hit the leash
    d += newD if(d + newD - h).abs <= leash.to_i
  }
}

2

গণিত 285

Golfed

r=RandomChoice;k=False;
s:=r[{{0,1},{-1,0},{1,0},{0,-1}}]
w:=r[{0,1,2,3,4}]
f[{-1,___}]:="";
f[{n_,l_,{h_,d_}}]:=
(Print["H(",h,")\t","D(",d,")"];
m[i_,u_,v_]:=EuclideanDistance[u+i,v]<l;
z=k;While[z==k,t=s;z=m[t,h,d]];
y=h+t;t=w*s;z=k;While[z==k,t=t-Sign@t;z=m[t,d,y]];
dp=d+t;f[{n-1,l,{y, dp}}])

উদাহরণ

f[{17,7,{{0,0},{0,0}}}]

এইচ ({0,0}) ডি ({0,0})
এইচ ({1,0}) ডি ({0,0})
এইচ ({2,0}) ডি ({0,2})
এইচ ( {2, -1}) ডি ({0, -1})
এইচ ({1, -1}) ডি ({- 3, -1})
এইচ ({1,0}) ডি ({- 3,1 })
এইচ ({1,1}) ডি ({0,1})
এইচ ({1,2}) ডি ({0,2})
এইচ ({1,1}) ডি ({0,2})
এইচ ({1,0}) ডি ({- 2,2})
এইচ ({2,0}) ডি ({1,2})
এইচ ({2, -1}) ডি ({- 2,2}) )
এইচ ({2,0}) ডি ({- 2,3})
এইচ ({2,1}) ডি ({- 2,0})
এইচ ({1,1}) ডি ({- 2,3 })
এইচ ({2,1}) ডি ({- 2,6})
এইচ ({1,1}) ডি ({- 3,6})
এইচ ({0,1}) ডি ({- 4, 6})


UnGolfed

নীচে পাঠ্য কিছু মন্তব্য আছে। আমি একটি মুদ্রণও অন্তর্ভুক্ত করেছি যা গণনার কয়েকটি অনুসরণ করা সম্ভব করে।

step:=RandomChoice[{{0,1},{-1,0},{1,0},{0,-1}}]
dogWander:=RandomChoice[{0,1,2,3,4}]

f[{-1,___}]:="";

f[{n_,l_,{humanPos_,dogPos_}}]:=
Module[{tempStep,moveOK,hp,hp1,dp,p,test},

(* human imagines step, checks with leash, chooses another step if would choke the dog *)
moveOK[intendedStep_,pos1_,pos2_]:=EuclideanDistance[pos1+intendedStep,pos2]<l;
test=False;While[test==False,tempStep=step;test=moveOK[tempStep,humanPos,dogPos]];
hp=humanPos+tempStep;
Print["humanPos before: ", humanPos,"\t","human step: ",tempStep,"\thumanPos after: ",hp,"\tdistance from dog: ",N@EuclideanDistance[hp,dogPos]];

(*move closer to human if needed *)
tempStep=dogWander*step;
test=False;While[test==False,tempStep=tempStep-Sign[tempStep];test=moveOK[tempStep,dogPos,hp]];
dp=dogPos+tempStep;
Print["dog's intended step: ",tempStep,"\tdogPos before: ",dogPos,"\t","dog actual step: ",tempStep, "\t","dogPos after: ",dp,"\tdistance: ",N@EuclideanDistance[hp,dp],"\n"];
f[{n-1,l,{hp, dp}}]]

উদাহরণ

f[{17,5,{{0,0},{0,0}}}]

[কোডটি কীভাবে কাজ করে তার একটি ধারণা দিতে প্রিন্ট আউটটির কিছু অংশ দেখানো হয়েছে। ]

আউটে

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