Todo mundo sabe que o conteúdo faz a pergunta. Mas um bom título também ajuda, e é a primeira coisa que vemos. É hora de transformar a primeira impressão em um programa e descobrir que tipos de títulos recebem mais votos.
Você é desafiado a escrever um programa ou função que tome o título de uma pergunta do PPCG como entrada e retorne uma previsão de sua pontuação.
Por exemplo, você pode receber Counting Grains of Rice
como entrada e tentaria retornar algo próximo à pontuação, 59
nesse caso. As suposições não inteiras são boas, mas as suposições iguais ou inferiores -20
não são.
Aqui estão os dados, para teste e pontuação:
http://data.stackexchange.com/codegolf/query/244871/names-and-upvotes
Pontuação: seu programa será executado em todas as perguntas no histórico deste site (PPCG), sem contar as perguntas fechadas. A função ln(score + 20)
será aplicada a cada pontuação e a cada palpite. O erro quadrático médio entre os dois conjuntos de valores resultantes é a sua pontuação. Menor é melhor.
Por exemplo, um programa que adivinhou 0 todas as vezes teria 0,577, enquanto um programa que adivinharia 11 todas teria 0,326.
Calcule sua pontuação e inclua-a no título da sua resposta. Inclua também a previsão do seu programa para quantas votações positivas esta pergunta receberá.
Restrições:
Para evitar códigos excessivos, no máximo 1000 caracteres.
Deve ser executado em todo o conjunto de dados acima em menos de um minuto em uma máquina razoável.
As brechas padrão estão fechadas.
Aqui está um testador escrito em Python, para seu uso e / ou para esclarecer ambiguidades:
import sys
import math
import csv
scores_dict = {}
with open(sys.argv[1], 'r') as csv_file:
score_reader = csv.reader(csv_file)
for score, title in score_reader:
if score == 'Score':
continue
scores_dict[title] = int(score)
def rate_guesses(guesser):
def transform(score):
return math.log(score + 20) if score > -20 else 0
off_by_total = 0
lines_count = 0
for title in scores_dict:
guessed_score = guesser(title)
real_score = scores_dict[title]
off_by_total += (transform(real_score) - transform(guessed_score)) ** 2
return (off_by_total/len(scores_dict)) ** .5
def constant11(title):
return 11
print(rate_guesses(constant11))
[closed]
e [on hold]
, onde aplicável?