একটি বেফুঞ্জ প্রোগ্রামটি সংক্ষিপ্ত করুন


17

বেফুঞ্জ একটি দ্বিমাত্রিক এসোটেরিক প্রোগ্রামিং ভাষা। মূল ধারণাটি হ'ল (এক-চরিত্র) কমান্ডগুলি 2-মাত্রিক গ্রিডে স্থাপন করা হয়। কন্ট্রোল ফ্লো গ্রিড জুড়ে হাঁটবে, কমান্ডগুলি সম্পাদন করবে এবং এটি একটি তীর ( >^<v) কে আঘাত করবে তখন দিক পরিবর্তন করবে । কমান্ডগুলি স্ট্যাক-ভিত্তিক; দেখতে এই তালিকায়Http://esolangs.org/wiki/Befunge এও দেখুন ।

বেফুঞ্জ -98 এর স্পেসিফিকেশন উপলব্ধ।

সমস্যা

এমন একটি প্রোগ্রাম লিখুন যা বেফুঞ্জ প্রোগ্রামটিকে আরও কমপ্যাক্ট উপস্থাপনায় রূপান্তর করে। উদাহরণস্বরূপ, নিম্নলিখিত প্রোগ্রাম মুদ্রণ 0:

>   0   v

>   @   .

^       <

এই ক্ষেত্রে, এটি ফাঁকা সারি সরিয়ে প্রোগ্রামের আচরণ পরিবর্তন না করে সংযোগ করা যেতে পারে

>0v
>@.
^ <

আরও পরিশীলিত ট্রান্সফর্মেশনগুলি ঘোরানো বা কমান্ডগুলির সিকোয়েন্সগুলিকে মিরর করে এবং প্রোগ্রামটি কমপ্যাক্ট করার জন্য অপ্রয়োজনীয় নিয়ন্ত্রণ-প্রবাহ কমান্ডগুলি অপসারণ করতে পারে। উদাহরণস্বরূপ, এই প্রোগ্রামের সাথে:

>12345v
      6
v....7<
.
.
.
@

আপনি প্রোগ্রামের শেষটি গর্তে টেক করতে পারেন:

>12345v
>...@ 6
^....7<

প্রথম উদাহরণের জন্য, সবচেয়ে কমপ্যাক্ট প্রোগ্রামটি সম্ভব possible

>0.@

আউটপুট প্রোগ্রামটি একই ফলাফল দেয় আপনি কোনও রূপান্তর ব্যবহার করতে পারেন।

ইনপুট প্রোগ্রাম

ইনপুট প্রোগ্রামগুলি বৈধ বেফঞ্জ -৮৮ প্রোগ্রাম।

আপনি ধরে নিতে পারেন যে ইনপুট প্রোগ্রামটি ডিটারমিনিস্টিক। এটি, এটি বহিরাগত অবস্থা পড়ার আদেশগুলি ব্যবহার করে না: ব্যবহারকারী ইনপুট কমান্ড &এবং ~, র্যান্ডমাইজার ?এবং স্ব-পরিবর্তনকারী কোড কমান্ড pএবং g

আপনি ইনপুট প্রোগ্রামটি সমাপ্ত বলে ধরে নিতে পারেন।

স্কোরিং

এটি কোনও কোড গল্ফ নয়, এমন একটি প্রোগ্রাম লিখতে সমস্যা যা কোড গল্ফিং করে।

ইনপুটটি পরীক্ষার কেসগুলির একটি সেট (বেফুঞ্জ প্রোগ্রাম যা উপরের ইনপুট বিধিনিষেধকে মেটায়)। মোট স্কোর হল পরীক্ষার ক্ষেত্রে স্কোরগুলির যোগফল।

প্রতিটি পরীক্ষার ক্ষেত্রে স্কোর

স্কোরটি আউটপুট প্রোগ্রামের খালি নয় এমন কোষগুলির উত্তল হলের ক্ষেত্রফল, যেখানে প্রতিটি কক্ষকে একটি বর্গ হিসাবে বিবেচনা করা হয় যার চারটি কোণ কার্তেসিয়ান সমতলের জাল পয়েন্ট। উদাহরণস্বরূপ, একটি প্রোগ্রাম

>   v
 @  <

9.5 এর স্কোর পায়।

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

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


8
একই আউটপুট প্রিন্ট করে এমন একটি বেফঞ্জ প্রোগ্রামটি শেষ করে প্রোগ্রামটি লেখা চালানো বা রোধ করার কী আছে?
কীথ র্যান্ডাল

5
"পেতে" এবং "পুট" অনুমোদিত? আপনি যদি "পুট" (স্ব-সংশোধনকারী কোড) মঞ্জুরি দেন তবে কিছু করা শক্ত হবে।
কিথ র্যান্ডাল

2
ফাঁসি কার্যকর হয় কোথা থেকে? উপরের বাঁদিকের কোণায়? যদি তাই হয় তবে আপনি ২ য় উদাহরণের আউটপুট ব্যাখ্যা করতে পারবেন? .এর অর্থ আউটপুট পূর্ণসংখ্যা, তবে আপনি যদি উপরের বাম থেকে শুরু করেন তবে স্ট্যাকের আউটপুট পর্যন্ত পূর্ণসংখ্যা নেই।
এলসার

1
@ এলসার হ্যাঁ, .একটি পূর্ণসংখ্যা বের করে। এছাড়াও, যখন স্ট্যাকের পর্যাপ্ত প্যারামিটার না থাকে, তখন বেফুঞ্জ ভান করে যে পরিবর্তে সেখানে পর্যাপ্ত পরিমাণ শূন্য রয়েছে। সুতরাং দ্বিতীয় উদাহরণ আউটপুট হবে 000
ডানিরো

@ কিথরান্ডাল: একই আউটপুট সহ একটি নতুন প্রোগ্রাম রচনা কেবল একটি স্বল্প আউটপুট সহ প্রোগ্রামগুলির জন্য কাজ করে। gএবং pঅনুমোদিত নয় (দুঃখিত, তাদের সম্পর্কে ভুলে গেছেন; সম্পাদিত)।
যান্ত্রিক শামুক

উত্তর:


12

আমি এটিকে কোডিংয়ের জন্য দীর্ঘ বিমানের যাত্রায় কাটিয়েছি। আমি একটি সিউডো বেফঞ্জ সংকলক লিখেছি যা বেফুঞ্জ প্রোগ্রামটি চালায়, বেসিক ব্লকগুলি বের করে এবং কমপ্যাক্ট উপস্থাপনায় এগুলি রাখে।

প্রোগ্রামটির লিঙ্ক

যখন এই 99 বোতল প্রোগ্রামটি চালান:

92+9*                           :. v  <
>v"bottles of beer on the wall"+910<
,:
^_ $                             :.v
            >v"bottles of beer"+910<
            ,:
            ^_ $                     v
>v"Take one down, pass it around"+910<
,:
^_ $                           1-v
                                 :
        >v"bottles of beer"+910.:_          v
        ,:
        ^_ $                          ^
                    >v" no more beer..."+910<
                    ,:
                    ^_ $$ @

এটি নিম্নলিখিত আউটপুট উত্পন্ন করে:

92+9*:.019+"llaw eht no "v
v  _v# :"bottles of beer"<
>    ,:    v
^  _v#     <
    >$:.019+"reeb f"v
 v _  v#:"bottles o"<
 >     ,:  v
 ^ _  v#   <
      >$019+"dnuo"v
     v"pass it ar"<
     >" ,nwod eno"v
 v _    v#:"Take "<
 >       ,:v
 ^ _    v# <
        >$1-:v
 v _      v# <
 >         :.019+"reeb "v
  v_  v#   :"bottles of"<
  >        ,v
  ^_  v#   :<
      >    $019+"llaw"v
           v" on the "<
           >"reeb fo "v
^  _^#      :"bottles"<
          >019+"...r"v
v  _v#:" no more bee"<
>    ,:    v
^  _v#     <
    >$$@    

এটি উত্সের চেয়ে আসলে আরও বেশি কমপ্যাক্ট নয়, তবে এটি সম্ভবত বৃহত্তর / স্পার্সার প্রোগ্রামগুলিতে আরও ভাল করবে।

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

এছাড়াও, যদি আউটপুট সংক্ষিপ্ত হয় তবে এটি কেবল আউটপুট স্পষ্টভাবে উত্পন্ন করে:

"output">:#,_@

আমি বেসিক ব্লকগুলি নিজেরাই অনুকূলিত করার জন্য কিছুই করি নি, কেবল বিন্যাস। করতে.

তাহলে পরীক্ষা কোথায়?


1
উত্স কোড লিঙ্কটি এখনই 500 টি মনে হচ্ছে। সার্ভারের ভুল কনফিগারেশন?
জন ডিভোরাক

1
@ জনডভোরাক: সত্যই। সংশোধন করা হয়েছে।
কিথ র্যান্ডাল

1

সেড, 5 টি চর

সুতরাং, এটি কোডগল্ফ না হলেও, এখানে এমন একটি সমাধান রয়েছে যা স্কোর রেশিওর জন্য বরং ভাল কোডলেসেন্ট থাকবে তবে অগত্যা একটি ভাল স্কোর নয়।

/^$/d

এটি খালি লাইনগুলি সরিয়ে দেয়।


10
আপনার কোডটি সঠিক নয়! আপনি খালি লাইনগুলি সরাতে পারবেন না। আমি কমেন্টে 2 ডি কোড লিখতে পারি না। তবে কোনও ক্ষেত্রে বিবেচনা করুন যে দিকটি নীচের দিকে রয়েছে এবং একটি ধ্রুব স্ট্রিং শুরু হয় ( ")। পথে প্রতিটি ফাঁকা রেখাটি একটি স্থানের অক্ষর হিসাবে বিবেচনা করা উচিত। যদি আমরা সেই স্ট্রিংটি মুদ্রণ করি তবে আপনার উত্পন্ন কোডটির আউটপুটে সেই ফাঁক নেই!
saeedn

3
কোড তাকান ideone.com/BdcRcf এটা প্রিন্ট করা উচিত b a। তবে আপনার সংক্ষিপ্ত হওয়ার পরে এটি মুদ্রণ করবে ba
06 এ 06
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.