เคล็ดลับสำหรับการเล่นกอล์ฟใน D2


10

สิ่งใดที่คุณมีเคล็ดลับทั่วไปสำหรับการเล่นกอล์ฟในD ? ฉันกำลังมองหาแนวคิดที่สามารถนำไปใช้กับปัญหารหัสกอล์ฟโดยทั่วไปซึ่งอย่างน้อยค่อนข้างเฉพาะเจาะจงกับ D (เช่น "ลบความคิดเห็น" ไม่ใช่คำตอบ) กรุณาโพสต์หนึ่งเคล็ดลับต่อคำตอบ

คำตอบ:


1

ดูสิไม่มีคำอุปมา!

ฟังก์ชันของ D และฟังก์ชันเทมเพลตสามารถเรียกได้ว่าเป็นค่าวิธีการ (ไม่ช่วย) และคุณสมบัติ

ฉันไม่อยากเชื่อเลยว่าจะไม่มีใครพูดเรื่องนี้ ฉันจะแสดงรายการที่บันทึกไบต์:

  • 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(มี JavaScript เพิ่มเติมหรือไม่)
  • obj.fun()และobj.fun!()()ย่อให้สั้นลงobj.fun
  • obj.fun!(T)() ย่อให้เป็น obj.fun!T

สิ่งหนึ่งที่สุดท้ายใช้รุ่นเก่า ช่วยให้คุณใช้คุณสมบัติที่เลิกใช้แล้วซึ่งทำให้รหัสของคุณสั้นลง ที่กล่าวว่าคำแนะนำที่ดีที่สุด: D ไม่ดีสำหรับรหัสกอล์ฟ มันเป็นภาษาที่ยอดเยี่ยมไม่ใช่สำหรับรหัส - กอล์ฟ


ยอมรับตอนนี้ :)
cat

ใช่ดีที่รู้ว่ายังมีแฟน ๆ ของ D อยู่ที่นี่
Zacharý

1

D คือ JavaScript


เห็นได้ชัดว่าไม่ แต่เมื่อต้องรับมือกับfloat, doubleและreal, nanเป็นค่าซึ่งจะต้องได้รับการจัดการและตามที่ระบุโดย IEEE 754 น่านไม่ได้เปรียบเทียบที่เท่าเทียมกันกับตัวเอง

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

ความหมาย

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

สั้นกว่า

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

เห็นได้ชัดว่ามักจะใช้math.isNaNสำหรับจริงรหัส ;)


0

D มีการอนุมานประเภทและautoคำหลัก หากวัตถุไม่ได้แสดงintว่าautoอาจสั้นลง


ไม่autoทำงานเมื่อมีการสร้างอาเรย์กับKeyType[ValueType]ไวยากรณ์?
Alex A.

@AlexA auto asd = ["a":1, "b": 2];ทำงานได้ แต่เนื่องจากKeyType[ValueType]จะไปแทนที่autoคำหลักฉันไม่ทราบว่าจะทำงานกับประเภทที่ตัวอักษรไม่สามารถสร้างได้เสมอ
cat

@AlexA auto arr = ["a": true, "b": 6];ทำงานได้คีย์และค่าจะต้องเป็นประเภทที่เข้ากันได้
cat

0

D เป็นวิธีการผูกมัดที่ยอดเยี่ยม แต่:

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

เป็นเช่นเดียวกับ

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

และโดยปกติแล้วคนที่ไม่ถูกผูกมัดจะสั้นกว่าซึ่งฉันเพิ่งรู้ซึ่งทำให้ฉันสั้นลงคำตอบของฉันเพื่อจัดการถังขยะดังนั้น : D


มันคือจุดเหล่านั้น
CalculatorFeline

0

เช่น C / C ++ mainสามารถเป็นintหรือvoidแต่void main(){}จะสั้นกว่าint main(){return my_func_returning_int;}เสมอ


หากคำถามขอให้ส่งออกจำนวนเต็มจะไม่int main(){return output}สั้นลง?
andlrc

@ dev-null หากคำถามขอให้โปรแกรมเต็มกำลังเขียนจำนวนเต็มไปยัง stdout แล้วimport std.stdio;void main(){write(7);}เป็นสิ่งที่จำเป็น ฉันสงสัยว่าคำถามจะมอบอำนาจให้โปรแกรมส่งคืนตัวเลขเนื่องจากหลายภาษาไม่สามารถตั้งรหัสส่งคืนได้
cat

@ dev-null แต่ใช่ในกรณีที่ไม่ควรเขียนไปยัง stdout แต่กลับมามันจะสั้นกว่า
cat

2
โดยปกติคุณจะได้รับอนุญาตให้ส่งคืน / ส่งออกวิธีที่สะดวกที่สุดสำหรับภาษาของคุณ แต่ฉันเดาว่า D สนับสนุนเฉพาะรหัสทางออกจาก 0-255 หรือไม่
andlrc

@ dev-null จริง ๆ แล้วPOSIXรองรับรหัสการออกสูงสุด 255 ฉันไม่ทราบเกี่ยวกับ Windows แต่ใน Unix / Linux รหัสทางออกมากกว่า 255 wraps รอบเพราะล้น
แมว

0

D ในฐานะภาษาการเขียนโปรแกรมระบบหลายภาษา (Object Functional) ดูเหมือนว่าจะยอมรับ TIMTOWTDI หรือมีมากกว่าหนึ่งวิธีที่ต้องทำ

ตรงจุดเขียน argv ของโปรแกรม:

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);
}

โปรดสังเกตว่า C-style for-loop ต้องการ{}บล็อกว่างเปล่าและจะไม่ยอมรับเซมิโคลอนหรือไม่มีอะไรเป็นคำสั่งว่างในกรณีนี้ โดยปกติหรือ;ไม่มี ops


คุณสามารถใช้char*แทนstringการบันทึกไบต์ได้หรือไม่?
Alex A.

@AlexA function D main parameters must be main() or main(string[] args)ยิ่งไปกว่านั้นcharก็คือตัวอักษรตัวหนึ่งchar*เป็นตัวชี้ไปที่ตัวอักษรหนึ่งตัวอักษรและchar[]เป็นอาร์เรย์ของตัวอักษรตัวอักษร (สตริงจะแตกต่างกัน) D! = C || C ++
cat

1
OIC ไม่เคยใช้ D เพียงแค่เดา
Alex A.

0

D มีรูปแบบแลมบ์ดา C #-style ไม่กี่แบบซึ่งสามารถกำหนดและยืนอยู่คนเดียว:

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

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

อย่างไรก็ตามแตกต่างจาก C #, ประเภทของลายเซ็นยังคงมีความจำเป็นเพราะ D ไม่ได้มีการอนุมานประเภทระดับ Haskell

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


แม่แบบฟังก์ชั่นสำหรับการเล่นกอล์ฟประเภท? T f(T)(T a,T b){return a + b}ควรอนุมานTว่าint inf(5);
fede s

@fedes สวัสดีเพื่อน! ใช่คุณถูกต้องแน่นอน (แต่ฉันคิดว่า / หวังว่า lambdas "untyped" จะสั้นกว่าการแสดงออกของฟังก์ชันที่พิมพ์)
แมว

อ๊ะ! เมื่อฉันตัดสินใจที่จะดูอีกครั้งเกี่ยวกับ D ฉันจะหาใคร : DI อคติประกาศคุณมีรสชาติที่ดีกับภาษา
fede s

@fedes อ๊ะทำไมต้องขอบคุณ! : P ที่บอกเป็นนัยว่าคุณก็ทำเช่นกัน (แต่ฉันไม่ได้ใช้เวลาพอสมควรต่อหน้า Smalltalk ยังไงก็ตาม :))
แมว

0

การเรียกฟังก์ชันบนวัตถุที่ไม่มีอาร์กิวเมนต์อื่น

reverse(x);

สามารถตัดให้สั้นลงได้เสมอ

x.reverse;

เพื่อโกนเป็นไบต์หรือมากกว่านั้น

นี่เป็นเพราะการ.ทำให้ LHS เป็นอาร์กิวเมนต์แรกโดยปริยายและการสร้างเทมเพลตให้เราเลือกฟังก์ชันที่เหมาะสมสำหรับ args


จุดไหนดี? นี่คือความสับสน ...
CalculatorFeline

@CatsAreFluffy เมื่อไม่มี args เมื่อมีข้อโต้แย้งอื่น ๆ อีกx.reverse(y, z)ต่อไปความยาวจะเกิดขึ้นเนื่องจากจุด
cat

1
x.reverse(y,z)และreverse(x,y,z)มีจำนวนไบต์เดียวกัน
Zacharý

@ ZacharyT เอ่อใช่ ...
แมว

คุณเปรียบเทียบx.reverse(y, z)กับx.reverseหรือยัง
Zacharý

0

หากคำถามนั้นต้องการโปรแกรมเต็มรูปแบบการmoduleประกาศนั้นไม่จำเป็นอย่างน่าประหลาดใจ

* ไอ * Java ทุกคน? * ล้างคอ * จริงๆแล้วmoduleระบบของ D นั้นเก่ากว่าของ Java

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.