ইন্টারকেলে গল্ফ করার টিপস


10

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

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

ইন্টারকল এতটাই নিম্নরূপ যে এটিতে একটি ট্যাগও নেই। খুব দুঃখজনক...


ভাষা-নির্দিষ্ট চ্যালেঞ্জগুলি সাধারণত নিরুৎসাহিত করার কারণে বেশিরভাগ ভাষার এখানে নিজস্ব ট্যাগ নেই বা প্রয়োজন নেই।
অ্যালেক্স এ।

9
একটি উইকিপিডিয়া পৃষ্ঠা থেকে এটি সেরা গল্ফিং ভাষা নাও হতে পারে এমন একটি ইঙ্গিত:Despite the language's intentionally obtuse and wordy syntax,
isaacg

উত্তর:


2

হোয়াইটস্পেস / "শব্দ" অপসারণ আপনার প্রত্যাশার চেয়ে আরও বেশি যেতে পারে

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

উদাহরণস্বরূপ, DO NOTদুটি টোকেন, তবে DONOTপার্সার অভিযোগ না করেই এটি লেখা যেতে পারে (কোনও কোনও ব্যাপকভাবে ব্যবহৃত বাস্তবায়নে)। (অবশ্যই, আপনি DON'Tলিখতেও পারেন, তবে এটি কোনও পরীক্ষক নয় read যদিও এটি পড়া আরও সহজ হতে পারে, যদিও PLEASEN'Tসম্ভবত পড়ার চেয়ে পড়া কঠিন PLEASE NOT)) প্রকৃতপক্ষে, হোয়াইটস্পেস কিছু আদৌ কিছু করে কিনা তা নিয়ে কিছুটা বিতর্ক রয়েছে; কমপক্ষে একটি ইন্টারকল পার্সার এটি সংখ্যার ধ্রুবকগুলির মধ্যেও অনুমতি দেয় (গল্ফ করার সময় এটি খুব কার্যকর নয়)। মনে রাখবেন একটি বিষয় যে সরানোর হোয়াইটস্পেস থেকে DO READ OUTদেয় এমবেডেড কারণে কিছু পুরোনো INTERCAL পারজার গুলান করতে পারেDOREADOUTDO(যদিও তাদের লেখকগণ এটিকে একটি বাগ হিসাবে বিবেচনা করেন এবং আজকাল এটি সাধারণত কোনও বৈধ প্রোগ্রামে কাজ করে তবে সিনট্যাক্স ত্রুটির আশেপাশে এই জাতীয় কোড রাখার পরামর্শ দেওয়া হয় না, কারণ ততক্ষণে এটি নির্মূল করা আরও কঠিন হতে পারে)।

এছাড়াও মনে রাখবেন যে আপনি স্থান বাঁচাতে অক্ষরগুলি ওভারপঞ্চ করতে পারেন। এএসসিআইআই-তে আপনি কেবল এটিকে '.→ দিয়েই টানতে পারেন !তবে এটি তার নিজস্বভাবে একটি অত্যন্ত কার্যকর কৌশল। (আপনি যখন অ্যারে ব্যবহার করছেন না, তখন আপনার সমস্ত গ্রুপিং অক্ষর একইরকম হওয়ার পরেও স্পার্কিয়ারস অস্পষ্টতার কোনও সম্ভাবনা নেই, তাই গল্ফিং এন্ট্রিগুলির জন্য, কেবলমাত্র 'অ্যারে সাবস্ক্রিপ্টের প্রয়োজন না হলে কেবল আটকে থাকার পরামর্শ দেওয়া হয় "।) বইয়ের কৃমি হতে পারে ?সংক্ষিপ্তসার (সি-ইন্টার্কাল) বা ল্যাটিন -১ ¥(সিএলসি-ইন্টারকল) এর জন্য তিনটি ইন্টারকল -২২ প্রয়োজনের পরিবর্তে ব্যবহার করে একটি বাইটে উপস্থাপিত ।


2

একটি বিবৃতিতে যতটা সম্ভব কাজ করার উপর ফোকাস করুন

ইন্টারকলের বিবৃতি শনাক্তকারীরা বরং ভারবস; DOপ্রতিটি বিবৃতিতে দুটি শব্দের চরিত্র, বিবৃতিটির নামটি নিজেও বেশ লম্বা হয় এবং আপনাকে PLEASEপার্সারকে খুশি রাখতে হবে এখনই a (আপনি সবচেয়ে ভাল যা করতে পারেন তা চার DOথেকে একের অনুপাত PLEASE, যার অর্থ আপনি প্রতি 5 টি কমান্ডের জন্য সনাক্তকারীগুলিতে 14 টি অক্ষর ব্যবহার করছেন)) অন্যদিকে, অভিব্যক্তি বাক্য বিন্যাসটি মোটামুটি ক্ষুদ্র (হাস্যকর, তবে ক্ষুদ্র)। এর অর্থ হ'ল এটি আপনার প্রোগ্রামের প্রায়শই একটি একক অভিব্যক্তির মধ্যে উপযুক্ত উপযোগী এমনকি একাধিক বিবৃতি ব্যবহার করা জিনিসগুলির আরও "প্রাকৃতিক" উপায় হতে পারে।

উদাহরণস্বরূপ, যদি আপনি নির্ধারণ করতে চান তাহলে #1করতে .1এবং #2করতে .2পরিবর্তে সুস্পষ্ট INTERCAL-72 ভাবে এরকম:

DO.1<-#1DO.2<-#2

আপনাকে দু'জনে একবারে নিয়োগের অনুমতি দেওয়ার জন্য এলোমেলো ভেরিয়েবল ওভারলোড করার বিষয়টি দৃ strongly়ভাবে বিবেচনা করা উচিত:

DO:1<-#1$#2

( :1/!1$.2'প্রোগ্রামের আগে কোথাও ফেলে দেওয়া হয়েছিল; নোট করুন যে এই স্বরলিপিটি বেশ কয়েকটি উপায়ে ইন্টারকল -২২ পোস্ট করেছে, সুতরাং এটি কাজ করার জন্য আপনাকে একটি আধুনিক ইন্টারকল ব্যবহার করতে হবে)। এই শুধুমাত্র সামান্য আর এমনকি যদি আপনি একাউন্টে সেটআপ নিই এবং খাটো হয়ে যদি তুমি কখনো, করতে হবে অথবা করার জন্য একযোগে নির্ধারিত সাজাতে পারেন .1এবং .2একাধিকবার।

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

DOSTASH.1DOSTASH.1

তবে এটির মতো:

DOSTASH.1+.1

( +স্বরলিপিটি বেশিরভাগ কমান্ডের জন্য কাজ করে যেখানে এটি ধারণাগতভাবে ধারণা তৈরি করতে পারে))


2

সমন্বিত হলে সমস্ত ইন্টারকল -২২-স্টাইলের জন্য একটি একক পুনরায় ব্যবহার করুন

যদি আপনাকে "যদি" স্টেটমেন্টের সমতুল্য লেখার প্রয়োজন হয় তবে ইন্টারক্যাল -২২ কোড ব্যবহার করে সাধারণ পদ্ধতিটি NEXTদ্বিগুণ করতে হয় এবং তারপরে একটি গণনা করা হয় RESUME। (আধুনিক কোড ইন, প্রায়ই একটি নির্ণিত COME FROMভালো হতে হবে, কিন্তু এই ডগা আপনার কোড পছন্দ অনুমান NEXT।) আপনি প্রায় অবশ্যই প্রথম বাইট দিতে হবে NEXT, যেমন এক শাখা থেকে জাম্প "যদি" অপরের। দ্বিতীয়টি ভাগ NEXTকরাও অযৌক্তিক, যদি না আপনার অনেকগুলি "যদি" বিবৃতি থাকে যা এটিকে দেখার পরে একই জায়গায় যায় #1। যাইহোক, RESUMEপ্রোগ্রামটি যে কোনও জায়গায় থাকতে পারে (কারণ নিয়ন্ত্রণ এটি তাত্ক্ষণিকভাবে যে কোনও জায়গায় ছেড়ে চলেছে)।

এটি পরিচালনা করার দুটি উপায় রয়েছে। আপনার যদি প্রচুর "যদি" বিবৃতি থাকে তবে RESUMEসম্ভবত একটি একক-অঙ্কিত লাইন নম্বর ওয়ারেন্ট দেয়, যাতে আপনার দ্বিতীয় NEXTবিবৃতিটি যতটা সম্ভব সংক্ষিপ্ত হতে পারে। যদি সম্ভব হয় তবে এটিকে এমন একটি গণনা করার চেষ্টা করুন RESUMEযা প্রাকৃতিকভাবে আপনার কোডে আসবে (স্বীকার করুন, এটি কঠিন, কারণ NEXTএডের পরিবর্তে কোডের "সাধারণ প্রবাহ" তে উপস্থিত হওয়া বিরল ); তারপরে, একমাত্র ব্যয় হচ্ছে লাইন নম্বর। আপনাকে এই সমস্তগুলির জন্য একটি একক বুলিয়ান পরিবর্তনশীল ব্যবহার করতে হবে NEXT; এখানে সর্বজনীন sensকমত্য ব্যবহার করা হয় .5, বেশিরভাগ কারণ এটি স্ট্যান্ডার্ড লাইব্রেরি বুলিয়ান রিটার্ন মানগুলির জন্য ব্যবহার করে।

বিকল্পভাবে, একটি অননুমোদিত (প্রযুক্তিগতভাবে নিম্নচিকিত্সা করা, কারণ আমি যখন লক্ষ্য করেছি তখন ইন্টারকল ডকুমেন্টেশনের মধ্যে একটি ইঙ্গিত পিছলেছি) ব্যবহার করা সম্ভব, এটি স্ট্যান্ডার্ড লাইব্রেরির বৈশিষ্ট্য। যেহেতু RESUMEএকটির জন্য কেন্দ্রীয় অবস্থান এত দরকারী, মানক পাঠাগারটি অভ্যন্তরীণভাবে একটি ব্যবহার করে। INTERCAL লাইন নম্বর বিশ্বব্যাপী হয় (নিয়মাবলী namespacing সঙ্গে, কিন্তু যা আপনি যদি জানেন আপনি কি করছেন ভাঙ্গা যাবে), তাই আপনি করতে পারেন NEXTঅধিকার মান গ্রন্থাগার অভ্যন্তরীণ মধ্যে যদি করতে চান, এবং বিশেষ করে, করতে পারেন NEXTথেকে তার কেন্দ্রীয় পুনঃসূচনা অবস্থান । এটি বিদ্যমান ইন্টারকল কোডটিতে পর্যাপ্তভাবে জনপ্রিয় যে স্ট্যান্ডার্ড লাইব্রেরি প্রতিস্থাপনগুলিতে বিদ্যমান প্রোগ্রামগুলি ভঙ্গ না করার জন্য এটি প্রয়োগ করতে হবে।

প্রশ্নে লাইনটি হ'ল (হয় আক্ষরিক বা কার্যকরভাবে, প্রয়োগের উপর নির্ভর করে):

(1001) DO RESUME .5

এটি ব্যবহার না করার মূল কারণ হ'ল এটির দীর্ঘ লাইনের নম্বর; আপনার যদি আন্তরিক -২২-স্টাইলের প্রচুর পরিমাণে নির্মাণের প্রয়োজন হয় তবে এটির সংক্ষিপ্ত নম্বর দেওয়ার জন্য নিজের ব্যবহার করা ভাল।

অবশ্যই, আপনি কৌশলগুলি একত্র করতে পারেন, এমন কিছু লেখা

(9)DO(1001)NEXT

যা কেবলমাত্র তুলনায় সামান্য দীর্ঘ

(9)DORESUME.5

এবং বেনিফিট যে Booleans পরিণত হয়েছে #2এবং #3(যা পড়তে কঠিন, কিন্তু স্বাভাবিকভাবে সহজ জেনারেট করতে)। প্রকৃতপক্ষে, এটি হ্যান্ডেল করার জন্য অতিরিক্ত কোডের মধ্যে রাখার উপযুক্তও হতে পারে #0এবং #1যদি আপনি প্রচুর পরিমাণে আইফফিং করে চলেছেন COME FROMতবে তবে আপনার প্রয়োজনীয়তাগুলি খুব অদ্ভুত না হলে গণিত সম্ভবত এই ক্ষেত্রে আরও ভাল কাজ করবে)।


2

INTERCAL প্রাধান্য নির্দিষ্ট করে না, তবে এটি অস্পষ্ট নজরে ত্রুটি করে না

মত একটি অভিব্যক্তি

#1$#2~#3

অস্পষ্ট, এবং এর অর্থ হতে পারে

'#1$#2'~#3

অথবা

#1$'#2~#3'

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

অন্য কথায়, এটি কেবলমাত্র গোষ্ঠীভুক্ত অক্ষরগুলি সরিয়ে ফেলা এবং আপনার প্রোগ্রামটি এখনও কাজ করে আশা করে worth বেশিরভাগ দোভাষী কোনও প্রদত্ত অস্পষ্ট প্রকাশকে ধারাবাহিকভাবে বিশ্লেষণ করবেন, সুতরাং প্রতিটি জোড়কে দলবদ্ধ করার জন্য, 2 এর মধ্যে 1 টি সম্ভাবনা অপ্রয়োজনীয়; এটি বেশ কিছু সঞ্চয় যোগ করতে পারে। (দুর্ভাগ্যবশত, INTERCAL পারজার পর্যাপ্ত বিভ্রান্তিকর করা কেউ কিছু সম্পূর্ণরূপে নিশ্চিত কি নিয়ম আসলে যে ঝোঁক আছে , কিন্তু এটা সাধারণত পরীক্ষা দ্বারা নির্ধারিত করা যেতে পারে। সরলতম ক্ষেত্রে, অপারেটরদের সব ঝোঁক সমান প্রাধান্য এবং একটি সামঞ্জস্যপূর্ণ associativity আছে।)


2

সি-ইন্টারকল এ সংক্ষেপে কোড ব্যবহার করে বিবেচনা করুন CREATE

CREATEএ বক্তব্যে আপনি কি নতুন বাক্য গঠন তৈরি করতে পারবেন। এটি গল্ফিংয়ে বিশেষত কার্যকর কারণ এটি আপনাকে বিবৃতিগুলি সংক্ষিপ্ত নাম দেওয়ার অনুমতি দেয়। নতুন অপারেটর তৈরি করে আপনি কার্যকরভাবে "একটি ফাংশন সংজ্ঞায়িত করতে" এটি ব্যবহার করতে পারেন (যার বিশাল সুবিধা রয়েছে যা এটি আপনাকে একটি এক্সপ্রেশনের মাঝখানে ফাংশনটি কল করতে দেয়)।

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

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