Programmierung von Rätseln und Code Golf hat die Beta abgeschlossen. Bald werden wir ein benutzerdefiniertes Site-Design erhalten, und damit werden die Reputationsgrenzen für Privilegien steigen. Viele Benutzer verlieren Berechtigungen auf der Site. Ihre Aufgabe ist es also, ein Programm zu schreiben, das uns sagt, wie viel zusätzlichen Ruf wir benötigen, um unsere Privilegien zu behalten.
Aufgabe
Ihre Aufgabe ist es, den kürzesten Code zu schreiben, um zu ermitteln, wie viel zusätzliche Reputation ein Benutzer benötigt, um seine aktuellen Privilegien nach dem Site-Design zu behalten, wenn die Anzahl der Reputationspunkte gegeben ist.
Input-Output
Sie können Eingaben und Ausgaben nach Belieben annehmen, sofern die folgenden Regeln eingehalten werden:
Eingabe - Eine Ganzzahl von 1 bis einschließlich 250000+ . Ihr Programm oder Ihre Funktion sollte in der Lage sein, größere Zahlen zu akzeptieren, aber es muss Zahlen in diesem Bereich akzeptieren.
Ausgabe - Eine Ganzzahl, die die Anzahl der Reputationspunkte angibt, die der Benutzer erhalten muss, um seine aktuellen Berechtigungen nach dem Abschluss beizubehalten.
Bitte keine Standardlücken .
Beispielalgorithmus
- Variable
i
auf den Eingang setzen - Variable
r
auf Variable setzeni
. - While
r
ist nicht in der Listebeta
:- Subtrahieren
1
vonr
.
- Subtrahieren
- Stellen Sie
n
auf die Positionr
inbeta
. - Auf
r
Artikeln
von setzengraduated
. - Setze Variable
o
auf das Ergebnis vonr
-
i
. - Wenn
o
<
0
:- Variable setzen
o
auf0
.
- Variable setzen
- Ausgabevariable
o
.
Tabellen
Tabelle der Berechtigungen, die geändert werden
| 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 |
Tabelle der Berechtigungen, die sich nicht ändern
| 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 |
Testfälle
wizzwizz4 | 750 | 2250
cat | 2004 | 7996
Dennis ♦ | 72950 | 0
Dr Green Eggs and Ham DJ | 4683 | 15317
New User | 1 | 0
Zum Zeitpunkt des Schreibens sind nicht alle Reputationszählungen korrekt.
Wenn Sie möchten, dass Ihre vergangene oder gegenwärtige Reputation hier gezählt wird, kommentieren Sie sie einfach unten und ich werde sie möglicherweise hinzufügen.
Antworten:
Python, 101 Bytes
quelle
f(750)
sollte es1250
nicht sein2000
. Sollte eine einfache Lösung sein.f(750)
sollte sein2250
, nicht1250
:)f(72950)
geben müssen0
.eval
Trick ist wirklich gut. Die Kombination gibt es mit meiner Liste Kompression 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 BytesProbieren Sie es online! oder überprüfen Sie alle Testfälle .
Wie es funktioniert
quelle
CJam, 38 Bytes
Probieren Sie es online! oder überprüfen Sie alle Testfälle . 1
Wie es funktioniert
1 Beachten Sie, dass der Code ein Null-Byte enthält, was in einigen Browsern zu Problemen führt.
quelle
JavaScript (ES6),
13713510281 ByteWenn der Benutzer über 5000 oder mehr Reputationen verfügt,
findIndex
schlägt die Rückgabe von -1 fehl, sodass das Ergebnis so hoch ist, dass ich in das Array der benötigten neuen Reputationen indexieren kann. Bearbeiten: 21 Byte durch Skalieren des Eingabe- und Ausgabearrays gespeichert.quelle
Python, 88 Bytes
Fügt für jede neue Beta-Berechtigung, die überschritten wird, den Wiederholungsbetrag hinzu, der erforderlich ist, um die nächste abgestufte Berechtigung zu erhalten. Dann ist die zusätzlich benötigte Wiederholung die neue Wiederholung abzüglich der aktuellen Wiederholung, jedoch nicht weniger als 0.
Beide Wiederholungsgrenzenlisten werden durch Wiederholungen in Vielfachen von gekürzt
500
.quelle
[3]*2+[4]
mit[3,3,4]
, 9 vs 8 Byte.Python
156152 BytesDie Datenzeichenfolge (
5e3 5r4e3 5r3500 30./7r2e3 5r1500 10./3r500 6r1 1
) ist eine Liste, deren Format(old_rep1) (new_rep1/old_rep1)r(old_repr) (new_rep2/old_rep2)
nur Berechtigungen enthält, mit denen die neue maximale Anzahl der Wiederholungen festgelegt wird (Benutzer mit mehr als 750 Wiederholungen benötigen nach dem Abschluss immer noch mindestens 3 KB Wiederholungen, obwohl sie bereits ein fester Benutzer bei 1 KB sind. Die Liste enthält Folgendes: sortiert von der höchsten bis zur niedrigsten Wiederholung.quelle
Pyth -
717069777577 BytesTest Suite .
quelle
wizzwizz4
Testfall.LiveCode 8, 318 Bytes
Wie
wizzwizz4
vorgeschlagen, hier eine Erklärung:Erstellen Sie eine Funktion mit dem Namen,
g
die einen einzelnen Parameter verwendetc
.c
ist der aktuelle Ruf des Benutzers. Entsprichtdef g(c)
in Python.Erstellen Sie drei lokale Variablen:
b
,g
, undr
.b
wird die Reputationsgrenze für Privilegien in der Beta sein,g
wird die neuen Reputationsgrenzen nach dem Abschluss enthalten undr
wird die gesamte Reputation darstellen, die der Benutzer nach dem Abschluss haben muss, um seine Privilegien zu behalten.Dies kopiert den Wert von
c
(den aktuellen Ruf des Benutzers) inr
. Entsprichtr=c
in Python)Ähnlich wie oben wird b auf einen String gesetzt, der eine durch Kommas getrennte Liste der Reputationsgrenzwerte in Beta enthält, geteilt durch 1000. Entspricht
b="0.15,0.35,0.5,0.75,1,1.25,1.5,2,3.5,4,5"
in Python.Dadurch wird die lokale Variable
b
in ein Array aufgeteilt und,
als Begrenzer verwendet. Dieses Array enthält jetzt die Reputationsgrenzen in Beta, geteilt durch 1000. Entsprichtb.split(",")
in Python.Das Gleiche wie oben, außer dass
g
jetzt eine Liste der Reputationsgrenzwerte nach Abschluss des Studiums, geteilt durch 5000, enthalten istÄhnlich wie bei einer
for
Schleife in anderen Sprachen wird dies elf Mal wiederholt, wobeii
jedes Mal der nächste Wert in der Reihenfolge 1 bis 11 zugewiesen wird. Arrays in LiveCode beginnen bei Index 1. In Python wäre diesfor i in range(11)
.Dies ist die Hauptlogik der Funktion. Es wird überprüft, ob der Benutzer an der Stelle der Betaliste über genügend Reputation für das Privileg
i
verfügt. Wenn dies der Fall ist und er nach dem Abschluss nicht über genügend Reputation für das Privileg verfügt, wird die Variable festgelegtr
(die die gesamte Reputation des Benutzers darstellt) müssen ihre Privilegien nach dem Abschluss behalten), um die Reputation nach dem Abschluss für dieses Privileg zu kürzen (nur wenn die neue Reputation höher ist als die vorherige). Der entsprechende Python-Code wäreif c>b[i]*1000 and not c>g[i]*5000: r=max(g[i]*5000,r)
end repeat Beendet die Wiederholungsschleife. Ähnlich wie C oder Java}
. LiveCode verwendet die Syntaxend 'insert contruct name
, um einerepeat
Schleife, einif
, einswitch
usw. zu beenden.Ziemlich selbsterklärend.
Beendet die Funktion
g
.quelle