সদৃশ ও স্যুইচড কেস সরান


27

লক্ষ্য

এই চ্যালেঞ্জটির লক্ষ্য হ'ল: ইনপুট হিসাবে একটি স্ট্রিং দেওয়া হয়েছে, জোড়ার দ্বিতীয় আইটেমটি বিপরীত মূলধনের হয়, তবে অক্ষরের জোড়া সদৃশ সরান। (অর্থাত্ বড় হাতের অংশ ছোট এবং তদ্বিপরীত হয়) becomes

জোড়গুলি বাম থেকে ডানে প্রতিস্থাপন করা উচিত। উদাহরণস্বরূপ, aAaহওয়া উচিত aaএবং aA

উদাহরণ

ইনপুট এবং আউটপুট:

Input:         Output:  
bBaAdD         bad     
NniIcCeE       Nice    
Tt eE Ss tT    T e S t 
sS Ee tT       s E t   
1!1!1sStT!     1!1!1st!
nN00bB         n00b    
(eE.gG.)       (e.g.)  
Hh3lL|@!       H3l|@!
Aaa            Aa
aaaaa          aaaaa
aaAaa          aaaa

ইনপুট মুদ্রণযোগ্য ASCII চিহ্ন সমন্বিত।

আপনার সদৃশ অঙ্ক বা অন্য অক্ষরযুক্ত অক্ষরগুলি সরাবেন না।

স্বীকৃতি

এই চ্যালেঞ্জটি @ নিকেল এর "সদৃশ ও স্যুইচ কেস" এর বিপরীত । আপনি কি এটি বিপরীত করতে পারেন?

স্যান্ডবক্স থেকে সমস্ত অবদানকারীদের জন্য আপনাকে ধন্যবাদ !

তালিকা

এই পোস্টের নীচে স্ট্যাক স্নিপেট উত্তরগুলি থেকে ক্যাটালগ তৈরি করে a) ভাষার প্রতি সংক্ষিপ্ত সমাধানের তালিকা হিসাবে এবং খ) সামগ্রিক লিডারবোর্ড হিসাবে।

আপনার উত্তরটি প্রদর্শিত হয়েছে তা নিশ্চিত করার জন্য, দয়া করে নীচের মার্কডাউন টেমপ্লেটটি ব্যবহার করে আপনার উত্তরটি শিরোনাম দিয়ে শুরু করুন:

## Language Name, N bytes

Nআপনার জমা দেওয়ার আকারটি কোথায় ? আপনি যদি নিজের স্কোরটি উন্নত করেন তবে আপনি পুরানো স্কোরগুলি শিরোনামে রেখে দিতে পারেন । এই ক্ষেত্রে:

## Ruby, <s>104</s> <s>101</s> 96 bytes

যদি আপনি নিজের শিরোনামে একাধিক সংখ্যা অন্তর্ভুক্ত করতে চান (যেমন আপনার স্কোর দুটি ফাইলের সমষ্টি বা আপনি পৃথকভাবে দোভাষী পতাকা দণ্ডের তালিকা করতে চান), নিশ্চিত করুন যে আসল স্কোরটি শিরোনামের শেষ সংখ্যা:

## Perl, 43 + 2 (-p flag) = 45 bytes

আপনি ভাষাটির নামটিকে একটি লিঙ্কও তৈরি করতে পারেন যা স্নিপেটে প্রদর্শিত হবে:

## [><>](http://esolangs.org/wiki/Fish), 121 bytes


4
হাহাহা, এটি NniIcCeE :)
নিকেল

@ এনিকাএল আমি আপনাকে অনুমোদন করে আনন্দিত :)
অ্যালোসডিজ বলেছেন

কি জন্য আউটপুট আছে: abB? abBবা ab?
ডাউনগোট

@ ডাউনগোটের abBআউটপুট হওয়া উচিতab
অ্যালিসডজি বলেছেন

1
@ রজনগুল কেন হবে? এটা আপ বিভক্ত: aa; aA; AA, কেবল মধ্যম জুটি প্যাটার্নের সাথে মেলে এবং হয়ে যায় a, তাই aa; a; AA
LLlAMnYP

উত্তর:


12

জেলি , 8 বাইট

ṛŒsḟḟȧµ\

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

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

ṛŒsḟḟȧµ\  Main link. Argument: s (string)

      µ   Convert all links to the left into a chain (unknown arity) and begin a
          new chain.
       \  Do a cumulative reduce by the chain to the left.
          Left argument:   r (previous result or first character)
          Right argument:  c (next character)
ṛ           Set the return value to c.
 Œs         Swap c's case.
    ḟ       Remove c from r (if present).
            This yields an empty string if c and r are identical (repeated letter
            with the same case or non-letter) and r otherwise.
            Note that r will be empty if the previous character has been removed.
   ḟ        Remove the resulting characters (if any) from c with swapped case.
            This yields c with swapped case if the result to the right does not
            contain c; otherwise, it yields the empty string.
     ȧ      Flat logical AND with c.
            Replace swapped case c with c; do not modify an empty string.

রেজেক্স অভিশাপের চেয়ে ছোট!
অ্যালোইসডজি বলছেন মনিকাকে

2
স্ট্রিং চ্যালেঞ্জে রেটিনাকে বীট করুন _
ট্যাকস্রাফটিং

11

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

(.)(?!\1)(?i)\1
$1

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

ব্যাখ্যা

এটি একক (এবং মোটামুটি সহজ) প্রতিস্থাপন যা প্রাসঙ্গিক জোড়গুলির সাথে মেলে এবং কেবলমাত্র প্রথম অক্ষর দ্বারা প্রতিস্থাপন করে। অর্ধেকভাবে প্যাটার্নের মাধ্যমে কেস-সংবেদনশীলতা সক্রিয় করে জোড়াগুলি মেলানো হয়:

(.)     # Match a character and capture it into group 1.
(?!\1)  # Use a negative lookahead to ensure that the next character *isn't* the same
        # as the character we just captured. This doesn't advance the position of the
        # regex engine's "cursor".
(?i)    # Now activate case-insensitivity for the remainder of the pattern.
\1      # Match the second character with a backreference to the first. With the i
        # modifier activated, this will match if the two characters only differ
        # by case.

প্রতিস্থাপনটি কেবল ইতিমধ্যে 1যেভাবেই আমরা গ্রুপে ধারণ করেছি সেই চরিত্রটি আবার লিখে দেয় ।


1
চমৎকার উত্তর! ডিবাগেক্স এটির সাথে দুর্দান্ত কাজ করে!
অলয়েসডজি মনিকার পুনর্নির্মাণ

5

ব্র্যাচল্যাগ , 44 বাইট

.v|.l1|hA,?bhB(@uA;A@uB),?bb&~b.hA|?b&~b.h~h?

ব্র্যাচল্যাগের কোনও নিয়মিত প্রকাশ নেই।

ব্যাখ্যা

    .v          Input = Output = ""
|               OR
    .l1         Input = Output = string of one character
|               OR
    hA,         A is the first char or the Input
    ?bhB        B is the second char of the Input
    (
        @uA         B uppercased is A
        ;           OR
        A@uB        A uppercased is B
    ),
    ?bb&        Call recursively on Input minus the first two elements
    ~b.hA       Output is the result of that call with A appended before it
|               OR
    b&          Call recursively on Input minus the first element
    ~b.h~h?     Output is the result of that call with the first element of Input appended
                  before it

5

সি #, 87 75 বাইট

s=>System.Text.RegularExpressions.Regex.Replace(s,@"(.)(?!\1)(?i)\1","$1");

মার্টিন এেন্ডারের শক্তিশালী রেগেক্সের সাথে । সি # ল্যাম্বদা যেখানে ইনপুট এবং আউটপুট string

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


সি #, 141 134 বাইট

s=>{var r="";for(int i=0,l=s.Length;i<l;i++){var c=s[i];r+=c;if(char.IsLetter(c)&i+1<l&&(c|32)==(s[i+1]|32)&c!=s[i+1])i++;}return r;};

সি # ল্যাম্বদা যেখানে ইনপুট এবং আউটপুট string। অ্যালগরিদম নিষ্পাপ। এটিই আমি রেফারেন্স হিসাবে ব্যবহার করি।

কোড:

s=>{
    var r = "";
    for(int i = 0; i < s.Length; i++)
    {
        r+=s[i];
        if (char.IsLetter(s[i]) & i+1 < s.Length)
            if (char.ToLower(s[i])==char.ToLower(s[i+1])
              & char.IsLower(s[i])!=char.IsLower(s[i+1]))
                i += 1;
    }       
    return r;
};

মার্টিন ইন্ডারকে 7 বাইট ধন্যবাদ!


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


@ TùxCrîñftîñg আসলে তবে এটি পড়া সহজ easy কম
শব্দাবলীর

4

পার্ল, 40 24 + 1 = 25 বাইট

মার্টিনের মতো একই রেজেক্স ব্যবহার করুন। পতাকা
ব্যবহার করুন-p

s/(.)(?!\1)(?i)\1/\1/g

এটি আদর্শের উপর পরীক্ষা করুন


আপনি যদি -p পতাকা ব্যবহার করেন তবে ভাল সঞ্চয় হিসাবে আপনি s /// ব্যতীত আপনার সমস্ত কোড সরিয়ে ফেলতে পারেন!
ডম


4

সি, 66 বাইট

l;main(c){for(;~(c=getchar());)l=l^c^32|!isalpha(c)?putchar(c):0;}

3

পাইথ, 24 20 বাইট

4 জ্যাকেট @ জাকুবকে ধন্যবাদ

এটি এখনও রেগেক্স ব্যবহার করে তবে কেবল টোকেনাইজিংয়ের জন্য।

shM:zj\|+s_BVGrG1\.1

পরীক্ষা স্যুট.

shM:zj\|+s_BVGrG1\.1   input as z
         s_BVGrG1      generate ['aA', 'Aa', 'bB', 'Bb', ..., 'zZ', 'Zz']
        +        \.    add "." to the back of the array
     j\|               insert "|" between every element of the array,
                       forming a new long string, which will be our
                       tokenizer: "aA|Aa|bB|Bb|cC|Cc|...|yY|Yy|zZ|Zz|."
                       the "." at the end is to capture the remaining characters
  :z               1   return all matches of z against that regex
                       this is effectively a tokenizer
 hM                    take the first character of each token
s                      join all the transformed tokens together, and then
                       implicitly print to STDOUT.

3

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

s=>s.replace(/./g,c=>l=c!=l&&c>'0'&&parseInt(c+l,36)%37<1?'':c,l='')

ব্যাখ্যা:

s=>s.replace(/./g,c=>   Loop over each character in the string
 l=                     Save result for next loop
  c!=l&&                Check whether characters differ
  c>'@'&&               Check minimum character code
  parseInt(c+l,36)%37<1 Check if characters have same value
  ?'':c,                If so then delete this character
 l='')                  Initial empty previous character

প্রদত্ত c>'@', parseInt(c+l,36)37 এর একাধিক হওয়ার একমাত্র উপায় উভয়ের জন্য cএবং lএকই মান (তাদের শূন্য মান থাকতে পারে না কারণ আমরা স্থান এবং শূন্য বাদ দিয়েছি এবং যদি তাদের কোনও মান না থাকে তবে এক্সপ্রেশনটি NaN<1যা মূল্যায়ন করবে মিথ্যা) তাদের একই অক্ষর হতে হবে। তবে, আমরা জানি যে তারা একই চিঠি কেস-সংবেদনশীলভাবে নয়, তাই তাদের অবশ্যই একই সংবেদন-সংবেদনশীল হতে হবে।

মনে রাখবেন যে আমি প্রতিটি চরিত্র পরীক্ষা করি তবেই এই অ্যালগরিদম কাজ করে; আমি যদি অক্ষরগুলির সাথে মিলে এটি সরল করার চেষ্টা করি তবে এটির মতো জিনিসগুলিতে ব্যর্থ হবে "a+A"

সম্পাদনা: @ বর্ধিত 3 বাইট ধন্যবাদ @ edc65।


মানচিত্রের পরিবর্তে প্রতিস্থাপন ব্যবহার করুন। 68. তবে আমি কীভাবে একটি মন্তব্যের ভিতরে '`' লাগাতে পারি তা বুঝতে খুব অলসতা করছি (চমৎকার কৌশল 2)
এডিসি 65

@ edc65 `আমি ব্যবহার করি তবে আমার কোনও দরকার নেই replace। (সামঞ্জস্যপূর্ণ হওয়ার চেষ্টা করার আগে আমি কেবল তাদের ছিলাম তবে তা জমা দেওয়ার জন্য সম্পাদনা করার সময় আমি আমার উত্তরটি গল্ফ করেছিলাম এবং আবার বেমানান হয়ে পড়েছি S দীর্ঘশ্বাস ...)
নীল

3

সি, 129 127 125 107 106 105 93 92 90 88 85 78 বাইট

c;d;f(char*s){for(;putchar(c=*s);)s+=isalpha(c)*(d=*++s)&&(!((c^d)&95)&&c^d);}

আমার সি এর উত্তর এসি পোর্ট । আমার সি কিছুটা খারাপ হতে পারে। আমি আর ভাষা বেশি ব্যবহার করি না। কোন সহায়তা স্বাগত!

  • লোজাকারের কৌশলে 1 বাইট সংরক্ষণ করা হয়েছে : a!=b=a^b
  • 1 বাইট Walpen এর ধন্যবাদ সংরক্ষিত কৌতুক : a&&b=a*b
  • লিনের ট্রিক দ্বারা 12 বাইট সংরক্ষণ করা হয়েছে এবং এখানে টেক্সক্রাফট্যাগ দ্বারা অনুপ্রাণিত হয়েছে
  • 1 বাইট জোয়ি অ্যাডামস এর ধন্যবাদ সংরক্ষিত কৌতুক এবং orlp এখানে অনুপ্রাণিত: গ্লোবাল পরিবর্তনশীল মুভিং
  • আমার (c|32)==(d|32)বিটওয়াইজ সমস্যাটি সমাধান করে এসইজেপিএম দ্বারা 2 বাইট সংরক্ষণ করা হয়েছে
  • Pietu1998 দ্বারা 5 বাইট সংরক্ষণ করা হয়েছে

কোড:

c;d;f(char*s) {
    for(;putchar(c=*s);)
        s+=isalpha(c)*(d=*++s)&&(!((c^d)&95)&&c^d);
}

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


1
আমি মনে করি আপনি কিছু বাইট সংরক্ষণ করতে পয়েন্টার বৃদ্ধি করতে পারেন। আমি এটি পেয়েছি ( f(char*s){while(*s) {char c=*s,d=s+1;putchar(c);s+=isalpha(c)&&d&&((c|32)==(d|32)&&c!=d);}}
স্বাক্ষরিত

@ TùxCrîñftîñg আমি এই সম্পর্কে ভুলে গেছি। লিন উত্তরের ভিত্তিতে আমি আপনার প্রস্তাবকে সংশোধন করেছি। সাহায্যের জন্য আপনাকে ধন্যবাদ!
অ্যালোইসডজি বলেছেন মোনিকা

1
আমার মনে হয় আপনি পরিবর্তন করতে পারেন s+++1থেকে ++s
পুর্কাকুডারী

@ Pietu1998 সত্যিই আমি পারি!
অ্যালোইসডজি বলেছেন মোনিকা

1
cএবং dসর্বদা প্রিন্টযোগ্য এএসসিআইআই হবে, সুতরাং 95এর জায়গায় কাজ করা উচিত ~32। এছাড়াও, আমি মনে করি c;d;f(char*s){for(;*s;){putchar(c=*s);s+=isalpha(c)*(d=*(++s))&&(!((c^d)&95)&&c^d);}}কাজ করবে (তবে অনির্ধারিত)।
পুরক্কা কুডারী

3

এমএটিএল , 21 বাইট

"Kk@k=K@XK=>?4XKx}K&h

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

ব্যাখ্যা

এটি প্রতিটি চরিত্রকে একটি লুপে প্রক্রিয়া করে। প্রতিটি পুনরাবৃত্তি বর্তমান অক্ষরটিকে পূর্বের অক্ষরের সাথে তুলনা করে। পরেরটি ক্লিপবোর্ড কে-তে সংরক্ষণ করা হয়, যা 4ডিফল্টরূপে প্রাথমিক হয় is

বর্তমান চরিত্রটি আগেরটির সাথে দু'বার তুলনা করা হয়েছে: প্রথমে সংবেদনশীলতার পরে সংবেদনশীলভাবে কেস করুন। যদি প্রথম তুলনাটি সত্য হয় এবং দ্বিতীয়টি মিথ্যা হয় তবে কেবলমাত্র বর্তমান চরিত্রটি মুছতে হবে। নোট করুন, যেহেতু ক্লিপবোর্ড কে প্রাথমিকভাবে 4 টি রয়েছে, তাই প্রথম অক্ষরটি সর্বদা রাখা হবে।

যদি বর্তমান অক্ষরটি মুছে ফেলা হয় তবে ক্লিপবোর্ড কে পুনরায় সেট করা উচিত (সুতরাং পরবর্তী অক্ষরটি রাখা হবে); অন্যথায় এটি বর্তমান চরিত্রের সাথে আপডেট করা উচিত।

"            % Take input string implicitly. For each char from this string:
  K          %   Push previous char, initiallized to number 4
  k          %   Convert to lower case. For numbers it rounds down
  @          %   Push current char
  k          %   Convert to lower case. 
  =          %   True if current and previous chars are (case-insensitively) equal
  K          %   Push previous char
  @          %   Push current char
  XK         %   Update clipboard K with current char. This doesn't affect the stack
  =          %   True if current and previous chars are (case-sensitively) equal
  >?         %   If first comparison was true and second was false
    4XKx     %     Reset clipboard K to 4
  }          %   Else
    K        %     Push previous char
    &h       %     Concatenate horizontally to gradually build the output string

2

জাভা 7, 66 বাইট

String c(String i){return i.replaceAll("(.)(?!\\1)(?i)\\1","$1");}

ব্যবহৃত তার রেটিনা উত্তর থেকে মার্টিন Ender এর Regex

অবরুদ্ধ এবং পরীক্ষার কোড:

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

class Main{
  static String c(String i){
    return i.replaceAll("(.)(?!\\1)(?i)\\1", "$1");
  }

  public static void main(String[] a){
    System.out.println(c("bBaAdD"));
    System.out.println(c("NniIcCeE"));
    System.out.println(c("Tt eE Ss tT"));
    System.out.println(c("sS Ee tT"));
    System.out.println(c("1!1!1sStT!"));
    System.out.println(c("nN00bB"));
    System.out.println(c("(eE.gG.)"));
    System.out.println(c("Hh3lL|@!"));
    System.out.println(c("Aaa"));
    System.out.println(c("aaaaa"));
    System.out.println(c("aaAaa"));
  }
}

আউটপুট:

bad
Nice
T e S t
s E t
1!1!1st!
n00b
(e.g.)
H3l|@!
Aa
aaaaa
aaaa

2

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

s=>s.replace(/./g,c=>l=c!=l&/(.)\1/i.test(l+c)?'':c,l='')

নীলকে 5 টি বাইট সংরক্ষণ করার জন্য ধন্যবাদ


1
খারাপ খবর: আপনি ভুল হিসাব করেছেন এবং এটি আসলে 62 বাইট। সুসংবাদ: আমি আপনাকে পাঁচটি বাইট বাঁচাতে পারি! s=>s.replace(/./g,c=>l=c!=l&/(.)\1/i.test(l+c)?'':c,l='')
নীল

ওহ, দুঃখিত, আমি ব্যবহার করে গণনা করেছি "code".length, বুঝতে পারছি না যে সেখানে একটি পালানোর ক্রম রয়েছে। ধন্যবাদ
cPu1

ব্যবহার করার চেষ্টা করুন (code).toString().length
নিল

হ্যাঁ, বা(code+"").length
cPu1

1

জাভাস্ক্রিপ্ট (ES6) 70

(s,p,q)=>s.replace(/./g,c=>p!=c&q===(d=parseInt(c,36))?q='':(q=d,p=c))

f=(s,p,q)=>s.replace(/./g,c=>p!=c&q===(d=parseInt(c,36))?q='':(q=d,p=c))

;
[['bBaAdD','bad']
,['NniIcCeE','Nice']
,['Tt eE Ss tT','T e S t']
,['sS Ee tT','s E t']
,['1!1!1sStT!','1!1!1st!']
,['nN00bB','n00b']
,['(eE.gG.)','(e.g.)']
,['Hh3lL|@!','H3l|@!']
,['Aaa','Aa']
,['aaaaa','aaaaa']
,['aaAaa','aaaa']]
.forEach(
  x=>
  {
    var i=x[0],k=x[1],r=f(i)
    console.log(k==r?'OK':'KO',i,r)
  }
)


ঠিক আছে, আমি কামড় দেব কেন ===?
নিল

0==""তবে 0===""@ নিল নয়
edc65

1

উত্তল, 18 বাইট

V±V.+'.+'|*\ô{0=}%

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

@ লিকি নুনের পাইথ উত্তর হিসাবে অনুরূপ পন্থা । এটি অ্যারে তৈরি করে ["aA" "bB" ... "zZ" "Aa" "Bb" ... "Zz" '.], '|চরিত্রটির সাথে যোগ দেয় এবং সেই রেজেক্সের উপর ভিত্তি করে ইনপুট পরীক্ষা করে। তারপরে এটি প্রতিটি ম্যাচের প্রথম চরিত্র নেয়।

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