আমার সিনেমা কতটা হতাশাব্যঞ্জক?


25

আমার পিতামাতার একটি হোম থিয়েটার ডিভাইস রয়েছে। রিমোটটি ভেঙে গেছে এবং মেনুতে ডানদিকে নেভিগেট করা অবিশ্বাস্যরূপে কঠিন হয়ে পড়েছে। বেশিরভাগ সময় এটি কাজ করে না তবে যখন এটি ডান দিকে চলে যায় অবিশ্বাস্যভাবে দ্রুত।

এটি স্পষ্টতই হতাশাব্যঞ্জক তবে আপনি যখন কোনও সিনেমার শিরোনাম প্রবেশ করতে চান তখন সবচেয়ে হতাশাব্যঞ্জক হয় যার জন্য এমন একটি কীবোর্ড নেভিগেট করা দরকার:

a b c d e f
g h i j k l
m n o p q r
s t u v w x
y z 1 2 3 4
5 6 7 8 9 0

আপনার কাজটি কোনও সিনেমার শিরোনাম ইনপুট হিসাবে নেওয়া এবং মুভি শিরোনামটি টাইপ করা কতটা "হতাশাজনক" তা গণনা করা। একটি নির্দিষ্ট স্ট্রিংয়ের হতাশার সংখ্যা হ'ল চিঠির সংখ্যা যা তাদের আগে চিঠিটি থেকে ডানদিকে চলতে হবে। তারা কতটা ডান তা আমরা খেয়াল করি না, যেহেতু আমরা ডানদিকে চলতে শুরু করি তবে আমরা তাত্ক্ষণিকভাবে লাইনের শেষ প্রান্তে চলে যাই, এবং সহজ, কারণ আমরা উপরে, নীচে বা বাম দিকের গতিবিধির বিষয়ে চিন্তা করি না।

উদাহরণস্বরূপ যদি আমরা টাইপ করতে চাই

keyboard
  • আমরা kনিখরচায় শুরু করি ।
  • eঠিক উপরের kতাই আমাদের ডানদিকে সরানোর দরকার নেই।
  • y সমস্ত পথ বাম তাই ডান সরানোর প্রয়োজন হয় না।
  • b তবে পরবর্তী কলামে ডানদিকের দিকে রয়েছে সুতরাং এটিতে ডানদিকে যেতে আমাদের দরকার।
  • o পরবর্তী কলামে রয়েছে সুতরাং এটিতে পৌঁছাতে আমাদের ডানদিকের দিকে যেতে হবে।
  • a প্রথম কলামে ফিরে এসেছে তাই আমরা এটিতে বাম দিকে সরে এসেছি।
  • r ডানদিকে সমস্ত উপায় তাই আমরা ডানদিকে সরানো।
  • drএর কলামের বামে দুটি কলাম ।

যে চরিত্রগুলি ডানদিকে যেতে হবে তার borঅর্থ হ'ল এটি হতাশা 3।

অতিরিক্ত বিধি

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

Testcases

keyboard -> 3
2001aspaceodyssey -> 6
sorrytobotheryou -> 8
thinblueline -> 5
blast2 -> 3

3
প্রস্তাবিত পরীক্ষার কেস: "blast2" -> 3(সত্যিকারের সিনেমা নয়, তবে কিছু উত্তরের ক্ষেত্রে এই জাতীয় পরীক্ষার সমস্যা রয়েছে)
আর্নাউল্ড

প্রস্তাবিত পরীক্ষার ক্ষেত্রে: 5 -> 0
lirtosiast

1
প্রস্তাবিত পরীক্ষা মামলা:90 -> 1
nwellnhof

আমরা কি ধরে নিতে পারি ইনপুট স্ট্রিংটি খালি থাকবে না?
চ্যাস ব্রাউন

@ চ্যাসব্রাউন এটি প্রশ্নের আওতায় রয়েছে।
গম উইজার্ড

উত্তর:


8

জাভাস্ক্রিপ্ট (নোড.জেএস) , 61 55 54 বাইট

@ নয়েলহোফের জন্য 1 বাইট সংরক্ষণ করা হয়েছে

অক্ষরের অ্যারে হিসাবে ইনপুট নেয়।

s=>s.map(p=c=>r+=p>(p=(+c?~c:1-Buffer(c)[0])%6),r=0)|r

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

কিভাবে?

সমস্ত অক্ষরের জন্য তবে চেয়ে বেশি সংখ্যার জন্য 0-সূচিযুক্ত কলাম দেওয়া হয়েছে:0x

x=(c1)mod6

যেখানে হ'ল অক্ষরের ASCII কোড।c

ইতিবাচক অঙ্কগুলির জন্য , আমাদের পরিবর্তে এটি করা দরকার:n

x=(n+1)mod6

উদাহরণ:

"a" --> (97 - 1) mod 6 = 96 mod 6 = 0
"b" --> (98 - 1) mod 6 = 97 mod 6 = 1
"0" --> (48 - 1) mod 6 = 47 mod 6 = 5
"3" --> ( 3 + 1) mod 6 =  4 mod 6 = 4

মন্তব্য

s =>                       // s = input string (as array)
  s.map(p =                // initialize p to a non-numeric value
  c =>                     // for each character c in s:
    r +=                   //   update the result r:
      p > (                //   compare p with
        p = (              //   the new value of p defined as:
          +c ?             //     if c is a positive digit:
            ~c             //       -(int(c) + 1)
          :                //     else:
            1-Buffer(c)[0] //       -(ord(c) - 1)
        ) % 6              //     apply modulo 6
      ),                   //   yields 1 if the previous value is greater than the new one
    r = 0                  //   start with r = 0
  ) | r                    // end of map(); return r

মনে হচ্ছে 46 বাইটের
শেগি

1
পছন্দ করুন আমার প্রস্তাবিত পরীক্ষার কেসটি দেখুন "blast2"
আর্নৌল্ড


1
@ শেগি কিছুটা দিকের দিক থেকে বা এটির জন্য ব্যর্থ হবে, বলুন "234"
আর্নল্ড

4
হুইস্কি কম উত্তর না!
শেগি

7

জেলি , 11 বাইট

⁾04yO‘%6<ƝS

একটি মোনাডিক লিঙ্ক (বড় হাতের) অক্ষরের একটি তালিকা গ্রহণ করে।

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

কিভাবে?

প্রথম কোন প্রতিস্থাপন '0'সঙ্গে গুলি '4'(তাই ডানদিকের কলামে হচ্ছে কোড একইরূপে তাদের বাকি) গুলি। তারপরে 60-ভিত্তিক কলাম সূচকগুলি পেতে অর্ডিনালগুলিতে কাস্ট করুন, একটি এবং মডিউল যুক্ত করুন । তারপরে প্রতিবেশীদের তুলনায় কম-কম এবং ফলাফলটির যোগফল দেয়।

⁾04yO‘%6<ƝS - Link: list of characters         e.g. "BLAST20"
⁾04         - list of characters = ['0', '4']
   y        - translate                             "BLAST24"
    O       - ordinals                              [66,76,65,83,84,50,52]
     ‘      - increment                             [67,77,66,84,85,51,53]
       6    - literal six
      %     - modulo                                [ 1, 5, 0, 0, 1, 3, 5]
         Ɲ  - neighbourly:
        <   -   less than?                          [  1, 0, 0, 1, 1, 1  ]
          S - sum                                   4





1

জাপট -x , 14 বাইট

®rT4 c Ä u6Ãä<

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

এই জেলি উত্তর পোর্ট । বড় হাতের অক্ষরের সাথে অক্ষরের অ্যারে হিসাবে ইনপুট নেয়।

ব্যাখ্যা:

®rT4 c Ä u6Ãä<    :
®          Ã      :Map each character through:
 rT4              : Replace 0 with 4
     c            : Get the char-code
       Ä          : Increment it
         u6       : Modulo 6
            ä<    :Replace with 1 if you had to move right, 0 otherwise
                  :Implicitly sum and output

1

জাভা (ওপেনজেডিকে 8) , 73 বাইট

জাভা জন্য খারাপ সমাধান না! এই শূন্যটি ডানদিকে থাকাতে আমার বেশ কয়েকটি বাইট খরচ হয়েছে।

t->{int a=9,c=0;for(int d:t)c+=a<(a=(--d+(d/48==1?2:0))%6)?1:0;return c;}

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

ব্যাখ্যা

t -> {                          // Lambda taking a char array as input
    int a=9,                    // Initialise last column value
        c=0;                    // Initialise frustration count
    for(int d:t)                // Loop through all chars in title
        c+=                     // increment the frustration count if...
          a<                    // The last column is smaller than the current column
            (a=                 // Set last column to current column
              (--d+             // Decrement ascii value of char
                  (d/48==1      // If ascii decremented ascii value is between 48 and 95
                    ?2:0)       // increment by 2 (1 total) or 0 (-1 total)
                )%6)            // Mod 6 to retrieve column index
            ?1:0;               // Increment if to right hand side
    return c;                   // return calculated frustration count
}

1

05 এ বি 1 ই , 12 11 বাইট

-1 বাইট @ কেভিন ক্রুইজসেনকে ধন্যবাদ

¾4:Ç>6%¥1@O

জনাথন অ্যালান এর জেলি উত্তর আরেকটি বন্দর। বড় হাতের ইনপুট নেয়।

ব্যাখ্যা:

¾4:Ç>6%¥1@O   //full program
¾4:           //replace all '0's with '4's
   Ç          //get ASCII code points
    >         //increment
     6%       //modulo 6
       ¥      //get deltas
        1@    //is >= 1
          O   //sum

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


1
0'4¾4বাইট সংরক্ষণ করতে পারে ( প্রাসঙ্গিক 05AB1E টিপ )।
কেভিন ক্রুইজসেন


0

রেটিনা 0.8.2 , 46 বাইট

T`l1-90`1-61-61-61-61-61-6
.
;$&$*
&`;(1+);1\1

এটি অনলাইন চেষ্টা করুন! লিঙ্কে পরীক্ষার কেস অন্তর্ভুক্ত রয়েছে। ব্যাখ্যা:

T`l1-90`1-61-61-61-61-61-6

ওএসকে ক্রমে বর্ণমালা এবং অঙ্কগুলি তালিকাভুক্ত করুন এবং প্রত্যেককে একটি (1-সূচীকৃত) কলাম নম্বরটিতে ম্যাপ করুন।

.
;$&$*

প্রতিটি কলামের নম্বরটি অ্যানারিতে রূপান্তর করুন।

&`;(1+);1\1

বৃহত্তর (অর্থাত্ ডানদিকের) কলাম অনুসারে কলামগুলির সংখ্যা গণনা করুন। &`অধিক্রমনের ম্যাচ পারেন।



0

গণিত, ১০২ বাইট

Differences[Last@@Join[Alphabet[],ToString/@Range@9,{"0"}]~Partition~6~Position~#&/@#]~Count~_?(#>0&)&

খাঁটি ফাংশন। ইনপুট হিসাবে অক্ষরের একটি তালিকা নেয় এবং আউটপুট হিসাবে একটি নম্বর প্রদান করে। এটি একটি দুর্দান্ত নিষ্পাপ সমাধান, গল্ফিং পরামর্শগুলি স্বাগত।



0

সি (জিসিসি) ,  82 79  77 বাইট

o;c(i){i+=i<60&i>48?1:5;i%=6;}f(char*s){for(o=0;*++s;o+=c(*s)>c(s[-1]));o=o;}

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

এই ফাংশনটি কেবল ছোট হাতের ইনপুটগুলিকে সমর্থন করবে


অবহেলিত এবং মন্তব্য করেছেন:

o; //Used for output
c(i){             //Calculates the column of given character
     i+=          //Correct i to get the correct column
        i<60      //If i is a digit...
        & i>48   //... but not '0'
        ?1           //Then move it one column on the right
        :5;          //Else move it five columns on the right
     i%=6;        //Get the column number
}
f(char*s){                        // The actual "frustrating" function
          for(                    //Loop for each character
              o=0;                //reinitialize output
              *++s;               //move to next character / while this is not '\0'
              o+=c(*s)>c(s[-1])  //Increment if current character is on the right of the previous one
             );
           o=o;                   // Outputs result
}

যদি আমার ফাংশনটিকে প্রশস্ত চরিত্রের স্ট্রিং গ্রহণ করার অনুমতি দেওয়া হয় তবে এটি এর সাথে এটি 76 টি বাইটে হ্রাস করা যেতে পারে :

o;c(i){i+=i<60&i>48?1:5;i%=6;}f(int*s){for(o=0;*++s;o+=c(*s)>c(s[-1]));o=o;}

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

এই সংস্করণটির int*পরিবর্তে কেবল ইনপুট গ্রহণ করেchar*


সম্পাদনা:

  • কলামের গণনায় গল্ফড 3 বাইট (ফাংশন c)
  • সিলিংক্যাটকে ধন্যবাদ 2 বাইট

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