বেফুঞ্জে গল্ফ করার টিপস


12

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


আমি নিশ্চিত না আছি এই সাধারণভাবে Befunge পরিবর্তন করা উচিত ছিল, তাহলে কিন্তু Befunge 93 98. চেয়ে golfing জন্য অনেক কম আদর্শ
জাস্টিন

6
আমাদের একটি সাম্প্রতিক বেফঞ্জ 93 টি বিষয় ছিল, তবে আমি মনে করি পরিবর্তে এই বিষয়টিকে সাধারণীকরণ করা ভাল। তা কি ঠিক হবে? (এবং সম্ভবত কোন সংস্করণ /
গুলিগুলির

উত্তর:


9

মাল্টি-লাইন লুপ ব্যবহার করার সময়, এটি যতটা সম্ভব ব্যবহার করার চেষ্টা করুন:

>1234....v
^        <

বনাম

>1234v
^....<

7

শর্তসাপেক্ষ পরে কোনও মান ফেলে দেওয়া দরকার (উদাহরণস্বরূপ, কারণ অন্য পথটি মানের উপর নির্ভর করে, তবে এইটি দেয় না)? ব্যবহারের পরিবর্তে >$বা পরিবর্তনের দিকনির্দেশ এবং পপ স্ট্যাক উভয় পরিবর্তনের পরিবর্তে আপনি $<ভেরিয়েবলের সত্যিকারের মূল্য জানেন এবং তা ব্যবহার করুন adv_

উদাহরণ

'* : v           >$ .. @          Prints number in binary followed by the original
                                  decimal number.
     > :2%\2/ :!#^_ \.

পরিণত হয়

'* : v           _  .. @          Since we know that the topmost value on the stack
                                  will be 0, we combine `>$` into `_`.
     > :2%\2/ :!#^_ \.

6

ভুলে যাবেন না যে 0সবসময় স্ট্যাকের মধ্যে রয়েছে। উদাহরণস্বরূপ, এর অর্থ এটি একটি খালি স্ট্যাক সহ, gসমান 00gএবং pসমতুল্য 000p


5

আপনার যদি 15 এর চেয়ে বড় সংখ্যার দিকে চাপ দিতে 'হয় তবে পরবর্তী অক্ষরের ASCII মান আনতে ব্যবহার করুন :

'*

এর চেয়ে 42 টি চাপুন:

4a*2+

বা, 67*খুব কাজ করে
ডুরকনব

4
@ ডুরকনব সম্ভবত আমার বক্তব্যটি পরিষ্কার করার জন্য একটি প্রধান সংখ্যাটি বেছে নেওয়া উচিত ছিল, তবে ৪২ এত বড় সংখ্যা।
জাস্টিন

2
মনে রাখবেন যে এই টিপটি কেবল বেফঞ্জ -৯৯ এবং তারপরে প্রযোজ্য। বেফঞ্জ -৩৩ নির্দেশটি সমর্থন করেনি '
জেমস হোল্ডারনেস

4

ব্যবহার করার পরিবর্তে |, অন্য একটি লাইন (প্রায়শই অতিরিক্ত অতিরিক্ত স্থান সহ) প্রয়োজন হয়, ব্যবহার করার চেষ্টা করুন j। উদাহরণ স্বরূপ:

01-`j@more code here

যদি স্ট্যাকের শীর্ষে নম্বরটি নেতিবাচক হয় এবং থামিয়ে দেওয়া হবে অন্যথায় না হলে। আপনি একাধিক অক্ষর প্রয়োজন হয়, তাহলে ব্যবহার n*jযেখানে nঅক্ষরের সংখ্যা আপনার যা দরকার যখন প্রেরণ মান jহয় 0। উদাহরণ:

01-`4*j01-*more code

যা নেতিবাচক সংখ্যাকে উপেক্ষা করবে।


মনে রাখবেন যে এই টিপটি কেবল বেফঞ্জ -৯৯ এবং তারপরে প্রযোজ্য। বেফঞ্জ -৩৩ নির্দেশটি সমর্থন করেনি j
জেমস হোল্ডারনেস

4

বেফুঞ্জ -৩৩-এ, আপনি যদি প্রথম জিনিসটি স্ট্যাকের উপরে চাপ দিচ্ছেন তবে এটি একটি স্ট্রিং, আপনি প্রায়শই খোলার উদ্ধৃতিটি ফেলে দিয়ে চলে যেতে পারেন। উদাহরণস্বরূপ:

"!iH",,,@

এটি সহজ করা যেতে পারে:

!iH",,,@

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

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

যখন "মুখোমুখি হয়, এটি স্ট্রিংয়ের শুরু হিসাবে বিবেচিত হয়, তবে কোনও সমাপ্ত উদ্ধৃতি না থাকায় "এটি দ্বিতীয়বারের মুখোমুখি না হওয়া পর্যন্ত প্লেফিল্ডের চারপাশে পুরো মোড়কে । স্ট্যাকের দিকে ধাক্কা খেয়ে কী শেষ হয় তা হ'ল:

,,,@  ···72 spaces···  !iH

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

মনে রাখবেন যে এটি বেফঞ্জ -৮৮ এ সাধারণত কাজ করবে না, যেহেতু একটি অজ্ঞাতপরিচিত নির্দেশিকার কারণে দোভাষী তাকে এড়িয়ে যাওয়ার পরিবর্তে প্রতিফলিত করতে পারে।


বেফুঞ্জ -98 এ আপনি পরিবর্তে লাইনের শেষে প্রয়োজনীয় স্ট্রিং রাখতে পারেন; ",,,@!iH। দ্রষ্টব্য যে পাইফুঞ্জ একটি অতিরিক্ত স্থান যুক্ত করে, যখন এফবিবিআই তা দেয় না।
জো কিং

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

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

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

4

বেফুঞ্জ -৩৩ এ, কোডটি লুপ বিভাগের উভয় দিকের মধ্যে কার্যকর করা সহ একটি লুপকে একটি একক লাইনে সমতল করা প্রায়শই সুবিধাজনক হতে পারে।

উদাহরণস্বরূপ, নীচের কোডটি বিবেচনা করুন, যা অক্ষরটিকে aআটবার আউটপুট করে :

"a"9>1-:#v_@
    ^\,:\<

এটি ব্রিজ নির্দেশাবলীর ( #) দ্বারা লুপ ক্রমকে ছেদ করে একটি একক লাইনে সমতল করা যায় :

"a"9>1#\-#,:#:>#\_@

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

আপনি যদি কেবল অ-শ্বেতস্পেস অক্ষরগুলির দিকে তাকান তবে আপনি ধারণাটি পেতে পারেন যে এটি আসলটির চেয়ে দীর্ঘ than তবে একবার আপনি দুটি লাইন সংস্করণে লাইনফিড এবং অতিরিক্ত প্যাডিং ધ્યાનમાં নিলে আপনি চারটি বাইট সংরক্ষণ করতে পারেন।

এই বিশেষ ক্ষেত্রে, কোডটি আরও সংকুচিত করে তা উল্লেখ করে যে সেই ক্রমটি :#:কেবল পরিবর্তিত হতে পারে :

"a"9>1#\-#,:>#\_@

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

প্রকৃতপক্ষে, যে কোনও সময় আপনি একই নির্দেশটি কোনও #কমান্ডের দুপাশে পুনরাবৃত্তি করলে আপনি কেবল এটির একটি নির্দেশকে সহজ করতে পারেন, সুতরাং লুপকে সমতল করার সময় এটি আপনাকে সর্বদা সন্ধান করা উচিত।

এটি কীভাবে কাজ করে তা বোঝার জন্য, একবারে #মুছে ফেলা সমস্ত অক্ষর (অর্থাত্ বাম থেকে ডান সঞ্চালনের সময় কী ঘটে) একবারে এবং একবার #সরানো অক্ষরের সাথে (অর্থাত ডান থেকে বামে চালানো ) লুপের অনুক্রম দুটি লিখতে সহায়তা করতে পারে )।

"a"9>1#\-#,:>#\_@
    >1  -  :>  _      ; executing left to right
    >  \  ,:  \_      ; executing right to left

আপনি এখন পরিষ্কারভাবে দেখতে পাচ্ছেন যে এটি কীভাবে কোডের মূল দুটি লাইনের সংস্করণটির সাথে মেলে।


3

প্রস্থান কোড দ্বারা আউটপুট, যেখানে এটি একটি অনুমোদিত আউটপুট ফর্ম। চ্যালেঞ্জ একটি সংখ্যা প্রিন্ট করতে চাইলে আপনার সাথে কার্যক্রমটা শেষ দ্বারা একটি বাইট সংরক্ষণ করতে পারবেন qপরিবর্তে.@


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

3

বেফঞ্জ -৩৩ এ অক্ষর ইনপুট কমান্ড ( ~) প্রায়শই -1-এর শর্টকাট হিসাবে ব্যবহার করা যেতে পারে, যেহেতু এটি ইওএফ- তে ফিরে আসে value

উদাহরণ হিসাবে, নীচের কোডটি আউটপুট -1 করবে:

~.@

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

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

তাই বলা হয়, PPCG উপর নিয়ম যে একটি প্রোগ্রাম একটি খালি ইনপুট স্ট্রিম অনুমান হতে পারে , এবং যে কিভাবে এটা সাধারণত চালানো অংশে হবে Tio

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


2

কোনও অতিরিক্ত চরিত্রের জন্য ব্যবহার না করে ডিল করার সময় _বা আইপিটির দিকনির্দেশটি ব্যবহার করুন ।|!

আসল উদাহরণ ( এই পোস্ট থেকে ):

#v~
,>:!#@_

পরিবর্তন করা যেতে পারে

#v~
:<,_@#

2

ভুলে যাবেন না 0k পরবর্তী নির্দেশ কার্যকর করে না। এর অর্থ এটি করার পরিবর্তে:

;some boolean test;!jv;code if false;
       ;code if true;<

আপনি একটি চরিত্রটি সংরক্ষণ করে সংরক্ষণ করতে পারেন

;some boolean test;kv;code if false;
      ;code if true;<

মনে রাখবেন যে এই টিপটি কেবল বেফঞ্জ -৮৮ এবং তারপরে প্রযোজ্য। বেফুঞ্জের পূর্ববর্তী সংস্করণগুলি kনির্দেশকে সমর্থন করে নি ।
জেমস হোল্ডারনেস

1

kঅপারেটর সম্পর্কে ভুলবেন না । পরিবর্তে "!dlroW olleH",,,,,,,,,,,,@, না "!dlroW olleH"bk,@। লক্ষ্য করুন kঅপারেশন করে সেল এটা যে এ তাই 9k,না 9 বার কিন্তু 10 প্রিন্ট করবে; সঙ্গে 9 বার k, এবং একবার সঙ্গে ,


1
মনে রাখবেন যে এই টিপটি কেবল বেফঞ্জ -৮৮ এবং তারপরে প্রযোজ্য। বেফুঞ্জের পূর্ববর্তী সংস্করণগুলি kনির্দেশকে সমর্থন করে নি ।
জেমস হোল্ডারনেস

1

স্ট্যাকের উপর অল্প সংখ্যক চাপ দেওয়ার সময়, আপনি সম্ভবত সহজেই যথেষ্ট পরিমাণে বের করতে পারেন যা 45*আপনাকে পাবে 20এবং 67*আপনাকে পাবে 42। এটি বৃহত্তর সংখ্যায় আসে, তবে, আপনার সত্যিই এমন একটি প্রোগ্রাম প্রয়োজন যা আপনার জন্য সবচেয়ে দক্ষ প্রতিনিধিত্ব গণনা করতে পারে।

এর পক্ষে সবচেয়ে সহজ বিকল্পটি মাইফ শ্যুয়েরারের BefunRep এর জন্য অনলাইন ইন্টারফেস । আপনি কেবল একটি সংখ্যা টাইপ করুন এবং এটি একটি সমতুল্য বেফঞ্জ উপস্থাপনাটি ছুঁড়ে ফেলবে। এটি সর্বদা সর্বাধিক অনুকূল নয়, তবে এটি যথেষ্ট নিকটতম এবং আপনি নিজের হাতে যে জিনিসটি নিয়ে আসতে পারেন তার চেয়ে ভাল এটি প্রায় নিশ্চিত।

অনলাইন সিস্টেমটি 0 থেকে 16777215 এর মধ্যে সীমার মধ্যে সীমাবদ্ধ, সুতরাং আপনার যদি এর চেয়ে বড় কিছু প্রয়োজন হয় তবে আপনি স্ট্যান্ডেলোন বেফুনরেপ ইউটিলিটি ডাউনলোড করতে এবং নিজেই গণনা চালাতে চাইবেন

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


বেফুঞ্জ 98-এ ছোট সংখ্যার দিকে চাপ দেওয়ার সময় আপনি ব্যবহার করতে পারেন '। উদাহরণস্বরূপ 42:'*
জাস্টিন

@ জাস্টিন আমি শেষ অনুচ্ছেদে উল্লেখ করেছি যে, তবে এই টিপটির পুরো বিষয়টি হ'ল আপনি যদি এটির জন্য কোনও সরঞ্জাম ব্যবহার করেন তবে সংখ্যা তৈরির জন্য আপনাকে এই কৌশলগুলি সম্পর্কে খুব বেশি কিছু জানতে হবে না।
জেমস হোল্ডারনেস
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.