A programação de quebra-cabeças e o Code Golf se formou na versão beta. Em breve, obteremos um design de site personalizado e, com isso, os limites de reputação para privilégios subirão. Muitos usuários perderão privilégios no site. Portanto, sua tarefa é escrever um programa que nos diga quanta reputação extra precisaremos para manter nossos privilégios.
Tarefa
Sua tarefa é escrever o código mais curto para encontrar a quantidade de reputação extra que um usuário precisará para manter seus privilégios atuais após o design do site, considerando o número de pontos de reputação.
Entrada / Saída
Você pode aceitar entrada e fornecer saída da maneira que desejar, desde que siga estas regras:
Entrada - Um número inteiro de 1 a 250000+, inclusive . Seu programa ou função deve poder aceitar números maiores que isso, mas deve aceitar números nesse intervalo.
Saída - Um número inteiro que representa o número de pontos de reputação que o usuário precisará obter para manter seus privilégios atuais após a graduação.
Sem brechas padrão , por favor.
Algoritmo de exemplo
- Definir variável
i
para a entrada - Defina a variável
r
como variáveli
. - Enquanto
r
não estiver na listabeta
:- Subtrair
1
der
.
- Subtrair
- Defina
n
para a posição der
inbeta
. - Defina
r
para o itemn
degraduated
. - Defina a variável
o
para o resultado der
-
i
. - Se
o
<
0
:- Defina a variável
o
como0
.
- Defina a variável
- Variável de saída
o
.
Tabelas
Tabela de privilégios que mudarão
| 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 |
Tabela de privilégios que não serão alterados
| 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 teste
wizzwizz4 | 750 | 2250
cat | 2004 | 7996
Dennis ♦ | 72950 | 0
Dr Green Eggs and Ham DJ | 4683 | 15317
New User | 1 | 0
Nem todas as contagens de reputação estão corretas no momento da redação.
Se você deseja que sua reputação passada ou presente conte aqui, basta comentar abaixo e talvez eu a adicione.
Respostas:
Python, 101 bytes
fonte
f(750)
deveria ser1250
, não2000
. Deve ser uma solução fácil.f(750)
deve ser2250
, não1250
:)f(72950)
dado0
.eval
truque é realmente bom. Combinando isso com a minha lista de compressão dá 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éia ,
4037 bytesExperimente online! ou verifique todos os casos de teste .
Como funciona
fonte
CJam, 38 bytes
Experimente online! ou verifique todos os casos de teste . 1 1
Como funciona
1 Observe que o código contém um byte nulo, o que causa problemas em alguns navegadores.
fonte
JavaScript (ES6),
13713510281 bytesSe o usuário tiver 5000 ou mais reputação,
findIndex
falhará, retornando -1, para que o resultado seja incrementado para que eu possa indexar na matriz de novas reputações necessárias. Editar: salvou 21 bytes escalando a matriz de entrada e saída.fonte
Python, 88 bytes
Para cada novo privilégio beta excedido, adiciona a quantidade de representantes necessária para obter o próximo privilégio graduado. Em seguida, o representante adicional necessário é o novo representante menos o representante atual, mas não menos que 0.
Ambas as listas de limites de representantes são encurtadas por representantes em múltiplos de
500
.fonte
[3]*2+[4]
por[3,3,4]
9 ou 8 bytes.Python
156152 bytesA sequência de dados (
5e3 5r4e3 5r3500 30./7r2e3 5r1500 10./3r500 6r1 1
) é uma lista com o formato(old_rep1) (new_rep1/old_rep1)r(old_repr) (new_rep2/old_rep2)
apenas incluindo privilégios que definem o novo representante máximo (usuários com> 750 representantes ainda precisam de pelo menos 3 mil representantes de pós-graduação, mesmo que eles sejam um usuário estabelecido em 1 mil. A lista é classificado do representante mais alto primeiro para o representante mais baixo por último.fonte
Pitão -
717069777577 bytesConjunto de Teste .
fonte
wizzwizz4
testcase.LiveCode 8, 318 bytes
Como
wizzwizz4
sugerido, aqui está uma explicação:Crie uma função denominada
g
usando um único parâmetroc
.c
é a reputação atual do usuário. Equivalente adef g(c)
em Python.Criar três variáveis locais:
b
,g
, er
.b
serão os pontos de corte de reputação para privilégios na versão beta,g
conterão os novos pontos de corte de reputação após a graduação er
representarão a reputação total que o usuário terá após a graduação para manter seus privilégios.Isso copia o valor de
c
(a reputação atual do usuário) emr
. Equivalente ar=c
em Python)Semelhante ao acima, isso define b como uma cadeia de caracteres que contém uma lista delimitada por vírgula dos pontos de corte de reputação em beta, divididos por 1000. Equivalente a
b="0.15,0.35,0.5,0.75,1,1.25,1.5,2,3.5,4,5"
em Python.Isso divide a variável local
b
em uma matriz, usando,
como delimitador. Essa matriz agora contém os pontos de reputação em beta, divididos por 1000. Equivalente ab.split(",")
em Python.O mesmo que acima, exceto que
g
agora contém uma lista dos pontos de corte de reputação após a graduação, divididos por 5000Semelhante a um
for
loop em outros idiomas, isso se repete 11 vezes, comi
o próximo valor atribuído na sequência 1 a 11 a cada vez. As matrizes no LiveCode começam no índice 1. No Python, isso seriafor i in range(11)
.Essa é a principal lógica da função. Ele verifica se o usuário tem reputação suficiente para o privilégio na posição
i
da lista beta; se houver, e se não tiver reputação suficiente para o privilégio após a graduação, define a variávelr
(representando a reputação total que o usuário terá que manter seus privilégios após a graduação) para o ponto de corte da reputação após a graduação para esse privilégio (somente se a nova reputação for maior que a anterior). O código Python equivalente seriaif c>b[i]*1000 and not c>g[i]*5000: r=max(g[i]*5000,r)
end repeat Finaliza o loop repeat. Semelhante ao C ou Java}
. O LiveCode usa a sintaxeend 'insert contruct name
para finalizar umrepeat
loop, umif
, umswitch
etc ...Bastante auto-explicativo.
Termina a função
g
.fonte