গণিত, 173 169 155 বাইট
f=0>1;t=!f;c=Characters;u=ToUpperCase;StringJoin/@MapThread[#@#2&,{Reverse[{LetterQ@#,#==(u@#)}&/@c@#/.{{f,_}->(#&),{t,t}->u,{t,f}->ToLowerCase}&/@#],c/@#},2]&
এটি একটি ফাংশন দুটি স্ট্রিংয়ের অ্যারের গ্রহণ করে, উদাহরণস্বরূপ {"Foo","bAR"}
এবং দুটি স্ট্রিংয়ের অ্যারের আউটপুট করে। এটা আন স্থানিক-সংকুচিত স্কিম rewriting, f@x
যেমন f[x]
যেখানেই থাকুন না কেন মনে হচ্ছে স্বরলিপি বর্ণমালা (বিস্তৃত f=0>1
ওরফে False
, t=!f
ওরফে True
, c=Characters
এবং u=ToUpperCaseQ
), এবং অ-প্রতিস্থাপন সঙ্গে UpperCaseQ [#] #==u@#
(এই অক্ষর এর uppercased সংস্করণ সমান), এটি হল:
StringJoin /@ MapThread[#[#2] &, {
Reverse[
{ LetterQ[#], UpperCaseQ[#] } & /@ Characters[#] /.
{ {False, _} -> (# &), {True, True} -> ToUpperCase,
{True, False} -> ToLowerCase } & /@ #
],
Characters /@ #
}, 2] &
ইন্টারফেসিং: ট্রেলিং &
এটি একটি ফাংশন করে। এর যুক্তি দুটি ক্ষেত্রেই "#" হিসাবে .োকানো হয়েছে /@ #
। উদাহরণস্বরূপ f=0>1; ... & [{"AAAbbb111", "Cc2Dd3Ee4"}]
আউটপুট উত্পাদন করে {AaABbb111,CC2dd3Ee4}
।
প্রক্রিয়াজাতকরণ: বাইরে যথারীতি বলা হয়:
- এর আউটপুট
MapThread[...]
হল অক্ষরের দুটি তালিকার একটি তালিকা। স্ট্রিংজইন অক্ষরের এই দুটি তালিকার প্রতিটিটিতে প্রয়োগ করা হয় আউটপুট দুটি স্ট্রিংয়ের একটি তালিকা তৈরি করতে।
MapThread[#[#2]&, ... , 2]
দুটি 2-বাই-এন উপাদান তালিকার অ্যারেতে কাজ করে। প্রথম তালিকাটি 2-বাই-এন ফাংশনের অ্যারে। দ্বিতীয় তালিকাটি একটি 2-বাই-এন অক্ষরের অ্যারে, Characters /@ #
দুটি ইনপুট স্ট্রিংগুলিতে অক্ষরের তালিকা। এটি কার্যকারিতা এবং স্বতন্ত্র চরিত্রগুলিতে 2 গভীরতার সাথে কাজ করে।
Reverse[...]
ফাংশনের দুটি সাবলিস্টি অদলবদল করে যাতে ম্যাপথ্রেড দ্বিতীয় স্ট্রিংয়ের ফাংশনগুলিকে প্রথম স্ট্রিংয়ে প্রয়োগ করে এবং বিপরীতে।
{ ... } &
একটি বেনাম ফাংশন যা দুটি ইনপুট স্ট্রিংয়ের প্রতিটিটিতে প্রয়োগ করা হয়।
{LetterQ[#], UpperCaseQ[#]} & /@ Characters[#]
অক্ষরগুলির তালিকায় একটি স্ট্রিং বিভক্ত হয়, তারপরে প্রতিটি অক্ষর দুটি উপাদান তালিকার সাথে প্রতিস্থাপন করে। এই দুটি উপাদান তালিকায় প্রথম উপাদানটি হ'ল True
অক্ষর যদি অক্ষর হয় এবং False
অন্যভাবে, একইভাবে, দ্বিতীয় উপাদানটি নির্দেশ করে যে অক্ষরটি আপার ক্ষেত্রে হয় কিনা। UpperCaseQ[]
কোনও চিঠি না পেলে সত্য ফিরে আসতে পারে না।
/. {{False, _} -> (# &), {True, True} -> ToUpperCase, {True, False} -> ToLowerCase}
এই দুটি উপাদান তালিকাগুলির সাথে ফাংশনগুলি প্রতিস্থাপন করে। (সংক্ষিপ্তসারগুলির প্রসারণ t
এবং f
কোনও মিলের চেষ্টা করার আগে ঘটে before) যদি দুটি উপাদান তালিকার False
প্রথম উপাদান হিসাবে থাকে তবে এটি ফাংশন (# &)
, পরিচয় ফাংশন দ্বারা প্রতিস্থাপিত হবে । (প্রথম বন্ধনী প্রয়োজনীয়, অন্যথায় তীরটি এম্পারস্যান্ডের চেয়ে আরও দৃ tight়ভাবে আবদ্ধ হয়)) অন্যথায় দুটি উপাদান তালিকাটি শুরু হয় True
, চরিত্রটি একটি চিঠি ছিল, এবং আমরা ফাংশনগুলি আউটপুট করি ToUpperCase
এবং ToLowerCase
তার ক্ষেত্রে অনুরূপ। (এটি শেষের False
জন্য অনুসন্ধান করা অপ্রয়োজনীয়, বাস্তবে {_,_}->ToLowerCase
এমন কোনও জিনিস যা এখনও প্রতিস্থাপন করা হয়নি তা ধরে ফেলবে, তবে এটি কোনও ছোট এবং আরও অস্পষ্ট হবে না))
একমাত্র চ্যালেঞ্জটি ছিল আর্গুমেন্টের অ্যারেতে দুটি দ্বিমাত্রিক অ্যারে ফাংশনটি জিপ করার একটি সংক্ষিপ্ত উপায় আবিষ্কার করা।
সম্পাদনা করুন: "সহায়ক" কাট / পেস্ট লাইনব্রেক ব্যাকস্ল্যাশগুলি, 1>0
এবং 1<0
সংক্ষিপ্তসারগুলি ধরার জন্য এবং মার্টিন বাটনারকে ধন্যবাদ , এবং বাইটগুলিতে অক্ষর নয় (যেগুলিই হোক না কেন) দৈর্ঘ্য গণনা করার জন্য দিকনির্দেশনার জন্য (সে যাই হোক না কেন :-))
সম্পাদনা 2: বিশ্বব্যাপী নেমস্পেসকে দূষিত করা গ্রহণযোগ্য গল্ফ বলে চিহ্নিত করার জন্য @ মার্টিন বাটনারকে আরও ধন্যবাদ, আমাকে একটি চরিত্রের ফাংশন অ্যাপ্লিকেশন সম্পর্কে মনে করিয়ে দেওয়া, এবং দুটি বড় হাতের ফাংশনটির পরিবর্তনের জন্য একটির সংক্ষিপ্তসার এবং অন্যটিকে অনুকরণ করার জন্য একটি ব্যবহার করার পরামর্শ চারটি অক্ষর)। (আমি মনে করি তিনি এর আগে এই কাজটি করেছেন: :-))