কেস- (খুব)-সংবেদনশীল স্ট্রিং সহ আরও মজাদার


28

এই চ্যালেঞ্জ দ্বারা অনুপ্রাণিত (বা, আরও স্পষ্টতই, এটি ভুলভাবে পড়ে), আমি নিম্নলিখিত চ্যালেঞ্জ নিয়ে এসেছি:

একটি ইনপুট স্ট্রিং এস দেওয়া, সমস্ত বড় হাতের অক্ষর এবং সমস্ত ছোট হাতের অক্ষরের ক্রমটিকে বিপরীত করুন। সমস্ত অক্ষর অক্ষর জায়গায় রেখে দিন। এই ক্ষেত্রে:

ওহে বিশ্ব!

দ্রষ্টব্য যে বড় হাতের W(প্রথম বড় হাতের অক্ষর) প্রতিস্থাপন করা হয়েছিল H(শেষ) ছোট হাতের অক্ষরগুলির জন্য একই: 'ডি' (প্রথম )টি e(সর্বশেষ) দিয়ে অদলবদল করা হয় , l(দ্বিতীয়) l(কলম-চূড়ান্ত) দিয়ে প্রতিস্থাপিত হয় ... সমস্ত অক্ষরবিহীন অক্ষরগুলি সেখানে রেখে দেওয়া হয়।

ইনপুট

  • ইনপুট হল একটি স্ট্রিং যা কেবলমাত্র 32-266 এর পরিসরে ASCII অক্ষর রয়েছে।
  • ইনপুটটি কমপক্ষে 1 টি অক্ষর দীর্ঘ হওয়ার গ্যারান্টিযুক্ত এবং এটি আপনার ভাষার সীমা অতিক্রম করবে না।

আউটপুট

  • বর্ণ হিসাবে বর্ণচিহ্ন অদলবদল সঙ্গে একই স্ট্রিং ,.

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

  • স্ট্যান্ডার্ড লুফোলগুলি নিষিদ্ধ
  • উত্তরটি অবশ্যই একটি সম্পূর্ণ প্রোগ্রাম বা একটি ক্রিয়াকলাপ হতে হবে, কোনও স্নিপেট বা একটি REPL- এন্ট্রি নয়।
  • , বাইট জেতে সংক্ষিপ্ত উত্তর।

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

A
A

Ok
Ok

OK
KO

Hello, World!
Wdlro, Holle!

0123456789
0123456789

The quick brown Fox jumps over the lazy doge
Feg odyza lehtr Tev ospmu jxon wor bkci uqeh

odd
ddo

racecar
racecar

EtOn Em OsN R AaToNsIsIhT!!1!
ThIs Is NoT A RaNsOmEnOtE!!1!

আপনি একটি 2-চর টেস্টকেস অন্তর্ভুক্ত করতে চাইতে পারেন, আমার আসল সমাধানটি প্রথমে এতে ব্যর্থ হয়েছিল। (এতে পরিবর্তন করে বিনা মূল্যে স্থির করা .+হয়েছে .*)
ETH প্রোডাকশনগুলি

"অলস ডোজে" আমাকে
এটির

উত্তর:


5

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

2:"t@Y2myy)Pw(

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

ব্যাখ্যা

        % Impicitly grab input as a string
2:      % Push the array [1, 2] to the stack
"       % For each value in this array
  t     % Duplicate the top element of the stack (S)
  @     % Get the current loop index
  Y2    % Load the predefined literal 1Y2 ('ABC...Z') on the first loop
        % and the predefined literal 2Y2 ('abc...z') on the second loop (M)
  m     % Create a logical array the length of S that is TRUE when a character is in the
        % array M and FALSE otherwise (B)
  yy    % Make a copy of both S and B
  )     % Grab just the letters of S that were in M using B as an index
  P     % Reverse this array
  w     % Flip the top two stack elements
  (     % Assign them back into the string
        % Implicit end of for loop and implicit display

1
দারূন কাজ! আমার 2:"tttXk>f)5MP(Yo17 বাইট ছিল
লুইস মেন্ডো

11

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

রেটিনার সরাসরি স্ট্রিংটি বিপরীত করার উপায় নেই তবে আমরা বাছাই পর্বটি শোষণ করে এটি করতে পারি:

O^#`[a-z]
O^#`[A-Z]

বাছাই করুন ( O), তাদের সংখ্যা হিসাবে পড়ুন ( #) এবং তারপরে ^প্রদত্ত রেজেক্স (প্রথম লাইনের জন্য ছোট অক্ষর এবং দ্বিতীয়টির জন্য বড় হাতের অক্ষর) এর সাথে মিলে যাওয়া সমস্ত স্ট্রিংয়ের ক্রম ( ) এর বিপরীত করুন ।

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

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


10

পার্ল , 45 বাইট

কোড + -pপতাকা 44 বাইট ।

for$c(u,l){@T=/\p{L$c}/g;s/\p{L$c}/pop@T/ge}

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

ইউনিকোড অক্ষর শ্রেণি \p{Lu}এবং \p{Ll}যথাক্রমে বড় হাতের অক্ষর এবং ছোট হাতের অক্ষর মেলে।
সুতরাং /\p{L$c}/সমস্ত উচ্চ (বা নিম্ন) কেস অক্ষরের তালিকা (এবং এটি ভিতরে সংরক্ষণ করবে) ফিরিয়ে দেবে @T
এবং তারপরে, রেজেক্স এটি অপসারণ করার সময় s/\p{$c}/pop@T/geশেষ অক্ষরের দ্বারা প্রতিটি (উপরের, তারপরে নিম্ন কেস) চিঠিটি প্রতিস্থাপন করবে ।@T@T


7

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

f=
s=>(g=r=>s=s.replace(r,_=>a.pop(),a=s.match(r)))(/[A-Z]/g,g(/[a-z]/g))
<input oninput=o.textContent=f(this.value)><pre id=o>

সম্পাদনা: @ আরনাউল্ডকে ধন্যবাদ 1 বাইট সংরক্ষিত


4
আমি জানতাম এর চেয়ে আরও ভাল উপায় ছিল ...
ETH প্রোডাকশনগুলি

5

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

s=>(F=(r,s)=>s.replace(r,([x],a,y)=>y+F(r,a)+x))(/[a-z](.*)([a-z])/,F(/[A-Z](.*)([A-Z])/,s))

সেখানে আছে পেয়েছিলাম regexes মধ্যে মিল সুবিধা গ্রহণ করতে একটি উপায় হতে না ...

পরীক্ষার স্নিপেট


এটি কি ধরে নেয় যে ফাংশনটি একটি ভেরিয়েবলকে নির্ধারিত হয় f? বাইট গণনায় থাকা উচিত নয়?
স্টেইনবার্গ

@ সটেনবার্গ ফাংশনটি বেনামে রয়েছে, এটি আপনি যা চান তা বলা যেতে পারে
ক্রিটিক্সী লিথোস

1
@ সটেনবার্গ নোপ, এটি একটি বেনামে ফাংশন যা অন্য ফাংশন তৈরি করে Fতারপরে পুনরাবৃত্তভাবে দু'বার কল করে। বাইরের ফাংশন আসলে কোনও পর্যায়ে নিজেকে কল করে না।
ETH প্রোডাকশনগুলি

আপনি কেন .*রেজিজেসে চারপাশে প্রথম বন্ধনী ব্যবহার করেন ?
লুক

@ এই অক্ষরগুলি ( aইন ([x],a,y)=>) ক্যাপচার করতে চান
ইটিএইচ প্রোডাকশন

4

পার্ল 6 , 75 69 বাইট

{my @a=.comb;@(grep $_,@a).&{@$_=[R,] $_} for /<:Lu>/,/<:Ll>/;[~] @a}

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

  1. my @a=.comb;
    স্ট্রিংগুলিকে অক্ষরগুলিতে বিভক্ত করুন এবং সেগুলি অ্যারেতে সঞ্চয় করুন।

  2. for /<:Lu>/,/<:Ll>/
    যথাক্রমে উপরের এবং নিম্ন-বর্ণের অক্ষরের সাথে মিলে যাওয়া দুটি রেজেক্সের জন্য ...

    • @(grep $_,@a)
      রেজেক্সের সাথে মিলে সমস্ত অ্যারে এন্ট্রিগুলির একটি স্লাইস পান।

    • .&{@$_=[R,] $_}
      স্লাইসের বিপরীতটি নিজেকে নির্ধারণ করুন।

  3. [~] @a
    আবার স্ট্রিং গঠনের জন্য পরিবর্তিত অ্যারে সংযুক্ত করুন এবং এটি ফেরত দিন।


@ দাদার সমাধান থেকে চরিত্রের সীমাগুলির পরিবর্তে ইউনিকোড ক্লাস ব্যবহার করার ধারণাটি চুরি করে -6 বাইট


3

জেলি , 14 বাইট

nŒlT,Ṛ$yJịŒsµ⁺

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

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

nŒlT,Ṛ$yJịŒsµ⁺  Main link. Argument: s (string)

 Œl             Convert to lowercase.
n               Test for inequality.
   T            Truth; yield all indices of 1's.
    ,Ṛ$         Pair with its reverse. Yields [A, B] (pair of lists).
        J       Indices; yield I := [1, ..., len(s)].
       y        Translate; replace the integers of I that occur in A with the
                corresponding integers in B.
          Œs    Swapcase; yield s with swapped case.
         ị      Use the translated index list to index into s with swapped case.
            µ   Combine all links to the left into a chain.
             ⁺   Duplicate the chain, executing it twice.

নিতপিকি নয় তবে .. 14 টি অক্ষর! = 23 বাইট :) mothereff.in/byte-counter
Gizmo

@Gizmo জেলি একটি ব্যবহার codepage । দেখুন এই মেটা পোস্টে আরও তথ্যের জন্য।
স্যুভার

@ তবে ওহ এটি ঝরঝরে, আজ কিছু শিখেছে ^। ^
গিজমো

3

বাশ + ইউনিক্স ইউটিলিটিস, 122 121 বাইট

f()(p=[^$1*
v="\)\([$1\)\("
for((n=99;n;n--)){
q="$q;s/^\($p$v.*$v$p\)$/\1\4\3\2\5/"
p=[^$1*[$1$p
}
sed $q)
f a-z]|f A-Z]

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

সত্যিই খুব সংক্ষিপ্ত নয়; হয়তো কেউ এটিকে আরও গল্ফ করতে পারে।

স্টিডিনে ইনপুট, স্টডআউটে আউটপুট।

এটি 200 টিরও কম অক্ষরের ইনপুটগুলিতে সঠিকভাবে কাজ করবে।

(প্রকৃতপক্ষে এটি 200 টিরও কম ছোট অক্ষর এবং 200-এরও কম ছোট অক্ষরের সাথে কোনও স্ট্রিং সঠিকভাবে পরিচালনা করে))

আপনি যদি কোডটির 99 টি বাড়িয়ে 102 তে পরিণত করেন (এক অতিরিক্ত বাইটের দামে), এটি 205 টি অক্ষর পর্যন্ত স্ট্রিংগুলি পরিচালনা করবে।

যাইহোক, আপনি কোডের চেয়ে ১০২ ছাড়িয়ে 99 এড়াতে পারবেন না যেহেতু আপনি তখন সেডের সর্বোচ্চ যুক্তির দৈর্ঘ্য অতিক্রম করবেন।

এখানে কোনও নির্দিষ্ট ইনপুট আকারের সীমাবদ্ধতা ছাড়াই একটি সংস্করণ রয়েছে তবে 137 বাইট গণনাটি আরও দীর্ঘ। (এই দীর্ঘ সংস্করণটি টি নামের একটি সহায়তাকারী ফাইলটিতে লিখবে))

f()(p=[^$1*
v="\)\([$1\)\("
for((n=`wc -c<t`;n;n--)){
sed -i "s/^\($p$v.*$v$p\)$/\1\4\3\2\5/" t
p=[^$1*[$1$p
})
cat>t
f a-z]
f A-Z]
cat t

টেস্ট রান:

for x in A Ok OK 'Hello, World!' 0123456789 'The quick brown Fox jumps over the lazy doge' odd racecar 'EtOn Em OsN R AaToNsIsIhT!!1!'
  do
    echo "$x"
    ./swapping3 <<<"$x"
    echo
  done

A
A

Ok
Ok

OK
KO

Hello, World!
Wdlro, Holle!

0123456789
0123456789

The quick brown Fox jumps over the lazy doge
Feg odyza lehtr Tev ospmu jxon wor bkci uqeh

odd
ddo

racecar
racecar

EtOn Em OsN R AaToNsIsIhT!!1!
ThIs Is NoT A RaNsOmEnOtE!!1!

আকর্ষণীয় যে এটি টিআইওতে ব্যর্থ হয়। Your sedআপনার সিস্টেমে ইনস্টল করা প্রয়োগের উপর নির্ভর sedকরতে পারে তবে জিএনইউতে আপনি -rবিকল্প যুক্ত করতে পারেন এবং \সমস্ত বন্ধনীর অবতরণ সরিয়ে ফেলতে পারেন ।
manatwork

2

পাইথন 2 , 115 বাইট

s=input();u=str.isupper
exec"r='';i=0\nfor c in s:r+=c[u(c):]or filter(u,s)[~i];i+=u(c)\ns=r.swapcase();"*2
print s

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


আপনি \ n এর সাথে প্রতিস্থাপন করতে পারেন?
টিম

দুর্ভাগ্যক্রমে না. যুক্তিটি execপাইথন কোডটি যথারীতি পার্স করা হয়, সুতরাং লুপের জন্য অবশ্যই তার নিজের লাইনে থাকতে হবে।
ডেনিস

2

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

s->new String(new Error(){char[]o=s.toCharArray();char c;int b;{while(b++<2)for(int l=0,r=o.length;l<r;l++){for(--r;r>l&&f(r);r--);for(;l<r&&f(l);l++);if(l<r){o[l]=o[r];o[r]=c;}}}boolean f(int i){c=o[i];return b>1?!Character.isUpperCase(c):!Character.isLowerCase(c);}}.o)

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


এটিকে ল্যাম্বডায় পরিণত করে আপনি কিছু বাইট সংরক্ষণ করতে পারেন। s->new String...
ননলাইনফর্ট

1
@নিলাইনারফ্রুট আপনাকে ধন্যবাদ! 294 -> 272, যখন আর এলটি দিয়ে আরম্ভ না করে পুনরায় ব্যবহার করা হয়েছিল তখনও ভুলটি স্থির করে।
দিমিত্রিসামোলেঙ্কো

পিপিসিজিতে আপনাকে স্বাগতম! কিছু জিনিস যা আপনি এখনও গল্ফ করতে পারেন: char[]o=s.toCharArray();char c;int b;থেকে char o[]=s.toCharArray(),c,b;; এবং উভয় &&থেকে &'; এবং c=o[i];return b>1?!Character.isUpperCase(c):!Character.isLowerCase(c);থেকে c=o[i];Character x=c;return b>1?!x.isUpperCase(c):!x.isLowerCase(c);( মোট 259 বাইট )। এবং আমি সম্ভবত এটি আরও গল্ফ কিছু জিনিস মিস করেছি। এছাড়াও, আপনি যদি এখনও এটি না দেখে থাকেন তবে জাভাতে গল্ফ করার টিপসটি পড়তে আগ্রহী হতে পারে।
কেভিন ক্রুইজসেন

1

আর , 107 বাইট

u=utf8ToInt(scan(,''));for(i in c(65,97)){l=which(u%in%i:(i+25));u[l]=u[rev(l)]};cat(intToUtf8(u,T),sep="")

লিঙ্কিত চ্যালেঞ্জের আমার প্রতিক্রিয়া থেকে অভিযোজিত। এটি কেবল জুড়ি বদলের চেয়ে যথেষ্ট সহজ। আমি কিছু গল্ফের সাথে যদি আমি সাব 100 পেতে পারি তবে আমি অবাক হই ...

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

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