Tính toán danh tiếng trao đổi ngăn xếp của bạn


13

Lý lịch:

Tôi thường thấy rằng, khi duyệt một trang web Stackexchange, tôi bắt đầu tự hỏi làm thế nào mọi người có được danh tiếng mà họ có. Tôi biết tôi luôn có thể tin tưởng vào codegolf SE để giải quyết vấn đề của mình, vì vậy đây là:

Tạo một chương trình sẽ chấp nhận một số nguyên dương thể hiện danh tiếng của một người. Chúng tôi sẽ bỏ qua tiền thưởng và nói rằng đây là những cách duy nhất để có được / mất đại diện trên SE (bảng đầy đủ ở đây ):

  • Mỗi tài khoản bắt đầu với 1 đại diện và không thể đi dưới đó
  • Câu hỏi của bạn được nâng cấp = +5
  • Câu trả lời của bạn được nâng cấp = +10
  • Câu hỏi của bạn bị hạ cấp = -2
  • Câu trả lời của bạn bị hạ cấp = -2
  • Bạn downvote một câu trả lời = -1
  • Câu trả lời của bạn được chấp nhận = +15
  • Bạn chấp nhận câu trả lời = +2

Chương trình của bạn phải tìm ra có bao nhiêu hành động xảy ra trên tài khoản của người dùng đó để đến với đại diện mà họ có. Nó phải tìm ra số lượng hành động ngắn nhất để đạt được mức đại diện này. Ví dụ:

Đầu vào: 11 Đầu ra: 1 câu trả lời upvote

Đầu vào: 93 Kết quả: 6 câu trả lời chấp nhận, 1 câu trả lời được chấp nhận

Trong những ví dụ này khi tôi nói 'câu hỏi upvote', điều đó có nghĩa là nhiệm vụ của người đó đã được nâng cấp. Khi tôi nói 'câu trả lời bị bỏ qua', điều đó có nghĩa là họ đã hạ thấp câu trả lời của người khác.

Quy tắc:

, vì vậy mã ngắn nhất có thể làm được điều này sẽ thắng.


8
Có vô số cách để có được bất kỳ danh tiếng nào. Chỉ thực hiện "trả lời upvote" và "trả lời xuống" là đủ để luôn tìm ra cách, do đó không có động lực để sử dụng bất kỳ tập hợp con rộng hơn của thay đổi điểm số. Đây có phải là những gì bạn dự định?
thuật toán

@alacticmshark đã chỉnh sửa. Bạn phải tìm số lượng hành động nhỏ nhất sẽ đưa bạn đến đó
TheDoctor

"" "Tôi thường thấy rằng, khi duyệt một trang web Stackexchange, tôi bắt đầu tự hỏi làm thế nào mọi người có được danh tiếng mà họ có." "" Vs "" "Bạn phải tìm ra số lượng hành động nhỏ nhất sẽ đưa bạn đến đó" "". Câu trích dẫn thứ 2 không nhất thiết là câu trả lời đúng cho câu trích dẫn đầu tiên.

1
@alerskymshark Nói chung tôi đồng ý với ý kiến ​​của bạn. Tuy nhiên, 6 câu trả lời chấp nhận + 1 câu trả lời được chấp nhận là 6 * 15 + 2 = 92, không phải 93! Tôi không thể thấy một cách để làm điều đó trong 7 hành động, nhưng tôi có thể làm điều đó trong 8: 6 câu trả lời chấp nhận, một câu hỏi upvote, một câu hỏi downvote: 6 * 15 + 5-2 = 93. Thưa bác sĩ, nếu có nhiều hơn một khả năng cho "số lượng hành động nhỏ nhất" thì chúng ta phải tìm tất cả chúng hay chỉ một?
Cấp sông St

1
@steveverrill bạn bắt đầu với 1 đại diện
TheDoctor

Câu trả lời:


3

Golf, 162 144 byte

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

Làm thế nào nó hoạt động

Ý tưởng chung giống hệt như trong câu trả lời Bash của tôi .

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

Bash, 247 202 192 byte

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

Làm thế nào nó hoạt động

Sau khi lệnh sed thực hiện công việc, tập lệnh bash sau sẽ được thực thi:

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

Để có được giải pháp tối ưu (số lượng sự kiện tối thiểu để có được ndanh tiếng), cần phải tính toán số câu trả lời được chấp nhận ( a) cần thiết để có được danh tiếng dưới 16 (chấp nhận 1 câu trả lời) và xử lý dư lượng như sau:

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
Cảm ơn lời giải thích, không đơn giản để đối phó -2và hạ -1bệ.
AL

6

Perl, 500 263 256 208 byte

Kịch bả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!$_

Sử dụng

Đầu vào được dự kiến ​​là số nguyên dương, được đưa ra làm đối số cho tập lệnh. Các hành động khác nhau là đầu ra dưới dạng dòng.

Xét nghiệm

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

Ung dung

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

Phiên bản cũ hơn

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

Chỉnh sửa

  • Trường hợp 4 là cố định.
  • Điều này cũng đơn giản hóa việc tính toán hiện được thực hiện mà không cần vòng lặp.
  • Không thể truy cập số nhiều "s", chức năng Skhông còn cần thiết.
  • Tính toán tối ưu hóa, chức năng Ekhông còn cần thiết.
  • Xu hướng 2 được thêm vào để tính toán tối ưu.
  • Viết lại lớn hơn để loại bỏ hầu hết các biến một số thủ thuật khác để lưu một số byte.

Theo đó, Jon Skeet có 44084 câu trả lời chấp nhận & 1 câu trả lời upvote
TheDoctor

6
@TheDoctor: Theo câu hỏi, đây là số lượng hành động tối thiểu để có được danh tiếng là 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=', ')

Cảm ơn Dennis vì câu trả lời của anh ấy đã giúp tôi rất nhiều.

Phiên bản ung dung

# 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 ký tự

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)

Chính xác là nhiều ký tự như Bash (yeah!), Và đánh bại Python và Perl :) Nó cắt giảm danh tiếng cho đến 14sau đó nó phải thực hiện các hành động cần thiết khác, hoàn toàn theo kiểu vòng lặp.

EDIT 1: Chuyển đổi \ns thành ,s và chuyển đổi một ifkhối thành ternary, và sàn tốt hơn với tên ngắn.

EDIT 2: Rất cảm ơn Alconja , người đã giúp tôi cắt giảm 11 ký tự. Sau đó tôi đã thực hiện một số chỉnh sửa để cắt giảm thêm 2 ký tự.


Phiên bản cũ hơn:

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)

Kiểm tra:

VÀO: 42
ĐẦU RA:

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

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

VÀO: 1337
ĐẦU RA:

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

Mã bị hủy bỏ:

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

Tại sao chỉ có một Firefox đầu tiên?
TheDoctor

1
@TheDoctor Nó sử dụng tính năng của JS hiện chỉ có trong Firefox - function name(args){}trở thành name=(args)=>{}và do đó tiết kiệm rất nhiều byte.
Gaurang Tandon

@TheDoctor Tôi đã cập nhật chương trình của mình thành trình duyệt chéo và hiện tại nó ngắn hơn nhiều so với trước đây!
Gaurang Tandon

Phiên bản hiện tại của bạn chỉ sử dụng qmột lần, vì vậy bạn có thể nội tuyến nó. Ngoài ra, bạn có thể thả cbiến và thực hiện r%=15thay vì r-=c*15. Nên đưa bạn xuống 195 ký tự ( 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! Cảm ơn rất nhiều! Cuối cùng tôi cũng rất thân với Bash! Cảm ơn rất nhiều lần nữa!
Gaurang Tandon

1

Ngôn ngữ nhà sản xuất trò chơi, 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

Một chút lâu, và tôi đã không kiểm tra điều này kỹ lưỡng (nhiều). :)

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

Chưa chơi gôn - MỚI

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

Không chơi gôn - OLD (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));
    }
}

Kiểm tra:

> prog.exe 120

7 answer accepted, 1 answer upvotes, 2 answer accepts 

1

Con trăn - 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])))

Nguyền rủa bạn tên hàm dài!

Ví dụ: (bỏ qua dòng mới)

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

Làm thế nào để bạn hiển thị số lượng câu hỏi và câu trả lời bỏ phiếu, vv? Mã của bạn không chứa các chuỗi này (xem các câu trả lời khác), vì vậy tôi sợ đầu ra không tuân thủ các quy tắc.
AL

Đầu ra cũng bị đánh golf vì không có yêu cầu về điều đó. Nó không xử lý riêng biệt câu hỏi / câu trả lời vì cả hai đều cho -2 điểm, danh sách kết quả được in là chuỗi ngắn nhất để đạt được điểm.
LemonBoy

Có, các quy tắc không đi vào chi tiết về điểm này. Nhưng bạn có thể nhận thấy rằng trong các câu trả lời khác, đầu ra là tiêu chuẩn và hiển thị câu trả lời X , Y trả lời , v.v. Nhưng đó không phải là vấn đề vì bạn không có mã ngắn nhất.
AL

@LemonBoy Tôi đã thử điều này trên ba phiên dịch và nó không hoạt động. Tất cả nói EOF. Bạn có thể vui lòng chỉ cho tôi một trình biên dịch hoạt động (và tôi nên giữ lại để tham khảo trong tương lai)?
Gaurang Tandon

1
@GaurangTandon thở dài, bạn đang cố chạy mã Python bằng trình thông dịch
coffeescript

1

C ++, 276 (316 w / bao gồm)

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

Biên dịch với GCC, với các cảnh báo. Thí dụ:

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

Vui lòng chuyển ngôn ngữ này sang ngôn ngữ không yêu cầu khai báo kiểu và đăng nó thành ngôn ngữ của riêng bạn.


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)

Kết hợp tính toán và đầu ra, và đánh gôn hơn nữa với tổng số là 287.

Chỉnh sửa: lấy ra một số biến cho một vài ngắn hơn.

Đã xóa Math.Floor cho cách tiếp cận | 0.

Đã chuyển một số khởi tạo sang param (), xóa một số dấu ngoặc, cảnh báo với phần bổ sung chuỗi cuối cùng.


Chào mừng bạn đến với codegolf.SE! Các hướng dẫn nói: "Tạo chương trình chấp nhận số nguyên dương" -> vì vậy bạn sẽ cần sử dụng promptvà không thể mã hóa giá trị.
Gaurang Tandon

Không phải lo lắng, đã thêm dấu nhắc (), tăng vọt lên tới 161.
Matt

Theo dấu nhắc thông minh hơn của @ GaurangTandon () - 1 và tiếp cận đầu ra cảnh báo để làm cho điều này đi xuống hơn nữa. Giảm một số lưu trữ chuỗi mã hóa quá.
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))

Cách sử dụng: python3 score.py <ret> 11 <ret>nơi tập lệnh này được lưu dưới dạng điểm số.

Đầu ra mẫu:

$ python score.py
5543
369 answer accepted
0 answer upvoted
1 question upvoted
1 accept answer 
0 downvote answer 
0 answer downvoted

accept = accept + d, downvote = downvote + d, upvote được lặp lại.
Bill Woodger

Có nhưng những sự thay thế đó không cứu được bất kỳ nhân vật nào - hãy thử và xem
alexander-brett
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.