Programmation Puzzles et Code Golf est diplômé de la version bêta. Bientôt, nous aurons un design de site personnalisé, et avec cela les limites de réputation pour les privilèges augmenteront. De nombreux utilisateurs perdront des privilèges sur le site. Votre tâche consiste donc à écrire un programme qui nous indique la réputation supplémentaire dont nous aurons besoin pour conserver nos privilèges.
Tâche
Votre tâche consiste à écrire le code le plus court pour trouver la quantité de réputation supplémentaire dont un utilisateur aura besoin pour conserver ses privilèges actuels après la conception du site, compte tenu du nombre de points de réputation.
Entrée sortie
Vous pouvez accepter une entrée et donner une sortie comme vous le souhaitez, tant qu'elle suit ces règles:
Entrée - Un entier de 1 à 250000+ inclus . Votre programme ou fonction doit pouvoir accepter des nombres supérieurs à celui-ci, mais il doit accepter des nombres compris dans cette plage.
Sortie - Un entier représentant le nombre de points de réputation dont l'utilisateur aura besoin pour conserver ses privilèges actuels après l'obtention du diplôme.
Pas de failles standard , s'il vous plaît.
Exemple d'algorithme
- Définir la variable
i
sur l'entrée - Définissez variable
r
sur variablei
. - Tant qu'il
r
n'est pas dans la listebeta
:- Soustraire
1
der
.
- Soustraire
- Réglez
n
sur la positionr
inbeta
. - Défini
r
sur l'élémentn
degraduated
. - Définissez variable
o
sur le résultat der
-
i
. - Si
o
<
0
:- Définissez la variable
o
sur0
.
- Définissez la variable
- Variable de sortie
o
.
les tables
Table des privilèges qui va changer
| 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 |
Table des privilèges qui ne changera pas
| 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 |
Cas de test
wizzwizz4 | 750 | 2250
cat | 2004 | 7996
Dennis ♦ | 72950 | 0
Dr Green Eggs and Ham DJ | 4683 | 15317
New User | 1 | 0
Tous les comptes de réputation ne sont pas corrects au moment de la rédaction
Si vous voulez que votre réputation passée ou présente compte ici, commentez ci-dessous et je l' ajouterai peut-être .
Réponses:
Python, 101 octets
la source
f(750)
devrait l'être1250
, non2000
. Devrait être une solution facile.f(750)
devrait l'être2250
, pas1250
:)f(72950)
donné0
.eval
astuce est vraiment bonne. La combinaison de compression avec ma liste donne 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)
.Gelée ,
4037 octetsEssayez-le en ligne! ou vérifiez tous les cas de test .
Comment ça marche
la source
CJam, 38 octets
Essayez-le en ligne! ou vérifiez tous les cas de test . 1
Comment ça marche
1 Notez que le code contient un octet nul, ce qui provoque des problèmes dans certains navigateurs.
la source
JavaScript (ES6),
13713510281 octetsSi l'utilisateur a 5000 ou plus de réputation
findIndex
échoue, renvoyant -1, donc le résultat est incrémenté pour que je puisse indexer dans le tableau des nouvelles réputations nécessaires. Modifier: enregistré 21 octets en mettant à l'échelle le tableau d'entrée et de sortie.la source
Python, 88 octets
Pour chaque nouveau privilège bêta dépassé, ajoute le montant de répétition nécessaire pour accéder au prochain privilège gradué. Ensuite, le représentant supplémentaire nécessaire est le nouveau représentant moins le représentant actuel, mais pas moins de 0.
Les deux listes de limites de rep sont raccourcies par rep en multiples de
500
.la source
[3]*2+[4]
par[3,3,4]
9 contre 8 octets.Python
156152 octetsLa chaîne de données (
5e3 5r4e3 5r3500 30./7r2e3 5r1500 10./3r500 6r1 1
) est une liste dont le format(old_rep1) (new_rep1/old_rep1)r(old_repr) (new_rep2/old_rep2)
n'inclut que les privilèges qui définissent le nouveau max rep (les utilisateurs avec> 750 rep ont toujours besoin d'au moins 3k rep post-graduation, même s'ils seront un utilisateur établi à 1k. La liste est trié du plus haut représentant en premier au plus bas en dernier.la source
Pyth -
717069777577 octetsSuite de tests .
la source
wizzwizz4
testcase.LiveCode 8, 318 octets
Comme
wizzwizz4
suggéré, voici une explication:Créez une fonction nommée
g
prenant un seul paramètrec
.c
est la réputation actuelle de l'utilisateur. Équivalent àdef g(c)
en Python.Créez trois variables locales:
b
,g
etr
.b
seront les seuils de réputation pour les privilèges en version bêta,g
contiendront les nouveaux seuils de réputation après l'obtention du diplôme etr
représenteront la réputation totale que l'utilisateur devra avoir après l'obtention du diplôme pour conserver ses privilèges.Cela copie la valeur de
c
(la réputation actuelle de l'utilisateur) dansr
. Équivalent àr=c
en Python)Semblable à ci-dessus, cela définit b à une chaîne contenant une liste, délimitée par des virgules, des seuils de réputation en version bêta, divisée par 1000. Équivalent à
b="0.15,0.35,0.5,0.75,1,1.25,1.5,2,3.5,4,5"
en Python.Cela divise la variable locale
b
en un tableau, en utilisant,
comme délimiteur. Ce tableau contient désormais les seuils de réputation en version bêta, divisés par 1000. Équivalent àb.split(",")
en Python.Comme ci-dessus, sauf qu'il
g
contient désormais une liste des seuils de réputation après l'obtention du diplôme, divisée par 5000Semblable à une
for
boucle dans d'autres langues, cela se répète 11 fois, aveci
la valeur suivante attribuée dans la séquence 1 à 11 à chaque fois. Les tableaux dans LiveCode commencent à l'index 1. En Python, ce seraitfor i in range(11)
.C'est la logique principale de la fonction. Il vérifie si l'utilisateur a suffisamment de réputation pour le privilège en position
i
de la liste bêta, si c'est le cas, et s'il n'a pas assez de réputation pour le privilège après l'obtention du diplôme, il définit la variabler
(représentant la réputation totale que l'utilisateur a devront conserver leurs privilèges après l'obtention du diplôme) jusqu'à la limite de réputation après l'obtention du diplôme pour ce privilège (uniquement si la nouvelle réputation est supérieure à la précédente). Le code Python équivalent seraitif c>b[i]*1000 and not c>g[i]*5000: r=max(g[i]*5000,r)
end repeat. Termine la boucle de répétition. Similaire à C ou Java}
. LiveCode utilise la syntaxeend 'insert contruct name
pour terminer unerepeat
boucle, unif
, unswitch
etc ...Assez explicite.
Met fin à la fonction
g
.la source