더 많은 평판이 필요합니까? 500

프로그래밍 퍼즐과 코드 골프는 베타를 졸업했습니다. 곧 우리는 커스텀 사이트 디자인을 얻게 될 것이며, 그에 따라 권한에 대한 명성이 높아질 것입니다. 많은 사용자가 사이트에 대한 권한을 잃게됩니다. 그래서 당신의 임무는 우리가 우리의 특권을 유지하기 위해 얼마나 많은 추가 평판이 필요한지를 알려주는 프로그램을 작성하는 것입니다.

태스크

당신의 임무는 사용자가 평판 포인트의 수를 고려할 때 사이트 디자인 후 현재 권한을 유지해야하는 추가 평판의 양을 찾기 위해 가장 짧은 코드를 작성하는 것입니다.

입출력

다음 규칙을 따르는 한 원하는 방식으로 입력을 수락하고 출력 할 수 있습니다.

입력 -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

모든 평판 수는 작성 당시 정확한
당신이 원하는 경우 과거 또는 현재 여기에 평판 수, 아래 단지 코멘트를 나는거야 아마 추가합니다.



답변

파이썬, 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)

답변

젤리 , 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.

답변

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 코드에 널 바이트가 포함되어 일부 브라우저에서 문제가 발생합니다.


답변

자바 스크립트 (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

답변

파이썬, 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.


답변

파이썬 156152 바이트

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 이상의 응답이 필요합니다). 가장 높은 담당자부터 가장 낮은 담당자까지 정렬했습니다.


답변

Pyth- 71 70 69 77 75 77 바이트

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

테스트 스위트 .