হ্যাক্সে গল্ফ করার টিপস


12

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

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

হ্যাক্স এখানে অনলাইনে চালানো যেতে পারে !


আমি অতীতে হ্যাক্সকে বেশ খানিকটা ব্যবহার করেছি, কিন্তু যেহেতু আমি গল্ফ শুরু করেছি তখন থেকে আমি এটি বেশি ব্যবহার করিনি। আমাকে এটি গল্ফ করার জন্য ব্যবহার করার চেষ্টা করতে হবে ...
ETH প্রোডাকশনস

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

উত্তর:


8

স্ট্রিং বিরতি

হ্যাক্স সিঙ্গল-কোট স্ট্রিংগুলিতে স্ট্রিং ইন্টারপোলেশন সমর্থন করে। জাভাস্ক্রিপ্ট ES6 তে টেম্পলেট স্ট্রিংগুলির মতো, আপনি স্ট্রিংয়ের সাথে একটি এক্সপ্রেশন অন্তর্ভুক্ত করতে পারেন ${...}:

trace('2 + 2 = ${2 + 2}');

ES6 এর বিপরীতে, অভিব্যক্তিটি যখন একক ভেরিয়েবল হয় তবে আপনি কোঁকড়ানো বন্ধনীগুলি বাদ দিতে পারেন:

var x = 2 + 2;
trace('2 + 2 = $x');

এই উদাহরণ দুটি মুদ্রণ 2 + 2 = 4


7

অ্যারে বোধগম্যতা

হ্যাক্স অ্যারে বোঝাপড়া সমর্থন করে:

trace([for (i in 0...5) i]); // Prints 0,1,2,3,4

অন্যান্য অনেক ভাষার মতো নয়, আপনি whileবোধগম্যতাতেও ব্যবহার করতে পারেন :

var i = 5;
trace([while (i > 0) i--]); // Prints 5,4,3,2,1

এটি আপনার পক্ষে কতক্ষণ অ্যারে প্রয়োজন তা আপনি জানেন না যখন এটি খুব কার্যকর হতে পারে।

এছাড়াও, আপনি শৃঙ্খল for, whileআর ifবিবৃতি:

trace([for (x in ['A','B','C','D'])
       for (y in ['x','y'])
       if (x + y != "Cx")
       x + y
]); // Prints Ax,Ay,Bx,By,Cy,Dx,Dy

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

@ টুকুকএক্স হাহা, এটি কখনও কখনও ঘটে থাকে :) আপনি যদি কিছু মনে করেন না তবে আমি এখানে আপনার উদাহরণগুলির মধ্যে একটি অন্তর্ভুক্ত করব। এছাড়াও, try.haxe.org স্কোয়ার বন্ধনীগুলি প্রিন্ট করছে বলে মনে হচ্ছে না ...
ETH প্রোডাকশনগুলি

কার্টেসিয়ান পণ্য গণনা করে এমনটি ঝরঝরে। আমি মনে করি এটি আপনার পোস্টে একটি ভাল সংযোজন হবে :)
ইয়টিসি

6

রেঞ্জ অপারেটর

হ্যাক্সের একটি ব্যাপ্তি অপারেটর রয়েছে ...যা পূর্ণসংখ্যার ব্যাপ্তি তৈরি করতে ব্যবহৃত হতে পারে। উদাহরণস্বরূপ, এর পরিবর্তে:

var i = 0;
while (i < 10) trace(i++);

তুমি এটি করতে পারো:

for (i in 0...10) trace(i++);

জন্য নির্দিষ্টকরণ x...y:

  • xএবং yউভয়ই Ints হতে হবে।
  • xএর চেয়ে বড় হতে পারে না y
  • এটি একটি অন্তর্বর্তী বস্তু ফেরত দেয় , যা কোনও আইটरेবলের মতো একই জায়গায় ব্যবহার করা যেতে পারে।

1

শর্তসাপেক্ষে একটি বিবৃতি চালানো

স্পষ্টতই আপনি শর্তাধীন যেকোন কিছু দিয়ে চালাতে পারেন if:

if(n>5)doSomething(n);

তবে, উপরের মত যদি আপনার কাছে কেবল একটি বিবৃতি থাকে তবে আপনি বাইট সংরক্ষণের জন্য টার্নারি শর্তসাপেক্ষ অপারেটরটি ব্যবহার করতে পারেন:

n>5?doSomething(n):0;

আপনি কখনও কখনও ব্যবহার করে অন্য বাইট সংরক্ষণ করতে পারেন &&, যদিও এটি খুব বিরল কারণ &&কেবলমাত্র যদি উভয় এক্সপ্রেশন বুলিয়ান ফিরে আসে:

n>5&&doSomething(n);

এই একটা প্রধান ব্যতিক্রম নয় কীওয়ার্ড : যদি Haxe একটি মধ্যে সঞ্চালিত return, breakঅথবা continue যে কোন জায়গায় , তা অবিলম্বে এটি চালানোর এবং প্রস্থান যাই হোক না কেন অভিব্যক্তি এভাবে কাজ করেন হবে। এর অর্থ এর পরিবর্তে:

if(n>5)return n;

আপনি 2 বাইট সংরক্ষণ করতে এটি করতে পারেন:

n>5&&return n;

1

অভিব্যক্তিগুলিতে কীওয়ার্ডগুলি ব্যবহার করুন

হ্যাক্সের আর একটি অস্বাভাবিক বৈশিষ্ট্য হ'ল সবকিছুই একটি প্রকাশ । উদাহরণস্বরূপ, এই কোডটি পুরোপুরি বৈধ:

function(n){while(n>0)n%4==1?return 6:n--;return 3;}

ঠিক আছে, এটি মোটামুটি অকেজো উদাহরণ, তবে আশা করি আপনি আমার বক্তব্যটি পেয়ে গেছেন। এটি বেশিরভাগ কীওয়ার্ড সহ কাজ করে:

function(n){while(n>0)n%4==1?break:n--;return n;}

এটি আপনাকে if/ elseইনলাইন ব্যবহার করতে , যেমন p=if(n>1)7else 4;অবশ্যই p=n>1?7:4;খাটো করার অনুমতি দেয়।

কীওয়ার্ডগুলি আপনি ইনলাইন ব্যবহার করতে পারবেন না

  • var - সংকলকটি শূন্যতাটিকে একটি মান হিসাবে ব্যবহার করার চেষ্টা করার বিষয়ে অভিযোগ করবে।
  • for/ while- উপরের মত একই, যদিও আপনি এগুলি বোঝার ক্ষেত্রে এগুলি ব্যবহার করতে পারেন ।

1

ছাড়ুন ফাংশন বন্ধনী

বেশিরভাগ ভাষার মতো নয়, হ্যাক্সের সমস্ত কিছুই একটি অভিব্যক্তি , সহ {blocks}। সুতরাং, হ্যাক্স প্রোগ্রামে কোথাও কোঁকড়ানো বন্ধনীগুলি ( switchএক্সপ্রেশন ব্যতীত) রেখে দেওয়া যেতে পারে যদি সেগুলিতে কেবল একটি বিবৃতি থাকে। সুতরাং এর পরিবর্তে:

function f(n){return Math.pow(3,n);}

তুমি এটি করতে পারো:

function f(n)return Math.pow(3,n);

একটি সহজ দুটি বাইট অনেক ফাংশনে সংরক্ষিত।

এমনকি যদি কোনও ফাংশনে একাধিক বিবৃতি থাকতে হবে, তবে আপনি প্রায়শই ব্লকের বাইরের দিকে সরে গিয়ে একটি বাইট সংরক্ষণ করতে পারেন return :

function f(a){var b=a*a;return a<0?-b:b;}
function f(a)return{var b=a*a;a<0?-b:b;}

এটি কাজ করে কারণ একটি ব্লক ব্লকের ভিতরে সর্বশেষ প্রকাশের জন্য মূল্যায়ন করে।


সম্পাদনা করুন: আপনার যদি কোনও সংখ্যার ঘনক্ষেত্রের প্রয়োজন হয় তবে এটি ব্যবহার করা আরও ভাল n*n*n, বা সমানভাবে n*n*n*nকোনও সংখ্যার পরীক্ষক ইত্যাদির জন্য ... তবে, Math.powএখানে একটি ভাল উদাহরণ হিসাবে কাজ করে।
Yytsi

@ টুকুএক্সএক্স হে, ধন্যবাদ আমি এর Math.pow(3,n)পরিবর্তে ব্যবহার করব ;-)
ETH প্রোডাকশনগুলি
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.