Hangi dil en kısa?


25

En az 20 cevabı olan etiketiyle en son 50 mücadeleyi bulabilen bir program oluşturun . Ardından, zorlukların her birinde her dilin puanlarını çıkarın. Aynı dili kullanan birden fazla cevap varsa, tüm puanları sayın. Bundan sonra, en çok kullanılan 20 en iyi dili alın ve dil adlarını, cevap sayısını, ortalama bayt sayısını ve medyan bayt sayısını içeren bir liste çıktılayın. Liste azalan sıraya göre cevap sayısına göre sıralanmalıdır.

Büyük harf kullanımındaki değişkenleri hesaba katmalısınız (örneğin: Matlab = MATLAB).

Birçok farklı sürüm numarasına sahip dillerde (örn. Python), bunları benzersiz diller olarak sayın. Python != Python 2 != Python 2.7 != Python 3.x

Örnek çıktı (çıktı formatı isteğe bağlıdır):

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

Desteklenmesi gereken başlık formatları:

  • Başlangıcı # Language name,veya#Language name
  • Şununla biter xx bytes, xx Bytesya da sadecexx
  • İlk virgül ile son sayı arasında çok fazla çöp olabilir.
  • Dil ismi bir link ise ( [Name](link)), atlanabilir

Cevabın başka bir başlık formatı varsa, atlamayı seçebilirsiniz (veya kodunuz işleyebiliyorsa onu dahil edin).

Örnek olarak, aşağıdaki başlıkların tümü desteklenmelidir:

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

Kurallar:

  • API veya sadece website-url'yi kullanmak sorun değil
    • Aşağıdakiler bayt sayısından (başka hiçbir şey olmadan) çıkarılabilir, bu nedenle bir url kısaltıcı kullanmanıza gerek kalmaz (En fazla 44 bayt):
      • https://(veya http://)
      • codegolf
      • .stackexchange.com
      • /questions
  • Program giriş alabilir. Giriş, bayt sayımına dahil edilir.

Bunun dışında standart kurallar geçerlidir.


11
Bu meydan okumayı yapmak zorunda kalmadan Pyth olduğunu söyleyebilirim.
Alex A.

1
"bayt" soneki ortak mı, evrensel olsa bile, gerektirecek kadar mı?
Sparr

@StewieGriffin Bence Sparr, yaygın olmasına rağmen, her zaman kullanılmadığını söylüyor .
Celeo

Görebildiğim kadarıyla xx bytes, son zorluklarda çok yaygındır (en azından afiş pasajı oluşturulduğundan beri).
Stewie Griffin,

2
Genellikle "bayt" yerine "karakter" veya "karakter" kullanırım
Doorknob

Yanıtlar:


13

R, 821 - 44 = 777 bayt

Güncellenmiş sonuçlar : Lütfen aşağıdaki tüm yorumları anlamak için düzenleme geçmişine bakın.

           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

Biraz daha kısaltabileceğim kod:

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)

De-golfed:

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
6000 bayt üzerindeki C # için ortalama uzunluk nedir?
SuperJedi224

@ SuperJedi224 - Ortalamayı çarpıtan son derece uzun gönderimler olabilir. Bu nedenle medyan faydalı bir istatistiktir çünkü aykırı değerlere karşı dayanıklıdır.

1
Bir yerde C # en az golf dili olduğunu okudum. Şimdi biliyorum neden ...
ev3commander

@ ev3commander - C #, Unary'e kıyasla paletler ...
Comintern

@Comintern: Eek ...
ev3 komutanı

6

Python 2, 934 - 44 (url öğeleri) = 890 bayt

API'yi kullanma:

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]

Bu kod unutmayın API azaltma işlemine dikkat etmediğini unutmayın .

Çıktı:

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 İlginç bir şekilde, ikinci özyinelemeli sorguya /questionsazaltma için hak kazanmak için bir ek eğik çizgi eklemek zorunda kaldı .
pppery

2
Aradaki fark, @ flodel 'in dışındaki ekleribytes alamaz , benimki ise diğer ekleri işleyecektir chars.
pppery

Kodunuzun C, C # ve muhtemelen C ++ 'ı birleştirmesi mümkün mü? 73 C-cevap olması pek mümkün görünmüyor.
Stewie Griffin

Hayır, sanmıyorum. Dil adını ilk virgülle bitirdim.
pppery

1
Görünüşe göre l=re.sub("# ?|,","",l)C # C ile değiştirilir
flodel
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.