Programming Puzzles and Code Golf telah lulus dari versi beta. Segera kami akan mendapatkan desain situs kustom, dan dengan itu batas-batas reputasi untuk hak istimewa akan naik. Banyak pengguna akan kehilangan hak istimewa di situs. Jadi tugas Anda adalah menulis sebuah program yang memberi tahu kami berapa banyak reputasi tambahan yang akan kami butuhkan untuk menjaga hak istimewa kami.
Tugas
Tugas Anda adalah menulis kode terpendek untuk menemukan jumlah reputasi ekstra yang diperlukan pengguna untuk menjaga hak istimewa saat ini setelah desain situs, mengingat jumlah poin reputasi.
Input output
Anda dapat menerima input dan memberikan output dengan cara apa pun yang Anda suka, asalkan mengikuti aturan ini:
Input - Integer dari 1 hingga 250000+ inklusif . Program atau fungsi Anda harus dapat menerima angka yang lebih besar dari ini, tetapi harus menerima angka dalam rentang ini.
Output - Bilangan bulat yang mewakili jumlah poin reputasi yang dibutuhkan pengguna untuk mendapatkan hak istimewa saat ini setelah lulus.
Tolong, jangan ada celah standar .
Contoh algoritma
- Setel variabel
i
ke input - Setel variabel
r
ke variabeli
. - Meskipun
r
tidak ada dalam daftarbeta
:- Kurangi
1
darir
.
- Kurangi
- Setel
n
ke posisir
dalambeta
. - Set
r
ke itemn
darigraduated
. - Setel variabel
o
ke hasilr
-
i
. - Jika
o
<
0
:- Setel variabel
o
menjadi0
.
- Setel variabel
- Variabel keluaran
o
.
Tabel
Daftar hak istimewa yang akan berubah
| 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 |
Daftar hak istimewa yang tidak akan berubah
| 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 |
Testcases
wizzwizz4 | 750 | 2250
cat | 2004 | 7996
Dennis ♦ | 72950 | 0
Dr Green Eggs and Ham DJ | 4683 | 15317
New User | 1 | 0
Tidak semua jumlah reputasi benar pada saat penulisan.
Jika Anda ingin reputasi masa lalu atau sekarang Anda dihitung di sini, cukup komentar di bawah ini dan saya mungkin akan menambahkannya.
Jawaban:
Python, 101 byte
sumber
f(750)
seharusnya1250
, bukan2000
. Seharusnya perbaikan yang mudah.f(750)
seharusnya2250
, tidak1250
:)f(72950)
memberi0
.eval
Trik Anda sangat bagus. Menggabungkan dengan daftar kompresi saya memberikan 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)
.Jelly ,
4037 byteCobalah online! atau verifikasi semua kasus uji .
Bagaimana itu bekerja
sumber
CJam, 38 byte
Cobalah online! atau verifikasi semua kasus uji . 1
Bagaimana itu bekerja
1 Perhatikan bahwa kode berisi byte nol, yang menyebabkan masalah di beberapa browser.
sumber
JavaScript (ES6),
13713510281 byteJika pengguna memiliki 5000 atau lebih reputasi kemudian
findIndex
gagal, menghasilkan -1, sehingga hasilnya bertambah sehingga saya dapat mengindeks ke dalam array reputasi baru yang diperlukan. Sunting: Disimpan 21 byte dengan menskalakan array input dan output.sumber
Python, 88 byte
Untuk setiap hak beta yang baru terlampaui, tambahkan jumlah perwakilan yang diperlukan untuk mendapatkan hak istimewa yang lulus berikutnya. Kemudian, rep tambahan yang diperlukan adalah rep baru minus rep saat ini, tetapi tidak kurang dari 0.
Kedua daftar batas rep disingkat oleh rep dalam beberapa
500
.sumber
[3]*2+[4]
dengan[3,3,4]
, 9 vs 8 byte.Python
156152 byteString data (
5e3 5r4e3 5r3500 30./7r2e3 5r1500 10./3r500 6r1 1
) adalah daftar dengan format(old_rep1) (new_rep1/old_rep1)r(old_repr) (new_rep2/old_rep2)
hanya termasuk hak pribadi yang menetapkan maks rep baru (pengguna dengan> 750 rep masih membutuhkan setidaknya 3k rep pasca-kelulusan, meskipun mereka akan menjadi pengguna mapan di 1k. Daftar ini adalah diurutkan dari rep tertinggi pertama ke rep terendah terakhir.sumber
Pyth -
717069777577 byteTest Suite .
sumber
wizzwizz4
testcase.LiveCode 8, 318 byte
Seperti yang
wizzwizz4
disarankan, berikut ini penjelasannya:Buat fungsi bernama
g
mengambil parameter tunggalc
.c
adalah reputasi pengguna saat ini. Setara dengandef g(c)
Python.Buat tiga variabel lokal:
b
,g
, danr
.b
akan menjadi cutoff reputasi untuk hak istimewa dalam versi beta,g
akan berisi cutoff reputasi baru setelah lulus, danr
akan mewakili total reputasi yang harus dimiliki pengguna setelah lulus untuk mempertahankan hak istimewa mereka.Ini menyalin nilai
c
(reputasi pengguna saat ini) ker
. Setara denganr=c
Python)Mirip dengan di atas, ini menetapkan b ke string yang berisi daftar potongan-potongan reputasi koma dalam versi beta, dibagi dengan 1000. Setara dengan
b="0.15,0.35,0.5,0.75,1,1.25,1.5,2,3.5,4,5"
Python.Ini membagi variabel lokal
b
menjadi array, menggunakan,
sebagai pembatas. Array ini sekarang berisi cutoffs reputasi dalam versi beta, dibagi dengan 1000. Setara denganb.split(",")
di Python.Sama seperti di atas, kecuali itu
g
sekarang berisi daftar cutoff reputasi setelah lulus, dibagi dengan 5000Mirip dengan
for
loop dalam bahasa lain, ini berulang 11 kali, dengani
menetapkan nilai berikutnya dalam urutan 1 hingga 11 setiap kali. Array dalam LiveCode mulai dari indeks 1. Dalam Python, ini akan menjadifor i in range(11)
.Ini adalah logika utama dari fungsi. Ia memeriksa untuk melihat apakah pengguna memiliki reputasi yang cukup untuk hak istimewa dalam posisi
i
daftar beta, jika demikian, dan jika mereka tidak memiliki reputasi yang cukup untuk hak istimewa setelah lulus, itu menetapkan variabelr
(mewakili total reputasi bahwa pengguna harus harus mempertahankan hak istimewa mereka setelah lulus) untuk cutoff reputasi setelah lulus untuk hak istimewa itu (hanya jika reputasi baru lebih tinggi dari yang sebelumnya). Kode Python yang setara akan menjadiif c>b[i]*1000 and not c>g[i]*5000: r=max(g[i]*5000,r)
akhir yang berulang. Berakhirnya lingkaran yang berulang. Mirip dengan C atau Java}
. LiveCode menggunakan sintaksend 'insert contruct name
untuk mengakhirirepeat
loop, anif
,switch
dll ...Cukup jelas.
Mengakhiri fungsinya
g
.sumber