Mẹo chơi gôn ở D2


10

Bạn có lời khuyên chung nào cho việc chơi golf trong D ? Tôi đang tìm kiếm những ý tưởng có thể được áp dụng cho các vấn đề về golf nói chung ít nhất là cụ thể đối với D (ví dụ: "xóa bình luận" không phải là một câu trả lời). Xin vui lòng gửi một lời khuyên cho mỗi câu trả lời.

Câu trả lời:


1

Hãy nhìn xem, không có parens!

Hàm D và hàm mẫu có thể được gọi là giá trị, phương thức (sẽ không trợ giúp) và thuộc tính.

Tôi không thể tin rằng chưa có ai nói điều này. Tôi sẽ liệt kê những cái lưu byte:

  • fun()fun!()()rút ngắn lại fun(giả sử không có biến fun).
  • fun(par)rút ngắn lại par.fun(giả sử parkhông có thuộc tính / phương thức fun, cũng như parkhông phải là một biểu thức như 5+2).
  • fun!(T)() rút ngắn để fun!T
  • fun!(T)(par)rút ngắn lại par.fun!T(giả sử parkhông có thuộc tính / phương thức fun)

Và với các đối tượng:

  • new cls()rút ngắn thành new cls(Nhiều JavaScript hơn ai?)
  • obj.fun()obj.fun!()()rút ngắn xuốngobj.fun
  • obj.fun!(T)() rút ngắn để obj.fun!T

Một điều cuối cùng, sử dụng các phiên bản cũ . Nó cho phép bạn sử dụng các tính năng không dùng nữa để rút ngắn mã của bạn. Điều đó nói rằng, lời khuyên tốt nhất: D không tốt cho môn đánh gôn. Đó là một ngôn ngữ tuyệt vời, không chỉ dành cho môn đánh gôn.


Chấp nhận ngay bây giờ :)
mèo

Vâng, thật tốt khi biết vẫn còn người hâm mộ của D ở đây.
Zacharý

1

D là JavaScript.


Rõ ràng là không. Tuy nhiên, khi đối phó với float, doublereal, nanlà một giá trị mà phải được xử lý, và, theo quy định của IEEE 754, NaN không so sánh bằng với chính nó.

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

Ý nghĩa,

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

là cách ngắn hơn

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

Rõ ràng, luôn luôn sử dụng math.isNaNcho mã thực sự . ;)


0

D có loại suy luận và một autotừ khóa. Nếu đối tượng không int, thì autocó lẽ ngắn hơn.


autohoạt động khi xây dựng một mảng kết hợp với KeyType[ValueType]cú pháp?
Alex A.

@AlexA. auto asd = ["a":1, "b": 2];hoạt động, nhưng vì KeyType[ValueType]sẽ đi vào vị trí của autotừ khóa, tôi không biết liệu nó có luôn hoạt động với các loại mà chữ không thể được xây dựng hay không
cat

@AlexA. auto arr = ["a": true, "b": 6];hoạt động, các khóa và giá trị phải là loại tương thích
mèo

0

D là tuyệt vời ở phương pháp xích, nhưng:

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

giống như

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

và thường thì cái không bị xiềng xích ngắn hơn, điều mà tôi vừa nhận ra, điều này cho phép tôi rút ngắn câu trả lời của mình cho Manage Trash So : D


Đó là những dấu chấm đó
CalculatorFeline

0

Giống như C / C ++, maincó thể inthoặc void, nhưng void main(){}sẽ luôn ngắn hơn int main(){return my_func_returning_int;}.


Nếu câu hỏi yêu cầu xuất ra một số nguyên sẽ không int main(){return output}ngắn hơn?
andlrc

@ dev-null nếu câu hỏi yêu cầu một chương trình đầy đủ viết một số nguyên cho thiết bị xuất chuẩn thì đó import std.stdio;void main(){write(7);}là những gì cần thiết. Tôi nghi ngờ một câu hỏi sẽ bắt buộc chương trình trả về một số vì nhiều ngôn ngữ không thể đặt mã trả về
mèo

@ dev-null tuy nhiên, vâng, trong trường hợp đó, nó không nên được viết thành thiết bị xuất chuẩn mà được trả lại, nó sẽ ngắn hơn
con mèo

2
Thông thường bạn được phép trả lại / đầu ra một cách thuận tiện nhất cho ngôn ngữ của bạn. Nhưng tôi đoán D chỉ hỗ trợ mã thoát từ 0-255?
andlrc

@ dev-null thực sự, POSIX chỉ hỗ trợ mã thoát tối đa 255. Tôi không biết về Windows, nhưng trên Unix / Linux, mã thoát trên 255 kết thúc xung quanh, vì tràn.
con mèo

0

D, với tư cách là một ngôn ngữ lập trình hệ thống đa chức năng (Object Functional), dường như nắm lấy TIMTOWTDI hoặc có nhiều cách để làm điều đó.

Trường hợp tại điểm, viết argv của chương trình:

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

Lưu ý vòng lặp for kiểu C yêu cầu {}là khối trống và sẽ không chấp nhận dấu chấm phẩy hoặc không có gì dưới dạng câu lệnh trống, trong trường hợp này . Thông thường, hoặc ;là không-ops.


Bạn có thể sử dụng char*thay thế stringđể lưu một byte không?
Alex A.

@AlexA. function D main parameters must be main() or main(string[] args)hơn nữa, theo charnghĩa đen là một ký tự, char*là một con trỏ đến nghĩa đen của một ký tự và char[]là một mảng các ký tự chữ (các chuỗi khác nhau). D! = C | | C ++
con mèo

1
OIC. Không bao giờ sử dụng D, chỉ cần đoán.
Alex A.

0

D có một vài loại biểu thức lambda kiểu C #, có thể được chỉ định và độc lập:

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

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

Tuy nhiên, không giống như C #, các loại chữ ký vẫn cần thiết vì D không có loại suy luận cấp độ Haskell.

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


Các mẫu chức năng để chơi golf các loại? T f(T)(T a,T b){return a + b}nên suy ra Tint inf(5);
fede s.

@fedes. Chào bạn! Vâng, bạn hoàn toàn chính xác (nhưng tôi nghĩ / hy vọng lambdas "chưa được gõ" sẽ ngắn hơn các biểu thức hàm được gõ).
con mèo

À Khi tôi quyết định xem xét lại về D, tôi sẽ tìm ai? : DI khách quan tuyên bố bạn có khẩu vị tốt về ngôn ngữ
fede s.

@fedes. Aw, tại sao cảm ơn bạn! : P ngụ ý bạn cũng vậy (nhưng tôi chưa dành đủ thời gian trước Smalltalk, dù sao đi nữa :))
con mèo

0

Gọi một hàm trên một đối tượng không có đối số khác

reverse(x);

gần như luôn luôn có thể được rút ngắn để

x.reverse;

để cạo một byte trở lên.

Điều này là do .LHS làm cho một đối số đầu tiên ngầm định và việc tạo khuôn mẫu cho phép chúng ta chọn chức năng phù hợp cho các đối số.


Chấm có tốt không? Điều này thật khó hiểu ...
CalculatorFeline

@CatsAreFluffy khi không có đối số. Khi có một cuộc tranh luận khác, x.reverse(y, z)thì dài hơn vì dấu chấm
con mèo

1
x.reverse(y,z)reverse(x,y,z)có cùng số byte.
Zacharý

@ZacharyT Uh, yeah ...
mèo

Bạn đã so sánh x.reverse(y, z)với x.reverse?
Zacharý

0

Nếu câu hỏi yêu cầu một chương trình đầy đủ, việc modulekhai báo là không cần thiết một cách đáng ngạc nhiên.

* ho * Java, có ai không? * hắng giọng * Thật ra , modulehệ thống của D cũ hơn Java.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.