মস্তিষ্ক-ফ্ল্যাকের গল্ফ করার টিপস


24

মস্তিষ্ক-ফ্ল্যাক একটি স্ট্যাক-ভিত্তিক টিউরিং-তরপিট ভাষা, আমার, ডিজেএমসিহেম এবং 1000000000 এর মধ্যে সহযোগীভাবে রচিত ।

কিছু ব্যবহারকারী ব্রেইন-ফ্ল্যাকের রহস্যজনক উপায়ে খুব অভিজ্ঞ। সুতরাং আমি এই প্রশ্নটি আমাদের জন্য একটি উপায় হিসাবে সেট করা একটি ভাল ধারণা বলে মনে করি এবং আশা করি অন্যরাও সম্প্রদায়ের সাথে আমাদের জ্ঞান ভাগ করে নেবেন এবং "ব্যবহারে বেদনাদায়ক হয়ে উঠেছে" এই ভাষায় প্রবেশের বারটি কমিয়ে দিন। এবং সম্ভবত আমাদের আরও কিছু নতুন কৌশল সম্পর্কে অভিজ্ঞতার সাথে তাদের শিখিয়ে দিন।

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

দয়া করে উত্তর প্রতি একটি টিপ পোস্ট করুন।

উত্তর:


22

তৃতীয় স্ট্যাক ব্যবহার করুন

আপনি যদি শিরোনামটি পড়ে থাকেন তবে আপনি কিছুটা বিভ্রান্ত হতে পারেন। ব্রেইন ফ্ল্যাঙ্কে নিশ্চয়ই কেবল দুটি স্ট্যাক রয়েছে? তবে আমি আপনাকে আশ্বাস দিচ্ছি যে এটি বিদ্যমান এবং এটি ব্রেন-ফ্লাককে লেখার এবং গল্ফ করার সবচেয়ে শক্তিশালী সরঞ্জাম না হলে এটি অন্যতম শক্তিশালী।


"তৃতীয় স্ট্যাক" কী?

প্রতিটি ব্রেইন-ফ্ল্যাক প্রোগ্রাম তৃতীয় স্ট্যাকটি একভাবে বা অন্য কোনও উপায়ে ব্যবহার করে তবে বেশিরভাগ ব্যবহার পর্দার আড়ালে চলে যায় এবং প্রায়শই এটি উপস্থিত থাকা সত্যটি উপেক্ষা করার জন্য দরকারী। প্রোগ্রামের প্রতিটি প্রথম বন্ধনী স্ট্যাক থেকে একটি আইটেম যুক্ত বা সরিয়ে দেয়। তিনটি উন্মুক্ত ধনুর্বন্ধনী ([<সমস্ত স্ট্যাকের সাথে একটি আইটেম যুক্ত করে যখন তাদের তিনটি সংঘবদ্ধ )]>সমস্ত স্ট্যাক থেকে একটি আইটেম সরান। স্ট্যাকের আইটেমটির মান হ'ল প্রোগ্রামের বর্তমান সুযোগের মান এবং নীলাদগুলি ব্যবহার করে এই মানটি নির্দিষ্ট উপায়ে সংশোধন করা হবে। ঘনিষ্ঠ বন্ধনীর )তৃতীয় স্ট্যাক থেকে বর্তমান স্ট্যাকে কোনও উপাদান সরানোর অনন্য কার্যকারিতা রয়েছে; একটি ধাক্কা.

আশা করি এটি আপনার কাছে স্পষ্ট হয়ে উঠছে। তৃতীয় স্ট্যাক এমন এক ধরণের স্ট্যাক যা ইতিমধ্যে সম্পাদিত হওয়া কোডের রিটার্ন মানগুলি স্মরণ করে। আসুন দুটি সাধারণ স্ট্যাক এবং তৃতীয় স্ট্যাকের উপর নজর রাখার একটি সাধারণ প্রোগ্রামের উদাহরণ দিয়ে আসি।

উদাহরণ

আমরা নিম্নলিখিত প্রোগ্রামের মাধ্যমে হাঁটা করব। এই প্রোগ্রামটি -3, 1, -2স্ট্যাকের দিকে ধাক্কা দেয় ।

(([()()()])(()))

আমরা তিনটি উন্মুক্ত ধনুর্বন্ধনী দিয়ে শুরু করি, যা সমস্ত তৃতীয় স্ট্যাকের শূন্যকে চাপায়।

আমাদের স্ট্যাকগুলি এখন এটি দেখতে দেখতে, তৃতীয় স্ট্যাকটি ডানদিকে একটি এবং সক্রিয় স্ট্যাকের ^নীচে রয়েছে:

        0
        0
  0  0  0
  ^

(([()()()])(()))
   ^

এখন আমাদের তিনটি ()নীলাদ রয়েছে। এগুলি দুটি সাধারণ স্ট্যাকের সাথে কিছু করে না, তবে তারা প্রতিটি তৃতীয় স্ট্যাকের শীর্ষে একটি করে যুক্ত করে আমাদের স্ট্যাকগুলি দেখতে দেখতে:

        3
        0
  0  0  0
  ^

(([()()()])(()))
         ^

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

       -3
  0  0  0
  ^

(([()()()])(()))
          ^

এইবার বুঝতে পারছি; [...]অবহেলা তাই ]নীচের দিকে বিয়োগ করা উচিত।

এখন আমাদের অবশ্যই একটি কার্যকর করা উচিত )। আপনার সম্ভবত স্মরণ হিসাবে )প্রোগ্রামের জায়গাটি যেখানে স্ট্যাকগুলি স্ট্যাকের দিকে ঠেলে দেওয়া হয় তাই আমরা তৃতীয় স্ট্যাকের শীর্ষটিকে বর্তমান স্ট্যাকের দিকে নিয়ে যাব -3, তৃতীয় স্ট্যাকের পরবর্তী উপাদানগুলিতে আমরা যুক্ত করব ।

 -3  0 -3
  ^

(([()()()])(()))
           ^

আবার আমাদের তিনটি উন্মুক্ত ধনুর্বন্ধনীগুলির মধ্যে একটির মুখোমুখি হ'ল যাতে আমরা আমাদের তৃতীয় স্ট্যাকের সাথে আরও একটি উপাদান যুক্ত করব।

        0
 -3  0 -3
  ^

(([()()()])(()))
            ^

যেমনটি আমরা আগেই বলেছিলাম ()আমাদের তৃতীয় স্ট্যাকের শীর্ষটিকে এক এক করে বাড়িয়ে দেবে।

        1
 -3  0 -3
  ^

(([()()()])(()))
              ^

এবং )তৃতীয় স্ট্যাকের শীর্ষটি সক্রিয় স্ট্যাকের উপরে সরানো হবে এবং নীচের দিকে যুক্ত করবে

  1
 -3  0 -2
  ^

(([()()()])(()))
               ^

শেষটি )তৃতীয় স্ট্যাকটিকে সক্রিয় স্ট্যাকের দিকে নিয়ে যায় এবং যেহেতু এটি যুক্ত করার জন্য তৃতীয় স্ট্যাকের কোনও উপাদান অবশিষ্ট নেই, অন্য কিছুই করে না।

 -2
  1
 -3  0
  ^

(([()()()])(()))
                ^

প্রোগ্রামটি শেষ হয়ে গেছে তাই আমরা সমাপ্তি এবং আউটপুট।


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

ঠিক আছে, তাহলে কি?

ঠিক আছে, এখন আপনি তৃতীয় স্ট্যাক বুঝতে পারছেন, তবে "তাই কি"? আপনি এটি "তৃতীয় স্ট্যাক" না বললেও আপনি ইতিমধ্যে এটি ব্যবহার করেছিলেন, তৃতীয় স্ট্যাকের বিবেচনায় ভাবনা আপনাকে গল্ফকে কীভাবে সহায়তা করে?

একটি সমস্যা তাকান। আপনি একটি সংখ্যার ত্রিভুজ নিতে চান । এটি n এর চেয়ে কম সংখ্যার যোগফল।

একটি পদ্ধতি হতে পারে অফস্ট্যাকে একটি সংযোজক তৈরি করা এবং আপনি নিচে নামার সাথে যুক্ত করা। এটি এমন দেখায় এমন কোড তৈরি করে:

(<>)<>{(({}[()])()<>{})<>}{}<>({}<>)

অনলাইনে চেষ্টা করে দেখুন!

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

({()({}[()])}{})

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

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

আমি কখন তৃতীয় স্ট্যাক ব্যবহার করব?

আদর্শভাবে যখনই আপনি মস্তিষ্ক-ফ্ল্যাঙ্কে কোনও নতুন সমস্যার কাজ শুরু করেন আপনার নিজেরাই ভেবে দেখা উচিত যে আমি কীভাবে তৃতীয় স্ট্যাকটি মাথায় রেখে এটি করব। তবে থাম্বের সাধারণ নিয়ম হিসাবে যখনই আপনাকে কোনও প্রকারের সঞ্চালককে ট্র্যাক রাখতে হয় বা মোট চলতে থাকে তবে দুটি আসল স্ট্যাকের পরিবর্তে এটি আপনার তৃতীয় স্ট্যাকের উপর রেখে চেষ্টা করা ভাল ধারণা।

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

তৃতীয় স্ট্যাকের সীমাবদ্ধতা

তৃতীয় স্ট্যাকটি অনেক উপায়ে খুব শক্তিশালী তবে এটি নিজস্ব সীমাবদ্ধতা এবং ত্রুটিগুলি নিয়ে আসে।

প্রথমত, যে কোনও বিন্দুতে তৃতীয় স্ট্যাকের সর্বাধিক স্ট্যাকের উচ্চতা সংকলনের সময় নির্ধারিত হয়। এর অর্থ হ'ল আপনি যদি স্ট্যাকের পরিমাণের পরিমাণ ব্যবহার করতে চান তবে প্রোগ্রামটি লেখার সময় আপনাকে সেই স্থানটি বরাদ্দ করতে হবে।

দ্বিতীয়ত তৃতীয় স্ট্যাকটি র‌্যান্ডম অ্যাক্সেস নয়। এর অর্থ হ'ল আপনি কোনও মানের উপরে কোনও ক্রিয়াকলাপ করতে পারবেন না তবে শীর্ষ সর্বাধিক মান। এছাড়াও আপনি স্ট্যাকের চারপাশে মানগুলি স্থানান্তর করতে পারবেন না (প্রথম দুটি উপাদানকে অদলবদল বলুন)।

উপসংহার

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

Cheatsheet

এখানে অপারেশনগুলির একটি তালিকা রয়েছে এবং তারা কীভাবে তৃতীয় স্ট্যাককে প্রভাবিত করে is

 Operation  |                 Action
====================================================
   (,[,<    | Put a zero on top of the Third Stack
----------------------------------------------------
     )      | Add the top of the Third Stack to the
            | second element and move it to the 
            | active stack
----------------------------------------------------
     ]      | Subtract the top of the Third Stack
            | from the second element and pop it
----------------------------------------------------
     >      | Pop the top of the Third Stack
----------------------------------------------------
     ()     | Add one to the top of the Third Stack
----------------------------------------------------
     {}     | Pop the top of the active stack and
            | add it to the top of the Third Stack
----------------------------------------------------
     []     | Add the stack height to the Third
            | Stack
----------------------------------------------------
   <>,{,}   | Nothing

1
বাহ, দুর্দান্ত টিপ! আমি যখন দেখলাম তখন আমি ঠিক এখানে একটি অনুরূপ উত্তর লিখতে এসেছি। +1 টি! আমি এটিকে অ্যাকিউমুলেটর হিসাবে ভাবতে পছন্দ করি তবে তৃতীয় স্ট্যাক রূপকটি সত্যই আকর্ষণীয়।
ডিজেএমসিএমহেম

আমি এটিকে সর্বদা "ওয়ার্কস্পেস" বা "ওয়ার্কস্ট্যাক" বলি।
sagiksp

Brainflak এর TIO সংস্করণে {...}সমস্ত পুনরাবৃত্তির যোগফল প্রদান করে।
ক্যালকুলেটরলাইন

@ ক্যালকুলেটরফলাইন হ্যাঁ, এটি খুব প্রাথমিক কিছু ব্যতীত ব্রেন-ফ্লাকের প্রায় সমস্ত সংস্করণে সত্য। তবে কেন আপনি বিশেষত এই পোস্টে মন্তব্য করেছেন তা আমি নিশ্চিত নই।
গম উইজার্ড


21

মডুলাস / বাকী সন্ধান করা

খোঁজা এন মডিউল মি মৌলিক গাণিতিক অপারেশন এক, অনেক চ্যালেঞ্জ জন্য গুরুত্বপূর্ণ। মামলা জন্য মি> 0 এবং এন> = 0 , নিম্নলিখিত 46-বাইট স্নিপেট ব্যবহৃত হতে পারে। এটি ধরে নিয়েছে যে n পরের অংশে মি দিয়ে সক্রিয় স্ট্যাকের শীর্ষে রয়েছে এবং তাদের n মোড মি দ্বারা প্রতিস্থাপন করে । এটি বাকী স্ট্যাকগুলি অক্ষত রেখে দেয়।

({}(<>))<>{(({})){({}[()])<>}{}}{}<>([{}()]{})

এই বর্ণিত সংস্করণটি প্রোগ্রামের কিছু পয়েন্টে স্ট্যাকের সামগ্রীগুলি দেখায়। ;দুটি স্ট্যাক পৃথক করে এবং .সক্রিয় স্ট্যাকটিকে চিহ্নিত করে।

. n m;
({}(<>))<>
{   . m; r 0   (r = n - km)
    (({}))
    . m m; r 0
    {({}[()])<>}
    {}
}
m-n%m-1 m; . 0
{}<>([{}()]{})
. n%m;

অননোটবিহীন অংশটি কী করেছে তা বুঝতে আমার কিছুটা সময় লেগেছিল ( {({}[()])<>}) তবে একবার আমি এটি বের করে
ফেললাম

11

পুশ-পপ রিডানডেন্সি

এটি একটি বড় এক। এটিও কিছুটা অযৌক্তিক is

ধারণাটি হ'ল আপনি যদি কিছু চাপ দেন এবং কিছু না করে এটিকে পপ করেন তবে আপনার এটিকে একেবারেই ঠেলা উচিত নয়।

উদাহরণস্বরূপ, আপনি যদি অফস্টেকে কিছু স্থানান্তর করতে চান এবং তারপরে একটি যুক্ত করতে পারেন তবে আপনি নিম্নলিখিত কোডটি লিখতে পারেন:

({}<>)({}())

এটি এর মতো সহজ হতে পারে:

({}<>())

প্রথম প্রোগ্রামটি আইটেমটি সরিয়ে নিয়ে যায়, এটিকে আবার তুলে তোলে এবং একটি যোগ করে, যখন দ্বিতীয়টি উভয়ই একটিতে ডুবে যায়।

এই উদাহরণটি সহজ ছিল তবে এটি আরও অনেক জটিল হতে পারে। উদাহরণস্বরূপ নিন:

({}<({}<>)><>)(<((()()()){}[((){}{})])>)

হ্রাস এখানে কম পরিষ্কার হয় তবে প্রোগ্রামের চতুর্থ পপ ২ য় ধাক্কা দিয়ে হ্রাস করা যায়, যেমন:

(<((()()()){}[((){}<({}<>)><>{})])>)

এটি আমার গল্ফিং স্টোরগুলির মধ্যে সবচেয়ে শক্তিশালী হাতিয়ার তবে এটি ভাল হয়ে উঠতে কিছুটা অনুশীলন লাগে। একবার আপনি কিছুক্ষণের জন্য এটি করার পরে আপনি এগুলি প্রায় তাত্ক্ষণিকভাবে খুঁজে পেতে সক্ষম হবেন।


পরবর্তী উদাহরণে, প্রথম বন্ধনের প্রথম জুটির অংশটি কি সমান নয় ({}<{}>)?
শুক্রবার

পছন্দ করুন এটি স্ট্যাকের দ্বিতীয় আইটেমের অনুলিপিটিকে স্ট্যাকের দিকে সরিয়ে ({}<{}>)দেয় এবং আইটেমটিকে পুরোপুরি ধ্বংস করে দেয়। তবে এই কর্মসূচিগুলি এখানে কাজের নীতিটি হাইলাইট করার জন্য সর্বোত্তম নয় বলে বোঝানো হয়েছিল।
গম উইজার্ড

6

আপনার পূর্ণসংখ্যার অনুকূলিত করুন

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


মনে রাখবেন যে আমাদেরও ব্রেইন-ফ্লাক.github.io/integer/ রয়েছে , যা সুবিধার জন্য অনলাইনে সেই অ্যালগরিদমগুলির মধ্যে একটি চালায়।
DJMcMayhem

@ DRMcMoylex আমাদের এখনই ব্রেন-ফ্ল্যাঙ্কে পূর্ণসংখ্যার মেটাগল্ফার বাস্তবায়নের প্রয়োজন!
নিল


5

অতিরিক্ত লুপ কাউন্টারে চাপ দিন

প্রায়শই, আপনি এর মতো কিছু করতে চাইবেন

সঞ্চালন এক্স স্ট্যাকের প্রতিটি উপাদান ক্রিয়াকলাপের

অথবা

সঞ্চালন এক্স স্ট্যাকের মধ্যে সংলগ্ন উপাদানের যে যুগল ক্রিয়াকলাপের

যখন ইনপুটটিতে '0' থাকতে পারে বা এক্স ক্রিয়াকলাপের ফলাফলটি 0 দিতে পারে, এটি সত্যিই অসুবিধে হয়। কারণ আপনার এটি করা দরকার:

([])
{

  {}

  ({}...<>)
  ([])

}

এটা করার জন্য এক্স প্রতিটি উপাদান, এবং তারপর পরে

<>
([])
{
  {}
  ({}<>)
  <>
  ([])
}
<>

অ্যারেটি আবার বিপরীত করতে।

আরও খারাপ, আমরা যদি সংলগ্ন উপাদানগুলির জোড়া নিয়ে কাজ করে থাকি তবে আমাদের ([][()])জায়গায় এটি করা দরকার ([])। এটি আসলেই অসুবিধেয়। কৌশলটি এখানে: প্রতিটি উপাদানকে এক্স করার সময়, বিকল্পের স্ট্যাকের উপরের উপরে 1 টি চাপুন X(element)। তারপরে, আপনি যখন এটিকে বিপরীত করছেন তখন আপনি কেবল তা করতে পারেন

<>
{
  {}
  ({}<>)
  <>
}
<>

এটি 8 বাইটটি সংক্ষিপ্ত, সুতরাং যখন আপনি 1 চাপানোর জন্য অতিরিক্ত কোডটি ফ্যাক্ট করবেন তখন আপনার 4-6 বাইট সঞ্চয় হবে। আরও দৃ concrete় উদাহরণের জন্য, একটি অ্যারের ডেল্টাস পাওয়ার কাজটি তুলনা করুন। এই কৌশল না করে আপনার প্রয়োজন হবে:

([][()]){

    {}

    ([{}]({})<>)<>

    ([][()])

}{}{}<>

([])
{{}({}<>)<>([])}<>

62. এর জন্য এই কৌশলটি আপনার কাছে থাকবে

([][()]){

    {}

    ([{}]({})<>)(())<>

    ([][()])

}{}{}<>

{{}({}<>)<>}<>

58 এর জন্য ([][()])If


3

'স্ট্যাক-উচ্চতা' নীলাডের সুবিধা নিন

বিশেষত চ্যালেঞ্জ বা চ্যালেঞ্জগুলিতে যেখানে আপনি সর্বদা আকার জানেন তা আপনি []পূর্ণসংখ্যা তৈরি করতে 'স্ট্যাক-উচ্চতা' নীলাডের সুবিধা নিতে পারেন ।

এর মাধ্যমে একটি অনুমানমূলক চ্যালেঞ্জ: আউটপুট নিয়ে কাজ করা যাক CAT । অ-গল্ফী উপায়টি হ'ল inte 67, 65 65 এবং ৮৪ টি চাপতে অনলাইন সংখ্যার গল্ফার ব্যবহার করা । এটি দেয়:

(((((()()()()){}){}){}()){}())

(((((()()()()){}){}){}){}())

((((((()()()){}()){}){})){}{})

(স্পষ্টতার জন্য নিউলাইনস)। এটি ৮৮ বাইট এবং এটি দুর্দান্ত নয়। পরিবর্তে আমরা যদি মানগুলির মধ্যে ক্রমাগত পার্থক্যটি চাপি তবে আমরা অনেক কিছু সঞ্চয় করতে পারি। সুতরাং আমরা প্রথম নম্বরটি একটি পুশ কলটিতে মোড়ানো এবং 2 টি বিয়োগ:

(   (((((()()()()){}){}){}()){}())  [()()] )

তারপরে, আমরা এই কোডটি নিই, এটিকে এটিতে গুটিয়ে রাখি পুশ কলে এবং শেষ পর্যন্ত 19 যুক্ত করুন:

(  ((((((()()()()){}){}){}()){}())[()()])   ((((()()()){})){}{}()) )

এটি মোটামুটি 26 বাইট গল্ফের জন্য 62 বাইট!

এখন আমরা এখানে স্ট্যাক উচ্চতার নীলাডের সুবিধা নিতে পারি। 19 টি ধাক্কা দেওয়া শুরু করার পরে, আমরা জানি যে স্ট্যাকটিতে ইতিমধ্যে 2 টি আইটেম রয়েছে, তাই []এটি মূল্যায়ন করব 2। আমরা এটি কম বাইটে 19 টি তৈরি করতে ব্যবহার করতে পারি। সুস্পষ্ট উপায় হ'ল অভ্যন্তরীণ পরিবর্তন করা()()() করা ()[]। এটি কেবলমাত্র দুটি বাইট সংরক্ষণ করে। আরও কিছু ঝুঁকির সাথে, দেখা যাচ্ছে যে আমরা 19 টি ধাক্কা দিতে পারি

((([][]){})[]{})

এটি আমাদের 6 বাইট সাশ্রয় করে। এখন আমরা 56 এ নেমেছি।

আপনি এই উত্তরগুলি খুব কার্যকরভাবে এই টিপ ব্যবহার করা দেখতে পারেন:


আপনার CATপ্রোগ্রামটি আসলে চাপ দেয় TAC: পি
গম উইজার্ড


2
আমি জানি এটি একটি টিপ তবে আমি নিজেকে 50 বাইট সাহায্য করতে পারি না ।
গম উইজার্ড

1
অপব্যবহারে সহায়তা করার জন্য আরেকটি অদ্ভুত তবে কখনও কখনও কার্যকর টিপ []: আপনার কোডের আগে 0এর সাথে প্রিপেন্ডিং (<>)। এটি কেবলমাত্র যদি আপনি কোডটিকে বিপরীত দিকে ধাক্কা দেওয়ার পরিকল্পনা করছেন তবে এটি কার্যকরভাবে কাজ করে, তবে আপনি যদি সঠিক সংখ্যাটি উপস্থিত করেন তবে আপনি আপনার কোডটি কিছুটা হ্রাস করতে পারবেন। বরং চরম উদাহরণ আমি 6 যেখানে যোগ 0গুলি, যা দেয় আমাকে অনেক শুধু ব্যবহার []যেমন আমি ব্যবহার গুলি()
জো রাজা

2

উইকি ব্যবহার করুন

আমাদের উইকি আছে ! এটিতে কিছু সংক্ষিপ্ত কমিং রয়েছে তবে এটি সহায়ক সংস্থান। এটিতে দরকারী, ভাল গল্ফযুক্ত, স্ট্যাক ক্লিন প্রোগ্রামগুলির তালিকা রয়েছে যা আপনি আপনার কোডে পেস্ট করতে পারেন। আপনি যদি কিছু করতে চান তবে আপনি মনে করেন যে উইকিতে এটির ভাল সম্ভাবনা থাকার আগে কেউ হয়তো করেছেন।


2

ভাল লুপিং

এখানে একটি সহজ:

মোটামুটি সাধারণ কনস্ট্রাক্ট হ'ল:

(({})<{({}[()]<...>)}{}>)

আপনি যেখানে এন বার লুপ করতে চান তবে এখনও এন রাখুন। তবে এটি এই হিসাবে লেখা যেতে পারে:

({<({}[()]<...>)>()}{})

2 বাইট সংরক্ষণ

আর একটি মোটামুটি সাধারণ দৃষ্টান্ত

([])({<{}>...<([])>}{})

যা পুরো স্ট্যাকটি লুপ করে জমা করবে। কিছু অভিনব গণিতের কারণে এটি একই:

(([]){[{}]...([])}{})

1

আপনার নেতিবাচক পরীক্ষা করুন

কখনও কখনও আপনি কৌশলগতভাবে এর সাথে কোনটি উপেক্ষা করবেন তা বেছে নিয়ে কয়েকটি বাইট গল্ফ করতে পারেন [...] উপেক্ষা করবেন ।

একটি সাধারণ উদাহরণ নেস্টেড [...]এস এ। উদাহরণ স্বরূপ[()()()[()()]] হতে পারে[()()()]()()

আপনি কোনো একটি মান শুরু বন্ধনী কোন চেক করতে চান বলুন (<{[। প্রাথমিক চেষ্টাটি হ'ল প্রতিটি চরিত্রের মধ্যে পার্থক্যটি চাপিয়ে দেওয়া এবং এটির বিয়োগফলের চেয়ে লুপ

({}<(((((       #Push the differences between start bracket characters
(((()()()()){}){}){})   #Push 32
[()])                   #Push 31
[((()()())()){}{}])     #Push 20
){})><>)                #Push 40
<>({<(([{}]<>{}))>(){[()](<{}>)}<>})

তবে পরিবর্তে পার্থক্যগুলির নেতিবাচক সংস্করণগুলিকে চাপ দিয়ে আপনি 4 বাইটস সংরক্ষণ করতে পারেন!

({}<(((((       #Push the differences between start bracket characters
((([()()()()]){}){}){}) #Push -32
())                     #Push -31
((()()())()){}{})       #Push -20
){})><>)                #Push -40
<>({<(({}<>{}))>(){[()](<{}>)}<>})

সাধারণত, এটি আপনাকে খুব বেশি সাশ্রয় দেয় না তবে [...]আশেপাশের চারপাশের পরিস্থিতি পরিবর্তনের জন্য খুব কম প্রচেষ্টাও ব্যয় করতে হবে । এমন পরিস্থিতিতে সন্ধান করুন যেখানে আপনি পরে হ্রাসের পরিবর্তে একাধিকবার ইনক্রিমেন্টিং বাঁচানোর জন্য ইতিবাচক পরিবর্তে কাউন্টারটির নেতিবাচক দিকে চাপ দিতে পারেন। বা আউট সোয়াপিং (a[b])সঙ্গে ([a]b)দুটি সংখ্যার নেতিবাচক পরিবর্তে ইতিবাচক মধ্যে পার্থক্য করতে।


1
শূন্য <a<b>c>-> <abc>এবং <a[b]c>-> এর সাথে একই জিনিস করা যেতে পারে <abc>
গম উইজার্ড
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.