Dòng mã xấu nhất nào vẫn phân tích cú pháp?


19

Mục tiêu là tạo ra một dòng mã R duy nhất:

  1. Làm càng ít càng tốt
  2. Càng nhiều ký tự càng tốt (tối đa 100 ký tự)
  3. Và càng xấu càng tốt (trong đó "xấu xí" có thể được hiểu là các chiến lược tính toán không hiệu quả, các ký tự không liên quan như dấu chấm phẩy chấm dứt, v.v.).

Làm điều xấu nhất của bạn, nhẹ nhàng!

Tiêu chí khách quan để chiến thắng

Câu trả lời chiến thắng sẽ được đánh giá theo thang điểm sau (câu trả lời có nhiều điểm nhất sẽ thắng):

  • Tạo một chuỗi từ 0 đến 10 ( 100 điểm)
  • Càng nhiều ký tự (N) càng tốt
    • 0 điểm nếu N = 100
    • N-100 điểm nếu N <100 (tức là mất một điểm cho mỗi ký tự dưới 100)
    • 2 (100-N) điểm nếu N> 100 (tức là mất hai điểm cho mỗi ký tự trên 100)
  • Sử dụng càng nhiều ví dụ tiêu cực từ R Inferno càng tốt
    • 6 điểm cho mỗi ví dụ được trích dẫn
    • Mỗi ví dụ chỉ được tính một lần. Điều này là như vậy bởi vì một "dị giáo bị giam cầm trong [một] ngôi mộ rực lửa" chỉ có thể bị giam cầm một lần như vậy. Do đó, hai bài tập toàn cầu trong dòng mã của bạn chỉ giúp bạn kiếm được 6 điểm.

Không phải là một tiêu chí chiến thắng khách quan. Xem Câu hỏi thường gặp.
dmckee

4
Câu hỏi thường gặp về bạn @dmckee :) các tiêu chí khá khách quan
Tomas

Tôi đã cố gắng để làm cho các tiêu chí thậm chí rõ ràng hơn. Nếu tiêu chí 3 vẫn không đủ khách quan, tôi có thể loại bỏ nó, mặc dù tôi thích nó hơn.
Ari B. Friedman

Tôi hoàn toàn không hiểu hệ thống tính điểm mới. Mục tiêu 2 là càng dài càng tốt (có thể có tối đa 100 ký tự) và bạn cho ít điểm hơn khi gần 100 (và chỉ định điểm cho các chương trình dài hơn 100 ??!); Mục tiêu 3 là càng xấu càng tốt, và bạn cho nhiều điểm hơn cho các chương trình xấu hơn. Vì vậy, điểm được cho là tốt hay xấu?!
Peter Taylor

@PeterTaylor Đã chỉnh sửa để chỉ ra rằng cả hai công thức Mục tiêu số 2 đều tạo ra các điểm tiêu cực. Điểm rất tốt: "Câu trả lời có nhiều điểm nhất sẽ thắng".
Ari B. Friedman

Câu trả lời:


25

72 96 ký tự.

`c`<-function(...){list(...)[[-1]];}->>`c`;`[`=0;`]`=10;c(c,c)(c,c)(c,invisible)(`[`[]:`]`[])[];

Sự xấu xa:

  • Sử dụng lại tên hàm tiêu chuẩn
  • Sử dụng các ký hiệu làm tên biến
  • Chuyển nhượng toàn cầu
  • Phân công đúng
  • Tự xác định lại chức năng
  • Dấu chấm phẩy không cần thiết (s)
  • Số tập lệnh con không cần thiết
  • Trích dẫn không cần thiết của tên biến
  • Để không gian làm việc ở trạng thái gần như chắc chắn sẽ phá vỡ mọi lần chạy mã tiếp theo

Tạo chuỗi 0-10 (nhờ Andrie cho ý tưởng để làm điều đó).

đầu ra:

 [1]  0  1  2  3  4  5  6  7  8  9 10

4
Đó là thực sự mất trí. Đây là lần đầu tiên tôi sử dụng từ đó như một lời khen. Mặt khác, nó là một tác phẩm tuyệt vời để ai đó giải mã và học hỏi từ một bài phê bình cẩn thận. Làm tốt lắm.
Lặp lại

Xuất sắc. Nằm trên đỉnh đầu của tôi, những con số xấu xí 3,4,5,8,9 nằm trong Địa ngục. Vậy đó là 96 + 6 * 5 = 126 điểm theo tiêu chí chấm điểm.
Ari B. Friedman

Giải pháp rực rỡ. Đã thêm một xấu xí + 100 char. Thay thế tất cả "bằng dấu ngoặc đơn. Có vấn đề nhúng."<-"("c",function(...){list(...)[[-1]];}->>"c");"["=0;"]"=10;c(c,c)(c,c)(c,invisible)("["[]:"]"[])[]
Vlo

7

Tạo một chuỗi từ 0 đến 10.

100 ký tự

{.=0;for(`~1` in c(1,2,3,4,5,6,7,8,9,10)){.=c(., `~1`,recursive=F)};print(unname(.[drop=T]));rm(.)}
 [1]  0  1  2  3  4  5  6  7  8  9 10

5

100 ký tự: Tạo một chuỗi từ 1 đến 10.

Lưu ý rằng các số 2-10 KHÔNG có trong mã ... - Điểm thưởng? :-)

Cũng lưu ý rằng nó sử dụng lapplycho hiệu suất tối đa :)

unlist(lapply(LETTERS[-(11:26)],function(x) as.integer(charToRaw(x))-as.integer(charToRaw('A'))+1L))
#[1]  1  2  3  4  5  6  7  8  9 10 

2

100 ký tự

assign("a",1:10);b<<-paste(c(a),collapse=";");unlist(lapply(strsplit(b,";")[[1]],function(c)c[[1]]))

Không chắc chắn nếu lapplytrên strsplitlà một ví dụ tiêu cực nhưng nó chắc chắn nên được.

Trả về dưới dạng ký tự:

 [1] "1"  "2"  "3"  "4"  "5"  "6"  "7"  "8"  "9"  "10"

1
I(cumsum(Reduce("sum", replicate(paste0(as.integer(T),as.integer(T)), T), accumulate=1-F) - T >0))

nên có ít hơn 100 ký tự và bằng cách nào đó tạo ra 0:10


1
Tôi đếm 98 qua nchar, đếm không gian. Mặc dù trên hệ thống của tôi replicatekhông thể lấy một vectơ ký tự làm đối số độ dài.
Ari B. Friedman
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.