বহুগুণ তৈরির জন্য টিপস


48

একটি একটি প্রোগ্রাম যা 2 বা তার বেশি বিভিন্ন প্রোগ্রামিং ভাষার চালানোর করা যেতে পারে।

পলিগ্লটগুলি তৈরি করার জন্য, বা কোনও নির্দিষ্ট কাজের জন্য বহুগল্ট লিখতে সহজ এমন ভাষা চয়ন করার জন্য আপনার কাছে কোন সাধারণ টিপস রয়েছে?

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

দয়া করে উত্তর প্রতি একটি টিপ পোস্ট করুন। এবং ভাষা-নির্দিষ্ট টিপ অন্য কোনও ভাষার ক্ষেত্রেও যদি প্রয়োগ হয় তবে নির্দ্বিধায় এডিট করুন।

উত্তর:


25

মন্তব্য প্রতীক শোষণ করুন

দ্বি-ভাষা বহুভুজ তৈরি করার একটি সহজ উপায় হ'ল কোডটি দুটি অংশে বিভক্ত করা নিম্নরূপ:

  1. প্রথম অংশটি ভাষা A তে প্রকৃত কাজ করে, ভাষা B তে নিরীহ (কোনও ত্রুটি নেই), এবং একটি ভাষা-এ মন্তব্যে শেষ হয়, যা দ্বিতীয় অংশটি ভাষা A তে আড়াল করে which
  2. দ্বিতীয় অংশটি ভাষা বিতে প্রকৃত কাজ করে

এইভাবে

  • ভাষা এ প্রথম অংশটি দেখে, যা কাজটি করে এবং তারপরে একটি মন্তব্য।
  • ভাষা বি একটি অকেজো প্রথম অংশ এবং দ্বিতীয় অংশটি দেখায় যা কাজটি করে।

এখানে কেবলমাত্র কঠিন অংশটি হ'ল বিবৃতিগুলির একটি সেট (প্রথম অংশ) যা ভাষাগুলি বি তে ত্রুটি না দেওয়ার সময় A তে কাজ করে this এর জন্য কিছু পরামর্শ:

  • বেশিরভাগ স্ট্যাক-ভিত্তিক ভাষা প্রোগ্রামের শেষে স্ট্যাকের কেবল শীর্ষগুলি প্রদর্শন করার অনুমতি দেয় (কখনও কখনও এটি এমনকি ডিফল্টও হয়, 05AB1E এর মতো)।
  • কিছু ভাষা অপরিজ্ঞাত বিবৃতি (উদাহরণস্বরূপ গল্ফস্ক্রিপ্ট) উপেক্ষা করে।

একটি সাধারণ উদাহরণ যা এই নির্দেশিকাগুলি ব্যবহার করে তা এখানে পাওয়া যাবে । ভাষা A এবং B যথাক্রমে MATL এবং 05AB1E হয় 1


24

দ্বিমাত্রিক ভাষা ব্যবহার করুন

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

বোনাস হিসাবে, বেশ কয়েকটি দ্বি-মাত্রিক ভাষার প্রোগ্রামের উপরের-বাম ব্যতীত অন্য একটি এন্ট্রি পয়েন্ট রয়েছে, যার অর্থ এটি অন্য ভাষা থেকে আলাদা করতে আপনার কোনও প্রয়াসে যাওয়ার দরকার নেই; তারা স্বাভাবিকভাবে গ্রুপ থেকে নিজেকে আলাদা করবে।


20

আপনার সত্য এবং মিথ্যা জানুন

প্রতিটি ভাষা "সত্য" এবং "মিথ্যা" কিছুটা ভিন্ন উপায়ে দেখে। যদি তাদের অনুরূপ বাক্য গঠন থাকে তবে ভাষাগুলি ভিন্নভাবে পরিচালনা করবে এমন সিদ্ধান্ত যুক্ত করে আপনি এটি ব্যবহার করতে পারেন।

কৌশল বা ট্রিট থ্রেডের ব্যবহারের একটি উদাহরণ'' , একটি খালি স্ট্রিং। লুয়ায়, এটি সত্যবাদীর কাছে মূল্যায়ন করে তবে পাইথনে মিথ্যা, তাই নিম্নলিখিতগুলি:

print(''and'trick'or'treat')

.. প্রতিটি ভাষার আলাদা স্ট্রিং প্রিন্ট করা হবে।

এটি যা লাগে তা হ'ল এই জাতীয় মান finding উদাহরণস্বরূপ, আপনি ব্যবহার করতে পারেন '0', যা falseপিএইচপি তে কিন্তু trueপাইথনে মূল্যায়ন করে ।


17

কমপক্ষে একটি ভাষায় ব্লককোটস

পাইথন এবং সি ++ তে উভয়ই কাজ করে এমন একটি উদাহরণ এখানে

#include <iostream> /*
""" */
int main() {
    std::cout << "Hello World!\n";
}

/* """
print("Hello World!")
# */

লুইস মেন্ডো আমার মনে হয় যা সবচেয়ে সহজ সমাধান, যা মন্তব্যগুলি ব্যবহার করা উচিত pit

আপনি এমন একটি ভাষা সন্ধান করছেন যার মধ্যে ব্লক মন্তব্য করা এবং অন্য একটি ভাষা যেখানে প্রথম নিয়মিত বাক্য গঠন দ্বিতীয়টিতে বাক্য গঠন মন্তব্য করে is

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

পাইথন 3.5 এবং সি ++ এ এটি পরীক্ষা করে দেখুন


2
সেখানে প্রথম লাইনে একটি সেমিকোলন থাকা উচিত নয়।

সত্য। ভাল কথা
ডেক্সজেকো

15

ভাগ এবং বিজয়

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

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

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

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

একটি ভাল উদাহরণ সেট {জাভাস্ক্রিপ্ট, রুবি, পার্ল, পাইথন 3}; এই সমস্ত ভাষা বন্ধনীর সাথে ফাংশন কল গ্রহণ করে এবং সেমিকোলনের সাহায্যে বিবৃতি পৃথক করতে পারে। তারা সকলেই একটি evalবিবৃতি সমর্থন করে যা কার্যকরভাবে আপনাকে বহনযোগ্য উপায়ে প্রবাহ নিয়ন্ত্রণ করতে দেয়। (পার্ল এই ভাষাগুলির মধ্যে গোষ্ঠী থেকে তাড়াতাড়ি ছড়িয়ে পড়ার জন্য সেরা, কারণ এটি অন্যদের থেকে ভেরিয়েবলের জন্য আলাদা সিনট্যাক্স ধারণ করে))


13

স্ট্রিং লিটারেলের ভিতরে কোড লুকান

বেশিরভাগ ভাষায়, একটি স্ট্রিং আক্ষরিক নিজস্ব হয় হয় কিছুই করে না বা এমন কিছু করে যা সহজেই বিপরীত হতে পারে (যেমন স্ট্যাকের উপরে স্ট্রিংটি চাপানো)। স্ট্রিং আক্ষরিক সিনট্যাক্সটিও তুলনামূলকভাবে নন-স্ট্যান্ডার্ডাইজড, বিশেষত বিকল্প সিনট্যাক্সগুলির জন্য যা অনেক ভাষা এম্বেডড নিউলাইনগুলি সহ স্ট্রিংগুলি পরিচালনা করতে ব্যবহার করে; উদাহরণস্বরূপ, পাইথন আছে """ ... """, পার্ল আছে q( ... ), এবং লুয়া আছে [[ ... ]]

এগুলির দুটি প্রধান ব্যবহার রয়েছে। একটি হ'ল এক ভাষার প্রথম বিভাগের শেষে একটি স্ট্রিং শুরু করার এবং দ্বিতীয়টির শুরুতে পুনরায় শুরু করার মাধ্যমে আপনাকে বিভিন্ন ভাষার উদ্দেশ্যে চিহ্নিত বিভাগগুলি ইন্টারলিভ করার অনুমতি দেওয়া: এটির বিভিন্নতার কারণে ঘটনাক্রমে স্ট্রিংটি বন্ধ করা এড়ানো মোটামুটি সহজ হওয়া উচিত should বিভিন্ন ভাষার মধ্যে স্ট্রিং ডিলিমিটার। অন্যটি হ'ল অনেক স্ট্রিং ডিলিমিটর অন্যান্য ভাষায় কমান্ড হিসাবে অর্থবহ বলে মনে হয় (প্রায়শই কমেন্ট মার্কার্সের চেয়ে বেশি), সুতরাং আপনি এমন কিছু করতে পারেন x = [[4] ]যা তালিকার জন্য জেএসএন স্বরলিপি ব্যবহার করে এমন ভাষাগুলিতে একটি নির্দোষ অ্যাসাইনমেন্ট, তবে যা শুরু হয় লুয়ায় একটি স্ট্রিং (এবং এটি আপনাকে লুয়া কোডটিকে বাকী থেকে বিভক্ত করতে দেয়, এটি কার্যকরভাবে পরবর্তীটিতে "লাফ দেয়" ]]) given


13

প্রোগ্রাম শেষ হচ্ছে

আপনি হঠাৎ করেই এক ভাষাতে প্রোগ্রামটি শেষ করতে পারেন যাতে এটি অন্য ভাষায় কোডটিকে উপেক্ষা করবে।

সুতরাং মূলত এই ফর্ম্যাটটি ব্যবহার করা যেতে পারে

code_in_language1 end_program_in_language1 code_for_language2 end_program_in_language2 ...

end_program_in_languageNপ্রোগ্রামটি শেষ করার জন্য কমান্ডটি কোথায় ?

উদাহরণস্বরূপ, আমার উত্তরটিতে আপনি থ্যাঙ্কসগিভিংয়ের জন্য কী আনবেন? , আমি ডিপ-তে প্রোগ্রামটি শেষ করেছি এবং তারপরে আমি অন্য একটি ভাষার জন্য ভি লিখেছিলাম, ভি, যাতে ডিপ দোভাষী তা এড়ান।

"turkey"e#"corn"??"gravy"p&Ssalad
"turkey"e#"corn"??"gravy"                 
                         p&            # print stack and exit program (Dip) 
                           Ssalad      # Now that the program ended in Dip,
                                       # I can write V code that would otherwise
                                       # have caused errors in Dip

তবে তারপরে, সমস্ত ভাষার কোনও কমান্ড নেই যা প্রোগ্রামটি ঠিক এর মতো শেষ করতে পারে। তবে, যদি এই জাতীয় ভাষার বৈশিষ্ট্য থাকে তবে এটি বুদ্ধিমানের সাথে ব্যবহার করা উচিত।

@ লুইস মেন্ডো প্রস্তাবিত অনুসারে, ভাষাটিতে ইতিমধ্যে "শেষ প্রোগ্রাম" অন্তর্নির্মিত না থাকলে আপনি প্রোগ্রামটি শেষ করতে একটি ত্রুটি তৈরি করতে পারেন (যদি এটি অনুমোদিত হয়)।


2
প্রোগ্রামটি শেষ করার জন্য ভাষার কোনও ফাংশন বা বিবৃতি না থাকলেও সাধারণত একটি ত্রুটি ঘটবে
লুইস মেন্ডো

1
@ লুইসমেন্দো: সম্মত হয়েছেন, যদিও নোট করুন যে বহু বহুবিবাহজনিত সমস্যা বিশেষত প্রস্থান-মাধ্যমে-ক্রাশ হওয়া নিষিদ্ধ করে কারণ এটি জিনিসগুলিকে খুব সহজ করে তোলে। যদিও এটি ব্যবহার না করে এটির শোষণ করা ভাল ধারণা।

1
আপনার সম্ভবত উল্লেখ করা উচিত যে দ্বিতীয় অংশের কোডটি এখনও প্রথম ভাষায় সিন্টেক্সিকভাবে সঠিক হওয়া উচিত অন্যথায় বেশিরভাগ ব্যবহারিক ভাষাগুলি একটি ত্রুটি ছুঁড়ে দেবে।
মিল্কিওয়ে 90

13

পরিবর্তনশীল বা স্ট্রিং লিটারেলের ভিতরে কোড

ডাবল-কোটেড স্ট্রিং লিটারেলগুলি বেশিরভাগ ভাষায়ই নিরীহ are তবে কিছু ভাষায় তারা কোডও ধারণ করতে পারে।

বাশে, আপনি ব্যবহার করতে পারেন `...`(এটি প্রোগ্রামটি শেষ করে না):

"`echo Hello world! >/proc/$$/fd/1`"

টিসিএল এ আপনি ব্যবহার করতে পারেন [...]:

"[puts {hello world!};exit]"

পিএইচপি-তে আপনি ব্যবহার করতে পারেন ${...}(এটি ব্যাশে ত্রুটি উত্পন্ন করে যাতে এটি অবশ্যই বাশ কোডের পরে উপস্থিত হতে পারে):

"${die(print(Hello.chr(32).world.chr(33)))}";

রুবিতে আপনি ব্যবহার করতে পারেন #{...}:

"#{puts 'Hello world!';exit}"

অন্যরাও থাকতে পারে।

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

অনেক ক্ষেত্রে, আপনি সহজেই সেখানে একটি ডাবল উদ্ধৃতি চরিত্রটি মন্তব্য করতে পারেন এবং আরও একটি traditionalতিহ্যবাহী বহুভক্ত তৈরি করতে পারেন।


12

ভেরিয়েবল আলিয়াসিং

এটি সম্ভবত এখনও সবচেয়ে সহজ কৌশল (আইএমও) ব্যবহারের জন্য গুরুত্বপূর্ণ কৌশল, বিশেষত যেহেতু এটি এতগুলি ভাষায় পৌঁছতে পারে of

উদাহরণ:

print=alert;print("Hello World!")

এটি কেবল জাভাস্ক্রিপ্টই নয়, পাইথন, রুবি ইত্যাদিতেও কাজ করবে আরও উদাহরণ পরে যখন আমি অন্যদের কথা ভাবি। অবশ্যই মন্তব্য মন্তব্য / পোস্ট সম্পাদনা স্বাগত।


5
মনে রাখবেন যে যখন যেমন জাতীয় / পাইথন করছেন, এটি সাধারণত ওরফে খাটো এর alertজন্য printপাইথন (3 শুধুমাত্র) কারণ জাতীয় এর মন্তব্য বাক্য গঠন, //সহজে একটি পাইথন প্রোগ্রাম, কাজ করা যেতে পারে যখন পাইথন এর #জাতীয় মধ্যে কাজ করা যাবে না।
ETH প্রোডাকশন

11

#ভিত্তিক মন্তব্য

এই টিপটি কমপক্ষে একটি ভাষায় মন্তব্য প্রতীক এবং ব্লককোটিসের একটি উপসেট

এসোলেংগুলির বিপরীতে অনেকগুলি ভাষা, বিশেষত উত্পাদন-প্রস্তুত ভাষাগুলি সহ বহুবিশেষ তৈরি করার সময়, #ব্লক বা একক-লাইন মন্তব্যে যে ভাষাগুলি ব্যবহার হয় সেগুলি দেখার জন্য এটি কার্যকর হতে পারে ।

  • ব্লক কমেন্ট সিনট্যাক্স সহ অনেকগুলি ভাষা শুরু হয় #এবং নিম্নলিখিতগুলি অনুসরণ করে বর্ণের মধ্যে প্রচুর বিচিত্রতা রয়েছে #
  • এগুলির বেশিরভাগ ভাষাও একককে #একটি লাইন মন্তব্য হিসাবে মঞ্জুরি দেয় , যার অর্থ যে কোনও কিছু যা একটি ভাষায় ব্লক মন্তব্য শুরু করতে পারে তা অন্য ভাষায় কেবল একটি সাধারণ মন্তব্য, যাতে এটি সহজেই ফিট করে।

এখানে #ব্লক মন্তব্যে (সম্পূর্ণ নয়) এমন ভাষাগুলির দ্রুত সংক্ষিপ্তসার তালিকা রয়েছে :

Language            Start       End      Single-line #?     Notes
------------------------------------------------------------------------------------------
Agena               #/          /#             ✓
AutoIt              #cs         #ce
Brat                #*          *#             ✓
C                   #if 0       #endif                      Not actually a comment
CoffeeScript        ###         ###            ✓            Needs to be on separate line
Common Lisp         #|          |#
Julia               #=          =#             ✓
Lily                #[          ]#             ✓
Objeck              #~          ~#             ✓
Perl 6              #`{         }#             ✓            Any bracketing chars will do
Picolisp            #{          }#             ✓
Scheme              #|          |#

আরও উদাহরণের জন্য, রোসটা কোড দেখুন

এখানে একটি বিক্ষোভ হিসাবে একটি দ্রুত এবং সহজ উদাহরণ:

#|
###
#`[

print("Julia")
#=

|#
(format t "Common Lisp")
#|

###
alert("CoffeeScript")
###

]#
say "Perl 6"
#`[

...

# ]# # ### # |# ; =#

জেফির আছে #- ... -#
DLosc

11

পাটিগণিত অপারেটরের ত্রুটি

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

উদাহরণ স্বরূপ:

  • ^ কিছু ভাষায় বিটওয়াইজ এক্সওর এবং অন্যদের মধ্যে ক্ষতিকারক
  • / কিছু ভাষায় পূর্ণসংখ্যা বিভাগ এবং অন্যদের মধ্যে ফ্লোটিং পয়েন্ট বিভাগ
    • পূর্ণসংখ্যা বিভাজন ভাষার জন্য, -1/2হয় -1কিছু কিছু ভাষায় (বৃত্তাকার নিচে) এবং 0(শূন্য বৃত্তাকার) অন্যদের মধ্যে
  • -1%2হয় -1কিছু কিছু ভাষায় এবং 1অন্যদের মধ্যে
  • --x কিছু ভাষায় কোনও দ্বিধা নেই (দ্বিগুণ প্রত্যাখ্যান) এবং অন্যদের মধ্যে প্রাক-হ্রাস
  • 1/0 কিছু ভাষায় অসীমতা দেয় এবং অন্যদের মধ্যে ত্রুটি ঘটে
  • 1<<64কিছু ভাষায় 0 দেয় (ওভারফ্লো) এবং 36893488147419103232অন্যগুলিতে

3
একটি সাধারণ উদাহরণ হবে x=1;["JS","Python"][--x], যা এটি চালিত ভাষার নামটি (জেএস এবং পাইথনের মধ্যে) ফিরিয়ে দেয়।
ইটিএইচ প্রডাকশন

10

ব্রেইনফাক ব্যবহার করুন

খুব সুন্দরভাবে সমস্ত বিএফ বাস্তবায়নগুলি এমন অক্ষর ফেলে দেয় +-<>[].,যা আমাদের পক্ষে কাজ করে না!

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

এখানে একটি খুব সহজ উদাহরণ:

.+[.+]

এই চমত্কার পরিমাণে বৃদ্ধি এবং চারকোড-আউটপুটগুলি "চিরতরে" (রানটাইম সেটিংসের উপর নির্ভর করে)। এখন আপনি যদি কোডের একটি এলোমেলো টুকরো লিখতে চান, তবে জেএসে, বলতে পারেন:

x=>"asdf".repeat(+x)[x*Math.random()*2+1|0]

জেএসকে কীভাবে বিএফের চারপাশে edালানো হয় তা লক্ষ্য করুন।

আপনি যদি সত্যই BF দিয়ে শুরু করতে প্রস্তুত হন তবে এটি সর্বোত্তম কাজ করে তা নিশ্চিত হয়ে নিশ্চিত হন; অন্য ভাষা দিয়ে শুরু করা এবং বিএফ অন্তর্ভুক্ত করার চেষ্টা করা ভদ্রভাবে শক্ত।


6
বৃহত্তর বহুবৃত্তের জন্য যেখানে বিএফ সংহতকরণ থেকে কয়েক বাইট সঞ্চয় বেশি সাহায্য করে না, আমি বিএফ শেষ লিখব এবং অন্যান্য কোডটি []প্রয়োজনীয় হিসাবে মোড়ানো করব ।
Sp3000

6
এটি কেবল ব্রেইনফাকের ক্ষেত্রেই নয়, বিপুল সংখ্যক ব্রেইনফাক-অনুরূপ ভাষাগুলি এবং প্রচুর অন্যান্য টুরিং টারপাইটের ক্ষেত্রেও প্রযোজ্য।
0 '

2
প্রথমটি x=>সেলটি পরিবর্তন করে, যা এই ক্ষেত্রে কোনও বিষয় নয়, তবে কেবল বলতে চেয়েছিলেন
রোমান গ্রাফ

7

এমন ভাষাগুলি ব্যবহার করুন যেখানে বেশিরভাগ অক্ষরই বিবেচনা করে না

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

  • সাদা স্থান স্পেস, ট্যাব বা নিউলাইন নয় এমন সমস্ত কিছু উপেক্ষা করে।
  • মস্তিষ্ক-ফ্ল্যাক মূলত পাশাপাশি সবকিছু উপেক্ষা করে ()[]{}<>। ( @দোভাষী যখন কোনও ডিবাগ পতাকা আরম্ভের সময় হিসাবে এটি বিশ্লেষণ করার চেষ্টা করে তখন কখনও কখনও ত্রুটির সৃষ্টি করে))
  • OOo CODE অক্ষর বাদে সব কিছু উপেক্ষা করে। তদুপরি, সমস্ত ছোট হাতের অক্ষরগুলি আদান-প্রদানযোগ্য, যেমনটি সমস্ত বড় হাতের অক্ষর।
  • উইয়ার্ড কেবল শ্বেতস্থান এবং অ-সাদা স্থানের অক্ষরের মধ্যে পার্থক্য করে।
  • ইন শব্দময় , কিছু যতিচিহ্নের অক্ষরগুলো উপেক্ষা করা হয়, এবং সমস্ত অক্ষর বিনিমেয়।
  • প্যারেন্টেটিস এবং প্যারেন্টেসিস উভয় জাহান্নামই প্রথম বন্ধনী বাদে সবকিছু উপেক্ষা করে।

আমি সেই @ত্রুটিটি স্থির করেছি ।
গম উইজার্ড

পাইথনের সাথে
হোয়াইটস্পেস

@ জড়িত আপনার পাইথনের সাথে ট্যাব লাগবে না। তুমি ব্যবহার করতে পারexec('''...\t\n\40''')
মিল্কিওয়ে 90

5

নেস্টেড ব্লক মন্তব্য সম্পর্কে সচেতন হন

কখনও কখনও একাধিক ভাষাগুলি ব্লক মন্তব্যের জন্য একই বাক্য গঠন ব্যবহার করে, যা প্রায়শই প্রায়শই দুটি ভাষার সাথে বহুভুজ তৈরি করার জন্য ডিল ব্রেকার না হয়ে থাকে। খুব মাঝেমধ্যে তবে কোনও একটি ভাষা নেস্টেড ব্লক মন্তব্যের অনুমতি দেবে, যা পৃথক কোড পাথ তৈরি করতে অপব্যবহার করা যেতে পারে।

উদাহরণস্বরূপ, এই বহুভুজটি বিবেচনা করুন:

#[#[]#print("Lily")#]#echo"Nim"

নিম ও লিলি উভয় ব্যবহার #[এবং ]#শুরু করার এবং শেষ ব্লক মন্তব্য, কিন্তু শুধুমাত্র নিম নেস্টেড ব্লক মন্তব্য করতে পারবেন।

লিলি দ্বিতীয়টিকে #[একক ব্লক মন্তব্যের অংশ হিসাবে বিবেচনা করে এবং প্রথমটিকে ]#ব্লক মন্তব্যটি সমাপ্তি হিসাবে বিবেচনা করে। ( #নীচের লিলির মুদ্রণ বিবৃতিটি একটি লাইন মন্তব্য যা নিমের কোডটি গোপন করে))

নিম বিকল্পভাবে, #[]#নেস্টেড (খালি হলেও) ব্লক মন্তব্য হিসাবে এবং দেখুনprint("Lily")# বহিরাগত ব্লক মন্তব্য হিসাবে দেখে।


4

নিশ্চিত যে এটি গণনা করে তবে ...

সমস্ত কিছুকে বৈধ করে তুলতে একটি শেবাং লাইন ব্যবহার করুন perl প্রোগ্রামে

মতে এই উত্তর এবং পার্ল ডকুমেন্টেশন, যদি আপনার কোন ফাইল পাস একটি কুঁড়েঘর লাইন দিয়ে শুরু হয় যে perl, এটা এটি চালানোর জন্য উপযুক্ত প্রোগ্রাম ডাকে। উদাহরণস্বরূপ, এটি

#!/usr/bin/python

for i in range(6):
    print i**2

আপনি কল করলে পাইথন ইন্টারপ্রেটার দ্বারা মৃত্যুদন্ড কার্যকর করা হবে perl filename.py


3
প্রোগ্রামটি দিয়ে কল করা যেতে পারে perl, এটি পার্ল প্রোগ্রামে পরিণত হয় না।
পাওলো ইবারম্যান

2
@ পাওলোবার্মান আমি বুঝতে পারি যে এটি সীমান্তরেখা, এই কারণেই আমি আমার উত্তরটি "এটি গণনা করে কিনা তা নিশ্চিত না" দিয়ে শুরু করেছি। :) তবে সত্য পার্লকে কী সংজ্ঞায়িত করা হয়েছে, যদি "ডকুমেন্টেশনে কী লেখা হয় এবং রেফারেন্স প্রয়োগের মাধ্যমে ফিরে আসে না perl"? একটি ভাল ফিলোসারাপ্টর মেমের মত শোনাচ্ছে ...
ফেডেরিকো পোলোনি


4

অস্তিত্বহীন ফাংশনগুলিকে কল করুন, তারপরে যুক্তিগুলি মূল্যায়নের সময় প্রস্থান করুন

অনেক প্রোগ্রামিং ল্যাঙ্গুয়েজ একটি স্বেচ্ছাসেবী শনাক্তকারীকে পার্স করতে সক্ষম হয় যার পরে ভিতরে একটি এক্সপ্রেশন সহ এক জোড়া বন্ধনী হয়:

identifier(1 + 1)

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

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

এখানে একটি উদাহরণ, একটি ডিসি / লুয়া বহুবিদ:

c2pq(1 + #os.exit(print(3)))

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

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