Рассчитайте свою репутацию обмена стека

13

Фон:

Я часто нахожу, что, просматривая сайт Stackexchange, я начинаю удивляться, как люди получают столько репутации, сколько они имеют. Я знаю, что всегда могу рассчитывать на Codegolf SE для решения своих проблем, поэтому вот оно:

Создайте программу, которая будет принимать положительное целое число, которое представляет репутацию человека. Мы проигнорируем награды и скажем, что это единственный способ получить / потерять представителя на SE (полная таблица здесь ):

  • Каждая учетная запись начинается с 1 повторения и не может быть ниже
  • Ваш вопрос проголосовал = +5
  • Ваш ответ проголосовал = +10
  • Ваш вопрос отклонен = -2
  • Ваш ответ не оценен = -2
  • Вы отрицаете ответ = -1
  • Ваш ответ принят = +15
  • Вы принимаете ответ = +2

Ваша программа должна выяснить, сколько из этих действий произошло с учетной записью этого пользователя, чтобы получить репутацию, которую они имеют. Он должен выяснить самое короткое количество действий, чтобы добраться до этого уровня повторений. Примеры:

Вход: 11 Результат: 1 ответ upvote

Входные данные: 93 Выходные данные: 6 ответов приняты, 1 ответ принят

В этих примерах, когда я говорю «вопрос с ответом», это означает, что за вопрос этого человека проголосовали. Когда я говорю «ответить отрицательно», это означает, что они отвергли чужой ответ.

Правила:

, поэтому самый короткий код, который может сделать это, выигрывает.

Доктор
источник
8
Существует бесконечное количество способов получить любую репутацию. Достаточно только реализовать «answer upvote» и «answer downvoted», чтобы всегда находить выход, поэтому нет стимула использовать более широкий набор изменений оценки. Это то, что вы намеревались?
алгоритмическая
@algorithmshark отредактировано. Вы должны найти наименьшее количество действий, которые
доставят
"" "Я часто нахожу, что, просматривая сайт Stackexchange, я начинаю удивляться, как люди получают столько репутации, сколько они имеют." "" Vs "" "Вы должны найти наименьшее количество действий, которые приведут вас туда" "". 2-я цитата не обязательно является правильным ответом на первую цитату.
1
@algorithmshark В целом я согласен с вашими комментариями. Однако 6 ответов принимаются + 1 ответ принят 6 * 15 + 2 = 92, а не 93! Я не вижу способа сделать это в 7 действиях, но я могу сделать это в 8: 6 принимает ответ, один ответ на вопрос, один ответ на вопрос: 6 * 15 + 5-2 = 93. Доктор, если существует более одной возможности для «наименьшего количества действий», мы должны найти их все или только одно?
Уровень Река St
1
@steveverrill вы начинаете с 1 представителя
TheDoctor

Ответы:

3

Golfscript, 162 144 байта

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

Как это устроено

Общая идея точно такая же, как в моем ответе 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.
Деннис
источник
9

Баш, 247 202 192 байта

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

Как это устроено

После того, как команда sed выполнит свою работу, выполняется следующий скрипт 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

Чтобы получить оптимальное решение (минимальное количество событий для получения nрепутации), достаточно рассчитать количество принятых ответов ( a), необходимое для достижения репутации ниже 16 (1 ответ принят ), и обработать остаток следующим образом:

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
Деннис
источник
2
Спасибо за объяснение, это не просто иметь дело с -2и -1downvotes.
AL
6

Perl 500 263 256 208 байт

Сценарий 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!$_

использование

Входные данные ожидаются как положительное целое число, заданное в качестве аргумента сценария. Различные действия выводятся в виде строк.

тесты

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

Старая версия

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

Правки

  • Случай 4 исправлен.
  • Это также упрощает вычисления, которые теперь выполняются без цикла.
  • Недоступное множественное число "s" удалено, функция Sбольше не нужна.
  • Расчет оптимизирован, функция Eбольше не нужна.
  • Смещение 2 добавлено для оптимизированного расчета.
  • Большие переписать, чтобы удалить большинство переменных некоторые другие приемы, чтобы сохранить несколько байтов.
Хайко Обердиек
источник
в соответствии с этим, Jon Skeet имеет 44084 ответов и 1 ответ upvote
TheDoctor
6
@TheDoctor: В соответствии с вопросом, это минимальное количество действий, чтобы получить репутацию 661266.
Хейко Обердиек
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=', ')

Спасибо Деннису за ответ, который мне очень помог.

Неуправляемая версия

# 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 = ', ')
Алабама
источник
4

JavaScript - 270 237 227 206 192 символов

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)

Ровно столько же символов, сколько Bash (да!), И бьет Python и Perl :) Это снижает репутацию до 14 не произойдет, после чего потребуются другие необходимые действия, полностью в стиле loop.

РЕДАКТИРОВАТЬ 1: Преобразовано \nс в, s и преобразовать один ifблок в троичный, и лучше пол с короткими именами.

РЕДАКТИРОВАТЬ 2: Большое спасибо Alconja, который помог мне сократить 11 символов. После чего я сделал еще несколько исправлений, чтобы сократить еще 2 символа.


Старая версия:

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)

Тестовое задание:

ВХОД: 42
ВЫХОД:

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

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

ВХОД: 1337
ВЫХОД:

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

Код 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);
Гауранг Тандон
источник
Почему только первый Firefox?
TheDoctor
1
@TheDoctor Использует функцию JS, которая в настоящее время доступна только в Firefox - function name(args){}становится name=(args)=>{}и, таким образом, сохраняет много байтов.
Гауранг Тандон
@TheDoctor Я обновил свою программу до кросс-браузерной, и теперь она намного короче, чем раньше!
Гауранг Тандон
Ваша текущая версия использует только qодин раз, так что вы можете встроить его. Кроме того, вы можете удалить cпеременную и сделать r%=15вместо r-=c*15. Должно принести вам до 195 символов ( 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 Ух ты! Большое спасибо! Я, наконец, очень, очень близко к Башу! Еще раз большое спасибо!
Гауранг Тандон
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
источник
1

C # - 391

Немного долго, и я не проверял это полностью (много). :)

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

Без гольфа - NEW

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

Без гольфа - СТАРЫЙ (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));
    }
}

Тестовое задание:

> prog.exe 120

7 answer accepted, 1 answer upvotes, 2 answer accepts 
jzm
источник
1

Питон - 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])))

Проклинаю вас длинными именами функций!

Пример: (игнорировать завершающий перевод строки)

$ 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
источник
Как вы отображаете количество вопросов и ответов, голосов и т. Д.? Ваш код не содержит этих строк (см. Другие ответы), поэтому я боюсь, что вывод не соответствует правилам.
AL
Выход тоже гольф, так как не было никаких требований по этому поводу. Он не рассматривает вопрос / ответы с отрицательным результатом отдельно, так как оба дают -2 балла, итоговый напечатанный список является самой короткой последовательностью для достижения оценки.
LemonBoy
Да, правила не вдаваться в подробности по этому вопросу. Но вы можете заметить , что в других ответах выход является стандартным и дисплей X ответ принимает , upvotes Y ответа и т.д. Но это не проблема , так как вы не самый короткий код.
AL
@LemonBoy Я пробовал это на трех переводчиках, и это не работает. Все говорят EOF. Можете ли вы указать мне на компилятор, который работает (и который я должен сохранить для дальнейшего использования)?
Гауранг Тандон
1
@GaurangTandon вздох, вы пытаетесь запустить код Python, используя интерпретатор coffeescript
LemonBoy
1

С ++, 276 (316 Вт / включает)

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

Компилируется с GCC, с предупреждениями. Пример:

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

Не стесняйтесь перенести это на язык, который не требует объявлений типов, и опубликовать его как свой собственный.

Джейсон С
источник
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)

Совокупный расчет и выход, и гольф дальше в общей сложности 287.

Редактировать: вынул некоторые переменные на несколько короче.

Удален Math.Floor для | 0 подхода.

Перенес некоторую инициализацию в параметр prompt (), убрал несколько скобок, предупреждение с добавлением последней строки.

Matt
источник
Добро пожаловать на codegolf.SE! Инструкции гласят: «Создайте программу, которая будет принимать положительное целое число» -> так что вам нужно будет использовать prompt, и не сможете жестко закодировать значение.
Гауранг Тандон
Не беспокойтесь, добавлено приглашение (), которое увеличивает его до 161.
Мэтт
Следуя более умной подсказке @ GaurangTandon () - 1 и подходу к выводу предупреждений, вы сможете разобраться в этом. Уменьшено также некоторое количество жестко запрограммированного хранилища строк.
Мэтт
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))

Использование: python3 score.py <ret> 11 <ret>где этот скрипт сохраняется как Score.py.

Пример вывода:

$ python score.py
5543
369 answer accepted
0 answer upvoted
1 question upvoted
1 accept answer 
0 downvote answer 
0 answer downvoted
александр-Brett
источник
принято = принять + d, отклонено = понижено + d, подтверждено повторяется.
Билл Вуджер,
Да, но эти замены не сохраняют никаких символов в целом - попробуйте и посмотрите
alexander-brett