Calculez votre réputation d'échange de pile

13

Contexte:

Je trouve souvent que, lorsque je navigue sur un site Stackexchange, je commence à me demander comment les gens obtiennent la réputation qu'ils ont. Je sais que je peux toujours compter sur codegolf SE pour résoudre mes problèmes, alors voici:

Créez un programme qui acceptera un entier positif qui représente la réputation d'une personne. Nous ignorerons les primes et dirons que ce sont les seuls moyens de gagner / perdre des représentants sur SE (tableau complet ici ):

  • Chaque compte commence avec 1 répétition et ne peut pas descendre en dessous
  • Votre question est votée positivement = +5
  • Votre réponse est votée positivement = +10
  • Votre question est downvoted = -2
  • Votre réponse est downvoted = -2
  • Vous dévaluez une réponse = -1
  • Votre réponse est acceptée = +15
  • Vous acceptez une réponse = +2

Votre programme doit déterminer le nombre de ces actions qui se sont produites sur le compte de cet utilisateur pour obtenir le représentant qu'il a. Il doit déterminer le nombre d'actions le plus court pour atteindre ce niveau de représentation. Exemples:

Entrée: 11 Sortie: 1 réponse vote positif

Entrée: 93 Sortie: 6 réponses acceptées, 1 réponse acceptée

Dans ces exemples, quand je dis «question upvote», cela signifie que le queston de cette personne a été voté positivement. Quand je dis «réponse downvoted», cela signifie qu'ils ont downvoted la réponse de quelqu'un d'autre.

Règles:

, donc le code le plus court qui peut le faire gagne.

Le docteur
la source
8
Il existe un nombre infini de façons d'obtenir une réputation donnée. Seule l'implémentation de «réponse positive» et «réponse négative» suffit pour toujours trouver un moyen, il n'y a donc aucune impulsion à utiliser un sous-ensemble plus large des changements de score. C'est bien ce que vous vouliez?
algorithmshark
@algorithmshark édité. Vous devez trouver le plus petit nombre d'actions qui vous y
mènera
"" "Je trouve souvent qu'en naviguant sur un site Stackexchange, je commence à me demander comment les gens obtiennent la réputation qu'ils ont." "" Vs "" "Vous devez trouver le plus petit nombre d'actions qui vous y mènera" "". La 2e citation n'est pas nécessairement la bonne réponse à la première citation.
1
@algorithmshark En général, je suis d'accord avec vos commentaires. Cependant 6 réponses acceptent + 1 réponse acceptée est 6 * 15 + 2 = 92, pas 93! Je ne vois pas comment le faire en 7 actions, mais je peux le faire en 8: 6 réponse accepte, une question upvote, une question downvote: 6 * 15 + 5-2 = 93. Docteur, s'il y a plus d'une possibilité pour "le plus petit nombre d'actions" devons-nous les trouver toutes ou une seule?
Level River St
1
@steveverrill vous commencez avec 1 représentant
TheDoctor

Réponses:

3

Golfscript, 162 144 octets

{{}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*

Comment ça fonctionne

L'idée générale est exactement la même que dans ma réponse 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
la source
9

Bash, 247 202 192 octets

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

Comment ça fonctionne

Une fois la commande sed terminée , le script bash suivant est exécuté:

((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

Pour obtenir la solution optimale (nombre minimal d'événements pour obtenir une nréputation), il suffit de calculer le nombre de réponses acceptées ( a) nécessaires pour atteindre une réputation inférieure à 16 (1 réponse acceptée) et de gérer le résidu comme suit:

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
la source
2
Merci pour l'explication, ce n'est pas simple à gérer -2et les -1votes négatifs.
AL
6

Perl, 500 263 256 208 octets

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

Usage

L'entrée est attendue comme un entier positif, donné comme argument au script. Les différentes actions sont sorties sous forme de lignes.

Les tests

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

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

Ancienne version

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

Modifications

  • Le cas 4 est corrigé.
  • Cela simplifie également le calcul qui se fait maintenant sans boucle.
  • "S" pluriel inaccessible supprimé, la fonction Sn'est plus nécessaire.
  • Calcul optimisé, la fonction En'est plus nécessaire.
  • Biais de 2 ajouté pour un calcul optimisé.
  • Réécriture plus grande pour supprimer la plupart des variables d'autres astuces pour économiser certains octets.
Heiko Oberdiek
la source
selon cela, Jon Skeet a 44084 réponse accepte & 1 réponse vote positif
TheDoctor
6
@TheDoctor: Selon la question, ce sont le nombre minimal d'actions pour obtenir une réputation 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=', ')

Merci à Dennis pour sa réponse qui m'a beaucoup aidé.

Version non golfée

# 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
la source
4

JavaScript - 270 237 227 206 192 caractères

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)

Exactement autant de caractères que Bash (ouais!), Et bat Python et Perl :) Cela réduit la réputation jusqu'à 14ce qu'il prenne après quoi il prend les autres actions nécessaires, complètement en boucle.

EDIT 1: Converti \ns en ,s et converti un ifbloc en ternaire, et meilleur revêtement de sol avec des noms courts.

EDIT 2: Un grand merci à Alconja qui m'a aidé à réduire 11 caractères. Après quoi j'ai apporté quelques corrections supplémentaires pour réduire 2 caractères supplémentaires.


Ancienne version:

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)

Tester:

ENTRÉE: 42
SORTIE:

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

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

ENTRÉE: 1337
SORTIE:

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

Code non 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
la source
Pourquoi le premier Firefox est-il uniquement?
TheDoctor
1
@TheDoctor Il utilise la fonctionnalité de JS actuellement disponible uniquement dans Firefox - function name(args){}devient name=(args)=>{}et économise donc beaucoup d'octets.
Gaurang Tandon
@TheDoctor J'ai mis à jour mon programme pour qu'il soit multi-navigateur, et il est maintenant beaucoup plus court qu'avant!
Gaurang Tandon
Votre version actuelle n'utilise qqu'une seule fois, vous pouvez donc l'intégrer. De plus, vous pouvez supprimer la cvariable et faire un r%=15au lieu de r-=c*15. Cela devrait vous ramener à 195 caractères ( 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! Merci beaucoup! Je suis enfin très très proche de Bash! Merci encore beaucoup!
Gaurang Tandon
1

Langue de 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
la source
1

C # - 391

Un peu long, et je n'ai pas testé ça à fond (beaucoup). :)

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

Non golfé - NOUVEAU

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

Non golfé - VIEUX (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));
    }
}

Tester:

> prog.exe 120

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

Maudissez-vous les noms de fonction longs!

Exemple: (ignorer la nouvelle ligne de fin)

$ 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
la source
Comment affichez-vous le nombre de votes de questions et réponses, etc.? Votre code ne contient pas ces chaînes (voir les autres réponses), donc je crains que la sortie ne soit pas conforme aux règles.
AL
La sortie est également jouée au golf car il n'y avait aucune exigence à ce sujet. Il ne traite pas séparément les questions / réponses votées car les deux donnent -2 points, la liste résultante qui est imprimée est la séquence la plus courte pour atteindre le score.
LemonBoy
Oui, les règles n'entrent pas dans les détails sur ce point. Mais vous pouvez remarquer que dans les autres réponses de la sortie standard et l' affichage réponse X accepte , Y upvotes réponse , etc. Mais ce n'est pas un problème puisque vous n'avez pas le code le plus court.
AL
@LemonBoy J'ai essayé cela sur trois interprètes et cela ne fonctionne pas. Tous disent EOF. Pouvez-vous s'il vous plaît me pointer vers un compilateur qui fonctionne (et que je devrais conserver pour référence future)?
Gaurang Tandon
1
@GaurangTandon soupir, vous essayez d'exécuter du code Python en utilisant l'interpréteur
coffeescript
1

C ++, 276 (316 avec / avec)

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

Compile avec GCC, avec des avertissements. Exemple:

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

N'hésitez pas à le porter dans une langue qui ne nécessite pas de déclarations de type et à le publier comme le vôtre.

Jason C
la source
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)

Calcul et sortie combinés, et golf plus loin pour un total de 287.

Edit: a supprimé certaines variables pour quelques plus courtes.

Suppression de Math.Floor pour l'approche | 0.

Déplacement d'une certaine initialisation vers le paramètre prompt (), suppression de quelques crochets, alerte avec l'ajout de la chaîne finale.

Mat
la source
Bienvenue sur codegolf.SE! Les instructions disent: "Créez un programme qui acceptera un entier positif" -> vous devrez donc utiliser promptet ne pouvez pas coder en dur la valeur.
Gaurang Tandon
Pas de soucis, a ajouté prompt (), ce qui le fait grimper jusqu'à 161.
Matt
En suivant l'invite plus intelligente () - 1 de GaurangTandon et l'approche de sortie d'alerte pour continuer à descendre. Réduit également une partie du stockage des chaînes codées en dur.
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))

Utilisation: python3 score.py <ret> 11 <ret>où ce script est enregistré sous score.py.

Exemple de sortie:

$ python score.py
5543
369 answer accepted
0 answer upvoted
1 question upvoted
1 accept answer 
0 downvote answer 
0 answer downvoted
alexander-brett
la source
accepté = accepter + d, vote négatif = vote négatif + d, vote positif est répété.
Bill Woodger
Oui, mais ces substitutions n'enregistrent aucun personnage dans l'ensemble - essayez-le et voyez
alexander-brett