Вы профессиональный хакер, и ваш начальник только что приказал вам помочь кандидату выиграть предстоящие выборы. Ваша задача - изменить данные машин для голосования, чтобы повысить результаты кандидата.
Машины для голосования сохраняют результаты голосования в виде двух целых чисел: количество голосов за вашего кандидата ( v1
) и количество голосов за их оппонента ( v2
).
После нескольких недель исследований вы обнаружили дыру в безопасности системы и можете увеличить значение v1
на целое число x
и уменьшить значение v2
на то же самое x
. Но есть ограничение, вы должны поддерживать постоянный хэш-код безопасности:
- хэш-код безопасности:
(v1 + v2*2) modulo 7
Кроме того, значение x
должно быть минимальным, чтобы ваши изменения могли остаться незамеченными.
Ваша программа должна принять в качестве ввода v1
и v2
; он должен вывести оптимальное значение для x
так v1>v2
.
В некоторых случаях вы не можете взломать результаты; Вы не должны справляться с ними (это может привести к проблемам с вашим боссом, но это другая история).
Контрольные примеры
100,123 --> 14
47,23 --> 0
40,80 --> 21
62,62 --> 7
1134,2145 --> 511
источник
.0
(Нравится100.0 123.0
)?Ответы:
Python 2, 30 байт
u
это наши голоса,t
это их голоса.источник
(t-u)/14*7
быть просто(t-u)/2
?t-u == 16
. Тогдаy<x?0:(y-x)/2-(y-x)/2%7+7;
Я подумал, что должен взять разницу, разделить ее пополам, а затем найти ближайший коэффициент, кратный 7. Как вы к этому пришли?Python 2, 30 байт
источник
y<x?0:(y-x)/2-(y-x)/2%7+7;
Я подумал, что должен взять разницу, разделить ее пополам, а затем найти ближайший коэффициент, кратный 7. Как вы к этому пришли?(b-a)/2
, мы делаем/7*7
округление вниз до ближайшего кратного 7, а затем+7
поднимаемся до следующего. То есть, если мы не получим отрицательное число, в этом случае мы все равно выигрываем, можно просто сделать 0. Взятиеmax
с 0 достигает этого. Некоторые из них также просто настраивали выражение и запускали его в тестовых примерах, чтобы посмотреть, что работает./7*7
такое выражение, которое появляется в гольфе достаточно часто, и я считаю его идиомой. Идея состоит вn/7
томn/7
, чтобы найти пол , т.е. найти, сколько целых кратных7
соответствий внутриn
. Затем умножение на7
приносит это число, кратное7
.-2/7*7
, и так как деление полов Python округляет в сторону отрицательной бесконечности,2/7
равно -1,7*-7+1
равно 0. Таким образом, обе стороны дают 0, что отлично работает.Mathematica, 22 байта
Чистая функция с аргументами
#
и#2
. Достигает максимальной глубины рекурсии, если расхождение больше, чем7*2^16 = 458752
.объяснение
источник
Желе , 9 байт
Попробуйте онлайн!
Как это устроено
источник
На самом деле , 13 байтов
Попробуйте онлайн!
Использует ту же
max((b-a)/14*7+7,0)
формулу, что и xnor и orlp.Объяснение:
источник
Groovy, 41
37байтЭто безымянное закрытие. Благодаря
xnor
иorlp
для формулы иJames holderness
за указание на ошибку.Предыдущее решение использовалось
intdiv()
для целочисленного деления, но оно ведет себя не так, как//
в Python.Попробуй это здесь!
источник
Haskell,
3024 байтаОператор инфикса, принимающий количество голосов вашего предпочтительного кандидата первым. Использует ту же логику, что и другие ответы округления с
/14*7+7
.источник
until
:a#b=until(\c->a+c>b-c)(+7)0
или лучшеa%b=until(>(b-a)/2)(+7)0
. Хотя арифметическая формула все еще, вероятно, короче.head[...]
почти всегда можно сократить до[...]!!0
Fractional a
, я не уверен, что это принято. Сdiv
ним хоть и короче, так что спасибо! В конце концов использовался математический подход - и действительно, он был еще на два байта короче, чем до. @Laikoni: хороший гольф, не знал об этом, буду помнить это.J 15 байт
Что-то интересное, я работал над проблемой и думал, что у меня есть решение, но, как оказалось, я ошибался. Ну что ж. Попробуйте онлайн! Вот результат:
источник
CJam,
131215 байтов]
на[
благодаря ETHproductions.Откровенно украл методы orlp и xnor.
Ввод - это два числа, разделенные пробелом:
100 123
Объяснение:
источник
D
это только13
. И вы можете сохранить байт, увеличивая значение перед умножением вместо добавления 7 после.m]
это ceil;m[
это пол.Excel VBA,
2420 байтImmediates функция окна , которая принимает входные данные из ячеек
A1
иB1
выходов к окну VBE immediates.Версия подпрограммы, 43 байта
принимает входные данные в
b, c
качестве варианта \ целое число и печатает в окно немедленного VBEисточник
Юлия 0,5 , 26 байт
Попробуйте онлайн!
источник
PHP,
4139 байтпринимает входные данные из аргументов командной строки; беги с
-r
.75 дополнительных байтов только для обработки $ a> $ b: - /источник
Japt , 14 байт
Запустите это здесь!
Спасибо ETHproductions за избавление от 3 байтов!
источник
f
принимает аргумент и задает число, кратное этому числу, поэтому я думаю, что вы можетеV-U /2+7 f7 w0
сэкономить три байта.05AB1E , 9 байтов
Попробуйте онлайн!
объяснение
Или соответствующая функция с тем же счетчиком байтов, работающая с парой номеров
Попробуйте онлайн!
источник
Dyalog APL , 14 байтов
Принимает в
v1
качестве правого аргумента и вv2
качестве левого аргумента.0 ⌈
максимум нуля и7 ×
семь раз1 + (
...)
один плюс ...⌊
пол14 ÷⍨
четырнадцатый из-
разница (между аргументами)Попробуй APL онлайн!
источник
Befunge, 19 байт
Попробуйте онлайн!
Это опирается на формулу, немного отличающуюся от той, что используется orlp и xnor, поскольку ссылочный интерпретатор Befunge имеет другие правила округления, чем Python. У Befunge также нет роскоши
max
операции.Основной расчет выглядит так:
Изучаем код более подробно:
источник
Go , 36 байт
func(a,b int)int{return(b-a)/14*7+7}
Попробуйте онлайн!
источник
JavaScript (ES6), 31 байт
Показать фрагмент кода
источник
Java 8, 31 байт
(a,b)->b<a?0:(a=(b-a)/2)+7-a%7;
Это лямбда-выражение, присваиваемое
IntBinaryOperator
.a - голоса вашего кандидата, b - голоса вашего оппонента.
Java округляет для деления с положительными целыми числами, поэтому
+7-a%7
используется для увеличения значения до следующего кратного 7.источник
a->b->(b=(b-a)/14*7+7)>0?b:0
на 3 байта короче, но мне больше нравится твой подход, так что +1 от меня. Почти каждый ответ на данный вопрос уже используетmax((b-a)/14*7+7,0)
..a->b->(b=(b-a)/14*7+7)>0?b:0
также возвращает результат напрямую: попробуйте здесь. Или вы имеете в виду, что предпочитаете лямбды с одним методом, а не лямбды с карри;(a,b)->
предпочтения закончилисьa->b->
, хотя это дольше?Рубин,
2627 байтПо сути, это то же самое, что и решение xnor и orlp для Python,
с изюминкой (не нужно добавлять 7, из-за отрицательного значения по модулю, сохраняет 1 байт в ruby, не знаю о python)Нет, поворот был просто плохой случай когнитивного диссонанса. Забудь это. В самом деле. :-)
источник
Скала, 31 байт
Тройная версия на 2 байта длиннее
источник
Noodel , 16 байтов
Вытащил уравнение из ответов xor и orlp , но поскольку у Нуделя нет максимальной возможности, пришлось обойти это.
Попробуй:)
Как это устроено
источник
Pyth , 16 байт
Попробуй это здесь!
источник