Como todos sabemos, meta está transbordando com queixas sobre marcando código-golfe entre línguas (sim, cada palavra é um link independente, e estas podem ser apenas a ponta do iceberg).
Com tanto ciúme daqueles que realmente se preocuparam em procurar a documentação do Pyth, achei que seria bom ter um desafio um pouco mais construtivo, condizente com um site especializado em desafios de código.
O desafio é bastante direto. Como entrada , temos o nome do idioma e contagem de bytes . Você pode usá-las como entradas de função stdin
ou como método de entrada padrão de idiomas.
Como resultado , temos uma contagem de bytes corrigida , ou seja, sua pontuação com o handicap aplicado. Respectivamente, a saída deve ser a saída da função stdout
ou o método de saída padrão do seu idioma. A saída será arredondada para números inteiros, porque amamos desempatadores.
Usando o mais feio, cortado junto consulta ( ligação - sinta-se livre para limpá-lo), eu consegui criar um conjunto de dados (ZIP com .xslx, .ods e .csv) que contém um instantâneo de todas as respostas para code-golfe perguntas . Você pode usar este arquivo (e assumir que ele esteja disponível para o seu programa, por exemplo, é na mesma pasta) ou converter esse arquivo para outro formato convencional ( .xls
, .mat
, .sav
etc - mas ele só pode conter os dados originais!). O nome deve permanecer QueryResults.ext
com ext
a extensão de escolha.
Agora, para os detalhes. Para cada idioma, há um parâmetro Boilerplate B
e Verbosity V
. Juntos, eles podem ser usados para criar um modelo linear da linguagem. Vamos n
ser o número real de bytes, e c
ser a pontuação corrigida. Usando um modelo simples n=Vc+B
, obtemos a pontuação corrigida:
n-B
c = ---
V
Simples o suficiente, certo? Agora, para determinar V
e B
. Como você pode esperar, faremos uma regressão linear ou, mais precisamente, uma regressão linear ponderada em mínimos quadrados. Não vou explicar os detalhes sobre isso - se você não tiver certeza de como fazer isso, a Wikipedia é sua amiga ou, se tiver sorte, a documentação do seu idioma.
Os dados serão os seguintes. Cada ponto de dados será a contagem de bytes n
e a contagem média de bytes da pergunta c
. Para contabilizar os votos, os pontos serão ponderados, pelo número de votos mais um (para contabilizar 0 votos), vamos chamar assim v
. Respostas com votos negativos devem ser descartadas. Em termos simples, uma resposta com 1 voto deve contar o mesmo que duas respostas com 0 votos.
Esses dados são então ajustados ao modelo acima mencionado n=Vc+B
usando regressão linear ponderada.
Por exemplo , dados os dados para um determinado idioma
n1=20, c1=8.2, v1=1
n2=25, c2=10.3, v2=2
n3=15, c3=5.7, v3=5
Agora, nós compor as matrizes e vetores relevantes A
, y
e W
, com os nossos parâmetros no vector
[1 c1] [n1] [1 0 0] x=[B]
A=[1 c2] y=[n2] W=[0 2 0], [V]
[1 c3] [n3] [0 0 5]
resolvemos a equação da matriz (com '
denotar a transposição)
A'WAx=A'Wy
para x
(e consequentemente, obtemos nosso B
e V
parâmetro).
Sua pontuação será a saída do seu programa, quando for indicado o seu próprio nome de idioma e o número da conta. Então, sim, desta vez até usuários de Java e C ++ podem ganhar!
AVISO: A consulta gera um conjunto de dados com muitas linhas inválidas devido a pessoas que usam formatação de cabeçalho 'cool' e pessoas que marcam suas perguntas de desafio de código como código-golfe . O download que forneci removeu a maioria dos outliers. NÃO use o CSV fornecido com a consulta.
Feliz codificação!
fonte
C++ <s>6 bytes</s>
. Além disso, nunca fiz T-SQL antes de hoje e já estou impressionado comigo mesmo por conseguir extrair o número de bytes.Respostas:
Mathematica, 244.719 (245 bytes)
Caso de teste
E outras línguas?
Modelo alternativo :
log(c)=log((n-B)/V)
Uma característica notável do código de golfe (e provavelmente outros problemas de codificação) é que a distribuição dos comprimentos dos programas tende a ser distribuição exponencial (em contraste com a distribuição uniforme). Portanto,
log(n)=log(Vc+B)
é muito mais provável que o modelo equilibre as influências entre pontos com grandesc
e pequenosc
.Como podemos ver nos gráficos abaixo, a distribuição de pontos é adequada para o ajuste em escala logarítmica.
Resultados do novo modelo
Encontramos duas linguagens excepcionais - Ruby com
V=0.724
e Retina comV=1.322
, e um critério de ser uma linguagem popular de golfe - com uma grande clichê negativa.fonte
csv
.Python3, 765,19 (765) bytes
Provavelmente algum espaço para jogar golfe aqui. Requer numpy para o material da matriz. Lê do stdin, formatado da seguinte forma: [lang] [bytes / n]. Para quando você envia q.
Resultados
Eu poderia ter feito algo errado em algum momento; Eu obtenho resultados diferentes da resposta do Mathematica:
fonte