# 计算您的堆叠交换信誉

13

• 每个帐户以1个代表开始，且不能低于该代表
• 您的问题已获通过= +5
• 您的答案被推荐= +10
• 您的问题被否决= -2
• 您的答案被否决= -2
• 您否决了一个答案= -1
• 您的答案被接受= +15
• 您接受答案= +2

，因此可以胜任的最短代码将获胜。

8

algorithmhark

@algorithmshark已编辑。您必须找到能使您到达

“”“我经常发现，在浏览Stackexchange网站时，我开始怀疑人们如何获得他们所享有的声誉。”“ vs”“”您必须找到能够使您到达目的地的最少数量的操作“ “”。第二个引号不一定是第一个引号的正确答案。

1
@algorithmshark总的来说，我同意您的意见。但是接受6个答案+接受1个答案是6 * 15 + 2 = 92，而不是93！我看不到有7种动作的方法，但是我可以在8种动作中做到：6个答案接受，一个问题赞成，一个问题赞成：6 * 15 + 5-2 = 93。医生，如果“最小数量的动作”有不只一种可能性，我们是否必须找到所有这些可能性或者仅仅是一种？
Level River St

1
@steveverrill，您将从1个代表开始
TheDoctor 2014年

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*
``````

# 怎么运行的

``````{{}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
n-=15*a,n>8)q=A
n>3E1 \$q upvote')
``````

### 怎么运行的

``````((a=(n+1)/15,a-1))&&s=s;q=question
((r=n%5,r-4))&&d=d&&
((n>3))&&echo 1 \$q upvote
``````

``````1  (no rep change)
6  question upvote
``````

2

AL

6

# Perl中，500个263 256 208字节

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

perl rep.pl 93

perl rep.pl 1

perl rep.pl 4
1 question upvote

perl rep.pl 12

perl rep.pl 19
1 question upvote

perl rep.pl 34
1 question upvote

perl rep.pl 127
1 question upvote

perl rep.pl 661266
1 question upvote``````

## 不打高尔夫球

``````\$_ = 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
# -------
# (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
\$: = "\$;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)

# Actions
# -------
# -- 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
\$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的偏差以优化计算。
• 较大的重写将删除大多数变量，另一些技巧可以节省一些字节。

TheDoctor 2014年

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

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

## 测试：

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

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

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

## 非高尔夫代码：

``````// 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");

``````

TheDoctor 2014年

1
@TheDoctor利用了当前仅在Firefox中可用的JS功能- `function name(args){}`成为`name=(args)=>{}`并因此节省了大量字节。
Gaurang Tandon 2014年

@TheDoctor我已经将程序更新为跨浏览器，现在它比以前要短得多！
Gaurang Tandon 2014年

Alconja 2014年

@Alconja哇！非常感谢！我终于非常接近Bash了！再次非常感谢！
Gaurang Tandon 2014年

1

## 游戏制作者语言，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)
``````

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

``````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="";
return w;
};

foreach(var x in a) {
if (r/x>0) {
r-=(r/x)*x;
}
}

if(r==1)

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

``````class R
{
void Main(string[] a)
{
var r = int.Parse(a[0])-1; // subtracts 1 from total rep
var o = new List<string>();

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

``````> prog.exe 120

1

``````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                                             |..|
``````

2014年

LemonBoy 2014年

AL 2014年

@LemonBoy我已经在三个解释器上尝试过，但是它不起作用。都说`EOF`。能否请您指出一个可以运行的编译器（我应该保留该编译器以备将来参考）？
Gaurang Tandon 2014年

1
@GaurangTandon感叹，您正在尝试使用coffeescript解释器运行Python代码
LemonBoy 2014年

1

# C ++ 276（含316 w /）

``````#include <stdio.h>
#include <stdlib.h>
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));}
``````

``````\$ ./a.out 0
\$ ./a.out 1
\$ ./a.out 2
\$ ./a.out 5
question upvoted
\$ ./a.out 10
\$ ./a.out 15
\$ ./a.out 16
\$ ./a.out 17
``````

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

| 0方法已删除Math.Floor。

Gaurang Tandon 2014年

Matt

1

# Python3、188B

``````n=input()+1
a=n//15
n%=15
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))
``````

``````\$ python score.py
5543