Yığın değişim itibarınızı hesaplayın


13

Arka fon:

Sık sık bir Stackexchange sitesine göz atarken, insanların sahip oldukları itibar miktarını nasıl elde ettiklerini merak etmeye başladığımı görüyorum. Sorunlarımı çözmek için her zaman codegolf SE'ye güvenebileceğimi biliyorum, işte burada:

Bir kişinin itibarını temsil eden pozitif bir tamsayıyı kabul edecek bir program oluşturun. Ödülleri görmezden geleceğiz ve bunların SE'de tekrar kazanmanın / kaybetmenin tek yolu olduğunu söyleyeceğiz ( burada tam tablo ):

  • Her hesap 1 temsilci ile başlar ve bunun altına inemez
  • Sorunuz kaldırıldı = +5
  • Cevabınız yükseltildi = +10
  • Sorunuz reddedildi = -2
  • Cevabınız indirildi = -2
  • Bir cevabı indirdiniz = -1
  • Cevabınız kabul ediliyor = +15
  • Bir yanıtı kabul ediyorsunuz = +2

Programınız, sahip oldukları temsilciye ulaşmak için o kullanıcının hesabında bu işlemlerden kaçının gerçekleştiğini anlamalıdır. Bu temsilci seviyesine ulaşmak için en az sayıda eylemi bulmalıdır. Örnekler:

Girdi: 11 Çıktı: 1 cevap

Giriş: 93 Çıkış: 6 cevap kabul, 1 cevap kabul

Bu örneklerde, 'soru upvote' dediğimde, kişinin questonu kaldırıldı demektir. 'Cevap aşağı indirildi' dediğimde, başka birinin cevabını aşağı indirdiler.

Kurallar:

, böylece bunu yapabileceğiniz en kısa kod kazanır.


8
Herhangi bir itibar kazanmanın sonsuz sayıda yolu vardır. Her zaman bir yol bulmak için sadece "cevap yukarı oy" ve "cevap aşağı oy" uygulamak yeterlidir, bu nedenle puan değişikliklerinin daha geniş bir alt kümesini kullanmak için bir itici güç yoktur. İstediğiniz bu mu?
algoritmalar

@algorithmshark düzenlendi. Seni oraya götürecek en az sayıda eylem bulmalısın
TheDoctor

"" "Sık sık bir Stackexchange sitesine göz atarken, insanların sahip oldukları itibar miktarını nasıl elde ettiklerini merak etmeye başlıyorum." "" Vs "" "Sizi oraya götürecek en az sayıda eylem bulmanız gerekiyor" "". 2. alıntı zorunlu olarak ilk alıntıya doğru cevap değildir.

1
@algorithmshark Genel olarak yorumlarınıza katılıyorum. Ancak 6 cevap kabul edilir + 1 cevap kabul edilir 6 * 15 + 2 = 92, 93 değil! 7 eylemde yapmanın bir yolunu göremiyorum, ama 8: 6 cevap kabulünde, bir soru upvote, bir soru downvote: 6 * 15 + 5-2 = 93. Doktor, "en az sayıda eylem" için birden fazla olasılık varsa hepsini mi yoksa sadece birini mi bulmak zorundayız?
Level River St

1
@steveverrill Eğer 1 temsilcisi ile başlamak
TheDoctor

Yanıtlar:


3

Golfscript, 162 144 bayt

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

Nasıl çalışır

Genel fikir, Bash cevabımdakiyle tamamen aynı .

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

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

Nasıl çalışır

Sed komutu işe yaradıktan sonra, aşağıdaki bash betiği yürütülür:

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

En iyi çözümü ( nitibar kazanmak için en az olay sayısı a) elde etmek için, 16'nın altında bir itibara (1 cevap kabul) ulaşmak ve kalıntıyı aşağıdaki gibi ele almak için kabul edilen cevapların sayısını ( ) hesaplamak yeterlidir :

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
Açıklama için teşekkürler, başa çıkmak -2ve -1aşağı oy vermek basit değil .
AL

6

Perl, 500 263 , 256 208 bayt

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

kullanım

Girdinin betiğe argüman olarak verilen pozitif tamsayı olması beklenir. Farklı eylemler satır olarak çıkar.

Testler

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

Eski versiyon

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

Düzenlemeler

  • Durum 4 sabittir.
  • Bu aynı zamanda bir döngü olmadan yapılan hesaplamayı da basitleştirir.
  • Ulaşılamayan çoğul "s" kaldırıldı, işlev Sartık gerekli değil.
  • Hesaplama optimize edildi, işlev Eartık gerekli değil.
  • Optimize edilmiş hesaplama için 2 yanlılığı eklendi.
  • Bazı baytları kaydetmek için diğer bazı hileler çoğu değişkenleri kaldırmak için daha büyük yeniden yazma.

Buna göre, Jon Skeet 44084 cevabı kabul & 1 cevap upvote vardır
TheDoctor

6
@TheDoctor: Soruya göre, bunlar 661266 itibar kazanmak için asgari eylem sayısıdır.
Heiko

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

Bana çok yardımcı olan cevabı için Dennis'e teşekkürler .

Ungolfed sürümü

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

Tam olarak Bash kadar çok karakter (evet!) Ve Python ve Perl'i yener :) Daha 14sonraya kadar olan ünü keser , daha sonra diğer gerekli eylemleri, tamamen döngü tarzı alır.

DÜZENLEME 1: \ns'yi ,s'ye dönüştürür ve bir ifbloğu üçlü olarak dönüştürür ve kısa isimlerle daha iyi döşemeler.

EDIT 2: 11 karakter kesmeme yardım eden Alconja'ya çok teşekkürler . Bundan sonra 2 karakter daha kesmek için bazı düzeltmeler yaptım.


Eski versiyon:

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)

Ölçek:

GİRİŞ: 42
ÇIKIŞ:

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

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

GİRİŞ: 1337
ÇIKIŞ:

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

Kodlanmamış Kod:

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

Neden sadece ilk Firefox?
TheDoctor

1
@TheDoctor Sadece Firefox'ta mevcut JS özelliğini kullanır - function name(args){}olur name=(args)=>{}ve böylece bayt kazandırıyor.
Gaurang Tandon

@TheDoctor Programımı çapraz tarayıcı olarak güncelledim ve şimdi eskisinden çok daha kısa!
Gaurang Tandon

Mevcut sürümünüz yalnızca bir qkez kullanır , böylece satır içi yapabilirsiniz. Ayrıca, cdeğişkeni bırakıp r%=15yerine bir şey yapabilirsiniz r-=c*15. Sizi 195 karaktere düşürmeli ( 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 Vay! Çok teşekkürler! Sonunda Bash'e çok çok yakınım! Tekrar çok teşekkürler!
Gaurang Tandon

1

Oyun Yapıcı Dili, 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

Biraz uzun ve bunu iyice test etmedim (çok). :)

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

Golf hariç - YENİ

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

Golfsiz - ESKİ (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));
    }
}

Ölçek:

> prog.exe 120

7 answer accepted, 1 answer upvotes, 2 answer accepts 

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

Lanet uzun fonksiyon isimleri!

Örnek: (sondaki yeni satırı yoksay)

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

Soru ve cevap oylarının sayısını nasıl görüntülersiniz? Kodunuz bu dizeleri içermiyor (diğer yanıtlara bakın), bu yüzden çıktının kurallara uymadığından korkuyorum.
AL

Bu konuda hiçbir gereklilik yoktu çünkü çıktı da golf. Aşağı oylanan soru / cevapları her ikisi de -2 puan verdiğinden ayrı olarak ele almaz, yazdırılan sonuç listesi, skoru elde etmek için en kısa dizidir.
LemonBoy

Evet, kurallar bu konuyla ilgili ayrıntılara girmiyor. Ama diğer yanıtlar çıktı standarttır ve ekran olduğunu fark edebilirsiniz X cevabı kabul , Y cevap upvotes vb Ama en kısa koduna sahip olmadığı için bu bir sorun değil.
AL

@LemonBoy Bunu üç tercüman üzerinde denedim ve işe yaramıyor. Hepsi söylüyor EOF. Beni çalışan bir derleyiciye yönlendirebilir misiniz (ve gelecekte başvurmak için saklamam gerekir)?
Gaurang Tandon

1
@GaurangTandon iç çeker, kahve yorumlayıcısını kullanarak Python kodunu çalıştırmaya çalışıyorsunuz
LemonBoy

1

C ++, 276 (dahil 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));}

Uyarılarla GCC ile derler. Misal:

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

Bunu tür bildirimleri gerektirmeyen bir dile taşımaktan çekinmeyin ve kendi diliniz olarak gönderin.


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)

Kombine hesaplama ve çıktı ve toplam 287 golf.

Düzenleme: birkaç daha kısa bazı değişkenler çıkardı.

| 0 yaklaşımı için Math.Floor kaldırıldı.

Bazı başlatmayı bilgi istemi () parametresine taşıdı, bazı parantezleri kaldırdı, son dize ekiyle uyar.


Codegolf.SE'ye hoş geldiniz! Talimatlar şunları söylüyor: "Pozitif bir tamsayıyı kabul edecek bir program oluşturun" -> kullanmanız gerekir promptve değeri sabit olarak kodlayamazsınız.
Gaurang Tandon

Endişelenme, 161'e kadar çıkaran bilgi istemi () eklendi
Matt

@ GaurangTandon daha akıllı istemi () - 1 ve bunu daha da aşağı indirmek için uyarı çıkış yaklaşımı takip. Bazı sabit kodlu dize depolama alanını da azalttı.
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))

Kullanım: python3 score.py <ret> 11 <ret>bu komut dosyasının score.py olarak kaydedildiği yer.

Örnek çıktı:

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

kabul edilen = kabul et + d, indirilmiş = indirilmiş + d, yükseltilmiş tekrarlanır.
Bill Woodger

Evet, ancak bu oyuncu değişikliği genel olarak herhangi bir karakteri kaydetmiyor - deneyin ve görün
alexander-brett
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.