Ngôn ngữ nào ngắn nhất?


25

Tạo một chương trình tìm ra 50 thử thách mới nhất với -tag có ít nhất 20 câu trả lời. Sau đó, trích xuất điểm số cho từng ngôn ngữ trong mỗi thử thách. Nếu có nhiều hơn một câu trả lời sử dụng cùng một ngôn ngữ, hãy đếm tất cả các điểm. Sau đó, lấy 20 ngôn ngữ phổ biến nhất và đưa ra một danh sách với tên ngôn ngữ, số lượng câu trả lời, số byte trung bình và số byte trung bình. Danh sách nên được sắp xếp theo số lượng câu trả lời, theo thứ tự giảm dần.

Bạn phải tính đến các biến thể trong cách viết hoa (ví dụ: Matlab = MATLAB).

Trong các ngôn ngữ có nhiều số phiên bản khác nhau (ví dụ: Python), hãy tính chúng là các ngôn ngữ duy nhất, vì vậy: Python != Python 2 != Python 2.7 != Python 3.x

Ví dụ đầu ra (định dạng đầu ra là tùy chọn):

cJam,       66,  12.4,  8.5
Pyth,       58,   15.2,  19
Ruby,       44,   19.2,  22.5
Python,     34,   29.3,  32
Python 2.7, 22,   31.2,  40
...
...
Java,       11,   115.5, 94.5

Các định dạng tiêu đề phải được hỗ trợ:

  • Bắt đầu với # Language name,hoặc#Language name
  • Kết thúc bằng xx bytes, xx Byteshoặc chỉxx
  • Có thể có rất nhiều rác giữa dấu phẩy đầu tiên và số cuối cùng.
  • Nếu tên ngôn ngữ là một liên kết ( [Name](link)), nó có thể được bỏ qua

Nếu câu trả lời có định dạng tiêu đề khác, bạn có thể chọn bỏ qua nó (hoặc bao gồm nó nếu mã của bạn có thể xử lý nó).

Ví dụ: tất cả các tiêu đề dưới đây phải được hỗ trợ:

# Language Name, N bytes
# Ruby, <s>104</s> <s>101</s> 96 bytes 
# Perl, 43 + 2 (-p flag) = 45 Bytes
# MATLAB, 5

Quy tắc:

  • Bạn có thể sử dụng API hoặc chỉ url trang web
    • Những điều sau đây có thể được trích xuất từ ​​số byte (không có gì khác), vì vậy không cần sử dụng trình rút gọn url (Tối đa 44 byte):
      • https://(hoặc http://)
      • codegolf
      • .stackexchange.com
      • /questions
  • Chương trình có thể lấy đầu vào. Đầu vào sẽ được bao gồm trong số byte.

Ngoài ra, các quy tắc tiêu chuẩn được áp dụng.


11
Tôi có thể nói với bạn rằng đó là Pyth mà không cần phải thực hiện thử thách này.
Alex A.

1
là hậu tố "byte" phổ biến, nói gì đến phổ quát, đủ để yêu cầu nó?
Sparr

@StewieGriffin Tôi nghĩ Sparr đang nói rằng, trong khi nó là phổ biến , nó không phải lúc nào cũng được sử dụng.
Celeo

Theo như tôi có thể thấy, xx bytesrất phổ biến trong các thử thách gần đây (ít nhất là từ đoạn trích bảng xếp hạng đã được tạo).
Stewie Griffin

2
Tôi thường sử dụng "ký tự" hoặc "ký tự" thay vì "byte"
Doorknob

Câu trả lời:


13

R, 821 - 44 = 777 byte

Kết quả cập nhật : vui lòng xem lịch sử chỉnh sửa để hiểu ý nghĩa của tất cả các bình luận bên dưới.

           language num_answers avg_count median_count
1              RUBY          49  49.97959         30.0
2              CJAM          48  32.64583         22.0
3              PYTH          48  21.02083         14.0
4          PYTHON 2          46  86.78261         77.0
5             JULIA          43  58.90698         45.0
6           HASKELL          41  74.65854         56.0
7               PHP          40  73.52500         48.0
8              PERL          36  53.30556         34.0
9          PYTHON 3          34  90.91176         90.5
10       POWERSHELL          33  60.24242         44.0
11                C          32 221.84375         79.5
12                R          32  77.40625         62.5
13             JAVA          29 170.68966        158.0
14 JAVASCRIPT (ES6)          29  90.79310         83.0
15       JAVASCRIPT          28  68.39286         61.0
16               C#          25 193.92000        130.0
17      MATHEMATICA          23  56.04348         47.0
18           MATLAB          22  67.45455         55.0
19         TI-BASIC          19  47.05263         37.0
20              APL          18  16.55556         15.0

Mã mà tôi có thể rút ngắn thêm một chút:

W=library;W(XML);W(plyr)
X=xpathSApply;Y=xmlValue;D=data.frame;H=htmlParse;S=sprintf
Z="http://codegolf.stackexchange.com/"
R=function(FUN,...)do.call(rbind,Map(FUN,...))
G=function(url){d=H(url)
a=as.double(sub(".*?(\\d+)a.*","\\1",X(d,"//div[starts-with(@class,'status')]",Y)))
u=paste0(Z,X(d,"//*[contains(@class,'question-hyperlink')]",xmlGetAttr,"href"))
D(u,a)}
u=S("%s/questions/tagged/code-golf?page=%i",Z,1:50)
q=R(G,u)
u=with(q,head(u[a>20],50))
A=function(url){u=S("%s?page=%i",url,1:10)
f=function(u){d=H(u)
h=X(d, "//div[@class='post-text']//h1",Y)
p="^(.*?),.*? (\\d+)( [Bb]ytes)?$"
k=grep(p,h,v=T)
l=toupper(sub(p,"\\1",k))
c=as.double(sub(p,"\\2",k))
D(l,c)}
R(f,u)}
a=R(A,u)
L=names(tail(sort(table(a$l)),20))
x=subset(a,l%in%L)
arrange(ddply(x, "l",summarise,n=length(c),a=mean(c),m=quantile(c,0.5)),-n)

Bỏ chơi gôn:

library(XML)
library(plyr)
LoopBind <- function(FUN, ...) do.call(rbind, Map(FUN, ...))
GetQuestions <- function(url) {
  d = htmlParse(url)
  a=as.double(sub(".*?(\\d+)a.*","\\1",xpathSApply(d, "//div[starts-with(@class, 'status')]", xmlValue)))
  u=paste0("http://codegolf.stackexchange.com/",xpathSApply(d, "//*[contains(@class, 'question-hyperlink')]", xmlGetAttr, "href"))
  data.frame(u, a)
}
u <- sprintf("http://codegolf.stackexchange.com/questions/tagged/code-golf?page=%i", 1:50)
q <- do.call(rbind, Map(GetQuestions, u))
u <- with(q, head(u[a > 20], 50))

GetAnswers <- function(url) {
  u=sprintf("%s?page=%i",url,1:10)
  f=function(u) {
    d = htmlParse(u)
    h = xpathSApply(d, "//div[@class='post-text']//h1", xmlValue)
    p = "^(.*?),.*? (\\d+)( [Bb]ytes)?$"
    k = grep(p,h,v=T)
    l = toupper(sub(p,"\\1",k))
    c = as.double(sub(p,"\\2",k))
    data.frame(language=l,c)
  }
LoopBind(f,u)
}
a=LoopBind(GetAnswers, u)
L=names(tail(sort(table(a$l)),20))
x=subset(a,language%in%L)
arrange(ddply(x, "language", summarise, num_answers = length(c), avg_count = mean(c), median_count = quantile(c,0.5)),
        -num_answers)

6
Làm thế nào là độ dài trung bình cho C # trên 6000 byte?
SuperJedi224

@ SuperJedi224 - Có thể có một số bài nộp cực kỳ dài làm sai lệch mức trung bình. Đó là lý do tại sao trung vị là một thống kê hữu ích vì nó chống lại các ngoại lệ.

1
Tôi đọc được ở đâu đó rằng C # là ngôn ngữ ít chơi nhất. Bây giờ tôi biết tại sao ...
ev3commander

@ ev3commander - C # nhạt so với Unary ...
Comitern

@Comi INTERN: Eek ...
ev3commander

6

Python 2, 934 - 44 (công cụ url) = 890 byte

Sử dụng API:

from urllib2 import urlopen as u
from gzip import GzipFile as f
from StringIO import StringIO as s;x="https://api.stackexchange.com/2.2%s&site=codegolf"
import re;j=u(x%'/search/advanced?pagesize=50&order=desc&sort=creation&answers=20&tagged=code-golf');q=s(j.read());g=f(fileobj=q);true=1;false=0;l=';'.join(str(a['question_id'])for a in eval(g.read())['items']);w=[]
def r(p):
 j=u(x%('/questions/%s/answers?page=%s&filter=!9YdnSMlgz&pagesize=100'%(l,p)));g.seek(0);q.truncate();q.write(j.read());q.seek(0);k=eval(g.read());w.extend(a['body_markdown']for a in k['items'])
 if k['has_more']:r(p+1)
r(1);x={};s=sorted
for m in w:
 try:
  l,n=re.match("(.*?),.*?([0-9]+)[^0-9]*$",m.splitlines()[0]).groups();l=re.subn("# ?","",l,1)[0].upper()
  if l not in x:x[l]=[]
  x[l]+=[(l,int(n))]
 except:pass
for l in s(x,cmp,lambda a:len(x[a]),1)[:20]:
 v=s(x[l])
 print l,len(v),sum(map(lambda a:a[1],v))/len(v),v[len(v)/2][1]

Lưu ý rằng mã này không chú ý đến điều chỉnh API.

Đầu ra:

RUBY 60 430 32
PYTH 57 426 16
CJAM 56 35 23
C 52 170 76
PYTHON 2 51 88 79
JULIA 42 63 48
HASKELL 42 81 63
JAVASCRIPT (ES6) 41 96 83
PERL 40 44 27
PYTHON 3 37 91 89
PHP 36 98 59
JAVASCRIPT 36 743 65
POWERSHELL 35 86 44
JAVA 32 188 171
R 30 73 48
MATLAB 25 73 51
MATHEMATICA 24 57 47
APL 22 14 13
SCALA 21 204 59
TI-BASIC 21 42 24

1
@StewieGriffin Thật thú vị, tôi đã phải thêm một dấu gạch chéo vào truy vấn đệ quy thứ hai để đủ điều kiện /questionsgiảm.
pppery

2
Sự khác biệt là do @flodel không cho phép các hậu tố khác hơnbytes , trong khi của tôi sẽ xử lý các hậu tố khác như thế nào chars.
pppery

Có thể là mã của bạn kết hợp C, C # và có thể là C ++? Dường như không có 73 câu trả lời C.
Stewie Griffin

Không, tôi không nghĩ vậy. Tôi kết thúc tên ngôn ngữ trên dấu phẩy đầu tiên.
pppery

1
Có vẻ như l=re.sub("# ?|,","",l)những gì thay thế C # bằng C.
flodel
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.