Anti-golfscript Anti-golf: tạo một nhiệm vụ trong đó GolfScript hoặc J vượt trội so với lang (thông thường) của bạn [đóng]


29

Bạn cần thực hiện ba điều:

  1. Bản Tuyên Bố về một nhiệm vụ, T .
  2. Giải pháp của nhiệm vụ bằng ngôn ngữ không thường được sử dụng cho chơi golf, Một .
  3. Giải pháp của nhiệm vụ trong ngôn ngữ thường được sử dụng cho chơi golf, B . Đừng cố làm phồng lên B để tăng điểm, thay vào đó hãy nghĩ như thể B được viết bởi đối thủ cạnh tranh của bạn.

Sử dụng thông thường trong việc xác định typically used for golfing, cố gắng tối đa hóa niềm vui cho người dùng khác.

Những người dùng khác có thể đề xuất Bs tốt hơn (có thể bao gồm cả các ngôn ngữ "golfy" khác).

Ghi điểm là (length_in_bytes(B)+5)/(length_in_bytes(A)+5)nhiều hơn là tốt hơn. (Có lẽ nên thay đổi công thức tính điểm? ..)

Ý tưởng chính là phát minh ra một nhiệm vụ trong đó các ngôn ngữ thường hoạt động tốt trong codegolf gặp một vấn đề. Nó có thể là sức mạnh đột ngột của một ngôn ngữ thông thường trong nhiệm vụ nhất định hoặc điểm yếu đột ngột của một số golflang.

Tránh các nhiệm vụ đề cập đến ngôn ngữ lập trình cụ thể, như Input a string and execute it as a Scheme code.


1
Tôi cho rằng bạn biến đây thành một cuộc thi nổi tiếng thay vì chơi gôn. Nếu không, mọi người sẽ phàn nàn rằng đó không phải là "chiến thắng mã ngắn nhất".
Victor Stafusa

OK, đổi thành cuộc thi phổ biến. Bạn cũng có thể đề xuất tiêu đề tốt hơn hoặc ghi điểm tốt hơn.
Vi.

Tôi giả sử câu hỏi trước của tôi đủ điều kiện? codegolf.stackexchange.com/questions/18633/NH Giải pháp perl là 48 ký tự trong khi giải pháp J là 54 ký tự
user12205

1
Chúng ta có thể chỉ định lang B (miễn là chơi golf tốt) không? Hoặc bất cứ ai cũng có thể nói "đây là một chương trình bằng ngôn ngữ <chèn tên ngôn ngữ> và ​​nó có một giải pháp rất ngắn về độ dài <n>:"?
Justin

1
BTW một số ngôn ngữ như Perl có thể ở cả bên A và bên B, tùy thuộc vào ngữ cảnh.
Vi.

Câu trả lời:


14

Câu hỏi trước đây của tôi, In một sóng hình sin (theo chiều dọc), đủ điều kiện tại thời điểm này. Tôi đang đăng nó ở đây như một giải pháp, cũng hy vọng rằng các bạn có thể đưa ra một số giải pháp ngắn hơn cho câu hỏi ban đầu của tôi.

Theo yêu cầu của Vi., Tôi sẽ đăng một bản tóm tắt của câu hỏi.

In một sóng hình sin liên tục cuộn theo chiều dọc trên một thiết bị đầu cuối. Chương trình không nên chấm dứt và nên liên tục cuộn xuống sóng (trừ khi SIGINT). Bạn có thể cho rằng tràn không phải là vấn đề (nghĩa là bạn có thể sử dụng các vòng lặp vô hạn với các bộ đếm tăng dần hoặc đệ quy vô hạn).

Sóng phải thỏa mãn các tính chất sau:

  • Biên độ = 20 ký tự (biên độ cực đại)
  • Thời gian = 60 đến 65 dòng (đã bao gồm)
  • Đầu ra chỉ nên bao gồm khoảng trắng, dòng mới và |
  • Sau mỗi dòng đầu ra, tạm dừng trong 50ms

Có một đầu ra mẫu cho câu hỏi ban đầu của tôi, nhưng tôi không đăng nó ở đây, vì điều này sẽ khiến câu trả lời của tôi dài một cách lố bịch. Câu hỏi ban đầu của tôi có thể được nhìn thấy ở đây: In một sóng hình sin (theo chiều dọc)

AHiện tại ngắn nhất : một giải pháp Perl với 48 ký tự: https://codegolf.stackexchange.com/a/18655/12205

print$"x(25+20*sin).'|
';$_+=.1;`sleep .05`;do$0

BHiện tại ngắn nhất : một giải pháp J với 54 ký tự: https://codegolf.stackexchange.com/a/18649/12205

($:+&0.1[6!:3@]&0.05[2:1!:2~' |'#~1,~[:<.20*1+1&o.)0  




Hiện tại, điểm của câu trả lời này là 1.113 (điểm cực kỳ thấp)


Điểm hiện tại theo công thức hiện tại là khoảng 1.113
Vi.

@Vi. Tôi nên xóa câu trả lời này hay tôi nên đợi một thời gian và xem điều gì sẽ xảy ra? Nếu sau này, tôi nên đợi bao lâu?
dùng12205

Câu lệnh nêu các byte, không phải ký tự. Được chuyển đổi thành UTL-8, giải pháp APL tạo ra 61 byte (70 cho UTF-16).
Vi.

2
Bạn đang cho rằng Perl không phải là ngôn ngữ thường được sử dụng để chơi gôn, nhưng đó là ngôn ngữ được kết hợp đầu tiên với từ golf ! Ruby, ở tuổi 56, trông giống như ngôn ngữ thực A trong các câu trả lời hiện tại cho câu hỏi của bạn.
Peter Taylor

8

Thêm hai số

Nhận hai số từ STDIN và cộng chúng lại với nhau. Bạn phải hỗ trợ các số dấu phẩy động, vì vậy 0,5 + 1,5 phải bằng 2.

Perl 5 (với -E)

say<>+<>

GolfScript

n%'+'*'"#{
}"'n/\*~

Điểm tính toán như (24+5)/(8+2+5) = 1.9(3). -Ecũng được tính là byte chương trình.
Vi.

Nhận xét tương tự như tôi đã nói với ace: bạn cho rằng Perl không phải là ngôn ngữ thường được sử dụng để chơi gôn, nhưng đó là ngôn ngữ đầu tiên được liên kết với từ golf !
Peter Taylor

Và chương trình GolfScript của bạn không hoạt động. Một chương trình làm việc sẽ là n%'+'*'"#{ }"'n/\*~nơi mà nhân vật giữa {}là một dòng mới theo nghĩa đen (không được hỗ trợ trong các bình luận).
Peter Taylor

@PeterTaylor, So với GolfScript, Perl là ngôn ngữ "thông thường"; so với Java, đó là ngôn ngữ "golf".
Vi.

1
J cho điều này không quá tệ, thực sự : +/".1!:1,~1. APL có thể sẽ còn nhỏ hơn nữa.
thuật toán


7

Điểm 48/37 hoặc 1. (297)

T: viết một đoạn mã kết thúc chương trình sau đúng một giờ (càng gần càng tốt, như trong vòng một giây) khi chạy. Đừng lo lắng về các ngoại lệ, chúng có thể được xử lý.

A: Java (32)

Thread.sleep(3600000);int a=1/0;

B: dành cho Befunge 98, yêu cầu dấu vân tay TIME (43)

"EMIT"4(HMS00p01p02p#;gS-!01gM-!H-!++3-!j;@

Việc này sẽ mất Giờ, Phút và Thứ hai tại thời điểm chạy và đặt các ô ở các ô 02, 01 và 00. Sau đó, nó bỏ qua ;phần thứ hai. Phần thứ hai hoạt động như sau:

g          get the value at 00
"EMIT"4(S) get the current time in seconds
-!         subtracts the values and changes a 0 to 1, anything else to 0

tương tự cho phút và giờ.

++  sums up the values
3-! i the sum is 3, we get a 1, otherwise, we get a 0.
j   jump over the next that many cells
;   skip code execution until the next ;
@   end program

Lưu ý rằng Befunge sẽ tự động quay trở lại đầu dòng khi kết thúc một dòng.


Như chúng ta có thể thấy, Befunge không tốt khi phải chờ đợi thời gian cụ thể. Tuy nhiên, Java không tệ.


9
APL:⎕DL 3600
bến tàu

14
Java thường đọc là class Main{public static void main...
Vi.

3
@Vi. xem "đoạn mã". Về cơ bản, nó yêu cầu mã thực sự làm việc, không nhiều hơn thế.
Justin

2
Tôi không biết Befunge, nhưng đoạn mã Java không "kết thúc chương trình" theo yêu cầu của thông số kỹ thuật. Điều đó sẽ đòi hỏi một System.exit(0);hoặc bọc giấc ngủ của bạn trong một mainphương pháp.
Peter Taylor

3
@DoorknobofSnow Không thể biên dịch:error: not a statement
Bob

5

Xuất một tệp văn bản nhất định (498.388888 điểm)

Đầu ra mục tiêu là đây .

Tập lệnh Python 3.4.3 để in nó là 49 byte:

for b in dir(__builtins__):print(eval(b).__doc__)

Chương trình CJam ngây thơ bằng với đầu ra mục tiêu, bằng cách gói chuỗi đầu ra vào "..."và thoát từng chuỗi "xảy ra trong nó, sẽ là 26908 byte.


Rất thông minh, mặc dù nó có thể chạy theo giới hạn "ngôn ngữ cụ thể" (mơ hồ, thừa nhận).
BMac

Quy tắc gần nhất là "tránh đề cập đến ngôn ngữ cụ thể". Python không được đề cập, nhưng có nghĩa rõ ràng.
Vi.

Vâng, câu trả lời này hơi khó hiểu, tôi chỉ muốn chỉ ra rằng quy tắc này là một loại dốc trơn trượt. Hãy tưởng tượng nếu tôi đã "xáo trộn" đầu ra nhiều hơn - giả sử, kiểm tra tổng kiểm tra SHA1 của từng chuỗi - sẽ rất kỳ lạ khi tuyên bố "bó chữ số bị cắt xén này quá đặc trưng ngôn ngữ" :)
Lynn

Nếu tôi muốn làm một câu trả lời "công bằng" hơn, có lẽ tôi sẽ sử dụng Mathicala. Bạn có thể thực hiện rất nhiều thứ cực kỳ cụ thể trong miền mà sẽ mất hàng nghìn byte của CJam / Pyth / bất cứ thứ gì khác. Nhưng buồn thay, tôi không biết ngôn ngữ.
Lynn

Liên kết đến đầu ra là chết.
pppery

4

Nói "Xin chào thế giới!" (50/26 1,92)

Hiển thị một hộp thông báo để nói "Xin chào thế giới!"

JavaScript

alert('Hello world!')

Trong trình duyệt có hỗ trợ DOM Cấp 0+.

Perl

use Win32;Win32::MsgBox('Hello world!','',48)

Chạy trên ActivePerl với Win32 :: GUI.


alertvốn không phải là một phần của JS và chương trình GolfScript chỉ là một nhận xét.
Peter Taylor

Tôi đã thay đổi câu trả lời để sử dụng Perl đơn giản.
Bàn chải đánh răng

3

Đầu ra "Xin chào thế giới!" cho đến khi người dùng nhấn "q", 1,842 105/44 = 2,386

  1. In "Xin chào thế giới!" (bao gồm cả dòng mới).
  2. Người dùng nhấn một phím, không được lặp lại với màn hình.
  3. Lặp lại cho đến khi phím được nhấn là "q".

QBasic ( 52 39 ký tự)

1?"Hello world!":IF"q"<>INPUT$(1)THEN 1

Kể từ khi đăng câu trả lời ban đầu của tôi, tôi phát hiện ra rằng tôi có thể tắt tự động định dạng trong QB64. : ^ D Với số dòng và ?phím tắt cho PRINT, nó trông giống như một biểu thức ternary trong các ngôn ngữ giống như C.

Phiên bản đầu tiên:

PRINT "Hello world!"
IF INPUT$(1) <> "q" THEN RUN

Perl 5 (100 ký tự)

while("q"ne$e){print"Hello world!\n";system"stty cbreak -echo";$e=getc;system"stty -cbreak echo";}

Ở trên sẽ chỉ hoạt động trên (nhất định?) Các hệ thống UNIX (được thử nghiệm trên Ubuntu 12.04). Có thể người ta có thể đi đa nền tảng và giảm xuống 91 ký tự bằng cách sử dụng mô đun Term :: ReadKey , nhưng tôi chưa kiểm tra nó:

use Term::ReadKey;while("q"ne$e){print"Hello world!\n";ReadMode 3;$e=ReadKey 0;ReadMode 0;}

1

Xin chào, thế giới (3 1/3 điểm)

Viết chương trình mà đầu ra Hello World..

HQ9 + (1 ký tự)

Đây không phải là ngôn ngữ "thường được sử dụng để chơi gôn", vì vậy tôi tin rằng nó phù hợp ở đây. Nhân tiện, làm việc trong thông dịch viên này .

H

GolfScript (15 ký tự)

Tôi nghi ngờ nó có thể rút ngắn hơn nữa, ngay cả khi đó là GolfScript.

"Hello World."

8
Tôi không nghĩ HQ9+phù hợp như một ngôn ngữ. Nó được thiết kế cho các thủ thuật / câu đố / vui vẻ. Brainfuck / unlambda / ngôn ngữ esoterical khác cũng dường như không phù hợp như một .
Vi.

@Vi.: Nhưng nó thường không được sử dụng để chơi gôn.
Konrad Borowski

4
Bạn có thể hovewer thử sử dụng HQ9+như ngôn ngữ B và đánh bại nó bằng Java hoặc như vậy ...
Vi.

7
Có vẻ như có một hệ thống phân cấp: So với Java, Perl là một golflang. So với Perl, GolfScript là một golflang. So với GolfScript, HQ9 + là một golflang ...
Vi.

@Vi.: Tôi cẩn thận kiểm tra mô tả nhiệm vụ của bạn. HQ9 + không bao giờ được sử dụng để chơi gôn, ngoại trừ hai nhiệm vụ cụ thể - "99 chai" và "Xin chào, thế giới". Trừ khi bạn có thể hiển thị một số nhiệm vụ khác trong đó HQ9 + chiến thắng với bất kỳ ngôn ngữ lập trình nào khác, tôi vẫn nghĩ rằng nó phù hợp với định nghĩa, ngay cả khi nó lạm dụng nó (hey, đó là cuộc thi phổ biến ). HQ9 + đơn giản là không được sử dụng cho những thứ chơi golf không liên quan đến hai nhiệm vụ đó. Vì vậy, nó thường không được sử dụng để chơi gôn. Thứ hai rõ ràng là được thiết kế cho CodeGolf - đó là GolfScript.
Konrad Borowski

0

Kết quả "Xin chào thế giới!", 33/97 = 2,94

Viết chương trình xuất ra Hello world!

Arduino hoặc GML

Serial.print("Hello world!")

hoặc là

show_message("Hello world!")

Cả hai đều có 28 ký tự.

GTB

Tôi sử dụng GTB để chơi gôn rất nhiều (đặc biệt là khi tôi tự tạo ra nó và nó đã hoàn thành Turing). Thật không may, chỉ có hỗ trợ hạn chế cho các ký tự chữ thường (vì máy tính TI-84 không thể xử lý được). Đây có lẽ là chương trình GTB ngắn nhất có thể tạo ra Hello world!

S;"lower",1,1)→_~"H"+S;"expr(",1,1)+_+_+S;"cos(",2,1)+" W"+S;" or ",2,2)+_+S;" and ",4,1)+"!

92 ký tự.


Phiên bản GTB cũng xuất nó ra cổng nối tiếp?
Vi.

Là phiên bản GTB cố tình làm đầy lên với nhiều coss khác nhau và exprsnó thực sự không thể xuất ra một cái gì đó theo cách thông thường? Hoặc "nhân vật thực sự không phải là một chuỗi theo nghĩa đen và làm tôi bối rối ...
Vi.

@Vi. Nó hoàn toàn không phình to ... nó phải tách e khỏi expr, hai l từ thấp hơn, o từ cos, hoặc từ hoặc, l từ thấp hơn, và d từ và.
TimTech

'Những người dùng khác có thể đề xuất Bs tốt hơn (có thể bao gồm cả các ngôn ngữ "golfy" khác). '--- hãy để tôi thử chơi golf:"Hello world!"
John Dvorak

@JanDvorak Có lẽ bạn đúng.
Timtech
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.