Tôi cần thêm bao nhiêu danh tiếng?


23

Lập trình Câu đố và Code Golf đã tốt nghiệp từ bản beta. Chúng tôi sẽ sớm nhận được một thiết kế trang web tùy chỉnh và cùng với đó, ranh giới danh tiếng cho các đặc quyền sẽ tăng lên. Rất nhiều người dùng sẽ mất đặc quyền trên trang web. Vì vậy, nhiệm vụ của bạn là viết một chương trình cho chúng tôi biết chúng tôi cần thêm bao nhiêu danh tiếng.

Bài tập

Nhiệm vụ của bạn là viết mã ngắn nhất để tìm ra danh tiếng bổ sung mà người dùng sẽ cần để giữ các đặc quyền hiện tại của họ sau khi thiết kế trang web, với số điểm danh tiếng.

Đầu ra đầu vào

Bạn có thể chấp nhận đầu vào và đưa ra đầu ra theo bất kỳ cách nào bạn muốn, miễn là tuân theo các quy tắc sau:

Đầu vào - Bao gồm một số nguyên từ 1 đến 250000+ . Chương trình hoặc chức năng của bạn sẽ có thể chấp nhận các số lớn hơn số này, nhưng nó phải chấp nhận các số trong phạm vi này.

Đầu ra - Một số nguyên biểu thị số điểm danh tiếng mà người dùng sẽ cần có để giữ các đặc quyền hiện tại của họ sau khi tốt nghiệp.

Không có sơ hở tiêu chuẩn , xin vui lòng.

Thuật toán ví dụ

  1. Đặt biến ithành đầu vào
  2. Đặt biến rthành biến i.
  3. Trong khi rkhông có trong danh sách beta:
    1. Trừ 1từ r.
  4. Đặt nở vị trí rtrong beta.
  5. Đặt rthành mục ncủa graduated.
  6. Đặt biến othành kết quả củar - i .
  7. Nếu o < 0 :
    1. Đặt biến othành 0.
  8. Biến đầu ra o.

Những cái bàn

Bảng đặc quyền sẽ thay đổi

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

Bảng đặc quyền sẽ không thay đổi

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

Tủ thử

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

Không phải tất cả số lượng danh tiếng là chính xác tại thời điểm viết
Nếu bạn muốn tính danh tiếng trong quá khứ hoặc hiện tại của bạn ở đây, chỉ cần bình luận bên dưới và tôi có thể thêm nó.


2
Bạn nên bao gồm một vài trường hợp thử nghiệm.
Dennis

3
Btw tham gia vào ngưỡng đại diện meta trong 5 cho các trang web beta. PPCG đã tùy chỉnh để người dùng mới có thể sử dụng hộp cát. Điều này không nên thay đổi khi chúng ta tốt nghiệp.
Dennis

1
@cat Tôi thực sự đã sử dụng nó; cảm ơn!
wizzwizz4

2
@ wizzwizz4 Cảm ơn vì điều đó; Đầu tôi bắt đầu nổ tung và tôi chỉ muốn thêm 250 rep nữa.
mèo

1
@ wizzwizz4 Nah, nó sẽ trông thấp bên cạnh Dennis :-)
xnor

Câu trả lời:


4

Python, 101 byte

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

Tôi nghĩ rằng bạn đang cung cấp đại diện mới mà bạn cần chứ không phải tăng. Vì vậy, f(750)nên 1250, không 2000. Nên là một sửa chữa dễ dàng.
xnor

@xnor Vâng, f(750)nên 2250, không phải 1250:)
orlp

Vẫn cần phải có f(72950)cho 0.
xnor

evalThủ thuật của bạn thực sự tốt. Kết hợp nó với nén danh sách của tôi cho 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

Bạn có nghĩ rằng bạn có thể thêm một giải thích mã và phân tích?
wizzwizz4

4

Thạch , 40 37 byte

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

Hãy thử trực tuyến! hoặc xác minh tất cả các trường hợp thử nghiệm .

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

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 byte

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>

Hãy thử trực tuyến! hoặc xác minh tất cả các trường hợp thử nghiệm . 1

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

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 Lưu ý rằng mã chứa byte rỗng, gây ra sự cố trong một số trình duyệt.


3

JavaScript (ES6), 137 135 102 81 byte

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

Nếu người dùng có 5000 danh tiếng trở lên thì findIndexthất bại, trả về -1, do đó, kết quả được tăng lên để tôi có thể lập chỉ mục vào mảng danh tiếng mới cần thiết. Chỉnh sửa: Đã lưu 21 byte bằng cách chia tỷ lệ mảng đầu vào và đầu ra.

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

Một số câu trả lời không hoạt động với testcase Người dùng mới. Nếu bạn không làm việc, xin vui lòng sửa nó.
wizzwizz4

@ wizzwizz4 Ah, thay đổi đặc quyền meta? Chắc chắn, đó là một sửa chữa đơn giản.
Neil

Bạn có nghĩ rằng bạn có thể thêm một giải thích mã và phân tích?
wizzwizz4

2

Python, 88 byte

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)

Đối với mỗi đặc quyền beta mới vượt quá, hãy thêm số tiền đại diện cần thiết để có được đặc quyền tốt nghiệp tiếp theo. Sau đó, đại diện bổ sung cần thiết là đại diện mới trừ đi đại diện hiện tại, nhưng không ít hơn 0.

Cả hai danh sách ranh giới rep được rút ngắn bởi rep trong bội số của 500.


Bạn cũng có thể thay thế [3]*2+[4]bằng [3,3,4], 9 so với 8 byte.
Máy

@CatsAreFluffy Cảm ơn, tôi quên tôi đã thay đổi chúng từ số thập phân có giá trị.
xnor

2

Python 156 152 byte

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

Chuỗi dữ liệu ( 5e3 5r4e3 5r3500 30./7r2e3 5r1500 10./3r500 6r1 1) là một danh sách (old_rep1) (new_rep1/old_rep1)r(old_repr) (new_rep2/old_rep2)chỉ có định dạng bao gồm các cáo buộc đặt đại diện tối đa mới (người dùng có> 750 đại diện vẫn cần ít nhất 3k đại diện sau khi tốt nghiệp, mặc dù họ sẽ là người dùng thành lập ở mức 1k. sắp xếp từ đại diện cao nhất trước đến đại diện thấp nhất cuối cùng.


Bạn có nghĩ rằng bạn có thể thêm một giải thích mã và phân tích?
wizzwizz4

@ wizzwizz4 Xong.
pppery

Hmm ... bây giờ đó là một kỹ thuật thông minh.
wizzwizz4

1

Pyth - 71 70 69 77 75 77 byte

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

Phòng thử nghiệm .


Điều này không làm việc cho wizzwizz4testcase.
wizzwizz4

1
Một số câu trả lời không hoạt động với testcase Người dùng mới. Tôi đã nhận thấy rằng bạn không; hãy sửa chữa nó!
wizzwizz4

Bạn có nghĩ rằng bạn có thể thêm một giải thích mã và phân tích?
wizzwizz4

1

LiveCode 8, 318 byte

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

Theo wizzwizz4đề xuất, đây là một lời giải thích:

function g c 

Tạo một hàm có tên là glấy một tham số duy nhất c. clà danh tiếng hiện tại của người dùng. Tương đương với def g(c)Python.

local b,g,r

Tạo ba biến cục bộ: b , g, và r. bsẽ là điểm cắt giảm danh tiếng cho các đặc quyền trong phiên bản beta, gsẽ chứa các điểm cắt giảm danh tiếng mới sau khi tốt nghiệp và rsẽ đại diện cho toàn bộ danh tiếng mà người dùng sẽ phải có sau khi tốt nghiệp để giữ lại các đặc quyền của họ.

put c into r

Điều này sao chép giá trị của c(danh tiếng hiện tại của người dùng) vào r. Tương đương với r=cPython)

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

Tương tự như trên, điều này đặt b thành một chuỗi chứa danh sách được phân tách bằng dấu phẩy của các điểm cắt danh tiếng trong phiên bản beta, chia cho 1000. Tương đương với b="0.15,0.35,0.5,0.75,1,1.25,1.5,2,3.5,4,5"Python.

split b by ","

Điều này phân tách biến cục bộ b thành một mảng, sử dụng ,làm dấu phân cách. Mảng này hiện chứa các điểm cắt danh tiếng trong phiên bản beta, chia cho 1000. Tương đương với b.split(",")Python.

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

Tương tự như trên, ngoại trừ việc ghiện có một danh sách các điểm cắt giảm danh tiếng sau khi tốt nghiệp, chia cho 5000

repeat with i=1 to 11

Tương tự như một forvòng lặp trong các ngôn ngữ khác, điều này lặp lại 11 lần, vớii giá trị được gán tiếp theo trong chuỗi 1 đến 11 mỗi lần. Mảng trong LiveCode bắt đầu ở chỉ mục 1. Trong Python, điều này sẽ là 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

Đây là logic chính của chức năng. Nó kiểm tra xem người dùng có đủ danh tiếng cho đặc quyền ở vị trí icủa danh sách beta hay không, nếu vậy và nếu họ không có đủ danh tiếng cho đặc quyền sau khi tốt nghiệp, nó sẽ đặt biến r(đại diện cho toàn bộ danh tiếng mà người dùng sẽ phải giữ lại các đặc quyền của họ sau khi tốt nghiệp) để cắt giảm danh tiếng sau khi tốt nghiệp cho đặc quyền đó (chỉ khi danh tiếng mới cao hơn danh tiếng trước đó). Mã Python tương đương sẽ là if c>b[i]*1000 and not c>g[i]*5000: r=max(g[i]*5000,r) kết thúc lặp lại Kết thúc vòng lặp lặp lại. Tương tự như C hoặc Java }. LiveCode sử dụng cú pháp end 'insert contruct nameđể kết thúc một repeatvòng lặp, một if, switchv.v ...

return r-c

Khá tự giải thích.

end g

Kết thúc chức năng g.


Một người dùng hoàn toàn mới đăng một câu trả lời về thách thức của tôi ? Tôi rất vinh dự. +1 và chào mừng đến với trang web.
wizzwizz4

Bạn có thể cải thiện bài đăng này bằng cách thêm giải thích mã và phân tích. (Giải thích những gì mã làm, từng dòng, bên dưới mã của bạn.)
wizzwizz4

@ wizzwizz4 Đã thêm lời giải thích.
phạt
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.