মোটরসাইকেলের গিয়ার চেকার!


36

আপনারা কেউ কেউ মোটরসাইকেলটি যেভাবে স্থানান্তরিত করেছেন তার সাথে পরিচিত হতে পারেন। তবে যাঁরা করেন না, তাঁদের কাছে এটির মতো দেখাচ্ছে

6

5

4

3

2

এন

1

কয়েকটি আপ এবং ডাউন শিফট সম্পাদনের পরে আমি কী গিয়ারে আছি তা জানতে চাই। প্রোগ্রামটি নিরপেক্ষ থেকে কাজ করা উচিত।

নমুনা ইনপুট:

V^^

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

2

আপনি দেখতে পাচ্ছেন যে আমি একবার এন থেকে 1 ডাউন ডাউন শিফট করেছিলাম এবং 2 বার দ্বিতীয় গিয়ারে উপস্থাপন করেছি।

এটি একটি কোড গল্ফ। বাইট জিতে সংক্ষিপ্ত উত্তর।

দ্রষ্টব্য: ইনপুটটি কোনও 2 টি অক্ষর হতে পারে। উপরে এবং ডাউনের জন্য ইউ এবং ডি হতে পারে বা যা কিছু আপনি চান এটি একটি স্ট্রিং হতে হবে । আপনি 1 ম বা 6th ষ্ঠ গিয়ারের বাইরে স্থানান্তর করতে পারবেন না। আপনি যদি 6 তম হন এবং আবার উপস্থাপনাটি এটি 6 তম স্থানে থাকবে। শুভকামনা!


5
পরের বার, দয়া করে
মূলটিতে

1
@ সেশোমারা কেবলমাত্র দুটি প্রয়োজন হ'ল একটি স্ট্রিং হওয়া দরকার এবং আপনি কেবল 2 টি অক্ষর ইনপুট করতে পারবেন। সুতরাং একটি চরিত্র হিসাবে একটি নতুন লাইন ব্যবহার করতে পারে। তবে আপনি যদি এটি অন্য কোনও কারণে ব্যবহার করেন তবে সত্যিই আমার আপত্তি নেই। আপনার মনে কী আছে তা দেখতে আকর্ষণীয় হবে। তবে আপনি যদি এটি করেন তবে আপনি কেন সেভাবে এটি করেছেন তার একটি সংক্ষিপ্ত ব্যাখ্যা দিন। জি এল!
মার্টিজন ভিজাররা

4
এটি লজ্জার বিষয় যে এটি 1 এবং N এর মধ্যে অর্ধ-পদক্ষেপের পরিবর্তনের জন্য বিবেচনা করে না It এটি কেবলমাত্র 2 এন 1 এন 2 3 যেতে পারবেন না, তবে 2 1 এন 2 3 যেতে পারবেন
কর্ট অ্যাম্মন

2
আমি @ কর্টআ্যাম্মনকে সম্মত - 1 এবং 2 এর মধ্যে একক শিফট আছে যেখানে এটি নিরপেক্ষ সেখানে অর্ধ শিফট।
ডিউরিস

2
সমস্ত মোটরসাইকেল এ জাতীয় স্থানান্তরিত হয় না। বেশিরভাগ ক্লাচহীন মোটরসাইকেলগুলি এন-1-2-৩-৩- এ স্থানান্তরিত হয় (বা কিছু প্রাচীন যানবাহনে এন-১-২-৩)। তারা গিয়ার 5 বা 6 আছে এবং একটি রাউন্ড গিয়ার, অর্থাত ব্যবহার করবেন না যখন এটি 4 তারপর গিয়ার বৃদ্ধি করতে হবে এটি এন চারপাশে মোড়ানো
phuclv

উত্তর:


15

জাভাস্ক্রিপ্ট (ES6), 49 48 47 46 বাইট

প্রত্যাশা করে:

  • 1 নিচে জন্য
  • 7 আপ জন্য
f=([c,...s],g=2)=>c?f(s,g-c&7||g):'1N'[--g]||g

বিন্যাসিত এবং মন্তব্য

f = (                   // f is a recursive function which takes:
  [c,                   // - c = next character in input string
      ...s],            // - s = remaining characters
  g = 2                 // - g = current gear, with default = neutral = 2
) =>                    //
  c ?                   // if there's still a character to process:
    f(                  //   do a recursive call with:
      s,                //     - the remaining characters
      g - c & 7 ||      //     - the updated gear if it is valid
      g                 //       or the previous gear if not
    )                   //
  :                     // else:
    '1N'[--g] ||        //   decrement g and output '1' for g = 0, 'N' for g = 1,
    g                   //   or simply the corresponding digit for other values

গিয়ারগুলি নিম্নরূপে ম্যাপ করা হয়েছে:

g MOD 8 = 0 1 2 3 4 5 6 7
          ---------------
gear    = X 1 N 2 3 4 5 6       (where 'X' is an invalid state)

যা আমাদের সাথে সহজেই বর্তমান গিয়ারের বৈধতা পরীক্ষা করতে সহায়তা করে:

(g & 7) != 0

ডেমো


7

05 এ বি 1 ই , 22 20 বাইট

Îvy<+®‚Z5‚W}6LÀ'N¸ìè

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

ব্যাখ্যা

Î                      # push 0 (accumulator) and input
 v         }           # for each in input
  y<+                  # decrement current element and add to accumulator
     ®‚Z               # take maximum of current value and -1
        5‚W            # take minimum of current value and 5
            6L         # push the range [1 ... 6]
              À        # rotate left
               'N¸ì    # prepend the letter "N" producing the list [N, 2, 3, 4, 5, 6, 1]
                   è   # index into this list with the value produced by the loop

6

এমএটিএল, 32 28 23 বাইট

5 লাইট সংরক্ষণ করেছেন লুইসকে ধন্যবাদ

'234561N'j!Uq[aA]&Ys0))

এই সমাধানটি '2'আপ-শিফট এবং '0'ডাউন-শিফ্টের জন্য ব্যবহার করে।

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

ব্যাখ্যা

'234561N'   % Push the string literal to the stack
j           % Grab the input as a string
!U          % Convert the input to a numeric array based on the characters.
q           % Subtract 1 to turn '2' into 1 and '0' into -1
[aA]        % Push the array [-1 5] to the stack
&Ys         % Compute the cumulative sum using the array [-1, 5] as
            % the upper and lower limits at each point
0)          % Get the last value from the cumulative sum
)           % Use this to index into the initial string literal.
            % Implicitly display the result

@ লাইফলেস একটি ব্যাখ্যার সাথে আপডেট হয়েছে
স্যুভার

খুব সুন্দর! আমি জিজ্ঞাসা করতে পারি কেন স্ট্রিংটি 1n23456 বা 65432n1 এর পরিবর্তে 234561N হয়? আমিও ত্রুটি খুঁজে পেলাম! আপনি যদি আপপরিচালন চালিয়ে যান তবে এটি 6th ষ্ঠ গিয়ারে থাকা উচিত তবে এটি এন
মার্টিজন ভিজার্সকে

1
নিস! চামসুমের সীমাবদ্ধতার কৌশল সম্পর্কে জানতেন না
বি মেহতা

1
@ বি মেহতা আমাকে না! লুইস এটির প্রস্তাব দিয়েছিল
স্যুভার

1
@ বি মেহতা এছাড়াও, এমএটিএল চ্যাটরুমে আমাদের সাথে নির্দ্বিধায় যোগদান করুন !
সোয়েভার

6

ভি , 20 , 15 বাইট

:sil!î¬61énÀxVp

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

ইনপুট হ'ল h(উপরে) এবং l(ডাউন) অক্ষরের একটি স্ট্রিং ।

5 বাইট সংরক্ষণ করার জন্য এবং আমাকে একটি ভিএম বৈশিষ্ট্য সম্পর্কে শেখানোর জন্য @nmjcman কে ধন্যবাদ যে আমি কখনই জানতাম না!

আমরা যদি ধরে নিতে পারি যে ইনপুটটি কখনই সীমা ছাড়বে না, এটি কেবল 9 বাইট হবে:

¬61énÀxVp

কিন্তু দুর্ভাগ্যক্রমে এটি অনুমোদিত নয়।

ব্যাখ্যা:

:sil!           " If the cursor goes out of bounds, ignore it and continue
     î          " Run the following keystrokes as V code, rather than vimscript:
      ¬61       "   Insert the string "654321". This will leave the cursor on the '1'
         én     "   Insert an 'n'
           À    "   Run the first arg as V code. This will move left and right a bunch of times
            x   "   Delete whatever character we ended up on
             V  "   Select this whole line,
              p "   And replace it with the character we just deleted

2
এছাড়াও, এটি অনলাইন চেষ্টা করুন! ভি সংকোচনের। চমৎকার.
nmjcman101

প্রকৃতপক্ষে, আমি মনে করি এটি কাজ করে না কারণ 1/6 এর অধীনে বা ম্যাক্রো ভেঙে যায়: /
nmjcman101

9 বাইট উত্তর কেন অনুমোদিত নয়?
অ্যালবার্ট রেনশওয়া

@ অ্যালবার্টরেনশওয়া যদি আপনি কখনও ১ ম বা 6th ষ্ঠ গিয়ারের বাইরে যাওয়ার চেষ্টা করেন তবে এটি ব্যর্থ হয়। উদাহরণস্বরূপ এটি অনলাইন চেষ্টা করুন! আউটপুট করা উচিত n, না 1
ডিজেএমসিএমহেম

ওহ, আমি দেখেছি, আমি ভেবেছিলাম ইনপুট দ্বারা সর্বদা বৈধ আপনার অর্থ হ'ল স্থানান্তরিত অক্ষর। এমনকি যদি এটি অবৈধ হয়
তবেও

6

জাভা 7, 106 105 103 বাইট

char c(String s){int r=1;for(int c:s.toCharArray())r+=c<99?1:-1;return"1N23456".charAt(r<0?0:r>6?6:r);}

ব্যাখ্যা:

char c(String s){                // Method with String input and character return-type
  int r = 1;                     // Result-index (0-indexed and starting at 1)
  for(int c : s.toCharArray()){  // Loop over all characters in the input String
    r += c < 99 ?                //  If the current character is '^':
           1                     //   Raise the result-index by 1
         :                       //  If it is 'v' instead:
           -1;                   //   Decrease the result-index by 1
  }
  return "1N23456".charAt(       // Return the character based on the return-index:
           r < 0 ?               //  If the result-index is below 0
                  0              //   Use 0 instead
                 : r > 6 ?       //  Else-if the result-index is above 6
                          6      //   Use 6 instead
                         :       //  Else
                          r);    //   Use the result-index
}

পরীক্ষার কোড:

এখানে চেষ্টা করুন।

class M{
  static char c(String s){int r=1;for(int c:s.toCharArray())r+=c<99?1:-1;return"1N23456".charAt(r<0?0:r>6?6:r);}

  public static void main(String[] a){
    System.out.println(c("v^^"));
    System.out.println(c("^^^^^^^^"));
    System.out.println(c("vvvv^^^vvvv"));
    System.out.println(c("^v^v^v^v"));
  }
}

আউটপুট:

2
6
1
N

5

হাস্কেল, 59 53 51 বাইট

("1N23456"!!).foldl(\l c->max 0$min 6$l+read[c]-1)1

ব্যবহার 0নিচে এবং 2আপ জন্য। ব্যবহারের উদাহরণ:

(("1N23456"!!).foldl(\l c->max 0$min 6$l+read[c]-1)1) "0002"

@ এক্সনরকে 6 বাইট ছাড়ার জন্য ধন্যবাদ! এছাড়াও, দেখা যাচ্ছে যে আমার কোনও ফাংশনের নাম বা প্রথম বন্ধনী প্রয়োজন নেই যাতে এটি অন্য 2 বাইট।


আপনি যদি ইনপুট চরগুলি 0 এবং 2 হিসাবে নেন তবে আপনি এটি করতে পারেন read[c]-2
xnor

পিপিসিজিতে আপনাকে স্বাগতম! বেনামে ফাংশনগুলিও খুব ভাল, সুতরাং আপনার প্রয়োজন হবে না g=
লাইকনি

@ লাইকনি আমাকে এনে প্রথম বন্ধনীতে আবদ্ধ করতে হবে, তাই না? এটি বাইট গণনাটি পরিবর্তন করবে না তাই আমি ভেবেছিলাম g=কারণ আমি এটি পরিষ্কার করছি কারণ
ব্যবহারকারী 1472751


4

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

s=>"1N23456"[[1,...s].reduce((a,b)=>a?a<6?+b?a+1:a-1:6:0)]

ব্যবহার

এটি একটি ফাংশনে বরাদ্দ করুন এবং তারপরে এটি কল করুন। ইনপুট হ'ল একটি স্ট্রিং 1যা একটি আপশিফ্টের জন্য একটি এবং একটি ডাউনশફ્ટের 0জন্য একটি থাকে।

f=s=>"1N23456"[[1,...s].reduce((a,b)=>a?a<6?+b?++a:a--:6:0)]
f("011")
-> "2"
f("0")
-> "1"
f("01")
-> "N"

চ (0) ফেরৎ 1 না এন ... এবং আপনার কোড আয় undef আপনি থেকে 1 টি নিচে 6 থেকে নামান বা
fənɛtɪk

ভালো বল ধরা. দুই বাইট খরচে ফিক্সড
লুক

এনf("001") ফিরে আসা উচিত যেমন ইনপুট কাজ করে না (গিয়ার ডাউন 1, গিয়ার ডাউন 1 এ থাকা, এন পর্যন্ত গিয়ার)
Emigna

চারপাশে লুপ করার কথা নয়। এটি 6 থেকে আপশিফ্ট করা হলে 6 এ থাকতে হবে এবং 1 থেকে ডাউনশিফ্ট করা হলে 1 এ থাকতে হবে এছাড়াও, আপনি 1 থেকে ডাউনশিফট করলে এটি এখনও অপরিবর্তিত হবে
14:38

4

পিএইচপি 7.1, 71 বাইট

for(;$c=$argv[1][$i++];))$g=max(-1,min($g+=$c<=>X,5));echo N234561[$g];

$g-1 থেকে 5 এ শিফট , প্রথম গিয়ারের জন্য অফসেট নেতিবাচক স্ট্রিং ব্যবহার করে।
সঙ্গে চালান -nr, কমান্ড লাইন আর্গুমেন্ট হিসাবে স্ট্রিং নাড়াচাড়া প্রদান।


4

জেলি , 17 14 বাইট

1;r2ị$¥/CỊ¡o”N

ব্যবহার 6আপ জন্য এবং 0নিচে জন্য।

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

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

1;r2ị$¥/CỊ¡o”N  Main link. Argument: s (string of 6's and 0's)

1;              Prepend a 1 (integer) to the string/character array s.
       /        Reduce the result by the following dyadic link.
                Let's call the arguments x and y.
      ¥           Create a dyadic chain of 2 links:
  r                 Construct the range [x, ..., y] (increasing or decreasing).
                    y will be a character, but 'r' casts both argument to int.
                    This is intended for use with floats, but it works just as well
                    when the argument is a digit.
     $              Create a monadic chain of two links:
   2ị                 Take the second element of the constructed range.
                  When y = 6 > x, this gives x + 1.
                  When y = 0 < x, this gives x - 1.
                  When y = x, the range is a singleton array, so this gives x.
          ¡     Conditional application:
         Ị        If the previous result is insignificant (0 or 1):
        C           Subtract it from 1.
                This swaps 0 and 1 without affecting the other potential outcomes.
           o”N  Logical OR with 'N', replacing 0 with that character.

2

রুবি, 58 বাইট

->s{a=1;s.chars{|b|a-=[a<=>0,a<=>6][b<=>?v]};"1N23456"[a]}

প্রত্যাশিত ইনপুটটি ডাউন শাফ্টের জন্য 'v' এবং উপস্থাপনের জন্য '^'


2

প্রসেসিং জেএস (সংশোধিত) 121 বাইট

var g="1N23456",a="",c=0; for(var i=0;i<a.length;i++){if(a[i]==="d"&&c>0){c--;}else if(c<6&&a[i]==="u"){c++;}}println(g[c]);

Ungolfed

var g=[1,"N",2,3,4,5,6],a="",c=0;
for(var i=0;i<a.length;i++)
{if(a[i]==="d"&&c>0)
{
    c--;

}else if(c<6&&a[i]==="u")
{
    c++;

}

}
println(g[c]);

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

আমি পিজেদের সাথে যেহেতু আমি এটি ভাল জানি know একমাত্র সমস্যা হ'ল আমি যে সংস্করণটি ব্যবহার করি তা খুব কঠোরভাবে টাইপ করা। আমি বন্ধনী এবং প্রচুর অন্যান্য কৌশল চালিয়ে যেতে পারি না। এটা বেশ সহজ। ইনপুটটি ভেরিয়েবলের মধ্যে যেতে হবে aএবং এটি ছোট হাতের অক্ষরে লাগেu d । প্রোগ্রামটি স্ট্রিংয়ের শেষে না পৌঁছানো এবং প্রতিটি পুনরাবৃত্তি এটি আউ বা ডি হয় কিনা তা যাচাই করে lo যদি এটি হয় এবং এটি অতীতকে "শিফট" করার চেষ্টা করবে না যেখানে আপনি এটি স্থানান্তর করতে পারেন। শেষে আমি ফলাফল মুদ্রণ!


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

The input should go into the variable aহার্ড কোডেড ইনপুট ব্যবহার করা কোনও ডিফল্ট ইনপুট পদ্ধতি নয়, এখানে দেখুন
লাইকনি

@ লাইকনি সত্যি? সে নির্বোধ। আমার কাছে এর চেয়ে ভাল আর কোনও উপায় নেই। যদি আমাকে এটি আবার করতে হয় তবে এটি ~ 100 বাইট দীর্ঘ হবে
ক্রিস্টোফার

আপনি কি কোনও কার্যক্রমে কেবল নিজের কোডটি মোড়ানো করতে পারবেন না? যেমন। void f(String[] a){...}এটি খুব কমই 100 বাইট।
লাইকনি

@ লাইকনি খান একাডেমি প্রসেসিংজেএস-এ, এটি খাঁটি জেএস, এবং তাই স্ট্রিং বা অকার্যকর নেই। তবে আপনি ঠিক বলেছেন, একটি ফাংশনটি আরও ছোট হবে
ক্রিটিক্সী লিথোস

2

k, 25 বাইট

"1N23456"@{6&0|x+y-92}/1,

এটি স্ট্রিং হিসাবে ইনপুট নেয় [এবং ]ডাউনশিট এবং আপশিফ্টের জন্য ব্যবহার করে, কারণ তারা সুবিধামত অবস্থিত।

"1N23456"@                / the numbers 0 to 6 are used for the gears,
                          / this turns them into the correct number/letter
                       1, / prepend 1 because this is our initial gear
          {          }/   / fold the function through the list
                          / x is before, y is the next character
                 y-92     / subtract 92, which is between "[" and "]"
                          / "[" becomes -1 and "]" becomes 1
               x+         / add it to what we had before
           6&0|           / use max and min to set boundaries 6 and 0

উদাহরণ:

 shift:"1N23456"@{6&0|x+y-92}/1,
 shift"[]]"
"2"
 shift"]]]]]]]]"
"6"
 shift"[[[[]]][[[["
"1"
 shift"[][][][]"
"N"
 shift"[[[[[[[[]"
"N"
 shift"]]]]]]]]["
"5"

2

জিএনইউ সেড , 89 87 + 1 (আর পতাকা) = 88 বাইট

সেডের কোনও পূর্ণসংখ্যার ধরণ বা পাটিগণিত ক্রিয়াকলাপ না থাকায় কেবল নিয়মিত এক্সপ্রেশন ব্যবহার করে সমাধানটি উপস্থিত হয়।

s:$:65432Nx1:
:
/6x/!s:^U(.*)(.)x:\1x\2:
s:^D(.*)x(.):\1\2x:
t
s:U|D::
t
s:.*(.)x.*:\1:

এটি xপ্রতিটি ইনপুট শিফ্ট, বাম ( Uপি এর জন্য ) বা ডান ( Dনিজের জন্য ) ভিত্তিতে পয়েন্টারটি স্লাইড করে কাজ করে যা কেবলমাত্র কোষগুলি অন্তর্ভুক্ত করে 65432N1। শেষে উত্তরটি হল পয়েন্টারের বাম কক্ষের মান।

উদাহরণ রান: বা এটি অনলাইন চেষ্টা করুন!

sed -rf gear.sed <<< "UUUUUUD"
5

ব্যাখ্যা:

s:$:65432Nx1:              # assign initial tape and pointer
:                          # start loop
/6x/!s:^U(.*)(.)x:\1x\2:   # if shift 'U', slide `x` to left, but not past the edge
s:^D(.*)x(.):\1\2x:        # if shift 'D', slide `x` to right, -||-
t                          # repeat
s:U|D::                    # if a shift couldn't be applied, delete it "manually",
t                          # and jump to the start of the loop again
s:.*(.)x.*:\1:             # print value left of pointer `x` (answer)

এখানে by 76 বাইট রয়েছে তবে এটি অ্যানারিতে আউটপুট দেয়।
রিলে

@ রিলে ইউনারি অবশ্যই! ঠিক আছে, আপনার সমাধানটি আলাদা, তবে কেন এটি পোস্ট করবেন না!
শৈশুমারা

আপনারা আমাকে এর জন্য অনুপ্রেরণা দিয়েছিলেন। আমি ভেবেছিলাম আপনি চাইলে আমি এটি ব্যবহার করতে দেব।
রিলে

@ রিলে তারপরে আমি আপনার সংস্করণটি দিয়ে একটি আলাদা বিভাগ করব এবং আপনাকে ক্রেডিট করব।
শেশমারা

আমি কেবল আমার নিজের পোস্ট করব :)
রাইলি

2

জিএনইউ সেড , 76 73 বাইট

এর জন্য +1 অন্তর্ভুক্ত -r

s/$/1/
:
/1{6}/!s/^U(.*)/\11/
s/^D(.*)1/\1/
t
s/U|D//
t
s/^1$/N/
s/^$/1/

আউটপুট নিরপেক্ষ ব্যতীত অবিচ্ছিন্ন, যা এখনও রয়েছে N( এই sensকমত্য দেখুন )।

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

এটি মূলত অ্যানারিতে উপরে এবং নীচে গণনা করে তারপর 1 থেকে এন এবং 0 থেকে 1 রূপান্তর করে।

s/$/1/               # add 1 to the end (the starting value)
:                    # loop start
/1{6}/!s/^U(.*)/\11/ # If the string starts with 'U' and doesn't have 6 ones, increment
s/^D(.*)1/\1/        # If the string starts with 'D' decrement (but not past 0)
t                    # if something changed loop back
s/U|D//              # if the U or D couldn't be applied, remove it.
t                    # if something changed loop back
s/^1$/N/             # replace 1 with N
s/^$/1/              # if "0", replace with 1

আপনার সিড সংস্করণটি 4 টি বাইট দ্বারা সংক্ষিপ্ত হতে পারে বলে আমি মনে করি, আপনি যদি 1প্রাথমিক মান হিসাবে N, যেমন হিসাবে এবং তেমন কিছুই করেন না 1s/$/1/;:;/1{6}/!s/^U(.*)/\11/;s/^D(.*)1/\1/;t;s/U|D//;t;s/^1$/N/;s/^$/1/
শৈশুমারা

2

রেবোল, 96 93 বাইট

f: func[s][g: next"1N23456"parse s[any["D"(g: back g)|"U"(unless tail? x: next g[g: x])]]g/1]

Ungolfed:

f: func [s] [
    g: next "1N23456"
    parse s [
        any [
              "D" (g: back g)
            | "U" (unless tail? x: next g [g: x])
        ]
    ]
    g/1
]

ব্যবহারের উদাহরণ (রেবোল কনসোলে):

>> print f "DUU"         
2

>> print f "DDDUU"
2

>> print f "UUUUUUUUU"  
6

>> print f "UUUUUUUUUD"
5

2

> <> , 35 বাইট

কোডের একটি উত্সাহী অংশ যা আপনাকে গতির সীমা ছাড়িয়ে গাড়ি চালাতে উত্সাহ দেয়।

উদাহরণস্বরূপ 0এবং এর কোড মডুলো 3 0 এবং 2 হ'ল এমন দুটি ইনপুট গ্রহণ করে 2
অতিরিক্ত fishiness জন্য, আমি কার্যকারিতা সম্পর্কে কোন তথ্য <এবং >

1i:0(?;3%1-+:0(?0:6)?6:1go!
1N23456

ব্যাখ্যা:

1i:0(?;3%1-+:0(?0:6)?6:1go!
1                             # initial position
 i                            # read the next char
  :0(?;                       # copies it, test copy against 0, if lower stops (EOF detection)
       3%1-                   # map the char to -1 or 1
           +                  # add it to the position
            :0(?0             # if the new position is lower than 0, set to 0
                 :6)?6        # if the new position is greater than 6, set to 6
                      :1go    # output a character from line 1 at the position
                          !   # loops and skip the position initialisation

আপনি এটি এখানে চেষ্টা করতে পারেন !


1

স্পেসবিএএস - 102

1 g=2: INPUT s$
2 FOR i=1 TO LEN s$
3 g+=(s$(i)="^" AND g<7)-(s$(i)="v" AND g>1)
4 NEXT i
5  ?"1N23456"(g)

ইনপুট উপর নির্ভর করে স্ট্রিং এর সূচি সরানো এবং প্রাসঙ্গিক অক্ষর মুদ্রণ।


1

পাইথ, 32 বাইট

J1VQ=JhtS[06+J-qNbqNd;?qJ1\N?JJ1

ডাউন এবং আপের জন্য স্পেস এবং নিউলাইন ব্যবহার করে।

ব্যাখ্যা

J1VQ=JhtS[06+J-qNbqNd;?qJ1\N?JJ1
J1                                 Initialize J to 1
  VQ                 ;             For each character in the input
            +J-qNbqNd              Increment or decrement J
      htS[06                       Get the middle sorted value of [0,6,J]
    =J                             Assign it to J
                      ?qJ1\N?JJ1   Change 1 to 'N' and 0 to 1

ইনক্রিমেন্টিং এবং আউটপুট করার প্রায় অবশ্যই একটি ভাল উপায় আছে।


1

সিজেম , 24 22 বাইট

"1N23456"1q{~0e>6e<}/=

ব্যবহার (নিচে এবং )আপ জন্য।

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

ব্যাখ্যা

"1N23456"               e# Push the string containing all gears
         1              e# Push 1, the initial index
          q             e# Push the input
           {            e# For each character in the input
            ~           e#   Eval that character. ( is decrement and ) is increment.
             0e>        e#   Take the maximum of (0, index)
                6e<     e#   Take the minimum of (6, index)
                   }/   e# (end of block)
                     =  e# Take that index of the string

1

ব্যাচ, 144 বাইট

@set/ps=
@set g=1
:l
@if %g% neq %s:~,1% set/ag+=%s:~,1%/3-1
@set s=%s:~1%
@if not "%s%"=="" goto l
@if %g%==1 (echo N)else cmd/cset/ag+!g

0নিম্ন গিয়ারে 6যেতে এবং উচ্চতর গিয়ারে যেতে ব্যবহার করে STDIN এ ইনপুট নেয় । এই সংখ্যাগুলি বর্তমান গিয়ারটিকে উপেক্ষা করা সহজ করার জন্য বেছে নেওয়া হয়েছিল। অবশেষে যদি গিয়ার হয় 1তারপর Nঅন্যথায় ছাপা হয় 0রূপান্তরিত হয় 1এবং গিয়ার ছাপা হয়।


0

জাভাস্ক্রিপ্ট ES6 ননস্ট্রিট, 136 120 অক্ষর

136 চর জন্য V^

with({get x(){return Math.max(0,Math.min(y,6))},set x(v){y=v}})f=s=>eval(s.replace(/(V)|./g,(m,v)=>`x${"-+"[+!v]}=1,`,y=1)+'"1N"[x]||x')

with({get x(){return Math.max(0,Math.min(y,6))},set x(v){y=v}})
f=s=>eval(s.replace(/(V)|./g,(m,v)=>`x${"-+"[+!v]}=1,`,y=1)+'"1N"[x]||x')
console.log(f("V^^"))

120 চর জন্য -+

with({get x(){return Math.max(0,Math.min(y,6))},set x(v){y=v}})f=s=>eval(s.replace(/./g,m=>`x${m}=1,`,y=1)+'"1N"[x]||x')

with({get x(){return Math.max(0,Math.min(y,6))},set x(v){y=v}})
f=s=>eval(s.replace(/./g,m=>`x${m}=1,`,y=1)+'"1N"[x]||x')
console.log(f("-++"))


0

রেটিনা , 65 বাইট

^
1 N23456
+(` (.)?(\w*6)u
$1 $2
)`(.)? (\w*6)d
 $1$2
.* (.).*
$1

ব্যবহার uএবংd উপরে এবং ডাউন জন্য।

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

ব্যাখ্যা

এই প্রোগ্রামটি 1N23456নির্দেশের ক্রম পিছনে রেখে কাজ করে । এটি বর্তমান গিয়ারের পিছনে স্থান রেখে ট্র্যাক করে। তারপরে আর কিছু না পাওয়া পর্যন্ত এটি একবারে এক নির্দেশ নেয়।

^
1 N23456

1 N23456ইনপুট আগে রেখে শুরু করুন। আগের স্থানটি এটি বর্তমান গিয়ারকে Nনির্দেশ করে N


+(` (.)?(\w*6)u
$1 $2
)`(.)? (\w*6)d
 $1$2

এটি দুটি প্রতিস্থাপনের স্তর যা একত্রে গোষ্ঠীভুক্ত হয় এবং স্ট্রিং পরিবর্তন না করা পর্যন্ত চালায়:

 (.)?(\w*6)u
$1 $2

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

(.)? (\w*6)d
 $1$2

দ্বিতীয় পর্যায়ে গিয়ার নিচে নামানো পরিচালনা করে এবং একইভাবে কাজ করে। এটি স্থানের আগে কোনও চরিত্রের জন্য allyচ্ছিকভাবে দেখায়, তারপরে শেষ হওয়ার পরে কিছু অন্যান্য গিয়ারগুলি 6অনুসরণ করে d। এটি চরিত্রের সাথে স্থানটি তার আগে পরিবর্তিত করে d, মুছে ফেলে এবং বাকী অক্ষত রেখে দেয়। স্পেসটি স্ট্রিংয়ের শুরুতে থাকলে, জায়গার আগে কোনও চরিত্রের কোনও মিল ছিল না, তাই কোনও অদলবদল হয় না।


.* (.).*
$1

উপরের কোনও প্রতিস্থাপন আর করা যাবে না, সমস্ত গিয়ার শিফট সম্পন্ন হয়েছে। স্পেসের সাথে সাথে লাইনটি গিয়ার বাদে সবকিছু মুছে ফেলে। এটি চূড়ান্ত গিয়ার।


0

পাওয়ারশেল, 112 87 85 বাইট

$i=1;switch([char[]]$args[0]){'^'{if(5-gt$i){$i++}}'v'{if(1-le$i){$i--}}}'1N2345'[$i]

ungolfed

$i=1;                                # index which gear we are in
switch([char[]]$args[0]){            # loop over all elements using a switch
  '^'{if(5-gt$i){$i++}}             # if there is a ^ and we are not in sixth yet, shift up
  'v'{if(1-le$i){$i--}}             # if there is a v and we are not in first, shift down
}
'1N2345'[$i]                         # print the output

পাওয়ারশেল কোডগল্ফ টিপস পড়ে 25 বাইট সংরক্ষণ করেছেন

জিটি / লে অপারেটরদের ফ্লিপ করে 2 বাইট সংরক্ষণ করেছেন


0

পার্ল 6, 144 বাইট

my enum C <1 N 2 3 4 5 6>;my $n=prompt("");my $p=1;for split("",$n) ->$l {$l eq "u" && $p < 6 ?? ++$p !! 0;$l eq"d"&&$p>0 ?? --$p!!0};say C($p);

এটি করা উচিত হিসাবে কাজ করে, আমি বিশ্বাস করি। উন্নতি স্বাগত। প্রথমবার পার্লকে কোনও কিছুর জন্য ব্যবহার করা, তবে আমি ভাষার চিন্তাভাবনা পছন্দ করি, তাই আমাকে চেষ্টা করতে হবে।


0

Clojure, 74 বাইট

#((vec "1N23456")(reduce(fn[c s](max 0(min 6((if(= s \^)inc dec)c))))1 %))

স্থানান্তরকারী হিসাবে একটি সূচক বজায় রাখে, শিফট স্ট্রিং উপর ভাঁজ। প্রতিটি পুনরাবৃত্তি এটি হয় সূচককে বাড়িয়ে দেয় বা হ্রাস করে, তারপরে এটি 0-6 এর পরিসরে ক্ল্যাম্প করে। অবশেষে, গিয়ারগুলি ধারণ করে একটি স্ট্রিং সূচিযুক্ত এবং ফিরে দেওয়া হবে।

বর্তমান গিয়ার উপস্থাপন করে একটি ক্লোজার চরিত্রটি প্রদান করে। গিয়ার 1 ফিরিয়ে দেওয়া হয় \1, এবং গিয়ার 'এন' হিসাবে ফিরিয়ে দেওয়া হয় \N

প্রাক গল্ফ ব্যাখ্যা। সংখ্যাগুলি অনুসরণ করুন, যেহেতু এটি ভাল-উপরে-নীচে পড়ে না।

; Expects ^ for shift-up, and V (or anything else) for shift down
; Returns a character representing the current gear
(defn shift [shift-str]
  ((vec "1N23456") ; 4. Then index the gear list with the calculated index, and return
   (reduce (fn [current-gear s] ; 1. Fold over the shift symbols
             (max 0 (min 6 ; 3. Clamp it to the range 0-6 so we don't overflow
                      ((if (= s \^) inc dec) ; 2. If the shift is up, increase, else decrease
                       current-gear))))
           1
           shift-str)))

0

পাইথন 3, 67 63 বাইট

k=1
for i in input():k+=[k<6,-(k>0)][i<'1']
print('1N23456'[k])

খুব সোজা সমাধান।

-4 বাইট @ ওওএসকে ধন্যবাদ!

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