Programming Puzzles and Code Golf se graduó de beta. Pronto obtendremos un diseño de sitio personalizado, y con eso los límites de reputación para los privilegios aumentarán. Muchos usuarios perderán privilegios en el sitio. Entonces, su tarea es escribir un programa que nos diga cuánta reputación adicional necesitaremos para mantener nuestros privilegios.
Tarea
Su tarea es escribir el código más corto para encontrar la cantidad de reputación adicional que un usuario necesitará para mantener sus privilegios actuales después del diseño del sitio, dada la cantidad de puntos de reputación.
De entrada y salida
Puede aceptar entradas y dar salidas de la forma que desee, siempre que siga estas reglas:
Entrada : un número entero de 1 a 250000+ inclusive . Su programa o función debe poder aceptar números mayores que este, pero debe aceptar números en este rango.
Salida : un número entero que representa el número de puntos de reputación que el usuario necesitará para mantener sus privilegios actuales después de la graduación.
No hay lagunas estándar , por favor.
Algoritmo de ejemplo
- Establecer variable
i
a la entrada - Establecer variable
r
a variablei
. - Mientras
r
no está en la listabeta
:- Restar
1
der
.
- Restar
- Establecer
n
en la posición der
inbeta
. - Establecer
r
como elementon
degraduated
. - Establecer variable
o
al resultado der
-
i
. - Si
o
<
0
:- Establecer variable
o
en0
.
- Establecer variable
- Variable de salida
o
.
Mesas
Tabla de privilegios que cambiará
| 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 |
Tabla de privilegios que no cambiará
| 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 |
Casos de prueba
wizzwizz4 | 750 | 2250
cat | 2004 | 7996
Dennis ♦ | 72950 | 0
Dr Green Eggs and Ham DJ | 4683 | 15317
New User | 1 | 0
No todos los recuentos de reputación son correctos al momento de escribir
Si desea que su reputación pasada o presente cuente aquí, simplemente comente a continuación y tal vez lo agregue.
Respuestas:
Python, 101 bytes
fuente
f(750)
debería ser1250
, no2000
. En caso de ser una solución fácil.f(750)
debería ser2250
, no1250
:)f(72950)
dar0
.eval
truco es realmente bueno. Combinándolo con mi lista de compresión da 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)
.Jalea ,
4037 bytesPruébalo en línea! o verificar todos los casos de prueba .
Cómo funciona
fuente
CJam, 38 bytes
Pruébalo en línea! o verificar todos los casos de prueba .1
Cómo funciona
1 Tenga en cuenta que el código contiene un byte nulo, lo que causa problemas en algunos navegadores.
fuente
JavaScript (ES6),
13713510281 bytesSi el usuario tiene 5000 o más reputación, entonces
findIndex
falla, devolviendo -1, por lo que el resultado se incrementa para que pueda indexar en la matriz de nuevas reputaciones necesarias. Editar: ahorró 21 bytes al escalar la matriz de entrada y salida.fuente
Python, 88 bytes
Por cada nuevo privilegio beta excedido, agrega la cantidad de repeticiones necesaria para llegar al siguiente privilegio graduado. Entonces, la repetición adicional necesaria es la nueva repetición menos la repetición actual, pero no menos de 0.
Ambas listas de límites de representación se acortan por representación en múltiplos de
500
.fuente
[3]*2+[4]
con[3,3,4]
9 vs 8 bytes.Python
156152 bytesLa cadena de datos (
5e3 5r4e3 5r3500 30./7r2e3 5r1500 10./3r500 6r1 1
) es una lista con el formato que(old_rep1) (new_rep1/old_rep1)r(old_repr) (new_rep2/old_rep2)
solo incluye los privilegios que establecen el nuevo representante máximo (los usuarios con> 750 representantes aún necesitan al menos 3k representantes después de la graduación, aunque serán un usuario establecido en 1k. La lista es ordenados de la rep más alta primero a la rep más baja al final.fuente
Pyth -
717069777577 bytesTest Suite .
fuente
wizzwizz4
prueba.LiveCode 8, 318 bytes
Como se
wizzwizz4
sugiere, aquí hay una explicación:Cree una función llamada
g
tomando un solo parámetroc
.c
es la reputación actual del usuario. Equivalente adef g(c)
en Python.Crear tres variables locales:
b
,g
, yr
.b
serán los límites de reputación para los privilegios en beta,g
contendrán los nuevos límites de reputación después de la graduación yr
representarán la reputación total que el usuario tendrá que tener después de la graduación para conservar sus privilegios.Esto copia el valor de
c
(la reputación actual del usuario) enr
. Equivalente ar=c
en Python)Similar a lo anterior, esto establece b en una cadena que contiene una lista delimitada por comas de los límites de reputación en beta, dividida por 1000. Equivalente a
b="0.15,0.35,0.5,0.75,1,1.25,1.5,2,3.5,4,5"
en Python.Esto divide la variable local
b
en una matriz, utilizando,
como delimitador. Esta matriz ahora contiene los límites de reputación en beta, divididos por 1000. Equivalente ab.split(",")
en Python.Igual que el anterior, excepto que
g
ahora contiene una lista de los límites de reputación después de la graduación, dividido por 5000Similar a un
for
bucle en otros idiomas, esto se repite 11 veces, coni
el siguiente valor asignado en la secuencia 1 a 11 cada vez. Las matrices en LiveCode comienzan en el índice 1. En Python, esto seríafor i in range(11)
.Esta es la lógica principal de la función. Comprueba si el usuario tiene suficiente reputación para el privilegio en la posición
i
de la lista beta, si es así, y si no tiene suficiente reputación para el privilegio después de la graduación, establece la variabler
(que representa la reputación total que el usuario tendrá que conservar sus privilegios después de la graduación) al límite de reputación después de la graduación para ese privilegio (solo si la nueva reputación es más alta que la anterior). El código Python equivalente seríaif c>b[i]*1000 and not c>g[i]*5000: r=max(g[i]*5000,r)
end repeat repite el ciclo de repetición. Similar a C o Java}
. LiveCode usa la sintaxisend 'insert contruct name
para finalizar unrepeat
ciclo, unif
, a,switch
etc.Bastante autoexplicativo.
Termina la función
g
.fuente