Hitung reputasi pertukaran tumpukan Anda

13

Latar Belakang:

Saya sering menemukan bahwa, ketika menjelajahi situs Stackexchange, saya mulai bertanya-tanya bagaimana orang mendapatkan jumlah reputasi yang mereka miliki. Saya tahu saya selalu dapat mengandalkan codegolf SE untuk menyelesaikan masalah saya, jadi ini dia:

Buat program yang akan menerima bilangan bulat positif yang mewakili reputasi seseorang. Kami akan mengabaikan karunia, dan mengatakan bahwa ini adalah satu-satunya cara untuk mendapatkan / kehilangan perwakilan di SE (tabel lengkap di sini ):

  • Setiap akun dimulai dengan 1 rep dan tidak bisa pergi di bawah itu
  • Pertanyaan Anda ter-upgrade = +5
  • Jawaban Anda dibatalkan = +10
  • Pertanyaan Anda diturunkan = -2
  • Jawaban Anda diturunkan = -2
  • Anda menurunkan jawaban = -1
  • Jawaban Anda diterima = +15
  • Anda menerima jawaban = +2

Program Anda harus mencari tahu berapa banyak tindakan yang terjadi pada akun pengguna tersebut untuk mencapai rep yang mereka miliki. Itu harus mencari tahu jumlah tindakan terpendek untuk sampai ke tingkat rep. Contoh:

Input: 11 Output: 1 jawaban upvote

Input: 93 Output: 6 jawaban diterima, 1 jawaban diterima

Dalam contoh-contoh ini ketika saya mengatakan 'pertanyaan meningkat', itu berarti bahwa pencarian seseorang menjadi terangkat. Ketika saya mengatakan 'jawab downvoted', itu berarti mereka downvoted jawaban orang lain.

Aturan:

, jadi kode terpendek yang dapat melakukan ini akan menang.

Dokter
sumber
8
Ada banyak cara untuk mendapatkan reputasi tertentu. Hanya menerapkan "jawab upvote" dan "jawab downvoted" sudah cukup untuk selalu menemukan jalan, sehingga tidak ada dorongan untuk menggunakan subset perubahan skor yang lebih luas. Apakah ini yang Anda maksudkan?
algorithmshark
@algorithmshark diedit. Anda harus menemukan jumlah tindakan terkecil yang akan membawa Anda ke sana
TheDoctor
"" "Saya sering menemukan bahwa, ketika menjelajahi situs Stackexchange, saya mulai bertanya-tanya bagaimana orang mendapatkan jumlah reputasi yang mereka miliki." "" Vs "" "Anda harus menemukan jumlah tindakan terkecil yang akan membawa Anda ke sana" "". Kutipan kedua bukanlah jawaban yang tepat untuk kutipan pertama.
1
@algorithmshark Secara umum saya setuju dengan komentar Anda. Namun 6 jawaban menerima + 1 jawaban diterima adalah 6 * 15 + 2 = 92, bukan 93! Saya tidak dapat melihat cara untuk melakukannya dalam 7 tindakan, tetapi saya bisa melakukannya dalam jawaban 8: 6 menerima, satu pertanyaan naik, satu pertanyaan turun: 6 * 15 + 5-2 = 93. Dokter, jika ada lebih dari satu kemungkinan untuk "tindakan terkecil" apakah kita harus menemukan semuanya atau hanya satu?
Level River St
1
@steveverrill Anda mulai dengan 1 rep
TheDoctor

Jawaban:

3

Golfscript, 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*

Bagaimana itu bekerja

Gagasan umum persis sama dengan jawaban Bash saya .

{{}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
sumber
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')

Bagaimana itu bekerja

Setelah perintah sed bekerja, skrip bash berikut dijalankan:

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

Untuk mendapatkan solusi optimal (jumlah kejadian minimum untuk mendapatkan nreputasi), cukup untuk menghitung jumlah jawaban yang diterima ( a) yang diperlukan untuk mendapatkan reputasi di bawah 16 (1 jawaban diterima) dan menangani residu sebagai berikut:

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
sumber
2
Terima kasih atas penjelasannya, tidak mudah untuk berurusan dengan -2dan -1menurunkan suara.
AL
6

Perl, 500 263 256 208 byte

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

Pemakaian

Masukan diharapkan sebagai bilangan bulat positif, diberikan sebagai argumen untuk skrip. Tindakan yang berbeda adalah keluaran sebagai garis.

Tes

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

Tidak disatukan

$_ = 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 yang lebih lama

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

Suntingan

  • Kasus 4 diperbaiki.
  • Ini juga menyederhanakan perhitungan yang sekarang dilakukan tanpa loop.
  • Fungsi "s" jamak yang tidak terjangkau dihapus, berfungsi S tidak lagi diperlukan.
  • Perhitungan dioptimalkan, fungsi E tidak lagi diperlukan.
  • Bias 2 ditambahkan untuk perhitungan yang dioptimalkan.
  • Tulis ulang yang lebih besar untuk menghapus sebagian besar variabel, beberapa trik lain untuk menghemat beberapa byte.
Heiko Oberdiek
sumber
menurut ini, Jon Skeet menerima 44084 jawaban & 1 jawaban upvote
TheDoctor
6
@TheDoctor: Menurut pertanyaan, ini adalah jumlah tindakan minimal untuk mendapatkan reputasi 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=', ')

Terima kasih kepada Dennis untuk jawabannya yang sangat membantu saya.

Versi tidak disatukan

# 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
sumber
4

JavaScript - 270 237 227 206 192 karakter

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)

Sama persis dengan karakter sebanyak Bash (yeah!), Dan mengalahkan Python dan Perl :) Ini memotong reputasi sampai 14 setelah itu diperlukan setelah itu mengambil tindakan yang diperlukan lainnya, benar-benar gaya loop.

EDIT 1: Dikonversi \ns ke ,s dan dikonversi satuif blok ke ternary, dan lantai yang lebih baik dengan nama pendek.

EDIT 2: Terima kasih banyak kepada Alconja yang membantu saya mengurangi 11 karakter. Setelah itu saya membuat beberapa koreksi lagi untuk mengurangi 2 karakter lagi.


Versi Lama:

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)

Uji:

INPUT: 42
OUTPUT:

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

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

INPUT: 1337
OUTPUT:

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

Kode Tidak Terkunci:

// 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
sumber
Mengapa hanya Firefox pertama?
TheDoctor
1
@TheDoctor Ini menggunakan fitur JS yang saat ini hanya tersedia di Firefox - function name(args){}menjadi name=(args)=>{}dan dengan demikian menghemat banyak byte.
Gaurang Tandon
@TheDoctor Saya telah memperbarui program saya menjadi cross-browser, dan sekarang jauh lebih pendek dari sebelumnya!
Gaurang Tandon
Versi Anda saat ini hanya menggunakan qsatu kali, jadi Anda bisa menyandingkannya. Anda juga dapat menjatuhkan cvariabel dan melakukan r%=15alih-alih r-=c*15. Harus membawa Anda ke 195 karakter ( 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! Terima kasih banyak! Saya akhirnya sangat dekat dengan Bash! Terima kasih banyak lagi!
Gaurang Tandon
1

Bahasa 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
sumber
1

C # - 391

Agak panjang, dan saya belum menguji ini secara menyeluruh (banyak). :)

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

Batalkan golf - BARU

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

Tidak golf - TUA (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));
    }
}

Uji:

> prog.exe 120

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

Mengutuk Anda nama fungsi panjang!

Contoh: (abaikan trailing newline)

$ 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
sumber
Bagaimana Anda menampilkan jumlah pertanyaan dan jawaban suara, dll.? Kode Anda tidak mengandung string ini (lihat jawaban lain), jadi saya khawatir hasilnya tidak sesuai dengan aturan.
AL
Outputnya juga golf karena tidak ada persyaratan tentang itu. Itu tidak memperlakukan pertanyaan / jawaban downvoted secara terpisah karena keduanya memberikan -2 poin, daftar hasil yang dicetak adalah urutan terpendek untuk mencapai skor.
LemonBoy
Ya, aturannya tidak membahas detail tentang hal ini. Tetapi Anda dapat melihat bahwa di jawaban lain outputnya standar dan menampilkan jawaban X menerima , Y menjawab upvotes , dll. Tapi itu bukan masalah karena Anda tidak memiliki kode terpendek.
AL
@LemonBoy Saya sudah mencoba ini pada tiga penerjemah dan tidak berhasil. Semua mengatakan EOF. Bisakah Anda mengarahkan saya ke kompiler yang berfungsi (dan mana yang harus saya simpan untuk referensi di masa mendatang)?
Gaurang Tandon
1
@ GaurangTandon menghela nafas, Anda mencoba menjalankan kode Python menggunakan juru bahasa
coffeescript
1

C ++, 276 (316 b / termasuk)

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

Kompilasi dengan GCC, dengan peringatan. Contoh:

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

Silakan port ini ke bahasa yang tidak memerlukan ketik deklarasi dan posting sebagai milik Anda.

Jason C
sumber
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)

Gabungan perhitungan dan hasil, dan bermain golf lebih jauh hingga total 287.

Sunting: mengeluarkan beberapa variabel untuk beberapa yang lebih singkat.

Dihapus Matematika. Lantai untuk | 0 pendekatan.

Memindahkan beberapa inisialisasi ke parameter prompt (), menghapus beberapa tanda kurung, mengingatkan dengan menambahkan string akhir.

Mat
sumber
Selamat datang di codegolf.SE! Instruksi mengatakan: "Buat program yang akan menerima bilangan bulat positif" -> jadi Anda harus menggunakan prompt, dan tidak dapat membuat kode sulit nilainya.
Gaurang Tandon
Jangan khawatir, tambah prompt (), yang menabraknya hingga 161.
Mat
Mengikuti @ GaurangTandon prompt yang lebih cerdas () - 1 dan mengingatkan pendekatan output untuk menurunkan ini lebih jauh. Mengurangi beberapa penyimpanan string hardcoded juga.
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))

Penggunaan: python3 score.py <ret> 11 <ret>tempat skrip ini disimpan sebagai score.py.

Output sampel:

$ python score.py
5543
369 answer accepted
0 answer upvoted
1 question upvoted
1 accept answer 
0 downvote answer 
0 answer downvoted
alexander-brett
sumber
diterima = terima + d, downvoted = downvote + d, terbalik diulang.
Bill Woodger
Ya tetapi pergantian itu tidak menyimpan karakter apa pun secara keseluruhan - coba dan lihat
alexander-brett