রেটিনায় গল্ফ করার টিপস


10

রেটিনা গল্ফ করার জন্য আপনার কাছে কোন সাধারণ টিপস রয়েছে ? আমি এমন ধারণাগুলি সন্ধান করছি যা সাধারণভাবে কোড গল্ফ সমস্যার ক্ষেত্রে প্রয়োগ করা যেতে পারে যা কমপক্ষে কিছুটা রেটিনার ক্ষেত্রে নির্দিষ্ট (যেমন "মন্তব্যগুলি সরান" কোনও উত্তর নয়)। দয়া করে উত্তর প্রতি একটি টিপ পোস্ট করুন।

রেফারেন্সের জন্য, অনলাইন সংকলকটি এখানে

@ Sp3000 নির্দিষ্ট রয়েছে Regex গলফ জন্য টিপস । এখানে উত্তরগুলির রেটিনা বৈশিষ্ট্যগুলিতে বিশেষভাবে ফোকাস করা উচিত, সাধারণ রেজেক্স গল্ফিং টিপসের উপর নয়।


2
সম্পর্কিত:
রেগেক্স

হুম, আমি এই পোস্টটি বন্ধ করে রেখেছি কারণ রেটিনা এখনও অনেক বেশি বিকাশে রয়েছে এবং আমি ভয় পেয়েছিলাম যে বেশিরভাগ উত্তরগুলি সমতল রেইগেক্স গল্ফিং টিপস হিসাবে শেষ হয়ে যাবে, রেটিনার সাথে খুব নির্দিষ্ট নয়। তবে আমরা সম্ভবত এটিও যেতে পারি, আমার ধারণা ... :)
মার্টিন ইন্ডার

@ মার্টিনবাটনার যখন আপনি রেটিনার দিকে নজর দেওয়া শুরু করেছেন আপনি এবং আপনি কেউ কেউ আমাকে প্রচুর ভাল টিপস এবং ইঙ্গিত দিয়েছিলেন, তাই আমি সম্ভবত এটি সম্পর্কে এটির সময় সম্পর্কে মনে করি। আমি একটি স্পেসিফিকেশন যোগ করেছি যে জেনারেল রেজেক্স টিপসের লিঙ্কযুক্ত প্রশ্নে যাওয়া উচিত।
ডিজিটাল ট্রমা

1
@ মার্টিনব্যাটনার এখানে জিজ্ঞাসা করার মতো উপযুক্ত জায়গা - আমি কিছুক্ষণ ভাবছিলাম - কৌতূহলের বাইরে "রেটিনা" নামের অনুপ্রেরণা কী? আমি ধরে নিই "রে" অংশটি নিয়মিত প্রকাশের জন্য, তবে "টিনা" সম্পর্কে কী?
ডিজিটাল ট্রমা

3
@ ডিজিটাল ট্রুমা আমি একটি সুন্দর শব্দ নিয়ে আসার চেষ্টা করছিলাম যা সংক্ষিপ্ত রূপ হিসাবে কাজ করবে, কিন্তু ব্যর্থ হয়েছিল। "রেটিনা" শব্দটি কয়েকটি প্রচেষ্টার খুব কাছে ছিল এবং আমি এই শব্দটি পছন্দ করেছি liked যদিও আমি এটিকে কোনও সংক্ষিপ্ত রূপে পুনরায় সংযোগ করতে সক্ষম হইনি এবং এরপরে ছেড়ে দিয়েছি। হ্যাঁ "রে" হ'ল "নিয়মিত প্রকাশ" এবং সম্ভবত "এন" "নেট" এর জন্য, তবে শেষ পর্যন্ত এটি কেবল একটি শব্দ যা দুর্দান্ত লাগছিল sound
মার্টিন ইন্ডার

উত্তর:


3

সম্ভব হলে লুপগুলি একত্রিত করুন

অপ্রয়োজনীয় গণনাগুলিতে আপনি প্রায়শই নিজেকে ডেটা প্রক্রিয়া করার জন্য কয়েকটি লুপ ব্যবহার করে দেখতে পাবেন:

+`stage1
+`stage2
+`stage3

সুতরাং stage1এটি আউটপুট রূপান্তর না হওয়া অবধি চলবে , তারপরে stage2আউটপুট রূপান্তর stage3না হওয়া অবধি এবং তারপরে আউটপুট রূপান্তর না হওয়া অবধি।

তবে সবসময় পর্যায়গুলি বিশদভাবে পরীক্ষা করা মূল্যবান। কখনও কখনও তার stage1, stage2, stage3, stage1, stage2, stage3, ...পরিবর্তে আন্তঃবিবাহিত ফ্যাশনে লুপটি চালানো সম্ভব হয় (এটি পর্যায়ে আসলে কী ঘটে তার উপর অনেক কিছু নির্ভর করে তবে কখনও কখনও তারা সম্পূর্ণ অরথগোনাল পরিবর্তন করে বা পাইপলাইনের পাশাপাশি কাজ করে)। এক্ষেত্রে আপনি একটি একক লুপে মুড়িয়ে বাইটগুলি সংরক্ষণ করতে পারেন:

{`stage1
stage2
}`stage3

যদি stage1প্রথম পর্যায়ে থাকে বা stage3প্রোগ্রামের শেষ পর্যায়ে থাকে তবে আপনি সেই প্রথম বন্ধনীগুলির পাশাপাশি বাদ দিতে পারেন (যার অর্থ এটি ইতিমধ্যে দুটি স্তরের লুপের জন্য বাইট সংরক্ষণ করতে পারে)।

সাম্প্রতিক এই কৌশলটির ব্যবহার এই উত্তরে দেখা যাবে


2

সমান দৈর্ঘ্যের অংশগুলিতে স্ট্রিংগুলি বিভক্ত করা n

বেশিরভাগ "সাধারণ" ভাষায় যেমন টিএমটিওটিডিআই হয় (এটি করার একাধিক উপায় রয়েছে)) আমি এখানে ধরে নিচ্ছি যে ইনপুটটিতে লাইনফিড নেই, এবং "বিভক্তকরণ" এর অর্থ এটি লাইনে বিভক্ত। তবে দুটি পৃথক লক্ষ্য রয়েছে: স্ট্রিংয়ের দৈর্ঘ্য যদি অংশের দৈর্ঘ্যের একাধিক না হয়, আপনি কি অসম্পূর্ণ ট্রেলিং অংশটিকে রাখতে চান বা আপনি এটিকে বাতিল করতে চান?

অসম্পূর্ণ ট্রেলিংয়ের অংশটি রাখা

সাধারণভাবে, রেটিনায় বিভাজন সম্পর্কে তিনটি উপায় রয়েছে। আমি এখানে তিনটি পদ্ধতিরই উপস্থাপন করছি, কারণ আপনি যখন কোনও সম্পর্কিত সমস্যার সাথে খাপ খাইয়ে নেওয়ার চেষ্টা করেন তখন তারা হয়ত আরও বড় পার্থক্য করতে পারে। আপনি একটি প্রতিস্থাপন ব্যবহার করতে পারেন এবং প্রতিটি ম্যাচে একটি লাইনফিড যুক্ত করতে পারেন:

.{n}
$&¶

যে 8 বাইট (একটু কম হলে বা এর n = 2বা n = 3তারপর আপনি ব্যবহার করতে পারেন কারণ ..বা ...যথাক্রমে)। এটি একটি অতিরিক্ত লাইনফীড appends যদি স্ট্রিং দৈর্ঘ্য: যদিও এই এক সমস্যা হয়েছে হয় খণ্ড দৈর্ঘ্যের একটি একাধিক।

আপনি একটি বিভক্ত পর্যায়েও ব্যবহার করতে পারেন এবং বিভক্তিতে ক্যাপচারগুলি ধরে রাখা হয় তা ব্যবহার করে:

S_`(.{n})

_বিকল্প খালি লাইন অন্যথায় মিল সহ সমগ্র স্ট্রিং আচ্ছাদন থেকে যাবে সরিয়ে ফেলা হয়। এটি 9 বাইট, তবে এটি কোনও ট্রেলিং লাইনফিড যোগ করে না। জন্য n = 3এটা 8 বাইট এবং জন্য n = 2এটা 7 বাইট। মনে রাখবেন যে খালি রেখাগুলি কোনও বিষয় না রাখলে আপনি সামগ্রিকভাবে একটি বাইট সংরক্ষণ করতে পারবেন (উদাহরণস্বরূপ আপনি কেবল খালি খালি লাইনগুলি প্রক্রিয়াকরণ করবেন এবং পরে যে কোনওভাবে লাইনফিডগুলি পরিত্রাণ পাবেন): তবে আপনি এটি সরাতে পারবেন _

তৃতীয় বিকল্পটি ম্যাচ ব্যবহার করা। সঙ্গে !বিকল্প আমরা সবাই ম্যাচ মুদ্রণ করতে পারেন। তবে, পিছনের অংশটি অন্তর্ভুক্ত করার জন্য, আমাদের একটি চলক ম্যাচের দৈর্ঘ্যের জন্য অনুমতি দেওয়া প্রয়োজন:

M!`.{1,n}

এটি 9 বাইট এবং এটির পিছনে লাইনফিডও থাকবে না। এই জন্য 8 বাইট হয়ে n = 3করে ..?.?। তবে নোট করুন যে এটি 6 বাইটে হ্রাস পেয়েছে n = 2কারণ এখন আমাদের কেবল প্রয়োজন ..?। এছাড়াও মনে রাখবেন যে Mযদি আপনার প্রোগ্রামের এটি শেষ পর্যায়ে থাকে তবে যে কোনও ক্ষেত্রেই একটি বাইট সংরক্ষণ করা যায় dropped

অসম্পূর্ণ ট্রেলিং অংশটিকে বাতিল করা হচ্ছে

যদি আপনি এটি প্রতিস্থাপনের সাথে করার চেষ্টা করেন তবে এটি সত্যিই দীর্ঘ হয়ে যায়, কারণ আপনাকে পিছনের অংশটিকে কোনও কিছুর (যদি এটি উপস্থিত থাকে) এবং বিভাজন দিয়েও প্রতিস্থাপন করতে হবে। সুতরাং আমরা সেগুলি নিরাপদে উপেক্ষা করতে পারি। মজার বিষয় হল ম্যাচের পদ্ধতির জন্য এটি বিপরীত: এটি আরও খাটো হয়ে যায়:

M!`.{n}

7 বাইট, বা এর চেয়ে ছোট n = 2, n = 3। আবার, দ্রষ্টব্য যে আপনি Mকোডটি শেষের পর্যায়ে থাকলে এটি বাদ দিতে পারেন।

আপনি যদি এখানে একটি ট্রেলিং লাইনফিড চান তবে আপনি এটি রেগেক্সে সংযুক্ত করে পেতে পারেন |$

বোনাস: ওভারল্যাপিং খণ্ডগুলি

মনে রাখবেন যে Mহয়েছে &বিকল্প যা ওভারল্যাপিং ম্যাচ (যা সাধারণত Regex সম্ভব নয়) ফেরৎ। এটি আপনাকে প্রদত্ত দৈর্ঘ্যের স্ট্রিংয়ের সমস্ত ওভারল্যাপিং খণ্ডগুলি (সাবস্ট্রিংগুলি) পেতে দেয়:

M!&`.{n}

পরিবর্তনশীল দৈর্ঘ্যের অর্ধেক অংশে কোনও স্ট্রিংকে ঠিক ভাগ করে নেওয়া কি সম্ভব? তাই 123456হয়ে 123\n456এবং 1234567890হয়ে 12345\n67890?
কেভিন ক্রুইজসেন 18

1
@ কেভিন ক্রুজসেন আমার মনে হয় না যে আমি এর জন্য কোনও নির্দিষ্ট বৈশিষ্ট্য যুক্ত করেছি। আপনাকে সম্ভবত ভারসাম্যপূর্ণ গোষ্ঠীগুলি ব্যবহার করতে হবে: tio.run/##K0otycxLNPyvquGe8D/YIEHD3sZWQ09TW1PD3hbI1jW0A3JUNP//… যদি আপনি একটি পিছনের লাইনফিডটি আপত্তি না করেন তবে আপনি এটি বাদ দিতে পারেন ?=
মার্টিন ইন্ডার

আমি চ্যালেঞ্জটি সম্পূর্ণ করতে সক্ষম হয়েছি যেখানে আমি ভেবেছিলাম আমার এটির আলাদাভাবে প্রয়োজন, তবে ভারসাম্যপূর্ণ দলগুলি সত্যিই খুব দরকারী! আমি জানতাম যে এই লাইনের সাথে কিছু হওয়া উচিত, তবে আমার রেজেক্স / রেটিনা দক্ষতা প্রায় যথেষ্ট ভাল নয়। উত্তর করার জন্য ধন্যবাদ! :)
কেভিন ক্রুইজসেন
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.