どれくらいの評判が必要ですか?


23

プログラミングパズルとコードゴルフはベータを卒業しています。すぐにカスタムサイトのデザインを取得し、それによって特権の評判の境界が上がります。多くのユーザーは、サイトの特権を失います。したがって、あなたの仕事は、特権を保持するためにどれだけの追加の評判が必要かを伝えるプログラムを書くことです。

仕事

あなたの仕事は、レピュテーションポイントの数を考慮して、サイト設計後にユーザーが現在の特権を保持するために必要な追加のレピュテーションの量を見つけるための最短コードを記述することです。

入出力

これらのルールに従う限り、入力を受け入れ、好きな方法で出力することができます。

入力 -1から250000+ までの整数。プログラムまたは関数、これより大きな数値を受け入れることができるはずですが、この範囲の数値を受け入れる必要あります。

出力 -卒業後にユーザーが現在の特権を保持するために取得する必要がある評価ポイントの数を表す整数。

標準的な抜け穴はありません、お願いします。

アルゴリズムの例

  1. i入力に変数を設定
  2. variable rをvariableに設定しますi
  3. rリストにない間beta
    1. 1から減算しrます。
  4. セットnの位置までrの中でbeta
  5. rアイテムnに設定しますgraduated
  6. 変数oをの結果に設定しますr - i
  7. 場合o < 0
    1. 変数oをに設定します0
  8. 出力変数o

テーブル

変更される権限の表

 | privilege name              | beta rep | graduation rep |
-+-----------------------------+----------+----------------+-
 | create tags                 |      150 |           1500 |
 | access review queues        |      350 |            500 |
 | cast close and reopen votes |      500 |           3000 |
 | established user            |      750 |           1000 |
 | edit questions and answers  |     1000 |           2000 |
 | create tag synonyms         |     1250 |           2500 |
 | approve tag wiki edits      |     1500 |           5000 |
 | access to moderator tools   |     2000 |          10000 |
 | protect questions           |     3500 |          15000 |
 | trusted user                |     4000 |          20000 |
 | access to site analytics    |     5000 |          25000 |
-+-----------------------------+----------+----------------+-
 | privilege name              | beta rep | graduation rep |

変更されない特権の表

 | privilege name               | reputation |
-+------------------------------+------------+-
 | create posts                 |          1 |
 | participate in meta          |          1 |
 | create wiki posts            |         10 |
 | remove new user restrictions |         10 |
 | vote up                      |         15 |
 | flag posts                   |         15 |
 | talk in chat                 |         20 |
 | comment everywhere           |         50 |
 | set bounties                 |         75 |
 | create chatrooms             |        100 |
 | edit community wiki          |        100 |
 | vote down                    |        125 |
-+------------------------------+------------+-
 | privilege name               | reputation |

テストケース

wizzwizz4                |   750 |  2250
cat                      |  2004 |  7996
Dennis ♦                 | 72950 |     0
Dr Green Eggs and Ham DJ |  4683 | 15317
New User                 |     1 |     0

いないすべての評判のカウントが執筆の時点で正確である
あなたがしたい場合は、過去または現在の評判を、ここでは以下単にコメントをカウントし、私はよ、多分それを追加します。


2
いくつかのテストケースを含める必要があります。
デニス

3
ところで、ベータサイトでも5のメタ担当者しきい値に参加します。PPCGは、新しいユーザーがサンドボックスを使用できるようにカスタマイズしました。卒業してもこれは変わらないはずです。
デニス

1
@cat実際に使用しました。ありがとう!
wizzwizz4

2
@ wizzwizz4ありがとうございます。私の頭は爆発し始めており、私はさらに250人の担当者を望んでいた

1
@ wizzwizz4いや、デニスの横で低く見えるだろう:
xnor

回答:


4

Python、101バイト

lambda n:max(0,eval("+(n>=%d)*%d"*7%(5e3,5e3,4e3,5e3,35e2,5e3,2e3,5e3,15e2,2e3,5e2,15e2,150,15e2))-n)

増加ではなく、必要な新しい担当者を与えていると思います。だから、するf(750)必要が1250あり2000ます。簡単に修正できるはずです。
xnor

@xnorまあ、でf(750)はあり2250ません1250:)
orlp

まだf(72950)与える必要がある0
-xnor

あなたのevalトリックは本当に良いです。それをリストの圧縮と組み合わせると83:になりlambda n:max(eval("+(n>=%s*500)*%s*500"*7%(.3,3,1,3,3,4,4,10,7,10,8,10,10,10))-n,0)ます。
-xnor

コードの説明と内訳を追加できると思いますか?
wizzwizz4

4

ゼリー40 37 バイト

19112203.3b11×ȷḞ>Ḥ¬×9999322D‘¤S×.ȷ_»0

オンラインでお試しください!または、すべてのテストケースを確認します

使い方

19112203.3b11×ȷḞ>Ḥ¬×9999322D‘¤S×.ȷ_»0  Main link. Argument: n

19112203.3b11                          Convert the float to base 11. Yields
                                       [10, 8, 7, 4, 3, 1, 0.30000000074505806].
             ×ȷ                        Multiply each by 1000.
               Ḟ                       Floor. Yields
                                       [10000, 8000, 7000, 4000, 3000, 1000, 300].
                 Ḥ                     Unhalve; yield 2n.
                >                      Compare each integer in the list with 2n.
                  ¬                    Negate the resulting Booleans.
                             ¤         Chain the three links to the left:
                    9999322D           Convert the integer to base 10.
                            ‘          Increment each digit. Yields 
                                       [10, 10, 10, 10, 4, 3, 3].
                   ×                   Multiply the Booleans with the corr. digits.
                              S        Compute the sum of the products.
                               ×.ȷ     Multiply the sum by 500.
                                  _    Subtract n.
                                   »0  Return the maximum of the difference and 0.

3

CJam、38バイト

0000000: 72 69 5f 35 30 2f 22 64 50 46 28 1e 0a 03 22 66  ri_50/"dPF(..."f
0000010: 3c 3a 2b 22 fa c8 96 64 32 1e 0f 00 22 3d 69 65  <:+"...d2..."=ie
0000020: 32 5c 2d 55 65 3e                                2\-Ue>

オンラインでお試しください!または、すべてのテストケースを確認します1

使い方

ri                        Read an integer n from STDIN.
  _50/                    Push a copy and divide it by 50.
     "…"                  Push the string with code points [100 80 70 40 30 10 3].
        f<                Compare each code point with n / 50.
          :+              Add the resulting Booleans.
            "…"           Push the string with code points
                          [250 200 150 100 50 30 15 0].
               =          Select the one at the index of the sum.
                i         Convert from character to integer.
                 e2       Multiply by 100.
                   \-     Subtract n from the product.
                     Ue>  Take the maximum of the difference and 0.

1 コードにはヌルバイトが含まれているため、一部のブラウザーで問題が発生することに注意してください。


3

JavaScriptの(ES6)、137の 135 102 81バイト

n=>(n-=[5,0,.3,.6,1,2,3,4][[.3,1,3,4,7,8,10].findIndex(m=>m*500>n)+1]*5e3)<0?-n:0

ユーザーのレピュテーションが5000以上のfindIndex場合、-1が返されるため、結果はインクリメントされ、必要な新しいレピュテーションの配列にインデックスを付けることができます。編集:入力および出力配列をスケーリングすることにより21バイトを保存しました。

   [.3,1,3,4,7,8,10]        Old reputations of note, divided by 500
    .findIndex(m=>m*500>n)  Skip ones that have been achieved
     +1                     Normalise the return value
  [5,0,.3,.6,1,2,3,4][]     Index into new reputation needed
   *5e3                     Scaling factor
 n-=                        Compare to the current reputation
()<0?-n:0                   Negate to return the requirement

一部の回答は、New Userテストケースでは機能しません。動作しない場合は、修正してください。
wizzwizz4

@ wizzwizz4ああ、メタ特権の変更?確かに、それは簡単な修正です。
ニール

コードの説明と内訳を追加できると思いますか?
wizzwizz4

2

Python、88バイト

lambda n:max(sum(500*b*(n>=a*500)for a,b in zip([.3,1,3,4,7,8,10],[3,3,4]+[10]*4))-n,0)

新しいベータ特権を超えるたびに、次の段階的な特権に到達するために必要な担当者の量を追加します。次に、必要な追加の担当者は、新しい担当者から現在の担当者を引いたものですが、0以上です。

両方のrep境界リストは、の倍数のrepによって短縮されます500


あなたにも交換するかもしれない[3]*2+[4][3,3,4]、9 8対バイト。
CalculatorFeline

@CatsAreFluffyおかげで、価値のある小数から変更したのを忘れてしまいました。
-xnor

2

Python 156 152バイト

s=str.split;n=input()
for k,v in map(s,s('5e3 5r4e3 5r3500 30./7r2e3 5r1500 10./3r500 6r1 1','r')):
 w=u(k);r=eval(v)*w
 if w<=n:print max(0,r-n);break

データ文字列(5e3 5r4e3 5r3500 30./7r2e3 5r1500 10./3r500 6r1 1)は(old_rep1) (new_rep1/old_rep1)r(old_repr) (new_rep2/old_rep2)、新しい最大担当者を設定する特権のみを含む形式のリストです(750を超える担当者は、1kで確立されたユーザーであっても、卒業後少なくとも3k担当者が必要です。リストは最も高い担当者から最後に最も低い担当者にソートされます。


コードの説明と内訳を追加できると思いますか?
wizzwizz4

@ wizzwizz4完了。
pppery

うーん...今では巧妙なテクニックです。
wizzwizz4

1

Pyth- 71 70 69 77 75 77バイト

eS,Z-@CM"\x00ǴϨלߐৄஸᎈ✐㪘丠憨"xKCM"\x00ŞˮϨӢǴלߐඬྠᎈ"e<#QK

テストスイート


これはwizzwizz4テストケースでは機能しません。
wizzwizz4

1
一部の回答は、New Userテストケースでは機能しません。私はあなたのものがそうではないことに気づきました。修正してください!
wizzwizz4

コードの説明と内訳を追加できると思いますか?
wizzwizz4

1

LiveCode 8、318バイト

function g c
    local b,g,r
    put c into r
    put "0.15,0.35,0.5,0.75,1,1.25,1.5,2,3.5,4,5" into b
    split b by ","
    put "0.3,0.1,0.6,0.2,0.4,0.5,1,2,3,4,5" into g
    split g by ","
    repeat with i=1 to 11
       if c>b[i]*1000 and not c>g[i]*5000 then put max(r,g[i]*5000) into r
    end repeat
    return r-c
 end g

wizzwizz4提案され、ここでの説明は次のとおりです。

function g c 

g単一のパラメーターを受け取るという名前の関数を作成しますccユーザーの現在の評判です。def g(c)Pythonと同等です。

local b,g,r

3つのローカル変数を作成しますbgrbベータ版の特権のg評価カットオフであり、卒業後の新しい評価カットオフが含まれ、r特権を保持するために卒業後にユーザーが持つ必要がある合計評価を表します。

put c into r

これにより、c(ユーザーの現在の評判)の値がにコピーされrます。r=cPythonと同等)

put "0.15,0.35,0.5,0.75,1,1.25,1.5,2,3.5,4,5" into b

上記と同様に、これはbを、ベータでの評価カットオフのコンマ区切りリストを含む文字列に、1000で割った値を設定b="0.15,0.35,0.5,0.75,1,1.25,1.5,2,3.5,4,5"します。Pythonの場合と同等です。

split b by ","

これは、区切り文字としてb使用,して、ローカル変数を配列に分割します。この配列には、1000で割ったベータ版の評価カットオフが含まれています。Pythonの場合と同等b.split(",")です。

put "0.3,0.1,0.6,0.2,0.4,0.5,1,2,3,4,5" into g
split g by ","

上記と同じgですが、卒業後の評判カットオフのリストが5000で除算されたリストが含まれるようになりました

repeat with i=1 to 11

for他の言語のループと同様に、これは11回繰り返さiれ、そのたびにシーケンス1から11の次の値が割り当てられます。LiveCodeの配列はインデックス1から始まります。Pythonでは、これはになりますfor i in range(11)

if c>b[i]*1000 and not c>g[i]*5000 then put max(r,g[i]*5000) into r

これが関数のメインロジックです。ユーザーがiベータリストの位置にある特権に対して十分な評判を持っているかどうかを確認し、もしそうであれば、卒業後に特権に対して十分な評判がない場合は、変数を設定しますr(ユーザーの合計評判を表します)卒業後もその特権を保持する必要があります)、その特権の卒業後の評価カットオフまで(新しい評価が前の評価よりも高い場合のみ)。同等のPythonコードはif c>b[i]*1000 and not c>g[i]*5000: r=max(g[i]*5000,r) end repeatになります。繰り返しループを終了します。CまたはJavaに似ています}。LiveCodeは、構文end 'insert contruct nameを使用して、repeatループ、an ifswitch...などを終了します。

return r-c

かなり自明です。

end g

機能を終了しますg


まったく新しいユーザーが私の課題について回答を投稿しますか?私は光栄です。+1およびサイトへようこそ。
wizzwizz4

コードの説明と内訳を追加して、この投稿を改善できます。(コードの下で、コードが何をするかを説明してください。)
wizzwizz4

@ wizzwizz4説明を追加しました。
ペナローザ
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.