Calcule sua reputação de troca de pilhas

13

Fundo:

Costumo descobrir que, ao navegar em um site Stackexchange, começo a me perguntar como as pessoas obtêm a quantidade de reputação que possuem. Eu sei que sempre posso contar com o codegolf SE para resolver meus problemas, então aqui está:

Crie um programa que aceite um número inteiro positivo que represente a reputação de uma pessoa. Vamos ignorar as recompensas e dizer que estas são as únicas maneiras de ganhar / perder rep no SE (tabela completa aqui ):

  • Toda conta começa com 1 representante e não pode ficar abaixo dessa
  • Sua pergunta foi aprovada = +5
  • Sua resposta está com voto positivo = +10
  • Sua pergunta foi rebaixada = -2
  • Sua resposta foi reduzida = -2
  • Você recusou uma resposta = -1
  • Sua resposta é aceita = +15
  • Você aceita uma resposta = +2

Seu programa deve descobrir quantas dessas ações ocorreram na conta desse usuário para obter o representante que ele possui. Ele deve descobrir o menor número de ações para chegar a esse nível de representante. Exemplos:

Entrada: 11 Saída: 1 resposta com voto positivo

Entrada: 93 Saída: 6 respostas aceitas, 1 resposta aceita

Nestes exemplos, quando digo 'pergunta votada', significa que a pergunta dessa pessoa foi votada. Quando digo "resposta com voto negativo", isso significa que eles votaram contra a resposta de outra pessoa.

Regras:

, então o código mais curto que pode fazer isso vence.

O médico
fonte
8
Há um número infinito de maneiras de obter qualquer reputação. Apenas implementar "resposta positiva" e "resposta negativa" é suficiente para sempre encontrar uma maneira, portanto, não há ímpeto para usar qualquer subconjunto mais amplo das alterações de pontuação. É isso que você pretendia?
algorithmshark
@algorithmshark editada. Você deve encontrar o menor número de ações que você vai chegar lá
TheDoctor
"" "Frequentemente acho que, ao navegar em um site do Stackexchange, começo a me perguntar como as pessoas obtêm a reputação que possuem." "" Vs "" "Você deve encontrar o menor número de ações que o levará até lá" "" A segunda cotação não é necessariamente a resposta correta para a primeira cotação.
1
@algorithmshark Em geral, eu concordo com seus comentários. No entanto, 6 respostas aceitam + 1 resposta aceita é 6 * 15 + 2 = 92, não 93! Não consigo ver uma maneira de fazê-lo em 7 ações, mas posso fazê-lo em 8: 6. A resposta aceita, uma pergunta positiva, uma pergunta negativa: 6 * 15 + 5-2 = 93. Doutor, se houver mais de uma possibilidade para o "menor número de ações", precisamos encontrar todas elas ou apenas uma?
Level River St
1
@steveverrill você começa com um representante
TheDoctor

Respostas:

3

Golfscript, 162 144 bytes

{{}if}:?;~.)15/:^15*-:~3>1~8>' answer ':A' question 'if'upvote'++?^^A'accept'+:C+^1>{'s'+}??~5%:,4<,1>&1C'ed'++?,2%!1A'downvote'++,4<{'d'+}??]n*

Como funciona

A ideia geral é exatamente a mesma da minha resposta do Bash .

{{}if}:?;         # Create an `if' statement with an empty `else' block.
                  #
~.)15/:^          # Interpret the input string, subtract 1 from its only element (the
                  # reputation score), divide by 15 and save the result in `^'. This gives
                  # the number of accepted answers.
                  #
15*-:~            # Multiply the number of accepted answer by 15 and subtract the product
                  # from the reputation score. Save the result in `~'.
                  #
3>                # If the result is greater than 3:
                  #
  1               # Push 1 on the stack.
                  #
  ~8>             # If the result is greater than 8:
                  #
    ' answer ':A  # Push `answer' on the stack. Either way, save the string in `A'.
                  #
    ' question '  # Otherwise, push `question' on the stack.
                  #
  if              #
                  #
  'upvote'++      # Push `upvote' on the stack and concatenate the three strings.
                  #
?                 #
                  #
^                 # If the number of accepted answers is positive:
                  #
  ^A'accept'+:C+  # Push the number, concatenated with the string ` answer accept', on the
                  # stack. Either way, the string in `C'.
                  #
  ^1>             # If the number of accepted answers is greater than 1:
                  #
    {'s'+}        # Cocatenate the previous string with `s', for proper pluralization.
                  #
  ?               #
                  #
?                 #
                  #
~5%:,             # Calculate the reputation score modulus 5. Save the result in `,'.
                  #
4<,1>&            # If the result is less than 4 and greater than 1:
                  #
  1C'ed'++        # Push the string `1 answer accepted' on the stack.
                  #
?                 #
                  #
,2%!              # If the result is odd:
                  #
  1A'downvote'++  # Push the string `1 answer downvote' on the stack.
                  #
  ,4<             # If the result is less than 4:
                  #
    {'d'+}        # Concatente the previous string with `d'.
                  #
  ?               #
                  #
?                 #
                  #
]n*               # Join the array formed by all strings on the stack, separating the
                  # strings by newlines. This is the output.
Dennis
fonte
9

Bash, 247 202 192 bytes

n=$1 bash <(sed 's/E/)echo /;s/C/ Aaccept/;s/A/answer /
s/.*)/((&)\&\&/'<<<'a=(n+1)/15,a-1)s=s;q=question
aE$aC$s
r=n%5,r-4)d=d&&
r>1E1Ced
1-r%2E1 Adownvote$d
n-=15*a,n>8)q=A
n>3E1 $q upvote')

Como funciona

Após o comando sed funcionar, o seguinte script bash é executado:

((a=(n+1)/15,a-1))&&s=s;q=question
((a))&&echo $a answer accept$s
((r=n%5,r-4))&&d=d&&
((r>1))&&echo 1 answer accepted
((1-r%2))&&echo 1 answer downvote$d
((n-=15*a,n>8))&&q=answer 
((n>3))&&echo 1 $q upvote

Para obter a solução ideal (número mínimo de eventos para obter nreputação), basta calcular o número de respostas aceitas ( a) necessárias para obter uma reputação abaixo de 16 (1 resposta aceita) e manipular o resíduo da seguinte maneira:

1  (no rep change)
2  answer accepted, answer downvoted
3  answer accepted
4  question upvote, answer downvote
5  question upvote, answer downvoted
6  question upvote
7  question upvote, answer accepted, answer downvoted
8  question upvote, answer accepted
9  answer upvote, answer downvote
10 answer upvote, answer downvoted
11 answer upvote
12 answer upvote, answer accepted, answer downvoted
13 answer upvote, answer accepted  
14 answer accept, answer downvote
15 answer accept, answer downvoted
Dennis
fonte
2
Obrigado pela explicação, não é simples de lidar -2e tem -1votos negativos.
AL
6

Perl, 500 263 256 208 bytes

Script rep.pl:

$_=1+pop;sub P($){print$=,@_,$/}$;=" answer ";$:="$;downvote";($==$_/15)&&P"$;accept"."s"x($=>1);$_%=15;$==1;P"$;upvote",$_-=10if$_>9;P" question upvote",$_-=5if$_>4;P"$;accepted"if$_>2;P$:."d"if$_%2;P$:if!$_

Uso

A entrada é esperada como número inteiro positivo, fornecida como argumento para o script. As diferentes ações são exibidas como linhas.

Testes

perl rep.pl 11
1 answer upvote

perl rep.pl 93
6 answer accepts
1 answer accepted

perl rep.pl 1

perl rep.pl 4
1 question upvote
1 answer downvote

perl rep.pl 12
1 answer upvote
1 answer accepted
1 answer downvoted

perl rep.pl 19
1 answer accept
1 question upvote
1 answer downvote

perl rep.pl 34
2 answer accepts
1 question upvote
1 answer downvote

perl rep.pl 127
8 answer accepts
1 question upvote
1 answer accepted
1 answer downvoted

perl rep.pl 661266
44084 answer accepts
1 question upvote

Ungolfed

$_ = pop() + 1; # read the reputation as argument,
                # remove the actionless start reputation
                # and add a bias of two to calculate
                # the answer accepts in one division.

# Actions
# -------
# answer accepts:      Your answer is accepted    = +15
# answer upvotes:       Your answer is upvoted     = +10
# question upvotes:     Your question is upvoted   = +5
# answers accepted:     You accept an answer       = +2
# answers downvoted:    You downvote an answer     = -1
# answer downvotes:     Your answer is downvoted   = -2
# (questions downvoted: Your question is downvoted = -2) not used

# Function P prints the number of actions in $= and
# the action type, given in the argument.
# The function is prototyped "($)" to omit the
# parentheses in the usage.
sub P ($) {
    print $=, @_, $/ # $/ is the line end "\n"
}
# abbreviations,
# special variable names to save a space if a letter follows
$; = " answer ";
$: = "$;downvote";

# Calculation and printing the result
# -----------------------------------
($= = $_ / 15) && # integer division because of the special variable $=
P "$;accept" .
  "s" x ($= > 1); # short for: ($= == 1 ? "" : "s")
$_ %= 15;
$= = 1;           # now the action count is always 1 if the action is used
P "$;upvote",         $_ -= 10 if $_ > 9;
P " question upvote", $_ -=  5 if $_ > 4;
P "$;accepted"                 if $_ > 2;
P $: . "d"                     if $_ % 2;
P $:                           if ! $_

Versão mais antiga

$_ = pop() + 1; # read the reputation as argument
                # subtract start reputation (1)
                # add bias (2)

# Actions
# -------
# $= answer accepts:      Your answer is accepted    = +15
# $b answer upvotes:      Your answer is upvoted     = +10
# $c question upvotes:    Your question is upvoted   = +5
# $d answers accepted:    You accept an answer       = +2
# $e answers downvoted:   You downvote an answer     = -1
# $f answer downvotes:    Your answer is downvoted   = -2
# -- questions downvoted: Your question is downvoted = -2

# Calculaton of answer accepts by a simple division that is
# possible because of the bias.
$= = $_ / 15; # integer division because of the special variable $=
$_ %= 15;

# The older version of the calculation can be simplified further, see below.
# Also the older version did not use the bias.
#
# function E optimizes the construct "$_ == <num>" to "E <num>"
# sub E {
#     $_ == pop
# }
#
# $d = $e = 1 if E 1;       #  1 =     +2 -1
# $d++ if E 2;              #  2 =     +2
#
# $c = $f = 1 if E 3;       #  3 =  +5 -2
# $c = $e = 1 if E 4;       #  4 =  +5 -1
# $c++ if E 5;              #  5 =  +5
# $c = $d = $e = 1 if E 6;  #  6 =  +5 +2 -1
# $c = $d = 1 if E 7;       #  7 =  +5 +2
#
# $b = $f = 1 if E 8;       #  8 = +10 -2
# $b = $e = 1 if E 9;       #  9 = +10 -1
# $b++ if E 10;             # 10 = +10
# $b = $d = $e = 1 if E 11; # 11 = +10 +2 -1
# $b = $d = 1 if E 12;      # 12 = +10 +2
#
# $=++, $f++ if E 13;       # 13 = +15 -2
# $=++, $e++ if E 14;       # 14 = +15 -1

$b++, $_ -= 10 if $_ > 9;
$c++, $_ -=  5 if $_ > 4;

# Now $_ is either 0 (-2), 1 (-1), 2 (0), 3 (1), or 4 (2).
# The number in parentheses is the remaining reputation change.

# The following four lines can be further optimized. 
# $f++        if ! $_;    # "! $_" is short for "$_ == 0"
# $e++        if $_ == 1;
# $d = $e = 1 if $_ == 3;
# $d++        if $_ == 4;

# Optimized version of the previous four lines:

$f++ if ! $_;
$e++ if $_ % 2;
$d++ if $_ > 2;

# function P optimizes the printing and takes the arguments for "print";
# the first argument is the action count and the printing is suppressed,
# if this action type is not needed.
sub P {
    print @_, $/ if $_[0]
    # $/ is "\n"
}

# some abbreviations to save some bytes
$; = " answer ";
$D = "$;downvote";

# output the actions

P $=, "$;accept", ($= == 1 ? "" : "s");
P $b, "$;upvote";
P $c, " question upvote";
P $d, "$;accepted";
P $e, $D, "d";
P $f, $D

Editar% s

  • O caso 4 foi corrigido.
  • Isso também simplifica o cálculo que agora é feito sem um loop.
  • "S" plural inacessível removido, função Snão mais necessária.
  • Cálculo otimizado, função Enão é mais necessária.
  • Viés de 2 adicionado para cálculo otimizado.
  • Reescrita maior para remover a maioria das variáveis, alguns outros truques para salvar alguns bytes.
Heiko Oberdiek
fonte
de acordo com isso, Jon Skeet tem 44084 respostas aceita & 1 resposta com voto positivo
TheDoctor
6
@TheDoctor: De acordo com a questão, estes são o número mínimo de ações para obter uma reputação de 661266.
Heiko Oberdiek
4

R, 454 421

r=as.integer(commandArgs(T)[1])-1;p=function(...){paste(...,sep='')};a='answer ';b='accept';e='ed';f='d';v='vote';d=p('down',v);u=p('up',v);q='question ';z=c();t=r%/%15;if(t>0){z=c(p(t,' ',a,b));r=r%%15;};if(r%in%(8:12))z=c(z,p(a,u));if(r%in%(3:7))z=c(z,p(q,u));if(r%in%c(1,2,6,7,11,12))z=c(z,p(a,b,e));if(r%in%(13:14))z=c(z,p(a,b));if(r%in%c(3,8,13))z=c(z,p(a,d));if(r%in%c(1,4,6,9,11,14))z=c(z,p(a,d,f));cat(z,sep=', ')

Agradeço a Dennis por sua resposta que me ajudou muito.

Versão ungolfed

# read input
r = as.integer(commandArgs(T)[1]) - 1

# shortcut to join strings (... will pass the parameter to paste() *as is*)
p = function(...) {paste(..., sep = '')}

# strings
a = 'answer '; b = 'accept'; e = 'ed'; f = 'd'
v = 'vote'; d = p('down',v); u = p('up',v)
q = 'question '

z = c()

# +15
t = r %/% 15;
if (t > 0) {
    z = c(p(t,' ',a,b))
    r = r %% 15
}

if (r %in% (8:12))              z = c(z,p(a,u));    # answer upvote
if (r %in% (3:7))               z = c(z,p(q,u));    # question upvote
if (r %in% c(1,2,6,7,11,12))    z = c(z,p(a,b,e));  # answer accepted
if (r %in% (13:14))             z = c(z,p(a,b));    # answer accept
if (r %in% c(3,8,13))           z = c(z,p(a,d));    # answer downvote
if (r %in% c(1,4,6,9,11,14))    z = c(z,p(a,d,f));  # answer downvoted

# print operations
cat(z,sep = ', ')
AL
fonte
4

JavaScript - 270 237 227 206 192 caracteres

p=prompt,r=p()-1,a="1answer ",v="vote,";s=(r/15|0)+"answer accept,",r%=15;if(r>9)s+=a+"+"+v,r-=10;if(r>2)s+="1question +"+v,r-=5;r>0?s+=a+"accepted,":0;r<-1?s+=a+"-"+v:0;p(r&1?s+=a+"-voted":s)

Exatamente tantos caracteres quanto Bash (sim!), E supera Python e Perl :) Reduz a reputação até 14depois do que leva e depois toma as outras ações necessárias, completamente em estilo de loop.

EDIT 1: Convertido \nse ,convertido em um ifbloco para ternário, e melhor piso com nomes curtos.

EDIT 2: Muito obrigado a Alconja, que me ajudou a reduzir 11 caracteres. Depois disso, fiz mais algumas correções para reduzir mais 2 caracteres.


Versão antiga:

r=prompt()-1,a="1answer ",q="1question ",v="vote,";s=(c=r/15|0)+"answer accept,",r-=c*15;if(r>9)s+=a+"+"+v,r-=10;if(r>2)s+=q+"+"+v,r-=5;r>0?s+=a+"accepted,":0;if(r<-1)s+=a+"-"+v;r&1?s+=a+"-voted":0;alert(s)

Teste:

ENTRADA: 42
SAÍDA:

2answer accept,1answer +vote,1answer accepted,1answer -voted

/*I sincerely hope the output is clear and easy to make out*/

ENTRADA: 1337
SAÍDA:

89answer accept,1answer accepted,1answer -voted

Código Ungolfed:

// different version from the golfed code
rep = prompt() - 1
string = ""

function $(z, c, k){
  while(rep > 0 && rep >= z - 2) c += 1 , rep -= z;

  if(c) string += c + k + "\n"
}

a=" answer ", q=" question "

$(15, 0, a + "accept")
$(10, 0, a + "upvote")
$(5, 0, q + "upvote")
$(2, 0, a + "accepted")

function _(z, c, str){
  while(rep <= z) c += 1, rep -= z

  if(c) string += c + str + "\n";
}

_(-2, 0, a + "downvote");
_(-1, 0, a + "downvoted");

alert(string);
Gaurang Tandon
fonte
Por que o primeiro é apenas o Firefox?
precisa
1
@TheDoctor Utiliza o recurso de JS atualmente disponível apenas no Firefox - function name(args){}torna - se name=(args)=>{}e, assim, economiza muitos bytes.
Gaurang Tandon
@TheDoctor Atualizei meu programa para ser entre navegadores e agora está muito mais curto do que antes!
Gaurang Tandon 31/03
Sua versão atual usa apenas quma vez, para que você possa incorporá-la. Além disso, você pode soltar a cvariável e fazer um em r%=15vez de r-=c*15. Deve diminuir para 195 caracteres ( r=prompt()-1,a="1answer ",v="vote,";s=(r/15|0)+"answer accept,",r%=15;if(r>9)s+=a+"+"+v,r-=10;if(r>2)s+="1question +"+v,r-=5;r>0?s+=a+"accepted,":0;if(r<-1)s+=a+"-"+v;r&1?s+=a+"-voted":0;alert(s)).
Alconja
@Alconja Wow! Muito obrigado! Finalmente estou muito, muito perto de Bash! Muito obrigado novamente!
Gaurang Tandon
1

Linguagem do Game Maker, 276

p=real(keyboard_string())-1j="#"s=""z=" answer"w=" accept"x=" upvoted"+j;y=w+"ed"v=" question"u=" downvoted"if m=floor(p/15)s+=(m+z+y)+j;r=p-m*15if m=floor(r/10)s+=(m+z+x)r-=m*10if m=floor(r/5)s+=(m+v+x)r-=m*5n=floor(r/2)r-=n*2if m=r{n++;s+=(m+u+z)+j}s+=(n+y+z)show_message(s)
Timtech
fonte
1

C # - 391

Um pouco longo, e eu não testei isso completamente (muito). :)

class R{void Main(string[] a){var r=int.Parse(a[0])-1;var a=new[]{15,10,5,2};var o=new List<string>();Func<int,string>y=z=>{var w="";if(z==15)w=" answer accepted";if(z==10)w=" answer upvotes";if(z==5)w=" question upvotes";if(z==2)w=" answer accepts";return w;};foreach(var x in a)if(r/x>0){o.Add(r/x+y(x));r-=(r/x)*x;}if(r==1)o.Add("1 question downvotes");Console.Write(string.Join(", ",o));

Sem golfe - NOVO

class R
{
    void Main(string[] a)
    {
        var r = int.Parse("122")-1; // subtracts 1 from total rep
        var a = new[] {15,10,5,2};
        var o = new List<string>();

        Func<int,string> y = 
            z => 
                {
                    var w="";
                    if(z==15) w=" answer accepted";
                    if(z==10) w=" answer upvotes";
                    if(z==5) w=" question upvotes";
                    if(z==2) w=" answer accepts";
                    return w;
                };

        foreach(var x in a) {
            if (r/x>0) {
                o.Add(r/x+y(x));
                r-=(r/x)*x;
            }
        }

        if(r==1)
            o.Add("1 question downvotes");

        Console.Write(string.Join(", ",o));
    }
}

Sem golfe - VELHO (409)

class R
{
    void Main(string[] a)
    {
        var r = int.Parse(a[0])-1; // subtracts 1 from total rep
        var v = new[] {" question"," answer"," downvotes"," upvotes"," accepts"," accepted"};
        var o = new List<string>();

        // Starts from 15, then checks all the lower values.
        if (r/15>0) {
            o.Add(r/15+v[1]+v[5]);
            r-=(r/15)*15; // automatic rounding down due to int
        }
        if(r/10>0) {
            o.Add(r/10+v[1]+v[3]);
            r-=(r/10)*10;
        }
        if(r/5>0) {
            o.Add(r/5+v[0]+v[3]);
            r-=(r/5)*5;
        }
        if(r/2>0) {
            o.Add(r/2+v[1]+v[4]);
            r-=(r/2)*2;
        }
        if(r==1) {
            o.Add("1"+v[0]+v[2]);
        }
        Console.Write(string.Join(", ",o));
    }
}

Teste:

> prog.exe 120

7 answer accepted, 1 answer upvotes, 2 answer accepts 
jzm
fonte
1

Python - 213 207

p,k=__import__('itertools').combinations_with_replacement,int(input())
t,m,u=[5,10,-2,-1,15,2],[],iter(range(0,k))
while not m:m=list(filter(lambda v:k-1==sum(v),p(t,next(u))))
print(''.join(map(chr,m[0])))

Amaldiçoe-lhe nomes de função longos!

Exemplo: (ignore a nova linha à direita)

$ echo "93" | python per.py | hexdump -C
00000000  0f 0f 0f 0f 0f 0f 02 0a                           |........|

$ echo "11" | python per.py | hexdump -C
00000000  0a 0a                                             |..|
LemonBoy
fonte
Como você exibe o número de perguntas e respostas, votos etc.? Seu código não contém essas seqüências de caracteres (veja as outras respostas); portanto, receio que a saída não seja compatível com as regras.
AL
A produção também é aproveitada, já que não havia nenhum requisito sobre isso. Ele não trata perguntas / respostas com voto negativo separadamente, pois ambos dão -2 pontos; a lista resultante impressa é a sequência mais curta para obter a pontuação.
LemonBoy
Sim, as regras não entram em detalhes sobre esse ponto. Mas você pode notar que nas outras respostas a saída é padrão e a resposta X é exibida, a resposta X aceita , a resposta Y é votada etc. Mas isso não é um problema, pois você não possui o código mais curto.
AL
@LemonBoy Eu tentei isso em três intérpretes e não funciona. Todos dizem EOF. Você pode me indicar um compilador que funcione (e que devo guardar para referência futura)?
Gaurang Tandon
1
@GaurangTandon suspiro, você está tentando executar código Python usando o intérprete CoffeeScript
LemonBoy
1

C ++, 276 (316 com inclusões)

#include <stdio.h>
#include <stdlib.h>
p(int&q,int*d){int r;char*s[]={"downvoted","accepted","question","answer","upvoted"};
if(r=(q&&q>=*d)){q-=(*d?*d:2);printf("%s %s\n",s[*(++d)],s[*(++d)]);}return r;}main(
int n,char**v){int q=atoi(v[1]);int d[]={-1,3,0,0,3,1,5,4,2,10,4,3,15,1,3};n=15;while
(p(q,d+n-3)||(n-=3));}

Compila com o GCC, com avisos. Exemplo:

$ ./a.out 0
$ ./a.out 1
accepted answer
downvoted answer
$ ./a.out 2
accepted answer
$ ./a.out 5
question upvoted
$ ./a.out 10
answer upvoted
$ ./a.out 15
answer accepted
$ ./a.out 16
answer accepted
accepted answer
downvoted answer
$ ./a.out 17
answer accepted
accepted answer

Sinta-se à vontade para portar isso para um idioma que não exija declarações de tipo e publicá-lo como seu.

Jason C
fonte
1

JavaScript - 273 256 235

p=prompt(s=j="\n")-1;z=" answer",w=" accept",x=" upvoted"+j,y=w+"ed",v=" question",u=" downvoted";if(m=p/15|0)s+=m+z+y+j;r=p-m*15;if(m=r/10|0)s+=m+z+x;r-=m*10;if(m=r/5|0)s+=m+v+x;r-=m*5;n=r/2|0;if(m=r-=n*2)n++,s+=m+u+z+j;alert(s+n+y+z)

Cálculo e produção combinados, e ainda jogou golfe, totalizando 287.

Editar: tirou algumas variáveis ​​por mais algumas.

Removido Math.Floor para a abordagem | 0.

Movido alguma inicialização para o parâmetro prompt (), removidos alguns colchetes, alertando com o acréscimo da sequência final.

Matt
fonte
Bem-vindo ao codegolf.SE! As instruções dizem: "Crie um programa que aceite um número inteiro positivo" -> então você precisará usar prompte não poderá codificar o valor.
Gaurang Tandon 31/03
Não se preocupe, acrescentou alerta (), o que eleva-lo até 161.
Matt
Seguindo o prompt mais inteligente de @ GaurangTandon () - 1 e a abordagem de saída de alerta para diminuir ainda mais isso. Também reduzimos parte do armazenamento de string codificado.
Matt
1

Python3, 188B

n=input()+1
a=n//15
n%=15
A='answer '
print("%d %saccepted\n%d %supvoted\n%d question upvoted\n%d accept %s\n%d downvote %s\n%d %sdownvoted"%(a,A,n//10,A,n%10//5,n%5>2,A,n%5%2,A,n%5==0,A))

Uso: python3 score.py <ret> 11 <ret>onde esse script é salvo como score.py.

Saída de amostra:

$ python score.py
5543
369 answer accepted
0 answer upvoted
1 question upvoted
1 accept answer 
0 downvote answer 
0 answer downvoted
alexander-brett
fonte
aceito = aceitar + d, votado para baixo = voto negativo + d, votado para cima é repetido.
precisa saber é o seguinte
Sim, mas essas substituições não guardar quaisquer caracteres geral - experimentá-lo e ver
alexander-Brett