ডি 2-তে গল্ফ করার টিপস


10

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

উত্তর:


1

দেখুন, কোন প্যারেনস!

ডি এর ফাংশন এবং টেম্পলেট ফাংশনগুলিকে মান, পদ্ধতি (সহায়তা করবে না) এবং বৈশিষ্ট্য হিসাবে ডাকা যেতে পারে।

আমি বিশ্বাস করতে পারি না কেউ এখনও এ কথা বলেনি। যেগুলি বাইটগুলি সংরক্ষণ করে আমি তাদের তালিকা করব:

  • fun()এবং এটি fun!()()সংক্ষিপ্ত করে fun(ধরে নেওয়া যায় যে কোনও ভেরিয়েবল নেই fun)।
  • fun(par)সংক্ষিপ্ত করে par.fun(ধরে parনেওয়া funযেমন কোনও সম্পত্তি / পদ্ধতি নেই , পাশাপাশি এর parমত প্রকাশ হওয়াও নয় 5+2)।
  • fun!(T)() সংক্ষিপ্ত fun!T
  • fun!(T)(par)সংক্ষিপ্তকরণ par.fun!T(ধরে parনেওয়া কোনও সম্পত্তি / পদ্ধতি নেই fun)

এবং অবজেক্টস সহ:

  • new cls()এতে সংক্ষিপ্ত করুন new cls(আরও জাভাস্ক্রিপ্ট কারও?)
  • obj.fun()এবং obj.fun!()()সংক্ষিপ্তobj.fun
  • obj.fun!(T)() সংক্ষিপ্ত obj.fun!T

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


এখনই গ্রহণ করছেন :)
বিড়াল

হ্যাঁ, জেনে রাখা ভাল যে এখানে এখনও ডি এর ভক্ত রয়েছে।
জাকারি

1

ডি জাভাস্ক্রিপ্ট।


অবশ্যই না. কিন্তু, সঙ্গে তার আচরণ যখন float, doubleএবং real, nanএকটি মান যা পরিচালনা করা হবে, এবং, যেমন আইইইই 754 দ্বারা নির্দিষ্ট হয়, নান নিজেই সঙ্গে সমান তুলনা না।

writeln(double.nan == double.nan); // false

অর্থ,

writeln(value!=value); // only true for nan

চেয়ে উপায় ছোট

import std.math;
writeln(isNaN(value));

স্পষ্টতই, সর্বদা বাস্তব কোডের math.isNaNজন্য ব্যবহার করুন । ;)


0

ডি টাইপ অনুমান এবং একটি autoকীওয়ার্ড আছে। যদি বস্তুটি না হয় int, তবে autoসম্ভবত সংক্ষিপ্ত।


কি autoযখন সঙ্গে একটি মিশুক অ্যারে নির্মাণ কাজ KeyType[ValueType]সিনট্যাক্সটা কি?
অ্যালেক্স এ

@AlexA। auto asd = ["a":1, "b": 2];কাজ করে, তবে যেহেতু KeyType[ValueType]মূলশব্দটির জায়গায় যাবে auto, আমি জানি না যে এটি সর্বদা এমন ধরণের সাথে কাজ করবে যেগুলির জন্য অক্ষরগুলি নির্মাণ করা যায় না
cat

@AlexA। auto arr = ["a": true, "b": 6];কাজ করে, কী এবং মানগুলি অবশ্যই সামঞ্জস্যপূর্ণ ধরণের হতে হবে
বিড়াল

0

ডি পদ্ধতিতে শৃঙ্খলায় দুর্দান্ত, তবে:

str.toLower.strip().split("").sort();

হিসাবে একই

sort(split(strip(str.toLower),""));

এবং সাধারণত অ-শিকলযুক্তটি সংক্ষিপ্ত হয়, যা আমি কেবল উপলব্ধি করেছিলাম, যা আমাকে ট্র্যাশ পরিচালনা করতে আমার উত্তরকে ছোট করতে দেয় : D


এটি সেই বিন্দুগুলি
ক্যালকুলেটরফলাইন

0

সি / সি ++ এর মতো mainহতে পারে intবা হতে পারে voidতবে void main(){}সর্বদা এর চেয়ে কম হবে int main(){return my_func_returning_int;}


যদি প্রশ্নটি আউটপুট জিজ্ঞাসা করে একটি পূর্ণসংখ্যা int main(){return output}সংক্ষিপ্ত হবে না ?
andlrc

@ দেব-নাল যদি প্রশ্নটি স্টাডাউট করার জন্য পূর্ণসংখ্যার লেখার জন্য একটি সম্পূর্ণ প্রোগ্রামের জন্য জিজ্ঞাসা করে তবে import std.stdio;void main(){write(7);}কী দরকার। আমি সন্দেহ করি যে একটি প্রশ্ন প্রোগ্রামের একটি নম্বর ফেরত দেওয়ার আদেশ দেয় কারণ অনেক ভাষা রিটার্ন কোড সেট করতে পারে না
বিড়াল

@ দেব-নাল তবে, হ্যাঁ, এই ক্ষেত্রে এটি স্টডআউটকে লেখা উচিত নয় তবে ফিরে এসেছিল, এটি আরও খাটো হবে
বিড়াল

2
সাধারণত আপনাকে আপনার ভাষার জন্য সবচেয়ে সুবিধাজনক উপায়ে / আউটপুট দেওয়ার অনুমতি দেওয়া হয়। তবে আমি অনুমান করি যে ডি 0-25 থেকে কেবলমাত্র প্রস্থান কোডগুলি সমর্থন করে?
andlrc

@ দেব-নাল আসলে, পসিক্স কেবলমাত্র 255 অবধি প্রস্থান কোডগুলি সমর্থন করে over আমি উইন্ডোজ সম্পর্কে জানি না, তবে ইউনিক্স / লিনাক্সে 255 টি মোড়কে একটি বহির্গমন কোডের ওভারফ্লো কারণে।
বিড়াল

0

ডি, মাল্টিপারডিজম (অবজেক্ট ফাংশনাল) সিস্টেম প্রোগ্রামিং ল্যাঙ্গুয়েজ হিসাবে, মনে হয় TIMTOWTDI কে জড়িয়ে ধরেছে, বা এটি করার একাধিক উপায় রয়েছে।

ঘটনাচক্রে, প্রোগ্রামটির আরজিভি লিখেছেন:

import std.stdio, std.array, std.algorithm;

void main(string[] args) {
    for(int i=0;i<args.length;writeln(args[i++])){};

    foreach(a;args)writeln(a);

    each!writeln(args);
}

উল্লেখ্য সি-শৈলী জন্য লুপ প্রয়োজন {}খালি ব্লক এবং একটি সেমিকোলন বা ফাঁকা বিবৃতি হিসাবে কিছুই গ্রহণ করবে না, এই ক্ষেত্রে । সাধারণত, বা ;কোনও বিকল্প নেই।


আপনি কি বাইট সংরক্ষণের char*জায়গায় ব্যবহার করতে পারেন string?
অ্যালেক্স এ।

@AlexA। function D main parameters must be main() or main(string[] args)তদুপরি, charআক্ষরিকভাবে একটি চরিত্র, আক্ষরিকভাবে একটি চরিত্রের char*পয়েন্টার এবং char[]অক্ষর অক্ষরের অ্যারে (স্ট্রিং পৃথক পৃথক)। ডি! = সি || সি ++
বিড়াল

1
ওআইসি। কখনই ডি ব্যবহার করেন নি, কেবল অনুমান করা।
অ্যালেক্স এ

0

ডি এর কয়েক ধরণের সি # স্টাইল ল্যাম্বডা এক্সপ্রেশন রয়েছে, যা নির্ধারিত হয়ে একা দাঁড়িয়ে থাকতে পারে:

(int a,int b)=>a*b;

auto a=(int a,int b)=>a*b;

তবে, সি # এর বিপরীতে, স্বাক্ষরের প্রকারগুলি এখনও দরকার কারণ ডিতে হ্যাসেল-স্তরের ধরণের ইনফারেন্সিং নেই।

https://dlang.org/spec/expression.html#Lambda


ধরণের গল্ফ করার জন্য ফাংশন টেম্পলেটগুলি? T f(T)(T a,T b){return a + b}অনুমান করা উচিত টি হিসাবে int- এ মধ্যেf(5);
fede গুলি।

@fedes। হ্যালো বন্ধু! হ্যাঁ, আপনি ঠিক সঠিক (তবে আমি মনে করি / আশা করি "টাইপযুক্ত" ল্যাম্বডাস টাইপড ফাংশন এক্সপ্রেশনগুলির চেয়ে কম হবে)।
বিড়াল

আহ, অফ! আমি যখন ডি সম্পর্কে আরও একবার দেখার সিদ্ধান্ত নিই, তখন আমি কাকে খুঁজে পাব? : ডিআই উদ্দেশ্যমূলকভাবে ঘোষণা করুন যে আপনার ভাষাতে ভাল স্বাদ রয়েছে
ফেডারেশন s

@fedes। ও, কেন আপনাকে ধন্যবাদ! : পি এর ইঙ্গিত দেয় আপনিও করেন (তবে আমি ছোট্টালকের সামনে যথেষ্ট সময় ব্যয় করি নি, যাইহোক :))
বিড়াল

0

অন্য কোনও যুক্তি ছাড়াই কোনও কোনও ফাংশনে কল করা

reverse(x);

প্রায় সর্বদা সংক্ষিপ্ত করা যেতে পারে

x.reverse;

বাইট বা আরও কিছু শেভ করতে

এটি কারণ .এলএইচএসকে একটি অন্তর্নিহিত প্রথম যুক্তি তৈরি করে এবং টেম্প্লেটিংয়ে আমাদেরকে অর্গগুলির জন্য সঠিক ফাংশনটি বেছে নিতে দেয়।


বিন্দু ভাল? এটি বিভ্রান্তিকর ...
ক্যালকুলেটরফলাইন

যখন আরগস নেই তখন @ ক্যাটস আরেফ্লফি যখন অন্য কোনও যুক্তি রয়েছে, x.reverse(y, z)তখন বিন্দু
বিড়ালের জন্য

1
x.reverse(y,z)এবং reverse(x,y,z)একই বাইট গণনা আছে।
জাকারি

@ জ্যাকারিটি উহ, হ্যাঁ ...
বিড়াল

আপনি কি তুলনা x.reverse(y, z)করছেন x.reverse?
জাকারি

0

যদি প্রশ্নটির একটি পূর্ণ প্রোগ্রামের moduleপ্রয়োজন হয় , তবে ঘোষণাটি আশ্চর্যজনকভাবে অপ্রয়োজনীয়।

* কাশি * জাভা, কেউ? * গলা পরিষ্কার করে * আসলে , ডি এর moduleসিস্টেমটি জাভা থেকে পুরানো।

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