Eres un hacker profesional y tu jefe te acaba de ordenar que ayudes a un candidato a ganar las próximas elecciones. Su tarea es alterar los datos de las máquinas de votación para aumentar los resultados del candidato.
Las máquinas de votación almacenan los resultados de la votación como dos enteros: el número de votos para su candidato ( v1
) y el número de votos para su oponente ( v2
).
Después de semanas de investigación, ha encontrado un agujero de seguridad en el sistema y puede aumentar el valor de v1
un número entero x
y disminuir el valor de v2
la misma x
. Pero hay una restricción, debe mantener constante el código hash de seguridad:
- código hash de seguridad:
(v1 + v2*2) modulo 7
Además, el valor de x
debe ser mínimo para que sus cambios pasen desapercibidos.
Su programa debe aceptar como entrada v1
y v2
; debería generar el valor óptimo para x
eso v1>v2
.
Hay algunos casos para los que no puede hackear los resultados; no tiene que manejarlos (esto podría generar problemas con su jefe, pero esa es otra historia).
Casos de prueba
100,123 --> 14
47,23 --> 0
40,80 --> 21
62,62 --> 7
1134,2145 --> 511
fuente
.0
(Me gusta100.0 123.0
)?Respuestas:
Python 2, 30 bytes
u
son nuestros votos,t
son sus votos.fuente
(t-u)/14*7
ser justo(t-u)/2
?t-u == 16
. Entonces 16/14 * 7 = 7, pero 16/2 = 8. Además, no estás ejecutando como Python 2.y<x?0:(y-x)/2-(y-x)/2%7+7;
, Pensé que debería tomar la diferencia dividirla por la mitad, y luego encontrar el múltiplo más cercano de 7. ¿Cómo llegaste a esto?Python 2, 30 bytes
fuente
y<x?0:(y-x)/2-(y-x)/2%7+7;
, Pensé que debería tomar la diferencia dividirla por la mitad, y luego encontrar el múltiplo más cercano de 7. ¿Cómo llegaste a esto?(b-a)/2
, hacemos/7*7
redondear hacia abajo al múltiplo más cercano de 7, y luego+7
subir al siguiente hacia arriba. Es decir, a menos que obtengamos un número negativo, en cuyo caso estamos ganando de todos modos, solo podemos hacer 0. Tomar elmax
con 0 logra esto. Algo de eso también fue simplemente ajustar la expresión y ejecutarla en los casos de prueba para ver qué funciona./7*7
es un tipo de expresión que aparece con suficiente frecuencia en el golf que creo que es un idioma. La idea es lan/7
toma de la palabran/7
, es decir, encuentra cuántos múltiplos enteros de7
ajuste dentron
. Luego, multiplicar por lo7
lleva a ese número múltiplo de7
.-2/7*7
, y dado que la división de piso de Python se redondea hacia el infinito negativo,2/7
es -1, entonces7*-7+1
es 0. Entonces, ambos lados dan 0, lo que funciona bien.Mathematica, 22 bytes
Función pura con argumentos
#
y#2
. Golpea la profundidad máxima de recursión si la discrepancia es mayor que7*2^16 = 458752
.Explicación
fuente
Jalea , 9 bytes
Pruébalo en línea!
Cómo funciona
fuente
En realidad , 13 bytes
Pruébalo en línea!
Utiliza la misma
max((b-a)/14*7+7,0)
fórmula que usan xnor y orlp.Explicación:
fuente
Groovy, 41
37bytesEste es un cierre sin nombre. Gracias a
xnor
yorlp
por la fórmula yJames holderness
por señalar un error.La solución anterior utilizada
intdiv()
para la división de enteros pero se comporta de manera diferente a la//
utilizada en python.Pruébalo aquí!
fuente
Haskell,
3024 bytesUn operador infijo que toma primero el número de votos de su candidato preferido. Utiliza la misma lógica que las otras respuestas de redondeo
/14*7+7
.fuente
until
:a#b=until(\c->a+c>b-c)(+7)0
o mejora%b=until(>(b-a)/2)(+7)0
. Aunque una fórmula aritmética es aún más corta.head[...]
casi siempre se pueden acortar a[...]!!0
Fractional a
, no estoy seguro de si eso es aceptado. Condiv
esto es aunque más corto, ¡así que gracias! Finalmente utilicé el enfoque matemático, y de hecho, fueron otros dos bytes más cortos que hasta. @Laikoni: buen golf, no sabía sobre eso, lo recordaré.J, 15 bytes
Un poco interesante, estaba trabajando en un problema y pensé que tenía una solución, pero resultó que estaba equivocado. Oh bien. Pruébalo en línea! Aquí está el resultado:
fuente
CJam,
131215 bytes]
a[
gracias a ETHproductions.Robaron descaradamente los métodos de Orlp y Xnor.
La entrada son los dos números separados por un espacio:
100 123
Explicación:
fuente
D
es única13
. Y puede guardar un byte incrementando el valor antes de la multiplicación en lugar de sumar 7 después.m]
es ceil;m[
Es piso.Excel VBA,
2420 bytesImmediates función de ventana que toma la entrada de las células
A1
yB1
y salidas a la ventana de la VBE immediates.Versión de subrutina, 43 bytes
toma la entrada
b, c
como variante \ entero e imprime en la ventana VBE inmediatamentefuente
Julia 0.5 , 26 bytes
Pruébalo en línea!
fuente
PHP,
4139 bytestoma datos de los argumentos de la línea de comandos; correr con
-r
.75 bytes adicionales solo para manejar $ a> $ b: - /fuente
Japt , 14 bytes
¡Ejecútalo aquí!
¡Gracias ETHproductions por reducir 3 bytes!
fuente
f
acepta un argumento y pisos a un múltiplo de ese número, por lo que creo que puede hacerloV-U /2+7 f7 w0
para guardar tres bytes.05AB1E , 9 bytes
Pruébalo en línea!
Explicación
O una función correspondiente con el mismo número de bytes que opera en un par de números
Pruébalo en línea!
fuente
Dyalog APL , 14 bytes
Toma
v1
como argumento correcto yv2
como argumento izquierdo.0 ⌈
el máximo de cero y7 ×
siete veces1 + (
...)
uno más ...⌊
el piso de14 ÷⍨
un decimocuarto de-
la diferencia (entre los argumentos)TryAPL en línea!
fuente
Befunge, 19 bytes
Pruébalo en línea!
Esto se basa en una fórmula ligeramente diferente a la utilizada por orlp y xnor, ya que el intérprete de referencia de Befunge tiene diferentes reglas de redondeo para Python. Befunge tampoco tiene el lujo de una
max
operación.El cálculo básico se ve así:
Examinando el código con más detalle:
fuente
Go , 36 bytes
func(a,b int)int{return(b-a)/14*7+7}
Pruébalo en línea!
fuente
JavaScript (ES6), 31 bytes
Mostrar fragmento de código
fuente
Java 8, 31 bytes
(a,b)->b<a?0:(a=(b-a)/2)+7-a%7;
Esta es una expresión lambda asignable a
IntBinaryOperator
.a es el voto de tu candidato, b es el de tu oponente.
Java redondea hacia abajo para la división con enteros positivos, por lo que
+7-a%7
se utiliza para aumentar el valor al siguiente múltiplo de 7.fuente
a->b->(b=(b-a)/14*7+7)>0?b:0
es 3 bytes más corto, pero me gusta un poco más tu enfoque, así que +1 de mi parte. Casi todas las respuestas dadas ya usanmax((b-a)/14*7+7,0)
...a->b->(b=(b-a)/14*7+7)>0?b:0
también devuelve el resultado directamente: Pruébelo aquí. ¿O quiere decir que prefiere las lambdas de un solo método antes que las lambdas al curry;(a,b)->
preferencia sobrea->b->
, a pesar de que es más largo?Ruby,
2627 bytesBásicamente lo mismo que la solución Python de xnor y orlp,
con un giro (no es necesario agregar 7, debido al módulo negativo, ahorra 1 byte en ruby, no sé sobre python)Sin giro, el giro fue solo un mal caso de disonancia cognitiva. Olvídalo. De Verdad. :-)
fuente
Scala, 31 bytes
La versión ternaria es 2 bytes más larga
fuente
Noodel , 16 bytes
La ecuación extraída de las respuestas xor y orlp , pero dado que Noodel no tiene una capacidad máxima, tuvo que solucionar eso.
Intentalo:)
Cómo funciona
fuente
Pyth , 16 bytes
Pruébalo aquí!
fuente