ব্রোকেন ক্যাপস্লক কী ফাইস্কো


25

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

আপনি ক্রিসমাসের জন্য খুব উত্তেজিত! সুতরাং আপনি একটি ক্ষুদ্র "বাগ" এ চলে যাচ্ছেন যা অক্ষরগুলি সংশোধন করে না যা Christmas(কেস-সংবেদনশীল) এর অনুক্রমের মধ্যে রয়েছে ।

ইনপুট

ইনপুটটির জন্য আপনি একটি একক স্ট্রিং (বা বাইটের অ্যারে) ব্যবহার করবেন যা 0x20 এবং 0x7e ( - ~) এর মধ্যে নিউলাইন এবং আসকি থাকতে পারে । ক্যারেজ রিটার্ন বা স্ট্রিংতে থাকা অন্য কোনও অক্ষর সম্পর্কে আপনাকে চিন্তা করার দরকার নেই।

আউটপুট

আউটপুটে কেবলমাত্র উপরের এবং ছোট হাতের অক্ষর অদলবদল (এবং অবশ্যই ক্রিসমাস বাগ!) সহ সরবরাহিত স্ট্রিং থাকা উচিত । এতে একাধিক অতিরিক্ত ট্রেলিং হোয়াইটস্পেস থাকতে পারে।

ক্রিসমাস বাগ

এর উদাহরণ দিয়ে ব্যাখ্যা করুন:

Input: i CAN HARDLY WORK LIKE THIS please GET ME A NEW KEYBOARD FOR cHRISTMAS
Output: I Can HaRdly work lIke thiS PLEASE geT Me A new keyboard for ChriStmas

can"গ" রয়েছে যা ক্রিসমাসের প্রথম অক্ষর, যাতে এটি পরিবর্তন হয় না। এর পরবর্তী অক্ষরটি Christmasহ'ল "এইচ", যা hardlyএতে রয়েছে (যার মধ্যে "আর" রয়েছে), তাই এটি পরিবর্তন করা হয়নি, ইত্যাদি Christmasitself নিজের মধ্যে কেবল একটি অক্ষরই অপরিবর্তিত রয়েছে কারণ কোডটি সেখানে পৌঁছানোর পরে এটি আসলে সন্ধান করছে "এস", "সি" নয়।

ক্রমটি সন্ধান করার পরে এটি আবার "সি" দিয়ে শুরু হবে এবং Christmasআরও একবার পুনরাবৃত্তি শুরু করবে । তাই ChristmasChristmasঅপরিবর্তিত রাখা হবে।

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

Input: Hello World!
Output: hELLO wORLD!

Input: I like pie :)
Output: i LIKE PIE :)

Input: hELP my KeYboarD
       iS BROKEN
Output: Help MY kEyBOARd
        Is broken

Input: cHRISTMAS IS COMING REALLY SOON!
Output: cHRISTMAS is Coming really soon!

Input: C is the first letter in cHRISTMAS
Output: C IS ThE FIrST LETTER iN ChriSTMAS

বিজয়ী

এটি তাই সংক্ষিপ্ত উত্তরটি জিতল!


5
এটি 'কোনও বিল্ট ইনস যা বেশিরভাগ চ্যালেঞ্জের সমাধান করে না' এটি একটি বিস্ময়কর বাধা। আর 'অদলবদলের' ঘটনাটি কি আসলেই অনেক সমস্যার কারণ হতে পারে যখন অর্ধেক চ্যালেঞ্জটি চিহ্নিত করে যে কোন চিঠিগুলি 'ক্রিসমাস' এ নেই?
এটাকো


@ এ্যাটাকো, স্যান্ডবক্সের প্রতিক্রিয়ার কারণে আমি এটি শেষ মুহূর্তে যুক্ত করেছি, যদিও আমি তা সরিয়ে দিয়েছি তবে আমি সম্মত।
রেডস্টারকোডার

এছাড়াও, টেস্ট কেস 3, আপনি যখন প্রথম ক্রিসমাসের প্রথম পরিবর্তন করেন।
এ্যাটাকো

@ এ্যাটাকো, এটি Christmasক্রমানুসারে খুঁজছেন, সুতরাং "গ" উপেক্ষা করা হবে যতক্ষণ না এটি "সি" খুঁজে পাওয়া যায়, তারপরে এটি "এইচ", তারপরে "আর" ইত্যাদি সন্ধান করে
রেড স্টারকোডার

উত্তর:


9

05 এ বি 1 ই , 16 বাইট

একটি বাইট সংরক্ষণ এবং একটি বাগ ঠিক করার জন্য এমিগিনার ধন্যবাদ !

vyÐl'ŒÎ¾èQi¼ëš}?

ব্যাখ্যা:

vy                # For each character in the string...
  Ð               #   Triplicate that character
   l              #   Convert to lowercase
    'ŒÎ           #   Compressed version of "christmas"
       ¾          #   Push the counting variable (let's call this N)
        è         #   Get the nth character of "christmas", with modular indexing
         Qi   }   #   If equal...
           ¼      #      N += 1
            ë     #   Else...
             š    #      Swapcase
               ?  #   Print that character

সিপি -1222 এনকোডিং ব্যবহার করে । এটি অনলাইন চেষ্টা করুন!


1
এই নতুন লাইনের সাথে কাজ করে?
redstarcoder

পুনঃটুইট করেছেন এটা এখন ঠিক।
আদনান

2
এটি দেখতে ঠিক টিঞ্জেলের মতো। : ডি
তিতাস

1
আউটপুট সঠিক নয় (উদাহরণস্বরূপ ক্রিসমাস ইনপুট হিসাবে চেষ্টা করুন), তবে আপনি যদি uএটি সরিয়ে থাকেন তবে এটি কাজ করা উচিত।
Emigna

1
@ আইজি 05ab1e দীর্ঘ, দীর্ঘ সময়ের জন্য অস্তিত্ব রয়েছে।
পাভেল

5

ভি , 38 , 36 বাইট

ÄVumaOchristmasòÉf2x`a@"maj~HòHdjV~

এটি অনলাইন চেষ্টা করুন! (তুলনার জন্য ইনপুট এবং প্রত্যাশিত আউটপুট রয়েছে)

আমি যখন এটি প্রথম দেখলাম, আমি ভেবেছিলাম এটি অত্যন্ত সহজ হবে। বস্তুত, যদি এটি "ক্রিসমাস" বাগ না থাকত, এই মাত্র 2 বাইট হতে হবে: V~। ক্রিসমাস বাগটি খুব হ্যাকি উত্তরের জন্য তা উল্লেখযোগ্যভাবে শক্ত করে তোলে।

যথারীতি এখানে একটি হেক্সডাম্প রয়েছে:

00000000: c456 756d 614f 6368 7269 7374 6d61 731b  .VumaOchristmas.
00000010: f2c9 6632 7860 6140 226d 616a 7e48 f248  ..f2x`a@"maj~H.H
00000020: 646a 567e                                djV~

আমি ভি সম্পর্কে আরও জানতে চাই
ckjbgames

@ কেজবিগেমস দুর্দান্ত, আপনার যে কোনও প্রশ্নের উত্তর দিতে পেরে আমি খুশি হব! আপনি আমাকে সবসময় ভিম-গল্ফ ঘরে ডেকে আনতে পারেন । এই মুহুর্তে আমি টিউটোরিয়াল শিখতে / তৈরি করতে কিছুটা সহজ করে ভি তৈরির কাজ করছি।
ডিজেএমসিএমহেম

4

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

while($o=ord($c=$argv[1][$i++]))echo chr(32|$o==ord(christmas[$k%9])?$o|0&$k++:ctype_alpha($c)*32^$o);

প্রথম কমান্ড লাইন আর্গুমেন্ট থেকে ইনপুট নেয়। সাথে চালাও -r

ভাঙ্গন

while($o=ord($c=$argv[1][$i++]))// loop through string characters
    echo chr(
        32|$o==ord(christmas[$k%9]) // if $c equals next character in "christmas"
            ?$o|0&$k++              // no change, increase "christmas" index
            :ctype_alpha($c)        // else if $c is a letter
                    *32^$o          // toggle bit 5 of the ascii code
        );

2

এমএটিএল , 36 30 বাইট

"@tk'schristma'H)=?HQXHx}Yo]&h

নতুন লাইনের সাথে স্ট্রিংগুলি ASCII কোডের সাথে সম্মিলন করে সংজ্ঞায়িত করা দরকার 10(পরীক্ষার কেসের লিঙ্কে উদাহরণ দেখুন)।

এটি অনলাইন চেষ্টা করুন! বা সমস্ত পরীক্ষার কেস যাচাই করুন

ব্যাখ্যা

"              % Implicit input of a string. For each character in that string
  @            %   Push current character
  tk           %   Duplicate and convert to lowercase
  'schristma'  %   Push string. This is 'Christmas' in lowercase and circularly
               %   shifted such that the 'c' is in the second position
  H            %   Push contents of clipboard H, which is initiallized to 2.
               %   This value will be gradually increased when a new character
               %   from the the sequence is found
  )            %   Get character from 'schristma' at that (modular) position
  =            %   Are they equal?
  ?            %   If so
    HQ         %     Push contents of clipboard H and add 1
    XHx        %     Copy into clipboard K and delete
  }            %   Else
    Yo         %     Change case
  ]            %   End
  &h           %   Concatenate stack contents horizontally. This gives a string 
               %   with all characters processed up to now
               % Implicit end. Implicit display



2

সি # 197 বাইট

এটি দিয়ে জিততে যাচ্ছেন না, তবে আশা করা যায় যে ক্ষুদ্রতম সি # বাস্তবায়ন যা কাজ করে ...

string C(string s){int i=0,j=0;var r="";for(;i<s.Length;){char c=s[i++],o=(char)32;if(c=="christmas"[j]|c=="CHRISTMAS"[j])j=j>7?0:j+1;else if(c>64&c<91)c+=o;else if(c>96&c<123)c-=o;r+=c;}return r;}

ব্যাখ্যা:

string C(string s)
{
    // define our two index ints
    // i for indexing across the input string
    // j for indexing across christmas
    int i = 0, j = 0;

    // r is our return string
    var r = "";

    // declare our loop
    // skip the initialisation and afterthought
    for (; i < s.Length;)
    {
        // get our current character c, and increment index i
        // initial our offset char o (difference between upper and lower case)
        char c = s[i++], o = (char)32;

        // check if c is the current character in our christmas bug
        if (c == "christmas"[j] | c == "CHRISTMAS"[j])
            // increment j (or reset to 0)
            j = j > 7 ? 0 : j + 1;

        // else if c is an upper case char
        else if (c > 64 & c < 91)
            // add our offset to make it lower case
            c += o;

        // else if c is lower case
        else if (c > 96 & c < 123)
            // subtract our offset to make it upper case
            c -= o;

        // append c to our return string r
        r += c;
    }

    return r;
}

2

জাভাস্ক্রিপ্ট, 122 118 114 107 104 93 বাইট

f=
s=>s.replace(/./g,c=>(k=c.toLowerCase())=='christmas'[i%9]?++i&&c:k!=c?k:c.toUpperCase(),i=0)


F=s=>console.log(f(s))
F(`Hello World!`)
F(`I like pie :)`)
F(`hELP my KeYboarD
       iS BROKEN`)
F(`cHRISTMAS IS COMING REALLY SOON!`)
F(`C is the first letter in cHRISTMAS`)

  • 11 বাইট অফ ধন্যবাদ @ নিল।

k!=c?k:c.toUpperCase()আপনি কয়েক বাইট সংরক্ষণ করতে ব্যবহার করতে পারবেন না ?
নীল

1

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

{my$i=0;S:g{.?<!{'christmas'.comb[$i%9]eq$/.lc&&++$i}>}=$/eq$/.lc??$/.uc!!$/.lc}

চেষ্টা করে দেখুন

{   # bare block lambda with implicit parameter 「$_」

  my $i = 0;             # counter

  S                      # substitute and return ( implicitly against 「$_」 )
  :global
  {
    .                    # any char
    ?                    # work around a bug where 「$/」 doesn't get set

    <!{                  # fail this match if this block returns True
      'christmas'.comb\  # a list of the characters of 「christmas」
      [ $i % 9 ]         # grab a char from the list
      eq                 # is it equal to
      $/.lc              # the lowercase version of the char
      &&                 # if so
      ++$i               # increment 「$i」 ( result is True )
    }>

  }

  =                      # for each matched char

  $/ eq $/.lc            # is it lowercase?
  ?? $/.uc               # the uppercase it
  !! $/.lc               # otherwise lowercase it
}

আমি বিশ্বাস করি না যে স্থানটি বাদ দেওয়া my $i=0;আইনসম্মত। এবং যদি আরও হোয়াইটস্পেস-সম্পর্কিত সিনট্যাক্স ত্রুটি হত তবে আমি অবাক হব না।
bb94

1
@ bb94 আমি আক্ষরিকভাবে একটি সাইটের মধ্যে একটি লিঙ্ক অন্তর্ভুক্ত করেছি যা কোডটি চালাবে। আপনি যদি বিশ্বাস করেন না যে এটি চলবে, আপনি কেন এটি চেষ্টা করবেন না। মানে আমি $/ eq $/.lcবরং লিখেছি $/.lc eq $/যাতে আমি আগে স্থানটি সরিয়ে ফেলতে পারি eq
ব্র্যাড গিলবার্ট

@ bb94 আমি এটি লিঙ্কযুক্ত সংকলকটিতে কাজ করে নিশ্চিত করতে পারি।
redstarcoder

1

জাভা 7, 200 বাইট

String c(char[]a){String r="";int i=0,s;Character l='a';for(char c:a)if((s="christma".indexOf(l=l.toLowerCase(c)))==i|i>7&s==4){r+=c;i=i>7?0:i+1;}else r+=l.isUpperCase(c)?l:l.toUpperCase(c);return r;}

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

Ungolfed:

String c(char[] a){
  String r = "";
  int i = 0,
      s;
  Character l = 'a';
  for(char c : a){
    if((s = "christma".indexOf(l = l.toLowerCase(c))) == i) | i > 7 & s == 4){
      r += c;
      i = i > 7
           ? 0
           : i+1;
    } else{
      r += l.isUpperCase(c)
       ? l
       : l.toUpperCase(c);
    }
  }
  return r;
}

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

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

class M{
  static String c(char[]a){String r="";int i=0,s;Character l='a';for(char c:a)if((s="christma".indexOf(l=l.toLowerCase(c)))==i|i>7&s==4){r+=c;i=i>7?0:i+1;}else r+=l.isUpperCase(c)?l:l.toUpperCase(c);return r;}

  public static void main(String[] a){
    System.out.println(c("i CAN HARDLY WORK LIKE THIS please GET ME A NEW KEYBOARD FOR cHRISTMAS".toCharArray()));
    System.out.println(c("Hello World!".toCharArray()));
    System.out.println(c("I like pie :)".toCharArray()));
    System.out.println(c("hELP my KeYboarD\niS BROKEN".toCharArray()));
    System.out.println(c("cHRISTMAS IS COMING REALLY SOON!".toCharArray()));
    System.out.println(c("C is the first letter in cHRISTMAS".toCharArray()));
  }
}

আউটপুট:

I Can HaRdly work lIke thiS PLEASE geT Me A new keyboard for ChriStmas
hELLO wORLD!
i LIKE PIE :)
Help MY kEyBOARd
Is broken
cHRISTMAS is Coming really soon!
C IS ThE FIrST LETTER iN ChriSTMAS

2
জাভায় হাস্কেল ও সি মারধর!
পাভেল

1

পাইথন 100 বাইট

def a(s,i=0,g=''):
 for c in s:a=c.lower()=='christmas'[i%9];i+=a;g+=[c.swapcase(),c][a]
 return g

1

রুবি, 63 + 1 = 64 বাইট

-pপতাকা ব্যবহার করে ।

i=0;gsub(/./){|c|c=~/#{"christmas"[i%9]}/i?(i+=1;c):c.swapcase}

0

সি # 239 অক্ষর

var s=Console.ReadLine().ToCharArray();int j=0,i=0;var c="christmas";for(;j<s.Length;j++)if(s[j]==c[i%9]|s[j]==(c[i%9]-32))i++;else if(s[j]>64&s[j]<91)s[j]=(char)(s[j]+32);else if(s[j]>96&s[j]<123)s[j]=(char)(s[j]-32);Console.WriteLine(s);

আরও স্পষ্ট সংস্করণ:

var s = Console.ReadLine().ToCharArray();
int j = 0,i = 0;
var c = "christmas";
for (var j = 0; j < s.Length; j++)
   if (s[j] == c[i%9]|s[j] == (c[i%9] - 32))// non case sensitive compare with c 
      i++;//next char in christmas
   else
      if (s[j] > 64 & s[j] < 91)//if between A and Z
         s[j] = (char)(s[j] + 32);//convert to a-z
      else
         if (s[j] > 96 & s[j] < 123)//if between a and z
            s[j] = (char)(s[j] - 32);//convert to A-Z
Console.WriteLine(s);

এটি একটি সুন্দর নির্লজ্জ সমাধান এবং সম্ভবত উন্নতি করা যেতে পারে (সম্ভবত আমরা চর্চায় অন্তর্নিহিত রূপান্তরকে অনুমতি দিতে পারি?)।

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

সম্পাদনা করুন: Char.IsUpper (s [j]) s [j]> 64 &&s [j] <91 এর চেয়ে 2 বাইট দীর্ঘ, Char.ToUpper আমার সংস্করণটির চেয়েও দীর্ঘ।


0

হাস্কেল, 222 207 বাইট

import Data.Char
s=(+(-65)).ord
f=(`divMod`32).s
l=[['a'..'z'],['A'..'Z']]
c=cycle$map s"CHRISTMAS"
k _[]=[]
k(a:b)(x:y)|isAlpha x=let(d,m)=f x in if(m==a)then(x:k b y)else(l!!d!!m:k(a:b)y)|1>0=x:k(a:b)y
main=interact$k c

আপডেট হয়েছে:

import Data.Char
s=(+(-65)).ord
k _[]=[]
k(a:b)(x:y)|isAlpha x=let(d,m)=s x`divMod`32 in if(m==a)then(x:k b y)else([['a'..'z'],['A'..'Z']]!!d!!m:k(a:b)y)|1>0=x:k(a:b)y
main=interact$k$cycle$map s"CHRISTMAS"

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

s=(+(-65)).ord

xx এর ASCII মান - 'A' এর ASCII মান

f=(`divMod`32).s

বড় হাতের জন্য f (sx) = (0, sx), ছোট হাতের জন্য (1, (s x-32)

l=[['a'..'z'],['A'..'Z']]

অক্ষরের সমান্তরাল তালিকা, চ এর দ্বারা সূচীকরণযোগ্য (ছোট হাতের-> 1-> বড় হাতের অক্ষর, বড় হাতের-> 0-> ছোট হাতের অক্ষর)

c = cycle $ map s "CHRISTMAS"

বড় হাতের ক্রিসমাসের অসি মূল্যগুলির তালিকা list

k _ []=[]

বেস কেস

k (a:b) (x:y) | isAlpha x = let (d,m) =f x
                             in if m == a
                                then x : k b y
                                else (l!!d)!!m : k (a:b) y
              | 1 > 0 = x : k (a:b) y

অ-অক্ষরীয় অক্ষরগুলি ফিরিয়ে দিন, এবং হয় যদি চিঠিটির s- মান ক্রিসমাসের বর্তমান অক্ষরের (পরবর্তী চিঠিতে যাওয়ার মতো) হয় তবে তা অন্য ক্ষেত্রে রূপান্তর করে এগিয়ে যান

main=interact$k c

আই

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