-join("$args"-split'\b'|%{(,$(,$_[0]*$n+$_))[!!($n=$($_-1))]})
এটি অনলাইন চেষ্টা করুন!
ভাঙ্গন
কী এলোমেলো!
$argsআরএলইআর স্ট্রিং যুক্ত একক উপাদান অ্যারে থেকে শুরু করে , আমি এটিকে উদ্ধৃত করে একটি প্রকৃত স্ট্রিংয়ে জোর করছি।
তারপরে এটিকে শব্দের বাউন্ডারি দিয়ে ভাগ করুন ( \bরেগেজেমে)। এটি আমাকে স্ট্রিংগুলির একটি অ্যারে দেবে, যেখানে প্রতিটি উপাদান হয় একটি সংখ্যা বা বিএফ টোকেন (গুলি) যে সংখ্যার পরে আসে। সুতরাং উদাহরণস্বরূপ, এই বিভক্ত অ্যারের প্রথম 4 উপাদান 10, +]>+>, 3, +>(সমস্ত স্ট্রিং আছে)।
পরবর্তী, আমি নল যে মধ্যে ForEach-Object( %) প্রতিটি সঙ্গে মোকাবিলা করার জন্য উপাদান ।
মাঝখানে হ'ল একটি সুপরিচিত পাওয়ারশেল গল্ফিজম; এটি মূলত একটি ডিআইওয়াই টেরিনারি অপারেটর, যাতে আপনি একটি 2 এলিমেন্ট অ্যারে তৈরি করেন তারপরে আপনি যে বুলিয়ান এক্সপ্রেশনটি পরীক্ষা করতে চান তা ব্যবহার করে সূচক তৈরি করে যার ফলস্বরূপ একটি মিথ্যা ফলাফল আপনাকে উপাদান 0 দেয় এবং সত্য ফলাফল আপনাকে উপাদান 1 দেয়।
এই ক্ষেত্রে, আমি আসলে অ্যানারি কমা ,অপারেটরের সাথে একটি একক উপাদান অ্যারে তৈরি করি , কারণ আমি সত্যিকারের ক্ষেত্রে আউটপুট চাই না।
প্রথমে সূচকের দিকে নজর দেওয়া যাক যদিও পরে এটি কার্যকর করা হয়।
এর ধারণাটি হ'ল $_(বর্তমান উপাদান) হয় একটি বৈধ সংখ্যা বা অন্য কোনও স্ট্রিং হতে পারে। যদি এটি একটি সংখ্যা হয় তবে আমি $nসেই সংখ্যাটি বিয়োগ 1 এর মান হতে চাই (একটি সংখ্যা হিসাবে স্ট্রিং নয়)। যদি এটি না হয়, আমি চাই$n মিথ্যা-ওয়াই হতে ।
পাওয়ারশেল সাধারণত বাম পাশের ধরণের দিকে ডান-হাতের মানকে চাপিয়ে দেওয়ার চেষ্টা করে তবে এটি অপারেশনের উপর নির্ভর করতে পারে। অতিরিক্ত হিসাবে, "10"+5আপনাকে একটি নতুন স্ট্রিং দেবে "105", যেখানে 10+"5"আপনাকে একটি পূর্ণসংখ্যা দেবে (15 ) দেবে।
তবে স্ট্রিংগুলি বিয়োগ করা যাবে না তার পরিবর্তে পাওয়ারশেল বিয়োগের বাম পাশে একটি স্ট্রিং সহ স্বয়ংক্রিয়ভাবে সংখ্যার মানটি নির্ধারণ করতে পারে, তাই "10"-5দেয় 5।
সুতরাং, আমি দিয়ে শুরু করি $_-1, যা $_আসলে একটি নম্বর হওয়ার পরে আমাকে যে নম্বরটি দিতে চাইবে তা দেবে, কিন্তু যখন এটি না হয় আমি কিছুই পাই না। পৃষ্ঠতলে, "কিছুই" মিথ্যা নয়, তবে সমস্যাটি হ'ল এই কার্যভারটি কার্যকর করা বন্ধ করে দেয়, সুতরাং $nএর আগের মানটি ধরে রাখতে হবে; আমি যা চাই না!
আমি যদি এটি একটি সুপ্রেসপ্রেসনে আবদ্ধ করি, তবে যখন এটি ব্যর্থ হয়, আমি আমার মিথ্যা মান পাই: $($_-1) ।
যে সমস্ত নির্ধারিত হয়ে যায় $nএবং যেহেতু সেই অ্যাসাইনমেন্টটি নিজেই প্রথম বন্ধনীতে আবৃত হয়, তাই যে মূল্য নির্ধারিত হয়েছিল $nতা পাইপলাইনেও যায়।
যেহেতু আমি এটি সূচকটিতে ব্যবহার করছি এবং আমি চাই 1যে রূপান্তরটি সফল হয়েছে, আমি এই বুলিয়ানকে রূপান্তর করতে দুটি বুলিয়ান- notএক্সপ্রেশন ব্যবহার করি !!। একটি সফল সংখ্যার রূপান্তর সত্য হিসাবে শেষ হয়, যদিও মিথ্যা কিছুই না আমাদের সেই মিষ্টি, মিষ্টি 0দেয় যা সেই ভুয়া টর্নারি অ্যারেতে কেবলমাত্র উপাদান ফেরত দেয়।
সেই অ্যারেটিতে ফিরে আসার উপাদানটি হ'ল: $("$($_[0])"*$n*$_) $(,$_[0]*$n+$_)
"$($_[0])"- এটি বর্তমান উপাদানটির প্রথম চরিত্রটি পাওয়ার জন্য একটি বিরক্তিকর দীর্ঘ পথ (আসুন বলে নেওয়া যাক, +থেকে পেয়ে যাচ্ছি +[>+) তবে স্ট্রিং হিসাবে এবং কোনও [char]অবজেক্ট হিসাবে নয় । আমার এটি স্ট্রিং হওয়া দরকার কারণ আমি এটির সদৃশ করার জন্য একটি স্ট্রিংটিকে একটি সংখ্যা দ্বারা গুণ করতে পারি, তবে আমি এটি একটি অক্ষর দিয়ে করতে পারি না।
প্রকৃতপক্ষে আমি [char]স্ট্রিংয়ের পরিবর্তে অ্যারে ব্যবহার করে 4 টি অক্ষর সংরক্ষণ করতে সক্ষম হয়েছি (অন্য একটি কমা কমা ব্যবহার করে ,), তাই আমি উদ্ধৃতিগুলি এবং অতিরিক্ত উপ-এক্সপ্রেশনটি সরিয়ে ফেলতে সক্ষম হয়েছি। আমি পারি অ্যারের উপাদানগুলি নকল একটি অ্যারের গুণ । এবং যেহেতু এই পুনরাবৃত্তির পুরো ফলাফলটি যাইহোক অ্যারে হয়ে শেষ হয় এবং -joinএড করা দরকার, এখানে অ্যারে ব্যবহার করে কোনও অতিরিক্ত ব্যয় হয় না।
তারপর, আমি সংখ্যাবৃদ্ধি যে স্ট্রিং দ্বারা অ্যারে $n, এটা অনুরূপ $nবার। মনে আছে$n হতে পারে $nullবা এটি পূর্ববর্তী অঙ্কগুলির বিয়োগের মান হতে পারে।
তারপরে +$_সেই উপাদানটির সদৃশ প্রথম অক্ষরটির শেষে বর্তমান উপাদান যুক্ত করুন। এই জন্য$n মাইনাস এক।
এই ভাবে, 9 এর 10+[>+সমাপ্তি দিয়ে শেষ হবে $n, তারপরে আমরা 9 +এর তৈরি করব এবং এটি আবার যুক্ত করব+[>+ প্রয়োজনীয় স্ট্রিংটিতে প্রয়োজনীয় 10 টি পেতে, পাশাপাশি যাত্রার জন্য অন্যান্য একক উপাদানগুলি যুক্ত করি।
উপাদানটি একটি subexpression মধ্যে আবৃত $()কারণ যখন $nহয় $null, সম্পূর্ণ এক্সপ্রেশন ব্যর্থ হয়, তাই অ্যারের তৈরি ব্যর্থ হয়, তাই সূচক কখনও চলবে না, তাই$n কখনই বরাদ্দ দেওয়া হয় না।
কারণ আমি এই তিন কৌতুক ব্যবহারের ইঙ্গিত নিজস্ব চালচলন এক কারণ: একটি বাস্তব তিন অপারেটর মতো অভিব্যক্তি উপাদান সংজ্ঞায়িত না যে বিষয়টি জন্য মূল্যায়ন পেতে থাকুক বা না থাকুক তারা "নির্বাচিত" হয়, এবং প্রথম।
যেহেতু আমাকে নিয়োগ এবং তারপরে $nপৃথক পুনরাবৃত্তিগুলি ব্যবহার করা দরকার , এটি সহায়ক। পূর্বের পুনরাবৃত্তির $nমানটির সাথে ত্রৈমাসিক অ্যারে উপাদানটির মানটি মূল্যায়ন হয়, তারপরে সূচকটি $nবর্তমান পুনরাবৃত্তির জন্য পুনরায় বরাদ্দ দেয়।
তাহলে ForEach-Object লুপগুলি তার অনুমিত সমস্ত কিছু আউটপুট করে শেষ করে দেয় (ত্রুটিগুলির একটি গোছা আমরা উপেক্ষা করি), তবে নতুন স্ট্রিংগুলির অ্যারে হিসাবে।
সুতরাং পুরো জিনিসটি প্রথম বন্ধনীতে আবৃত হয় এবং তারপরে -joinআউটপুট স্ট্রিং দেওয়ার জন্য অ্যানারি দ্বারা পূর্বে ।