সিঁড়িতে রোবট


30

পটভূমি

আমার একটি সিঁড়ি একটি প্রাচীরের উপর ঝুঁকে রয়েছে, এবং এটিতে আরোহণ করতে পারে এমন একটি রিমোট-নিয়ন্ত্রিত রোবট। আমি রোবোটটিতে তিনটি পৃথক কমান্ড প্রেরণ করতে পারি:

  • UP: রোবটটি এক ধাপ উপরে উঠে যায়। এটি যদি সর্বোচ্চ পদক্ষেপে থাকে তবে এটি অতিক্রম করে, নেমে পড়ে এবং বিস্ফোরিত হয়।
  • DOWN: রোবটটি এক ধাপ নিচে নিয়ে যায়। এটি যদি সর্বনিম্ন পদক্ষেপে থাকে তবে কিছুই ঘটে না।
  • RESET: রোবটটি সর্বনিম্ন ধাপে ফিরে আসে।

আমি কয়েকটি কমান্ডও পাঠাতে পারি এবং রোবট তাদের একের পর এক কার্যকর করে দেবে। আপনার কাজটি এর চলনগুলির পূর্বাভাস দেওয়া।

ইনপুট

তোমার ইনপুট একটি ধনাত্মক পূর্ণসংখ্যা হয় N, মই পদক্ষেপ সংখ্যা প্রতিনিধিত্বমূলক, এবং একটি অ খালি স্ট্রিং Cউপর UDR, কমান্ড আমি রোবট পাঠানো হয়েছে উপস্থাপন করে। আপনি ধরে নিতে পারেনN < 1000 । মইয়ের সর্বনিম্ন ধাপে রোবটটি সূচনা করা হয়েছে।

আউটপুট

এটি গ্যারান্টিযুক্ত যে কোনও সময়ে, রোবটটি সর্বোচ্চ ধাপে উঠে বিস্ফোরিত হবে। আপনার আউটপুট হ'ল এটি হওয়ার আগে চালিত কমান্ডের সংখ্যা।

উদাহরণ

ইনপুটগুলি N = 4এবং C = "UDDUURUUUUUUUDDDD" রোবটটি বিবেচনা করুন , দ্বারা চিহ্নিত করা হয়েছে @, 4-পদক্ষেপের সিঁড়ি ধরে নীচে চলেছে:

|-|   |-|   |-|   |-|   |-|   |-|   |-|   |-|   |-|   |@|   |-||
|-|   |-|   |-|   |-|   |-|   |@|   |-|   |-|   |@|   |-|   |-||
|-|   |@|   |-|   |-|   |@|   |-|   |-|   |@|   |-|   |-|   |-|v
|@| U |-| D |@| D |@| U |-| U |-| R |@| U |-| U |-| U |-| U |-|# Boom!

বাকি কমান্ডগুলি কার্যকর করা হয় না, যেহেতু রোবটটি বিস্ফোরিত হয়েছে। বিস্ফোরণটি 10 ​​টি আদেশের পরে সংঘটিত হয়েছিল, সুতরাং সঠিক আউটপুট 10

বিধি এবং স্কোরিং

আপনি একটি সম্পূর্ণ প্রোগ্রাম বা একটি ফাংশন লিখতে পারেন। সর্বনিম্ন বাইট গণনা জয়, এবং মান লুফোলগুলি অনুমোদিত নয়।

পরীক্ষার মামলা

  1 U -> 1
  1 DDRUDUU -> 4
  4 UDDUUUUURUUUUDDDD -> 7
  4 UDDUURUUUUUUUDDDD -> 10
  6 UUUUUDRUDDDDRDUUUUUUDRUUUUUUUDR -> 20
 10 UUUUUURUUUUUUURUUUUUUUURUUUUUUUUUUUUUU -> 34
  6 UUUDUUUUDDDDDDDDDDDDDDRRRRRRRRRRRUUUUUU -> 8
  6 UUUDUUUDURUDDDUUUUUDDRUUUUDDUUUUURRUUDDUUUUUUUU -> 32
 20 UUDDUDUUUDDUUDUDUUUDUDDUUUUUDUDUUDUUUUUUDUUDUDUDUUUUUDUUUDUDUUUUUUDUDUDUDUDUUUUUUUUUDUDUUDUDUUUUU -> 56
354 UUDDUUDUDUUDDUDUUUUDDDUDUUDUDUDUDDUUUUDUDUUDUDUUUDUDUDUUDUUUDUUUUUDUUDUDUUDUDUUUUUDUDUUDUDUDUDDUUUUUUUDUDUDUDUUUUUDUDUDUDUDUDUDUDUUDUUUUUURUUUDUUUUDDUUDUDUDURURURUDUDUUUUDUUUUUUDUDUDUDUDUUUUUUDUDUUUUUUUDUUUDUUDUDUDUUDUDUDUUUUUUUUUUDUUUDUDUUDUUDUUUDUUUUUUUUUUUUUDUUDUUDUDUDUUUDUDUUUUUUUDUUUDUUUDUUDUUDDUUUUUUUUDUDUDUDUDUUUUDUDUUUUUUUUDDUUDDUUDUUDUUDUDUDUDUUUUUUUUUDUUDUUDUUUDUUDUUUUUUUUUUUDUDUDUDUUUUUUUUUUUUDUUUDUUDUDDUUDUDUDUUUUUUUUUUUUDUDUDUUDUUUDUUUUUUUDUUUUUUUUUDUDUDUDUDUUUUUUDUDUDUUDUDUDUDUUUUUUUUUUUUUUUDUDUDUDDDUUUDDDDDUUUUUUUUUUUUUUDDUDUUDUUDUDUUUUUUDUDUDUDUDUUUUDUUUUDUDUDUUUDUUDDUUUUUUUUUUUUUUUUUUDUUDUUDUUUDUDUUUUUUUUUUUDUUUDUUUUDUDUDUUUUUUUUUDUUUDUUUDUUDUUUUUUUUUUUUDDUDUDUDUUUUUUUUUUUUUUUDUUUDUUUUDUUDUUDUUUUUUUUUUUDUDUUDUUUDUUUUUUDUDUDUUDUUUUUUUUUUUUDUUUDUUDUDUDUUUUDUDUDUDUDUUUUUUUUUUUDUUUUDUDUUUUDUUUUDUDUUUUDUUUUDUDUUUUDUUUUDUDUUUUDUUUUDUDUUUUDUUUUDUDUUUUDUUUUDUDUUUUDUUUUDUDUUUUDUUUUDUDUUUUDUUUUDUDUUUUDUUUUDUDUUUUDUUUUDUDUUUUDUUUUDUDUUUUDUUUUDUDUUUUDUUUUDUDUUUUDUUUUDUDUUUUDUUUUDUDUUUUDUUUUDUDUUUUDUUUUDUDUUUUDUUUUDUDUUUUDUUUUDUDUUUUDUUUUDUDUUUUDUUUUDUDUUUUDUUUUDUDUUUUDUUUUDUDUUUUDUUUUDUDUUUUDUUUUDUDUUUUDUUUUDUDUUUUDUUUUDUDUUUUDUUUUDUDUUUUUU -> 872


8
আমি হতাশ হয়েছি যে এএসসিআইআই আর্ট তৈরি করা নয়।
ব্যবহারকারী 253751


স্ট্রিংয়ের পরিবর্তে, আমরা কি অক্ষর কোডগুলির একটি তালিকা নিতে পারি?
সাইয়েস

@ কিয়েস কেবলমাত্র যদি আপনার ভাষার কোনও স্ট্রিং প্রতিনিধিত্ব করার কোনও উপায় না থাকে।
জাগারব

উত্তর:


10

সিজেম, 26 25 22 বাইট

0l{i"()~ "=~0e>_}%ri#)

ইনপুট ফর্ম্যাটটি হ'ল প্রথম লাইনের নির্দেশাবলী এবং দ্বিতীয়টিতে মইয়ের উচ্চতা।

এটি এখানে পরীক্ষা করুন।

ব্যাখ্যা

0         e# Push a 0 - the initial position of the robot.
l         e# Read the instructions.
{         e# Map this block over the instruction...
  i       e#   Convert to character code. D -> 68, U -> 85, R -> 82.
  "()~ "= e#   We use these as cyclic indices into this array. Note that the values
          e#   modulo 4 are 0, 1 and 2, respectively. So U -> ) (increment),
          e#   D -> ( (decrement), R -> ~ (bitwise NOT, i.e negated and decrement).
  ~       e#   Evaluate the character as code.
  0e>     e#   Clamp to non-negative numbers. So D can't go below 0, and since R is
          e#   guaranteed to yield something negative, this resets it to zero.
  _       e#   Duplicate, so we keep one copy of the current position on the stack.
}%        e# Since this was a map, the result will be wrapped in an array.
ri        e# Read the ladder height and convert it to an integer.
#         e# Find its first occurrence in the list of positions.
)         e# The result is off by one, so we increment it.

বিস্ফোরণের পরেও সমস্ত কমান্ড প্রক্রিয়া করার জন্য ভাল ধারণা। কয়েকটা বাইট সংরক্ষণের জন্য আমি এটি ধার করব
লুইস মেন্ডো

7

সি, 83 71 + 4 = 75 বাইট

আমাকে কে অ্যান্ড এস স্টাইল দেখানোর জন্য @ জোশকে ধন্যবাদ , যা 8 বাইট ছাড়ার অনুমতি দিয়েছে !!

f(i,s,z,a)char*s;{z-=*s<82?z>0:*s>82?-1:z;return z-i?f(i,s+1,z,a+1):a;}

ব্যাখ্যা করে:

f(i,s,z,a)char*s;{ // function needs one integer and one "string"
  z-=              // z is the bot's height
    *s<82?         // if 'Down'
      z>0          // then subtract 1 when z>0 or nothing otherwise
    :*s>82?        // else if 'Up'
      -1           // increase height z-=-1
    :z;            // else reset z=z-z
  return z-i?      // if z is not the max height
    f(i,s+1,z,a+1) // try next step
  :a;              // else print how many calls/steps were made
}                  // end of function

উদাহরণ কল:

f(1,"U",0,1);    // I've added 4 bytes in the score because of ",0,1"

আইডোনে লাইভ টেস্ট


1
উত্তম উত্তর, তবে এটি লক্ষণীয় যে ফাংশনটি কার্যকরভাবে শুধুমাত্র গ্লোবালগুলি থেকে একবার ব্যবহার করা যেতে পারে zএবং aপুনরায় সেট করা হয়নি are
জোশ

@Josh। আমি আপডেট করেছি। :)
সরানো হয়েছে

1
অসাধারণ! আপনি নিজের ফাংশনটিতে
জোশ

@Josh। বাহ এটা দুর্দান্ত! ধন্যবাদ
মুছে

6

জাভাস্ক্রিপ্ট (ES6), 54 53 বাইট

n=>c=>(f=p=>n-p?f({D:p&&p-1,U:p+1}[c[i++]]|0):i)(i=0)

ব্যাখ্যা

অভ্যন্তরীণভাবে একটি পুনরাবৃত্তি ফাংশন ব্যবহার করে।

var solution =

n=>c=>(
  f=p=>             // f = recursive function, p = position of robot on ladder
    n-p?            // if p != n
      f({           // execute the next command
          D:p&&p-1, // D -> p = max of p - 1 and 0
          U:p+1     // U -> p = p + 1
        }[c[i++]]   // get current command then increment i (current command index)
        |0          // R -> p = 0
      )
    :i              // else return the current command index
)(i=0)              // initialise p and i to 0 for the first recurse
N = <input type="number" id="N" value="354" /><br />
C = <input type="text" id="C" value="UUDDUUDUDUUDDUDUUUUDDDUDUUDUDUDUDDUUUUDUDUUDUDUUUDUDUDUUDUUUDUUUUUDUUDUDUUDUDUUUUUDUDUUDUDUDUDDUUUUUUUDUDUDUDUUUUUDUDUDUDUDUDUDUDUUDUUUUUURUUUDUUUUDDUUDUDUDURURURUDUDUUUUDUUUUUUDUDUDUDUDUUUUUUDUDUUUUUUUDUUUDUUDUDUDUUDUDUDUUUUUUUUUUDUUUDUDUUDUUDUUUDUUUUUUUUUUUUUDUUDUUDUDUDUUUDUDUUUUUUUDUUUDUUUDUUDUUDDUUUUUUUUDUDUDUDUDUUUUDUDUUUUUUUUDDUUDDUUDUUDUUDUDUDUDUUUUUUUUUDUUDUUDUUUDUUDUUUUUUUUUUUDUDUDUDUUUUUUUUUUUUDUUUDUUDUDDUUDUDUDUUUUUUUUUUUUDUDUDUUDUUUDUUUUUUUDUUUUUUUUUDUDUDUDUDUUUUUUDUDUDUUDUDUDUDUUUUUUUUUUUUUUUDUDUDUDDDUUUDDDDDUUUUUUUUUUUUUUDDUDUUDUUDUDUUUUUUDUDUDUDUDUUUUDUUUUDUDUDUUUDUUDDUUUUUUUUUUUUUUUUUUDUUDUUDUUUDUDUUUUUUUUUUUDUUUDUUUUDUDUDUUUUUUUUUDUUUDUUUDUUDUUUUUUUUUUUUDDUDUDUDUUUUUUUUUUUUUUUDUUUDUUUUDUUDUUDUUUUUUUUUUUDUDUUDUUUDUUUUUUDUDUDUUDUUUUUUUUUUUUDUUUDUUDUDUDUUUUDUDUDUDUDUUUUUUUUUUUDUUUUDUDUUUUDUUUUDUDUUUUDUUUUDUDUUUUDUUUUDUDUUUUDUUUUDUDUUUUDUUUUDUDUUUUDUUUUDUDUUUUDUUUUDUDUUUUDUUUUDUDUUUUDUUUUDUDUUUUDUUUUDUDUUUUDUUUUDUDUUUUDUUUUDUDUUUUDUUUUDUDUUUUDUUUUDUDUUUUDUUUUDUDUUUUDUUUUDUDUUUUDUUUUDUDUUUUDUUUUDUDUUUUDUUUUDUDUUUUDUUUUDUDUUUUDUUUUDUDUUUUDUUUUDUDUUUUDUUUUDUDUUUUDUUUUDUDUUUUDUUUUDUDUUUUDUUUUDUDUUUUDUUUUDUDUUUUDUUUUDUDUUUUDUUUUDUDUUUUUU" /><br />
<button onclick="result.textContent=solution(+N.value)(C.value)">Go</button>
<pre id="result"></pre>


4

পার্ল, 47 + 2 = 49 বাইট

$z-=-/U/||$z&&/D/;$z*=!/R/;$^I<=$z&&last}{$_=$.

উত্তরোত্তর উচ্চতা এবং একটি নতুন লাইন পৃথকীকরণের তালিকার জন্য -pপতাকাটির প্রয়োজন -i$N:

$ perl -pi10 ladderbot.pl <<<< $'U\nU\nU\nU\nU\nU\nR\nU\nU\nU\nU\nU\nU\nU\nR\nU\nU\nU\nU\nU\nU\nU\nU\nR\nU\nU\nU\nU\nU\nU\nU\nU\nU\nU\nU\nU\nU\nU'
34

কিভাবে এটা কাজ করে:

                                                # '-p' wraps the code in (simplified):
                                                # while($_=<>) {...print $_}
$z-=-/U/||$z&&/D/;                              # Subtract -1 if UP. subtract 1 if DOWN
                  $z*=!/R/;                     # If R then times by zero
                           $^I<=$z&&last        # Break while loop if N is reached
                                        }{      # Eskimo operator:
                                                # while($_=<>){...}{print$_}
                                          $_=$. # `$.` contains number of lines read from input.

Deparsed:

LINE: while (defined($_ = <ARGV>)) {
    $z -= -/U/ || $z && /D/;
    $z *= !/R/;
    last if $^I <= $z;
}
{
    $_ = $.;
}
continue {
    die "-p destination: $!\n" unless print $_;
}
-e syntax OK

4

জাভাস্ক্রিপ্ট (স্পাইডারমনকি 30+), 65 64 বাইট

(n,s,i=0)=>[for(c of s)if(i<n)c<'E'?i&&i--:c>'T'?i++:i=0].length

কিভাবে এটা কাজ করে

আমরা প্রথমে ভেরিয়েবলটি i০. এ সেট করেছিলাম এটি রোবট কত ধাপ উপরে উঠে গেছে তার উপর নজর রাখবে। তারপরে cইনপুট স্ট্রিংয়ের প্রতিটি চরের জন্য আমরা নীচের যুক্তিটি চালাই:

  1. এর iচেয়ে বড় বা সমান হলে nকিছু করবেন না।
  2. যদি cহয় "D":
    • যদি i0 হয় তবে এটি যেমন রেখে দিন।
    • অন্যথায়, এটি 1 দ্বারা হ্রাস করুন।
  3. যদি c হয় "U", i1 দ্বারা বৃদ্ধি ।
  4. অন্যথায়, সেট করুন i 0 তে করুন।

যদি কেটে ফেলা হয় i>=n, রোবট শীর্ষে পৌঁছে যাওয়ার পরে আমরা অ্যারেতে আর কোনও আইটেম যুক্ত করা এড়াতে চাই। সুতরাং, আমরা কেবল ফলাফল অ্যারের দৈর্ঘ্যটি ফিরিয়ে দিতে পারি।


3

হাস্কেল, 65 বাইট

x%'U'=x+1
x%'D'=max(x-1)0
x%_=0
f n=length.fst.span(<n).scanl(%)0

ব্যবহারের উদাহরণ: f 4 "UDDUURUUUUUUUDDDD"-> 10

%মইতে বর্তমান অবস্থানটি সামঞ্জস্য করে, scanlসমস্ত অবস্থানের একটি তালিকা তৈরি করে, fst.span(<n)বিস্ফোরণের আগে অংশ নেয় এবং lengthপদক্ষেপগুলি গণনা করে।


নামযুক্ত আর্গুমেন্ট এবং রচনা /
কারিঙের

3

জাভাস্ক্রিপ্ট (ES6), 65 বাইট

(n,s)=>[...s].map(_=>i=_<'E'?i&&i-1:_>'T'?i+1:0,i=0).indexOf(n)+1


আমার মনে হয় এতে 0,i=0পরিবর্তন করা যায়i=0
সাইয়েস

@ কিয়েস হুম, একটি নতুন ট্যাবে আমার জন্য ব্যর্থ হয়েছে (এই পৃষ্ঠায় কাজ করে বি / সিআই ইতিমধ্যে সংজ্ঞায়িত করা হয়েছে)
চার্লি উইন

@ চার্লিওয়াইন দুঃখিত, আমার নজির মিশে গেছে
সাইওস

3

এমএটিএল , 37 34 বাইট

Oj"t@4\1=?Q}6M?x0}qt0>*]]]N$h=f1)q

এটি অনলাইন চেষ্টা করুন!

ব্যাখ্যা

অবস্থান 0-ভিত্তিক। প্রতিটি নতুন অবস্থান পুরানো অবস্থানগুলি রেখে স্ট্যাকের উপরে ঠেলাঠেলি করা হয়। সুতরাং স্ট্যাকের আকারটি এখন অবধি আরও 1 টি চলাচলের সংখ্যা উপস্থাপন করে।

প্রতিটি কমান্ড প্রক্রিয়া করার জন্য একটি লুপ ব্যবহার করা হয়। লুপটি যখন সিঁড়ির উচ্চতায় পৌঁছে যায় তখন সমস্ত বিধি বিস্ফোরণের পরেও কমান্ডগুলি প্রক্রিয়াকরণ করে ( মার্টিনের উত্তর থেকে নেওয়া ধারণা )। চূড়ান্ত ফলাফলটি প্রথম অবস্থানের সূচক দ্বারা দেওয়া হয় যা মইয়ের উচ্চতার সমান হয়।

O             % push a 0: initial position (0-based)
j             % take first input (commands) as a string
"             % for each command
  t           %   duplicate current position
  @           %   push command
  4\          %   modulo 4. This gives 1, 2, 0 for 'U','R', 'D'
  1=?         %   if result equals 1 (command 'U')
    Q         %     increase position by 1
  }           %   else
    6M?       %     if result was nonzero (command 'R')
      x0      %       delete current position and push 0
    }         %     else (command 'D')
      q       %       decrement by 1
      t0>*    %       turn negative values into 0
    ]         %     end if
  ]           %   end if
]             % end for each
N$h           % pack all numbers in the stack into an array
=             % implicitly read second input: ladder height
f1)q          % find first position equal to that, and subtract 1.
              % Implicitly display

3

পাইথন 2, 63 62 বাইট

f=lambda n,s,h=0:h^n and-~f(n,s[1:],-[2%~h,~h,0][ord(s[0])%4])

উদাহরণস্বরূপ, f(4, 'UDDUURUUUUUUUDDDD')হয় 10

xnor একটি আরও ছোট সংক্ষেপে পাওয়া গেছে: 2%~hসত্যিই দুর্দান্ত :)


ভাল লাগছে %4। যদি আমার ভুল না হয় তবে আপনি একটি চরিত্রটি সংরক্ষণ করে সংরক্ষণ করতে পারেন -[2%~h,~h,0][ord(s[0])%4]
xnor

3

পাওয়ারশেল, 86 79 বাইট

param($a,[char[]]$b)$b|%{$d++;if(($c-=((1,0)[!$c],-1,$c)[$_%4])-ge$a){$d;exit}}

আমার একটি সামান্য retooling সান্তা কখন বেসমেন্ট প্রবেশ করে?উত্তর.

ইনপুট নেয় $aএবং $b, স্পষ্টভাবে $bচর-অ্যারে হিসাবে কাস্টিং । আমরা তারপরে |%{...}সমস্ত দিয়ে লুপ করি $b। প্রতিটি পুনরাবৃত্তি আমরা আমাদের পাল্টা বৃদ্ধি $d

তারপরে, ifআমরা শীর্ষে এসেছি কিনা তা যাচাই করার জন্য একটি বিবৃতি -ge$a। যদি তাই হয়, আমরা আউটপুট $dএবং exitifবক্তব্য সিউডো-তিন বরাদ্দ করে নির্মিত থেকে সংস্থাপিত হয় $cমাইনাস-সমান একটি অ্যারের মধ্যে বিভিন্ন সূচী ফলাফলের সাথে প্রাসঙ্গিক।

আমরা একটি কৌতুক যে ASCII মান আছে D, Rএবং Uমিলা 0, 2এবং 1যখন মডিউল -4 নিয়ে যাওয়া, তাই $_%4আমাদের প্রথম সূচক হিসেবে কাজ করে। যদি এটি হয় তবে এটি পুনরায় Rসেট করে $cসমান $c-$cসেট করে। যদিU , এর অর্থ হল আমাদের উপরে যাওয়া দরকার, $c-(-1)ফলস্বরূপ। অন্যথায় এটি একটি D, সুতরাং আমাদের পরীক্ষা করা দরকার যে আমরা ইতিমধ্যে নীচে রয়েছি (এটি !$cহ'ল - পাওয়ারশেলের মধ্যে "শূন্য নয়" "সত্য" বা 1) এবং যথাক্রমে $cসমান $c-0বা সেট করা আছে $c-1

সম্পাদনা করুন - সরাসরি অ্যাসাইনমেন্টের চেয়ে বিয়োগ-সমান অ্যাসাইনমেন্ট ব্যবহার করে 7 বাইট সংরক্ষণ করা হয়েছে


3

পার্ল 5, 61 বাইট

জন্য দুটি বাইট অন্তর্ভুক্ত -F -i। (-M5.01 বিনামূল্যে।)

পূর্ণসংখ্যার ইনপুট (যেমন 10) যেমন perl -M5.01 -F -i10 robot.pl; মই কমান্ডসমূহের ইনপুটটি STDIN হিসাবে।

for(@F){($i+=/U/)-=/R/?$i:$i&&/D/;$j++;last if$^I<=$i}say$j

পার্ল 5.12.5 ব্যবহার করে, আমার কাছে -anFএটি মুদ্রণের আগে আমার স্পষ্টভাবে অটোস্প্লিট মোড সক্ষম করতে হয়েছিল । তবে এটি কেবল -F5.20.3 এ সুস্পষ্টভাবে সক্ষম হয়ে গেছে বলে মনে হচ্ছে । আপনি এটি যাচাই করতে পারেন?
আর্দনিউ

@ আরডনিউ, সবেমাত্র -Fআমার জন্য যথেষ্ট (5.20 বা 5.22 বা আরও)। আইর্ক বর্তমান পার্ল্ডোক পার্ল্রুন বলে যে এটি প্রয়োগ করে -aএবং -aতা বোঝায় -n
এমএস 210

আমরা কত গণনা করি -i? আমি দেখতে পাচ্ছি আপনি এটি 1 হিসাবে গণনা করছেন তবে আমি অনুমান করব এটি আসলে 3 হিসাবে গণনা করা উচিত? :-)
andlrc

@ দেব-নাল, তিনটি কেন? আমি মনে করি পিপিসি.এসই সম্মেলনে হাইফেন-বিয়োগ অক্ষর নয়, একটি পত্রে অক্ষরগুলি গণনা করা হয়েছে তবে আমি ভুল হলে দয়া করে আমাকে সংশোধন করুন। (দেখে মনে হচ্ছে আপনি এই প্রশ্নটির ইওরোর নিজের উত্তরের জন্য একই গণনা সম্মেলনটি ব্যবহার করছেন ((ঘটনাচক্রে, দুর্দান্ত উত্তর)))
এমএস 210

@ এমএস 210 আমি আরও 3 টি অক্ষর বনাম -iছাড়াই এবং তারপরে ইনপুট নম্বরটি ব্যবহার করার সময় কেবলমাত্র পার্থক্যটি গণনা করছিলাম - যা আমি অনুমান করি যে আমাদের গণনা করা উচিত নয়। তবে আমি আজ সকালে এটি সম্পর্কে ঠিক যদিও ভুল হতে পারি :-)perl -i10 -pe';'perl -pe';'
andlrc

3

Vitsy, 44 বাইট

সম্ভবত কিছু হ্রাস হতে পারে - আমি পারলে আরও কিছু জিনিস বের করবো।

0vVWl:X[4M1+mDvV-);]lvXv?v-N
vD([1-]
v1+
vX0

ব্যাখ্যা (প্রগতিতে):

0vVWl:X[4M1+mDvV-);]lvXv?v-N
0v             Save 0 as our temp var to edit.
  V            Save the input as a global var.
   W           Grab a line of STDIN.
    l          Push the length of the stack.
     :         Clone the stack. This is for later use.
      X        Remove the top item of the stack (we don't need the length right now.
[            ] Do the stuff in the brackets infinitely.
 4M            Modulo 4.
   1+          Add one.
     m         Go to the line index as specified by the top item of the stack.
      Dv       Duplicate the top item, save it in the temp var.
        V-);   If the top value is equal to the input number, exit the loop.
l              Push the length of the stack.
 vXv           Dump the temp var, then save the top item.
    ?          Rotate back to the original stack.
     v-        Subtract the top item (the original length) by the temp var (new length)
       N       Output the top item of the stack of the number.

vD([1-]
v              Push the temp variable to the stack.
 D([  ]        If this value is not zero...
    1-         Subtract one from it.

v1+            Push the temp variable to the stack, then add one to it.

vX0            Dump the temp var and replace it with zero.

এটি অনলাইন চেষ্টা করুন! (বড় পরীক্ষার কেস)


2

পিএইচপি, 88 বাইট

এটি কিছু তৈরি করে (3 + 2n যেখানে এন কমান্ডের সংখ্যা চালানো হয়) বিজ্ঞপ্তিগুলি কিন্তু এটি গল্ফিংয়ের পক্ষে কোনও ব্যাপার নয়, তাই না?

<?php for(;$x++<$argv[1];)switch($argv[2][$i++]){case R;$x=2;case D;--$x?--$x:0;}echo$i;

ungolfed:

<?php                    # actually 1 byte shorter not as a function
for(;$x++<$argv[1];)     # not initialising the $x causes a notice but still works
                         # post increment $x by 1 regardless of the command (saves us writing a U case)
  switch($argv[2][$i++]) # get next command, increment number of commands
    {case R;             # R gets treated as a constant with value 'R'. and a notice
      $x=2;              # falling through to D which will double decrement so set to 2
    case D;              # same trick as R
      --$x?--$x:0;}      # decrement once then again if >0
echo$i;                  # output

নোটিশগুলি ঠিক আছে, যতক্ষণ না এখনও কোডটি চালানো যায়।
জাগারব

2

পাইথন, 121 বাইট

def f(a,n):
 i=c=0
 while i<n:i={'U':lambda x:x+1,'D':lambda x:0 if x==0 else x-1,'R':lambda x:0}[a[c]](i);c+=1
 return c

1
পিপিসিজিতে আপনাকে স্বাগতম! এখানে আমাদের ডিফল্টরূপে প্রয়োজন যে উত্তরগুলি হ'ল সম্পূর্ণ প্রোগ্রাম যা এসটিডিআইএন থেকে এসটিডিআউট থেকে মুদ্রণ করে, বা ফাংশনগুলি যা আর্গুমেন্ট হিসাবে ইনপুট নেয় এবং আউটপুট মান ফেরত দেয়। আপনার সমাধান ইনপুটগুলিকে হার্ড-কোড করে, যা অনুমোদিত নয়।
জাগারব

ফাংশন গঠনের মাধ্যমে সংশোধন করা হয়েছে, আমি যখন এটি লিখেছিলাম তখন আমি দোভাষী ব্যবহার করছিলাম।
অ্যালেক্স বুর্গ

ধন্যবাদ! ## Python, <N> bytesঅন্যকে আপনার স্কোর দেখানোর জন্য আপনারও ফর্মের একটি শিরোনাম যুক্ত করা উচিত ।
জাগারব

আমি মনে করি না এখানে কোনও নামহীন ফাংশন থাকতে পারে।
user48538

আপনি প্রতিস্থাপন বাইট সংরক্ষণ করতে পারবেন 0 if x==0 else x-1সঙ্গেx and x-1
Cyoce

2

জাভাস্ক্রিপ্ট, 131 106 বাইটস-

আমি জানি এটি একটি কোড গল্ফ প্রতিযোগিতা জিততে পারে না, তবে এটি কার্যকর করার জন্য একটি মজাদার এবং বোকা সমাধান ছিল:

l=>s=>Function('i=c=0;'+s.replace(/./g,x=>`c++;i${{R:"=0",U:`++;if(i>=${l})re‌​turn c`,D:"--"}[x]};`))()

আমি গতিশীলভাবে উত্পন্ন অপরিহার্য সমাধান তৈরি করে একটি "কার্যকরী" রুটের বিপরীতে চলেছি, কোনও নির্দেশের কোনও উদাহরণ বর্ধিত বা হ্রাস, এবং একটি পাল্টা বর্ধনের সাথে প্রতিস্থাপন করা হয়েছে।

আমাকে 29 বাইট বাঁচানোর জন্য সাইকোসকে ধন্যবাদ!


এখানে, আমি 29 বাইটগুলি গল্ফ করেছি:l=>s=>Function('i=c=0;'+s.replace(/./g,x=>`c++;i${{R:"=0",U:`++;if(i>=${l})return c`,D:"--"}[x]};`))()
সাইয়েস

2

পাইথন 3, 90

ডিএসএমকে ধন্যবাদ 6 বাইট সংরক্ষণ করা হয়েছে।

এখনই খুব সহজ।

def f(c,n):
 f=t=0
 for x in c:
  f+=1|-(x<'E');f*=(x!='R')&(f>=0);t+=1
  if f>=n:return t

পরীক্ষার কেস:

assert f('U', 1) == 1
assert f('DDRUDUU', 1) == 4
assert f('UDDUUUUURUUUUDDDD', 4) == 7
assert f('UDDUURUUUUUUUDDDD', 4) == 10
assert f('UUDDUUDUDUUDDUDUUUUDDDUDUUDUDUDUDDUUUUDUDUUDUDUUUDUDUDUUDUUUDUUUUUDUUDUDUUDUDUUUUUDUDUUDUDUDUDDUUUUUUUDUDUDUDUUUUUDUDUDUDUDUDUDUDUUDUUUUUURUUUDUUUUDDUUDUDUDURURURUDUDUUUUDUUUUUUDUDUDUDUDUUUUUUDUDUUUUUUUDUUUDUUDUDUDUUDUDUDUUUUUUUUUUDUUUDUDUUDUUDUUUDUUUUUUUUUUUUUDUUDUUDUDUDUUUDUDUUUUUUUDUUUDUUUDUUDUUDDUUUUUUUUDUDUDUDUDUUUUDUDUUUUUUUUDDUUDDUUDUUDUUDUDUDUDUUUUUUUUUDUUDUUDUUUDUUDUUUUUUUUUUUDUDUDUDUUUUUUUUUUUUDUUUDUUDUDDUUDUDUDUUUUUUUUUUUUDUDUDUUDUUUDUUUUUUUDUUUUUUUUUDUDUDUDUDUUUUUUDUDUDUUDUDUDUDUUUUUUUUUUUUUUUDUDUDUDDDUUUDDDDDUUUUUUUUUUUUUUDDUDUUDUUDUDUUUUUUDUDUDUDUDUUUUDUUUUDUDUDUUUDUUDDUUUUUUUUUUUUUUUUUUDUUDUUDUUUDUDUUUUUUUUUUUDUUUDUUUUDUDUDUUUUUUUUUDUUUDUUUDUUDUUUUUUUUUUUUDDUDUDUDUUUUUUUUUUUUUUUDUUUDUUUUDUUDUUDUUUUUUUUUUUDUDUUDUUUDUUUUUUDUDUDUUDUUUUUUUUUUUUDUUUDUUDUDUDUUUUDUDUDUDUDUUUUUUUUUUUDUUUUDUDUUUUDUUUUDUDUUUUDUUUUDUDUUUUDUUUUDUDUUUUDUUUUDUDUUUUDUUUUDUDUUUUDUUUUDUDUUUUDUUUUDUDUUUUDUUUUDUDUUUUDUUUUDUDUUUUDUUUUDUDUUUUDUUUUDUDUUUUDUUUUDUDUUUUDUUUUDUDUUUUDUUUUDUDUUUUDUUUUDUDUUUUDUUUUDUDUUUUDUUUUDUDUUUUDUUUUDUDUUUUDUUUUDUDUUUUDUUUUDUDUUUUDUUUUDUDUUUUDUUUUDUDUUUUDUUUUDUDUUUUDUUUUDUDUUUUDUUUUDUDUUUUDUUUUDUDUUUUDUUUUDUDUUUUDUUUUDUDUUUUDUUUUDUDUUUUUU', 354) == 872

1

পিএইচপি, 129 বাইট

function r($h,$s){$i=0;$c=1;while($x=$s[$i++]){if($x=='U'){$c++;}elseif($x=='D'){--$c<1?$c=1:0;}else{$c=1;}if($c>$h){return$i;}}}

বিজয়ী নয়, তবে তৈরি করা মজাদার। পিএইচপি টেরিনারি অপারেটরের খালি অংশগুলি অপছন্দ করে বলে মনে হচ্ছে (এটি একটি সিনট্যাক্স ত্রুটি ছুঁড়ে ফেলেছে), তাই আমাকে 0সেখানে রেখে দিতে হয়েছিল।

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

function r($h,$s) {          // $h - height of ladder; $s - instructions
  $i = 0;                    // Instruction index
  $c = 1;                    // Position on ladder
  while ($x = $s[$i++]){     // Set $x to current instruction and increment index
    if ($x == 'U'){          // If instruction is U...
      $c++;                  // Increment ladder position
    } elseif ($x == 'D') {   // If instruction is D...
      --$c < 1 ? $c = 1 : 0; // Decrement ladder position, if under 1 set to 1
    } else {                 // If instruction is anything else (in this case R)
      $c = 1;                // Reset ladder position
    }
    if ($c > $h) {           // If ladder position is larger than height...
      return $i;             // Return current instruction index
    }
  }
}

1

পিএইচপি, 113 বাইট

এর ছোট সংস্করণ Https://codegolf.stackexchange.com/a/74575/13216 এর

function r($h,$s){$i=0;$c=1;while($x=$s[$i++]){$c+=($x=='U'?1:($x=='D'?($c>1?-1:0):1-$c));if($c>$h){return $i;}}}

Ungolfed:

// $h - height of ladder; $s - instructions
function r($h,$s) {
    $i = 0;
    $c = 1;
    while ($x = $s[$i++]) {
        $c += (
            $x=='U'?
                1
            :
                (
                    $x=='D'? (
                        $c>1?
                            -1
                        :
                            0
                    ):
                        1-$c
                )
        );
        if ($c > $h) {
            return $i;
        }
    }
}

2
দুর্দান্ত প্রথম পোস্ট! আমি আরও ভাল পাঠযোগ্যতার জন্য আপনার পোস্ট সম্পাদনা করেছি। শুভ গল্ফিং!
গামারকম্পস

1

পাইথ, 19 বাইট

x.u@[tWNNhN00)CYz0Q

এটি অনলাইনে ব্যবহার করে দেখুন: বিক্ষোভ বা পরীক্ষার স্যুট

ব্যাখ্যা:

x.u@[tWNNhN00)CYz0Q   implicit: z = input string, Q = input number
 .u             z0    reduce z: for each char Y in z manipulate N = 0 with:
    [        )           create a list with
     tWNN                  * N-1 if N>0 else N
         hN                * N+1
           0               * 0
            0              * 0
   @          CY         replace N by the ord(Y)-th element (mod 4)
 .u                   .u give us a list with all intermediate values of N
x                 Q   print the index of Q in this list

1

জাভা, 250 বাইট

int cmds(int n, String s) {
int steps=1;
int count=0;
for (int i=0;i< s.length();i++) {
count++;
char c=s.charAt(i);
switch(c){
case 'D':
steps=(steps==1)?1:--steps;
break;
case 'R':
steps=1;
break;
case 'U':
++steps;
break;
}
if(steps>n)
return count;
}
return 0;
}

2
কোনও কোড-গল্ফ- চ্যালেঞ্জের উত্তর দেওয়ার সময় , আপনার উত্তরটি দিয়ে শুরু করা উচিত # <language_name>, XX bytes। এছাড়াও আপনি আপনার পরিবর্তনশীল নামগুলি প্রতিটি চরিত্রে হ্রাস করতে পারবেন এবং অতিরিক্ত শ্বেতস্থান সরিয়ে ফেলতে পারেন, এইভাবে আপনার বাইট গণনা হ্রাস পাবে (যা এখানে উদ্দেশ্য) ... আহা, এবং পিপিসিজিতে আপনাকে স্বাগতম!
সরানো হয়েছে

কিছু টিপস: কোড হিসাবে আপনার কোডটি প্রবেশ করতে লাইনের শুরুতে 4 টি স্পেস যুক্ত করুন। আপনি কিছু স্থান সরিয়ে ফেলেছেন, তবে আপনি আরও কিছু সরিয়ে ফেলতে পারেন (উদা: int steps=1; int count=0;আপনি ব্যবহারের পরিবর্তে int s=1,c=0;- দেখুন আমি ভেরিয়েবলের নামটি পরিবর্তন করেছি - ইত্যাদি)। আপনি এখনও একটি ব্যাখ্যা দিয়ে গল্ফযুক্ত সংস্করণের নীচে আপনার অগলিত সংস্করণটি দেখিয়ে দিতে পারেন ( আরও বাইটগুলি গল্ফ করাতে আপনাকে সহায়তা করার জন্য কেউ এই উপায় সহজ )।
সরানো হয়েছে

1

সি, 91 বাইট

সাথে কোনও সতর্কতা নেই gcc -Wall । পুনরাবৃত্তি এবং কমা-বিচ্ছিন্ন অভিব্যক্তি।

r.c খালি ফাংশন রয়েছে:

int r(int N,int n,int s,char*C){return*C&&s<=N?s+=*C&2?-s:*C&1?1:-1,r(N,n+1,s?s:1,C+1):n;}

মন্তব্য

int r(int N,   // number of steps on ladder
      int n,   // result, seed with 0
      int s,   // current step, seed with 1
      char *C  // command string
      )
{
    return *C&&s<=N ?  // still reading commands and still on ladder?
       s+=                // increment step value by...
        *C&2?             // bit test if 'R' but not 'U' or 'D'.
         -s               // negate to 0, will set to 1 in call if needed
         :*C&1?           // Not 'R', is it 'U'?
            1             // 'U', add 1
            :-1,          // Must be 'D', subtract 1
       r(N,n+1,s?s:1,C+1) // Recursive call, and fix case where s==0.
      :n;                 // end of string or fell off ladder
}

রেফারেন্সের জন্য,

'U'.charCodeAt(0).toString(2)
"1010101"
'D'.charCodeAt(0).toString(2)
"1000100"
'R'.charCodeAt(0).toString(2)
"1010010"

roboladder.c মোড়কের,

#include <stdio.h>
#include <stdlib.h>
#include "r.c"
int main(int argc, char * argv[])
{
  int N = atoi(argv[1]);
  int n = r(N,0,1,argv[2]);
  int check = atoi(argv[3]);
  printf("%d : %d\n", n, check);
  return 0;
}

Makefile পরীক্ষার জন্য,

run:
    @gcc -Wall robotladder.c -o robotladder 
    @./robotladder 1 U 1
    @./robotladder 1 DDRUDUU 4  
    @./robotladder 4 UDDUUUUURUUUUDDDD 7
    @./robotladder 4 UDDUURUUUUUUUDDDD 10
    @./robotladder 6 UUUUUDRUDDDDRDUUUUUUDRUUUUUUUDR 20
    @./robotladder 10 UUUUUURUUUUUUURUUUUUUUURUUUUUUUUUUUUUU 34
    @./robotladder 6 UUUDUUUUDDDDDDDDDDDDDDRRRRRRRRRRRUUUUUU 8
    @./robotladder 6 UUUDUUUDURUDDDUUUUUDDRUUUUDDUUUUURRUUDDUUUUUUUU 32
    @./robotladder 20 UUDDUDUUUDDUUDUDUUUDUDDUUUUUDUDUUDUUUUUUDUUDUDUDUUUUUDUUUDUDUUUUUUDUDUDUDUDUUUUUUUUUDUDUUDUDUUUUU 56
    @./robotladder 354 UUDDUUDUDUUDDUDUUUUDDDUDUUDUDUDUDDUUUUDUDUUDUDUUUDUDUDUUDUUUDUUUUUDUUDUDUUDUDUUUUUDUDUUDUDUDUDDUUUUUUUDUDUDUDUUUUUDUDUDUDUDUDUDUDUUDUUUUUURUUUDUUUUDDUUDUDUDURURURUDUDUUUUDUUUUUUDUDUDUDUDUUUUUUDUDUUUUUUUDUUUDUUDUDUDUUDUDUDUUUUUUUUUUDUUUDUDUUDUUDUUUDUUUUUUUUUUUUUDUUDUUDUDUDUUUDUDUUUUUUUDUUUDUUUDUUDUUDDUUUUUUUUDUDUDUDUDUUUUDUDUUUUUUUUDDUUDDUUDUUDUUDUDUDUDUUUUUUUUUDUUDUUDUUUDUUDUUUUUUUUUUUDUDUDUDUUUUUUUUUUUUDUUUDUUDUDDUUDUDUDUUUUUUUUUUUUDUDUDUUDUUUDUUUUUUUDUUUUUUUUUDUDUDUDUDUUUUUUDUDUDUUDUDUDUDUUUUUUUUUUUUUUUDUDUDUDDDUUUDDDDDUUUUUUUUUUUUUUDDUDUUDUUDUDUUUUUUDUDUDUDUDUUUUDUUUUDUDUDUUUDUUDDUUUUUUUUUUUUUUUUUUDUUDUUDUUUDUDUUUUUUUUUUUDUUUDUUUUDUDUDUUUUUUUUUDUUUDUUUDUUDUUUUUUUUUUUUDDUDUDUDUUUUUUUUUUUUUUUDUUUDUUUUDUUDUUDUUUUUUUUUUUDUDUUDUUUDUUUUUUDUDUDUUDUUUUUUUUUUUUDUUUDUUDUDUDUUUUDUDUDUDUDUUUUUUUUUUUDUUUUDUDUUUUDUUUUDUDUUUUDUUUUDUDUUUUDUUUUDUDUUUUDUUUUDUDUUUUDUUUUDUDUUUUDUUUUDUDUUUUDUUUUDUDUUUUDUUUUDUDUUUUDUUUUDUDUUUUDUUUUDUDUUUUDUUUUDUDUUUUDUUUUDUDUUUUDUUUUDUDUUUUDUUUUDUDUUUUDUUUUDUDUUUUDUUUUDUDUUUUDUUUUDUDUUUUDUUUUDUDUUUUDUUUUDUDUUUUDUUUUDUDUUUUDUUUUDUDUUUUDUUUUDUDUUUUDUUUUDUDUUUUDUUUUDUDUUUUDUUUUDUDUUUUDUUUUDUDUUUUDUUUUDUDUUUUDUUUUDUDUUUUDUUUUDUDUUUUUU 872
    @wc -c r.c

1

গণিত, 114 120 বাইট

(d=#~Max~1-1&;u=#+1&;r=1&;s=StringToStream@ToLowerCase@#;l=1;t=1;While[(l=ToExpression[s~Read~Character]@l)<=#2,t++];t)&

বেনামে ফাংশন, যা দুটি আর্গুমেন্ট নেয় (সি, এন)। এটি ব্যবহার করে সাবধানতা অবলম্বন করুন, কারণ এটি খোলার স্ট্রিমটি বন্ধ করে না। এছাড়াও এটি বিশ্বব্যাপী এর সমস্ত ভেরিয়েবল নির্ধারণ করে।

প্রতিস্থাপন করতে সম্পাদিত d=#-1&সঙ্গে d=#~Max~1-1&, যাতে robie খনন যেতে না।


অপেক্ষা করুন: আমি এটি বৈধ বলে মনে করি না। এটি রোবটকে নেতিবাচক পদক্ষেপ নেওয়ার অনুমতি দেয়। উপস। এটি আমাকে অ-বিস্তৃতভাবে পরীক্ষা করতে শেখাবে ... সুযোগ পেলেই আমি একটি সংশোধন করে ফেলব put
hYPotenuser


0

Clojure, 92 84 বাইট

nশূন্য পরিবর্তে শূন্য থেকে গণনা করতে nপারেন, ব্যবহার করতে পারেনtake-while pos?

#(count(take-while pos?(reductions(fn[p o](if o(min(o p 1)%)%))%(map{\U -\D +}%2))))

মূল:

#(count(take-while(partial > %)(reductions(fn[p o](if o(max(o p 1)0)0))0(map{\U +\D -}%2))))

মানচিত্র 2nd যুক্তি Uকরার +, Dকরতে -এবং অন্যদের nil। হ্রাস ফাংশন (operand position 1)অ-নাল operandএবং 0অন্যথায় চালিত হয় । আমরা 1 ম ইনপুট আর্গুমেন্টের চেয়ে বেশি না হওয়া অবধি মান নিয়ে যায় এবং আমরা কতটা পেয়েছি তা গণনা করে।


0

গণিত, 67 বাইট

(p=i=0;While[p<#,p=Switch[#2[[++i]],"U",p+1,"D",1~Max~p-1,_,0]];i)&

দুটি আর্গুমেন্টের একটি নামহীন ফাংশন, একটি ধনাত্মক পূর্ণসংখ্যা এবং অক্ষরের একটি তালিকা, যা ইতিবাচক পূর্ণসংখ্য ফেরত দেয়। Whileঅন্যান্য ম্যাথমেটিকা ​​প্রবেশের চেয়ে আরও সহজ বাস্তবায়ন, যা আরও প্রতিযোগিতামূলক দৈর্ঘ্যের ফলস্বরূপ পরিচালনা করে।

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