ব্র্যাচল্যাজে গল্ফ করার টিপস


19

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

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

উত্তর:


4

নেস্টেড পূর্বাভাসগুলি নতুন ভেরিয়েবলগুলি তৈরি করতে শোষণ করুন

ব্র্যাচল্যাজের দুটি বিশেষ ভেরিয়েবল, ?(ইনপুট / বাম প্যারামিটার) এবং .(আউটপুট / ডান প্যারামিটার), ব্যবহারের জন্য টারার তৈরি করতে প্রচুর বিশেষ সিনট্যাক্স কেস রয়েছে । এর অর্থ হ'ল যদি আপনার প্রিকিটিকের অ্যাক্সেসের প্রয়োজন না হয় ?এবং .তবে ভেরিয়েবলগুলি ব্যবহার করার প্রয়োজন হয় তবে আপনি প্রায়শই এর ? এবং ব্যবহার করার জন্য নেস্টেড প্রিকিকেট তৈরির মাধ্যমে বাইটগুলি সংরক্ষণ করতে পারেন .

একটি সাধারণ উদাহরণ হিসাবে, এমন একটি প্রোগ্রাম বিবেচনা করুন যা এটির মতো দেখাচ্ছে:

… A … ∧A … B … B …

এটি একটি দীর্ঘ প্রোগ্রামের জন্য একটি দুর্দান্ত সাধারণ আকার; সর্বোপরি, অনেকগুলি ফাঁক রয়েছে যা কিছু থাকতে পারে। ধরুন আমাদের কেন্দ্রের তিনটি ফাঁক ?বা .ফাঁক দেওয়ার দরকার নেই। তারপরে আমরা এটিকে আবার লিখতে পারি:

… { … & … . … } …

এখানে, নেস্টেড শিকারীর ?ভূমিকা পরিবেশন করা হচ্ছে A, এবং .এটি এর ভূমিকাটি পরিবেশন করছে B। আমরা লক্ষ্য করতে পারি যে এটি মূল কোডের চেয়ে বাইট কম; পরিবর্তন AABBকরার জন্য {?.}বাইট পরিপ্রেক্ষিতে পরিবর্তন আছে, কিন্তু এই আমাদের প্রক্রিয়া সহজ করার জন্য অনুমতি দেওয়া ∧?সংক্ষেপ করার &

একটি সম্পর্কিত কৌশল পরিবর্তন করা হয়

∧. … ?∧

প্রতি

~{ … }

(যা একটি বাইট সংক্ষিপ্ত), তবে নোট করুন যে কলারটির পরিবর্তে তর্কগুলি আদান প্রদান করার জন্য এটি প্রায় সবসময়েই সস্তা (যদি প্রোগ্রামের কমপক্ষে তিনটি পৃথক স্থান থেকে শিকারীকে না বলা হয়, যা ব্র্যাচল্যাজে বিরল)।


3

দৈর্ঘ্য -২ বিভক্ত হয়ে মেটাপ্রেডিকেটগুলির ভিতরে পূর্বাভাস

উদাহরণস্বরূপ এটি সর্বোত্তমভাবে ব্যাখ্যা করা হয়েছে। একটি তালিকার প্রথম এবং শেষ উপাদানগুলি সরাতে, আমরা এটির শিরশ্ছেদ এবং এটি ছুরি:

bk

যদি আমরা একটি তালিকার প্রতিটি উপাদানটিতে এই অপারেশনটি করতে চাইতাম, তবে আমরা মানচিত্রের ক্রিয়াকলাপটি ব্যবহার করতে পারি:

{bk}ᵐ

তবে, প্রিকিটিকে দুটি ভাগে ভাগ করার জন্য এটি একটি বাইট সংক্ষিপ্ত এবং প্রতিটি অংশ পৃথকভাবে মানচিত্র করুন:

bᵐkᵐ

বেশ কয়েকটি মেটাপ্রেডিকেট দিয়ে একই কৌশল ব্যবহার করা যেতে পারে:

{bk}ᵐ  →  bᵐkᵐ
{bk}ˢ  →  bˢkˢ
{bk}ᶠ  →  bᶠkˢ
~{bk}  →  ~k~b

দ্রষ্টব্য যে কিছু রূপক হিসাবে, যেমন এটি দুটি অংশে বিভক্ত করার কোনও সাধারণ-উদ্দেশ্য উপায় নেই তবে তবে আপনি যে নির্দিষ্ট কাজ করছেন তার জন্য কাজ করে এমন একটি পচন খুঁজে পাওয়া সম্ভব হতে পারে।


3

খালি স্ট্রিংয়ে খালি তালিকা কাস্ট করা

কখনও কখনও স্ট্রিংয়ের সাথে কাজ করার সময়, আমরা যে অ্যালগরিদম ব্যবহার করি তা খালি তালিকার সাথে আমরা কী চাই তা একীভূত করতে পারি [], যখন আমরা বরং খালি স্ট্রিংটি চাই ""

আমরা খালি স্ট্রিংয়ের সাহায্যে খালি তালিকাটি কাস্ট করতে পারি ,Ẹ, যা খালি স্ট্রিংটিকে তার বাম ভেরিয়েবলের সাথে সংযুক্ত করে (এটি উপায়টি কার্যকরভাবে ,কার্যকর করা হয়)।

এটিরও সুবিধা রয়েছে যে বাম ভেরিয়েবল একটি স্ট্রিং থাকলে এটি কিছু করে না। সুতরাং, যদি আপনার প্রোগ্রাম হয়

{  
   some predicate that should always output a string, 
   but actually outputs [] instead of "" in specific cases
}

তারপর

{
  some predicate that should always output a string, 
  but actually outputs [] instead of "" in specific cases
},Ẹ

আপনার ইচ্ছা মত কাজ করবে।


2

একটি তালিকায় একক উপাদান চলে

এই স্নিপেট বিবেচনা করুন:

ḅ∋≠

যদি ইনপুটটি কোনও তালিকা বা স্ট্রিং হয় তবে আউটপুটটি দৈর্ঘ্য 1 এর সাবলিস্ট / স্ট্রাস্টিংয়ের সাথে একীভূত হয় যা সমান উপাদানগুলির দীর্ঘতর অংশের অংশ নয়। এটি তালিকাটি সমান উপাদানগুলির ব্লকে বিভক্ত করে এবং এমন একটি ব্লক খুঁজে পায় যার উপাদানগুলি সমস্ত আলাদা। সিঙ্গেলটন তালিকার পরিবর্তে উপাদানগুলি নিজেরাই পেতে, hশেষ পর্যন্ত টেক করুন। আমি এই কনস্ট্রাক্ট ব্যবহার এখানে দিয়ে oএকটি অক্ষর যে শুধুমাত্র ইনপুট স্ট্রিং একবার ঘটে খুঁজে।

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