Calcule su reputación de intercambio de pila

13

Antecedentes:

A menudo encuentro que, cuando navego en un sitio de Stackexchange, empiezo a preguntarme cómo las personas obtienen la cantidad de reputación que tienen. Sé que siempre puedo contar con Codegolf SE para resolver mis problemas, así que aquí está:

Cree un programa que acepte un número entero positivo que represente la reputación de una persona. Ignoraremos las recompensas y diremos que estas son las únicas formas de ganar / perder repeticiones en SE (tabla completa aquí ):

  • Cada cuenta comienza con 1 repetición y no puede ir por debajo de eso
  • Tu pregunta ha sido votada = +5
  • Tu respuesta ha sido votada = +10
  • Su pregunta es rechazada = -2
  • Su respuesta es downvoted = -2
  • Vota abajo una respuesta = -1
  • Su respuesta es aceptada = +15
  • Aceptas una respuesta = +2

Su programa debe determinar cuántas de esas acciones ocurrieron en la cuenta de ese usuario para llegar al representante que tienen. Debe determinar el menor número de acciones para llegar a este nivel de representación. Ejemplos:

Entrada: 11 Salida: 1 respuesta de voto positivo

Entrada: 93 Salida: 6 respuestas aceptadas, 1 respuesta aceptada

En estos ejemplos, cuando digo "voto positivo", significa que el queston de esa persona fue votado positivamente. Cuando digo 'respuesta rechazada', significa que rechazaron la respuesta de otra persona.

Reglas:

, por lo que gana el código más corto que pueda hacer esto.

TheDoctor
fuente
8
Hay infinitas formas de obtener una reputación determinada. Solo la implementación de "respuesta de voto positivo" y "respuesta de voto negativo" es suficiente para encontrar siempre una manera, por lo que no hay ímpetu para usar un subconjunto más amplio de los cambios de puntaje. ¿Es esto lo que pretendías?
algorithmshark
@algorithmshark editado. Debes encontrar la menor cantidad de acciones que te llevarán allí
TheDoctor
"" "A menudo encuentro que, cuando navego por un sitio de Stackexchange, empiezo a preguntarme cómo las personas obtienen la cantidad de reputación que tienen". "". La segunda cita no es necesariamente la respuesta correcta a la primera cita.
1
@algorithmshark En general, estoy de acuerdo con sus comentarios. Sin embargo, 6 respuestas acepta + 1 respuesta aceptada es 6 * 15 + 2 = 92, ¡no 93! No puedo ver una manera de hacerlo en 7 acciones, pero puedo hacerlo en 8: 6 respuestas aceptadas, una pregunta a favor, una pregunta a favor: 6 * 15 + 5-2 = 93. Doctor, si hay más de una posibilidad para el "menor número de acciones", ¿tenemos que encontrarlas todas o solo una?
Level River St
1
@steveverrill comienzas con 1 repetición
TheDoctor

Respuestas:

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*

Cómo funciona

La idea general es exactamente la misma que en mi respuesta 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
fuente
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')

Cómo funciona

Después de que el comando sed hace su trabajo, se ejecuta el siguiente script bash:

((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 obtener la solución óptima (número mínimo de eventos para obtener nreputación), es suficiente calcular el número de respuestas aceptadas ( a) necesarias para llegar a una reputación por debajo de 16 (1 respuesta aceptada) y manejar el residuo de la siguiente manera:

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
fuente
2
Gracias por la explicación, no es fácil de tratar con -2y -1downvotes.
AL
6

Perl, 500 263 256 208 bytes

Guión 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

La entrada se espera como un entero positivo, dado como argumento para el script. Las diferentes acciones se generan como líneas.

Pruebas

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

Sin golf

$_ = 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 ! $_

Versión antigua

$_ = 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

Ediciones

  • El caso 4 es fijo.
  • Esto también simplifica el cálculo que ahora se realiza sin un bucle.
  • Se eliminó el plural "s" inalcanzable, la función Sya no es necesaria.
  • Cálculo optimizado, la función Eya no es necesaria.
  • Sesgo de 2 agregado para un cálculo optimizado.
  • Reescribir más grande para eliminar la mayoría de las variables, algunos otros trucos para guardar algunos bytes.
Heiko Oberdiek
fuente
de acuerdo con esto, Jon Skeet tiene 44084 respuestas acepta y 1 voto de respuesta
TheDoctor
66
@TheDoctor: Según la pregunta, estas son la cantidad mínima de acciones para obtener una reputación 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=', ')

Gracias a Dennis por su respuesta que me ayudó mucho.

Versión sin golf

# 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 = ', ')
Alabama
fuente
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)

Exactamente tantos caracteres como Bash (¡sí!), Y supera a Python y Perl :) Reduce la reputación hasta 14 después de lo cual toma, después de lo cual toma las otras acciones necesarias, completamente al estilo de bucle.

EDITAR 1: Convierte \ns a ,s y convierte un ifbloque a ternario, y mejor piso con nombres cortos.

EDIT 2: Muchas gracias a Alconja que me ayudó a reducir 11 caracteres. Después de lo cual hice algunas correcciones más para reducir 2 caracteres más.


Versión antigua:

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)

Prueba:

ENTRADA: 42
SALIDA:

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

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

ENTRADA: 1337
SALIDA:

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

Código sin golf:

// 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
fuente
¿Por qué es el primero solo en Firefox?
TheDoctor
1
@TheDoctor Utiliza la función de JS actualmente disponible solo en Firefox: se function name(args){}convierte name=(args)=>{}y, por lo tanto, ahorra muchos bytes.
Gaurang Tandon
@TheDoctor ¡He actualizado mi programa para que sea un navegador cruzado, y ahora es mucho más corto que antes!
Gaurang Tandon
Su versión actual solo se usa quna vez, por lo que puede incorporarla. Además, puede soltar la cvariable y hacer un en r%=15lugar de r-=c*15. Debería llevarte a 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! ¡Muchas gracias! ¡Finalmente estoy muy, muy cerca de Bash! ¡Muchas gracias de nuevo!
Gaurang Tandon
1

Game Maker Language, 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
fuente
1

C # - 391

Un poco largo, y no lo he probado a fondo (mucho). :)

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));

Sin golf - NUEVO

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));
    }
}

Sin golf - ANTIGUO (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));
    }
}

Prueba:

> prog.exe 120

7 answer accepted, 1 answer upvotes, 2 answer accepts 
jzm
fuente
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])))

¡Te maldigo nombres largos de funciones!

Ejemplo: (ignore la nueva línea final)

$ 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
fuente
¿Cómo muestra el número de preguntas y respuestas, votos, etc.? Su código no contiene estas cadenas (consulte las otras respuestas), por lo que me temo que el resultado no cumple con las reglas.
AL
El resultado también es golfista ya que no había ningún requisito al respecto. No trata las preguntas / respuestas con voto negativo por separado, ya que ambas dan -2 puntos, la lista resultante que se imprime es la secuencia más corta para lograr el puntaje.
LemonBoy 01 de
Sí, las reglas no entran en detalles sobre este punto. Pero puede notar que en las otras respuestas la salida es estándar y la pantalla X responde acepta , Y responde votos positivos , etc. Pero eso no es un problema ya que no tiene el código más corto.
AL
@LemonBoy He intentado esto en tres intérpretes y no funciona. Todos dicen EOF. ¿Puede indicarme un compilador que funcione (y que debería conservar para referencia futura)?
Gaurang Tandon
1
@GaurangTandon suspiro, estás intentando ejecutar el código Python usando el intérprete
coffeescript
1

C ++, 276 (316 w / incluye)

#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 con GCC, con advertencias. Ejemplo:

$ ./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

Siéntase libre de portar esto a un idioma que no requiera declaraciones de tipo y publicarlo como propio.

Jason C
fuente
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 y rendimiento combinados, y más golf hasta un total de 287.

Editar: sacó algunas variables por unas pocas más cortas.

Se eliminó Math.Floor para el enfoque | 0.

Se movió algo de inicialización al parámetro prompt (), se eliminaron algunos corchetes, se alertó con el agregado final de la cadena.

Mate
fuente
Bienvenido a codegolf.SE! Las instrucciones dicen: "Cree un programa que acepte un número entero positivo" -> por lo que deberá usarlo prompty no podrá codificar el valor.
Gaurang Tandon
No se preocupe, agregó prompt (), que lo sube a 161.
Matt
Siguiendo el indicador más inteligente de @ GaurangTandon () - 1 y el enfoque de salida de alerta para bajar esto aún más. También se redujo parte del almacenamiento de cadenas codificadas.
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>donde este script se guarda como score.py.

Salida de muestra:

$ python score.py
5543
369 answer accepted
0 answer upvoted
1 question upvoted
1 accept answer 
0 downvote answer 
0 answer downvoted
alexander-brett
fuente
aceptado = aceptar + d, downvoted = downvote + d, upvoted se repite.
Bill Woodger
Sí, pero esas sustituciones no guardan ningún personaje en general, pruébalo y verás
alexander-brett