Программирование Пазлы и Code Golf окончил бета-версию. Вскоре мы получим индивидуальный дизайн сайта, и с этим границы репутации для привилегий будут расширяться. Многие пользователи потеряют привилегии на сайте. Итак, ваша задача - написать программу, которая скажет нам, сколько дополнительной репутации нам потребуется, чтобы сохранить наши привилегии.
задача
Ваша задача - написать кратчайший код для определения количества дополнительной репутации, которое потребуется пользователю, чтобы сохранить свои текущие привилегии после оформления сайта, учитывая количество баллов репутации.
Ввод, вывод
Вы можете принимать входные данные и предоставлять выходные данные любым удобным для вас способом, если они соответствуют следующим правилам:
Ввод - целое число от 1 до 250000+ включительно . Ваша программа или функция должна быть в состоянии принимать числа больше этого, но она должна принимать числа в этом диапазоне.
Выход - целое число, представляющее количество очков репутации, которые пользователь должен получить, чтобы сохранить свои текущие привилегии после выпуска.
Нет стандартных лазеек , пожалуйста.
Пример алгоритма
- Установить переменную
i
на вход - Установить переменную
r
в переменнуюi
. - Пока
r
нет в спискеbeta
:- Вычесть
1
изr
.
- Вычесть
- Установите
n
в положениеr
вbeta
. - Установите
r
для пунктаn
изgraduated
. - Установите переменную
o
в результатr
-
i
. - Если
o
<
0
:- Установите переменную
o
в0
.
- Установите переменную
- Выходная переменная
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 |
Таблица привилегий, которая не изменится
| 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 |
Testcases
wizzwizz4 | 750 | 2250
cat | 2004 | 7996
Dennis ♦ | 72950 | 0
Dr Green Eggs and Ham DJ | 4683 | 15317
New User | 1 | 0
Не все показатели репутации являются правильными на момент написания статьи.
Если вы хотите, чтобы ваш прошлый или текущий счет репутации здесь, просто прокомментируйте ниже, и я, возможно, добавлю его.
Ответы:
Python, 101 байт
источник
f(750)
должно быть1250
, нет2000
. Должно быть легко исправить.f(750)
должно быть2250
, нет1250
:)f(72950)
дать0
.eval
трюк действительно хорош. Сочетание этого с моим списком сжатия дает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)
.Желе ,
4037 байтПопробуйте онлайн! или проверьте все тесты .
Как это работает
источник
CJam, 38 байт
Попробуйте онлайн! или проверьте все контрольные примеры . 1
Как это работает
1 Обратите внимание, что код содержит нулевой байт, что вызывает проблемы в некоторых браузерах.
источник
JavaScript (ES6),
13713510281 байтЕсли у пользователя 5000 или более репутации, происходит
findIndex
сбой, возвращая -1, поэтому результат увеличивается до такого, который я могу проиндексировать в массив новых необходимых репутаций. Редактировать: Сохранение 21 байта путем масштабирования входного и выходного массива.источник
Python, 88 байт
Для каждой новой превышенной привилегии бета добавляет количество повторений, необходимое для получения следующей привилегии. Затем требуется дополнительный повтор - новый, за вычетом текущего, но не менее 0.
Оба списка границ повторений сокращены на повтор в кратных
500
.источник
[3]*2+[4]
на[3,3,4]
9 против 8 байт.Python
156152 байтаСтрока данных (
5e3 5r4e3 5r3500 30./7r2e3 5r1500 10./3r500 6r1 1
) представляет собой список(old_rep1) (new_rep1/old_rep1)r(old_repr) (new_rep2/old_rep2)
только в формате, включающем привилегии, которые устанавливают новый максимальный повтор (пользователям с> 750 повторениями по-прежнему требуется не менее 3 тыс. Повторений после выпуска, даже если они будут установленным пользователем с 1 тыс. Списка. отсортировано по возрастанию от первого до последнего.источник
Pyth -
717069777577 байтТестовый пакет .
источник
wizzwizz4
теста.LiveCode 8, 318 байт
Как и
wizzwizz4
предполагалось, вот объяснение:Создайте функцию с именем
g
с одним параметромc
.c
текущая репутация пользователя Эквивалентно дляdef g(c)
Python.Создание трех локальных переменных:
b
,g
, иr
.b
будет являться ограничением репутации для привилегий в бета-версии,g
будет содержать новые ограничения репутации после выпуска иr
будет представлять общую репутацию, которую пользователь должен будет иметь после окончания обучения, чтобы сохранить свои привилегии.Это копирует значение
c
(текущую репутацию пользователя) вr
. Эквивалентr=c
в Python)Как и выше, это устанавливает b в строку, содержащую разделенный запятыми список срезов репутации в бета-версии, разделенный на 1000. Эквивалентен
b="0.15,0.35,0.5,0.75,1,1.25,1.5,2,3.5,4,5"
в Python.Это разбивает локальную переменную
b
на массив, используя,
в качестве разделителя. Этот массив теперь содержит ограничения репутации в бета-версии, разделенные на 1000. Эквивалентно дляb.split(",")
Python.То же, что и выше, за исключением того, что
g
теперь содержит список срезов репутации после выпуска, разделенный на 5000Подобно
for
циклу в других языках, это повторяется 11 раз, и каждый разi
присваивается следующее значение в последовательности от 1 до 11. Массивы в LiveCode начинаются с индекса 1. В Python это будетfor i in range(11)
.Это основная логика функции. Он проверяет, имеет ли пользователь достаточную репутацию для привилегии в положении
i
бета-списка, если это так, и если у него недостаточно репутации для привилегии после выпуска, он устанавливает переменнуюr
(представляющую общую репутацию, которую пользователь для получения этой привилегии придется сохранить свои привилегии после получения диплома) до уровня репутации после получения диплома (только если новая репутация выше предыдущей). Эквивалентный код Python будетif c>b[i]*1000 and not c>g[i]*5000: r=max(g[i]*5000,r)
end repeat Заканчивает цикл повторения. Похоже на C или Java}
. LiveCode использует синтаксисend 'insert contruct name
для завершенияrepeat
цикла, аif
, иswitch
т. Д ...Довольно очевидный.
Заканчивает функцию
g
.источник