Programowanie zagadek i Code Golf ukończył beta. Wkrótce otrzymamy niestandardowy projekt strony, a wraz z tym wzrosną granice reputacji przywilejów. Wielu użytkowników utraci uprawnienia na stronie. Twoim zadaniem jest napisanie programu, który mówi nam, ile dodatkowej reputacji będziemy potrzebować, aby zachować nasze przywileje.
Zadanie
Twoim zadaniem jest napisanie najkrótszego kodu, aby znaleźć ilość dodatkowej reputacji, której użytkownik będzie potrzebował, aby zachować swoje obecne uprawnienia po zaprojektowaniu witryny, biorąc pod uwagę liczbę punktów reputacji.
Wejście wyjście
Możesz akceptować dane wejściowe i przekazywać dane wyjściowe w dowolny sposób, pod warunkiem przestrzegania następujących zasad:
Wejście - liczba całkowita od 1 do 250000+ włącznie . Twój program lub funkcja powinna być w stanie przyjmować liczby większe niż to, ale musi akceptować liczby z tego zakresu.
Dane wyjściowe - liczba całkowita reprezentująca liczbę punktów reputacji, które użytkownik będzie musiał uzyskać, aby zachować swoje bieżące uprawnienia po ukończeniu studiów.
Poproszę o brak standardowych luk .
Przykładowy algorytm
- Ustaw zmienną
i
na wejście - Ustaw zmienną
r
na zmiennąi
. - Chociaż
r
nie ma na liściebeta
:- Odejmij
1
odr
.
- Odejmij
- Ustaw
n
na pozycjęr
inbeta
. - Ustaw
r
jako elementn
zgraduated
. - Ustaw zmienną
o
na wynikr
-
i
. - Jeżeli
o
<
0
:- Ustaw zmienną
o
na0
.
- Ustaw zmienną
- Zmienna wyjściowa
o
.
Stoły
Tabela uprawnień, które się zmienią
| 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 uprawnień, które się nie zmienią
| 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 |
Przypadki testowe
wizzwizz4 | 750 | 2250
cat | 2004 | 7996
Dennis ♦ | 72950 | 0
Dr Green Eggs and Ham DJ | 4683 | 15317
New User | 1 | 0
Nie wszystkie liczby reputacji są poprawne w momencie pisania.
Jeśli chcesz, aby liczyła się tutaj twoja przeszła lub obecna reputacja, po prostu skomentuj poniżej, a może dodam ją.
Odpowiedzi:
Python, 101 bajtów
źródło
f(750)
powinno być1250
, nie2000
. Powinno być łatwym rozwiązaniem.f(750)
powinno być2250
, nie1250
:)f(72950)
dać0
.eval
sztuczka jest naprawdę dobra. Łącząc go z mojej listy kompresji daje 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)
.Galaretka ,
4037 bajtówWypróbuj online! lub zweryfikuj wszystkie przypadki testowe .
Jak to działa
źródło
CJam, 38 bajtów
Wypróbuj online! lub zweryfikuj wszystkie przypadki testowe . 1
Jak to działa
1 Zauważ, że kod zawiera bajt zerowy, co powoduje problemy w niektórych przeglądarkach.
źródło
JavaScript (ES6),
13713510281 bajtówJeśli użytkownik ma 5000 lub więcej reputacji, wówczas
findIndex
kończy się niepowodzeniem, zwracając -1, więc wynik jest zwiększany do tego, że mogę indeksować w tablicy potrzebnych nowych reputacji. Edycja: Zapisano 21 bajtów, skalując tablicę wejściową i wyjściową.źródło
Python, 88 bajtów
Za każde przekroczenie nowego przywileju beta dodaje liczbę powtórzeń potrzebną do przejścia do następnego stopniowanego przywileju. Następnie wymagane dodatkowe powtórzenie to nowe powtórzenie minus bieżące powtórzenie, ale nie mniej niż 0.
Obie listy granic rep są skracane przez rep w wielokrotnościach
500
.źródło
[3]*2+[4]
z[3,3,4]
9 vs 8 bajtów.Python
156152 bajtówŁańcuch danych (
5e3 5r4e3 5r3500 30./7r2e3 5r1500 10./3r500 6r1 1
) jest listą w formacie(old_rep1) (new_rep1/old_rep1)r(old_repr) (new_rep2/old_rep2)
zawierającym tylko uprawnienia, które ustawiają nowe maksymalne powtórzenie (użytkownicy z> 750 powtórzeń nadal potrzebują co najmniej 3k powtórzeń po ukończeniu studiów, nawet jeśli będą ustalonym użytkownikiem przy 1k. Lista jest posortowane od najwyższego powtórzenia jako pierwsze do najniższego powtórzenia jako ostatnie.źródło
Pyth -
717069777577 bajtówPakiet testowy .
źródło
wizzwizz4
testowego.LiveCode 8, 318 bajtów
Jak
wizzwizz4
sugerowano, oto wyjaśnienie:Utwórz funkcję o nazwie
g
przyjmującą pojedynczy parametrc
.c
jest obecną reputacją użytkownika. Odpowiednikdef g(c)
w Pythonie.Utwórz trzy zmienne lokalne:
b
,g
, ir
.b
będą odcięcia reputacji dla przywilejów w wersji beta,g
będą zawierać nowe odcięcia reputacji po ukończeniu studiów ir
będą reprezentować całkowitą reputację, jaką użytkownik będzie musiał mieć po ukończeniu studiów, aby zachować swoje uprawnienia.Spowoduje to skopiowanie wartości
c
(bieżącej reputacji użytkownika) dor
. Odpowiednikr=c
w Pythonie)Podobnie jak powyżej, ustawia b na ciąg zawierający rozdzieloną przecinkami listę wartości odcięcia reputacji w wersji beta, podzieloną przez 1000. Odpowiednik
b="0.15,0.35,0.5,0.75,1,1.25,1.5,2,3.5,4,5"
w Pythonie.Dzieli to zmienną lokalną
b
na tablicę, używając,
jako separatora. Ta tablica zawiera teraz odcięcia reputacji w wersji beta, podzielone przez 1000. Odpowiednikb.split(",")
w Pythonie.To samo co powyżej, z tym wyjątkiem, że
g
teraz zawiera listę odcięć reputacji po ukończeniu studiów, podzieloną przez 5000Podobnie jak
for
w innych językach, pętla ta powtarza się 11 razy, za każdym razemi
przypisywana jest kolejna wartość w sekwencji od 1 do 11. Tablice w LiveCode zaczynają się od indeksu 1. W Pythonie byłoby tofor i in range(11)
.To jest główna logika tej funkcji. Sprawdza, czy użytkownik ma wystarczającą reputację do przywileju na pozycji
i
listy beta, jeśli tak, a jeśli nie ma wystarczającej reputacji do przywileju po ukończeniu studiów, ustawia zmiennąr
(reprezentującą całkowitą reputację, którą użytkownik będą musieli zachować swoje przywileje po ukończeniu studiów) do odcięcia reputacji po ukończeniu tego uprawnienia (tylko jeśli nowa reputacja jest wyższa od poprzedniej). Równoważny kod Pythona toif c>b[i]*1000 and not c>g[i]*5000: r=max(g[i]*5000,r)
zakończenie powtarzania Kończy pętlę powtarzania. Podobne do C lub Java}
. LiveCode wykorzystuje składnięend 'insert contruct name
aby zakończyćrepeat
pętlę, co oznaczaif
, Aswitch
itd ...Dość oczywiste.
Kończy funkcję
g
.źródło