BROKEN cAPSLOCK kEY fIASCO


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इसमें "c" शामिल है जो क्रिसमस का पहला अक्षर है, इसलिए इसे बदला नहीं गया है। अगला अक्षर Christmas"h" है, जो अंदर है hardly(जिसमें "r" भी है), इसलिए इसे बदला नहीं गया है, इत्यादि Christmasअपने आप में केवल एक अक्षर अपरिवर्तित है क्योंकि जब तक कोड वहां पहुंचता है, तब तक वह वास्तव में खोज रहा होता है "s", "c" नहीं।

एक बार अनुक्रम मिलने के बाद, इसे "सी" पर फिर से शुरू करना चाहिए, और 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
यह 'कोई निर्मित इन्स जो अधिकांश चुनौती को हल करता है' एक बहुत ही अजीब प्रतिबंध है। और क्या 'स्वैप मामला' वास्तव में ऐसा करने जा रहा है कि कई मुद्दों पर जब आधी चुनौती यह पहचानती है कि कौन से अक्षर 'क्रिसमस' में नहीं हैं?
ATaco


@ATaco, मैंने सैंडबॉक्स पर प्रतिक्रिया के कारण इसे अंतिम मिनट में जोड़ा, मैं सहमत हूं, हालांकि मैंने इसे हटा दिया है।
redstarcoder

इसके अलावा, टेस्ट केस 3, आपने पहले एच को स्वैप किया, जब वह क्रिसमस में हो।
ATaco

@ टैको, यह क्रमिक रूप से दिखता है Christmas, इसलिए "एच" को तब तक अनदेखा किया जाता है जब तक कि यह "सी" नहीं मिल जाता है, फिर यह "एच", फिर "आर", आदि की तलाश करता है
redstarcoder

जवाबों:


9

05AB1E , 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

CP-1252 एन्कोडिंग का उपयोग करता है । इसे ऑनलाइन आज़माएं!


1
क्या यह नए सिरे से काम करता है?
redstarcoder

@redstarcoder उफ़, यह नहीं हुआ। यह अब तय हो गया है।
अदनान

2
यह सिर्फ टिनसेल की तरह दिखता है। : डी
टाइटस

1
आउटपुट सही नहीं है (उदाहरण के लिए इनपुट के रूप में क्रिसमस का प्रयास करें ), लेकिन यदि आप uइसे हटाते हैं तो यह काम करना चाहिए।
Emigna

1
@Izzy 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 कूल, आपके पास किसी भी प्रश्न का उत्तर देने में मुझे खुशी होगी! आप हमेशा मुझे विम-गोल्फ रूम में पिंग कर सकते हैं । अभी मैं V को सीखने / ट्यूटोरियल बनाने में थोड़ा आसान बनाने पर काम कर रहा हूँ।
डीजेएमकेम

4

PHP, 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

MATL , 36 30 बाइट्स

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

एएससीआईआई कोड के साथ तालमेल करके नई रूपरेखाओं को परिभाषित करने की आवश्यकता है 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 बाइट्स थैंक्स @Neil।

क्या आप 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
ब्रैड गिल्बर्ट b2gills

@ 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


0

C # 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

sx = x का ASCII मान - 'A' का ASCII मान

f=(`divMod`32).s

च (sx) = (0, sx) अपरकेस के लिए, (1, (x-32)) निचले हिस्से के लिए

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

अक्षरों की समानांतर सूची, f (लोअरकेस-> 1-> अपरकेस, अपरकेस-> 0-> लोअरकेस)

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

आईओ

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.