Você é um hacker profissional e seu chefe acabou de ordenar que você ajude um candidato a vencer uma próxima eleição. Sua tarefa é alterar os dados das urnas para aumentar os resultados do candidato.
As máquinas de votação armazenam os resultados da votação como dois números inteiros: o número de votos para seu candidato ( v1
) e o número de votos para seu oponente ( v2
).
Após semanas de pesquisa, você encontrou uma falha de segurança no sistema e pode aumentar o valor de v1
por um número inteiro x
e diminuir o valor de v2
pelo mesmo x
. Mas há uma restrição, você precisa manter o código de hash de segurança constante:
- código hash de segurança:
(v1 + v2*2) modulo 7
Além disso, o valor de x
deve ser mínimo para que suas alterações possam passar despercebidas.
Seu programa deve aceitar como entrada v1
e v2
; deve gerar o valor ideal para x
isso v1>v2
.
Existem alguns casos em que você não pode hackear os resultados; você não precisa lidar com eles (isso pode levar a problemas com seu chefe, mas isso é outra história).
Casos de teste
100,123 --> 14
47,23 --> 0
40,80 --> 21
62,62 --> 7
1134,2145 --> 511
fonte
.0
(Curtir100.0 123.0
)?Respostas:
Python 2, 30 bytes
u
são nossos votos,t
são seus votos.fonte
(t-u)/14*7
ser justo(t-u)/2
?t-u == 16
. Entãoy<x?0:(y-x)/2-(y-x)/2%7+7;
, Pensei em dividir a diferença ao meio e depois encontrar o múltiplo mais próximo de 7. Como você chegou a isso?Python 2, 30 bytes
fonte
y<x?0:(y-x)/2-(y-x)/2%7+7;
, Pensei em dividir a diferença ao meio e depois encontrar o múltiplo mais próximo de 7. Como você chegou a isso?(b-a)/2
, fazemos/7*7
arredondamentos para o múltiplo mais próximo de 7 e, em seguida , subimos+7
para o próximo. Ou seja, a menos que obtivéssemos um número negativo, nesse caso, estamos ganhando de qualquer maneiramax
. Algumas delas também estavam apenas ajustando a expressão e executando-a nos casos de teste para ver o que funciona./7*7
é um tipo de expressão que aparece com bastante frequência no golfe e que eu penso nisso como uma expressão idiomática. A idéia é an/7
tomada do chãon/7
, ou seja, encontra quantos múltiplos inteiros de7
ajuste dentron
. Então, multiplicar por7
traz para esse número múltiplo de7
.-2/7*7
e, como a divisão de piso do Python se aproxima do infinito negativo,2/7
é -1, o mesmo7*-7+1
é 0. Portanto, os dois lados dão 0, o que funciona bem.Mathematica, 22 bytes
Função pura com argumentos
#
e#2
. Atinge a profundidade máxima de recursão se a discrepância for maior que7*2^16 = 458752
.Explicação
fonte
Geléia , 9 bytes
Experimente online!
Como funciona
fonte
Na verdade , 13 bytes
Experimente online!
Usa a mesma
max((b-a)/14*7+7,0)
fórmula que xnor e orlp usam.Explicação:
fonte
Groovy, 41
37bytesEste é um fechamento sem nome. Obrigado
xnor
eorlp
pela fórmula eJames holderness
por apontar um bug.A solução anterior usada
intdiv()
para divisão inteira, mas se comporta de maneira diferente da//
usada em python.Experimente aqui!
fonte
Haskell,
3024 bytesUm operador de infix recebendo o número de votos do seu candidato preferido primeiro. Usa a mesma lógica que as outras respostas de arredondamento
/14*7+7
.fonte
until
:a#b=until(\c->a+c>b-c)(+7)0
ou melhora%b=until(>(b-a)/2)(+7)0
. Embora uma fórmula aritmética ainda seja provavelmente mais curta.head[...]
[...]!!0
Fractional a
, não tenho certeza se isso é aceito. Comdiv
ele é mais curto, então obrigado! Eventualmente, usou a abordagem matemática - e, de fato, era mais dois bytes menor que até o momento. @Laikoni: bom golfe, não sabia sobre isso, vai se lembrar.J, 15 bytes
Meio interessante, eu estava trabalhando em um problema e achei que tinha uma solução, mas, no fim, estava errado. Ah bem. Experimente online! Aqui está o resultado:
fonte
CJam,
131215 bytes]
para[
graças a ETHproductions.Roubou descaradamente os métodos orlp e xnor.
Entrada são os dois números separados por um espaço:
100 123
Explicação:
fonte
D
é apenas13
. E você pode salvar um byte, incrementando o valor antes da multiplicação, em vez de adicionar 7 depois.m]
fosse teto;m[
é andar.Excel VBA,
2420 bytesFunção Immediates janela que recebe a entrada a partir de células
A1
eB1
e saídas para a janela do VBE imediatos.Versão da sub-rotina, 43 bytes
recebe a entrada
b, c
como variante \ inteiro e imprime na janela do VBE imediatamentefonte
Julia 0,5 , 26 bytes
Experimente online!
fonte
PHP,
4139 bytesrecebe entrada dos argumentos da linha de comando; corra com
-r
.75 bytes extras apenas para manipular $ a> $ b: - /fonte
Japonês , 14 bytes
Execute-o aqui!
Obrigado ETHproductions por reduzir 3 bytes!
fonte
f
aceita um argumento e usa um múltiplo desse número, então acho que você podeV-U /2+7 f7 w0
salvar três bytes.05AB1E , 9 bytes
Experimente online!
Explicação
Ou uma função correspondente com a mesma contagem de bytes operando em um par de números
Experimente online!
fonte
Dyalog APL , 14 bytes
Toma
v1
como argumento certo ev2
como argumento esquerdo.0 ⌈
o máximo de zero e7 ×
sete vezes1 + (
...)
mais um ...⌊
o chão de14 ÷⍨
um décimo quarto de-
a diferença (entre os argumentos)TryAPL online!
fonte
Befunge, 19 bytes
Experimente online!
Isso depende de uma fórmula ligeiramente diferente da usada pelo orlp e xnor, já que o interpretador de referência Befunge possui regras de arredondamento diferentes para o Python. Befunge também não tem o luxo de uma
max
operação.O cálculo básico é assim:
Examinando o código em mais detalhes:
fonte
Go , 36 bytes
func(a,b int)int{return(b-a)/14*7+7}
Experimente online!
fonte
JavaScript (ES6), 31 bytes
Mostrar snippet de código
fonte
Java 8, 31 bytes
(a,b)->b<a?0:(a=(b-a)/2)+7-a%7;
Esta é uma expressão lambda atribuível a
IntBinaryOperator
.a é o voto do seu candidato, b é o seu oponente.
java arredonda para baixo para divisão com números inteiros positivos, então
+7-a%7
é usado para aumentar o valor para o próximo múltiplo de 7.fonte
a->b->(b=(b-a)/14*7+7)>0?b:0
é 3 bytes mais curto, mas eu meio que gosto mais da sua abordagem, então +1 de mim. Quase todos os resposta já dada usamax((b-a)/14*7+7,0)
..a->b->(b=(b-a)/14*7+7)>0?b:0
também retorna o resultado diretamente: tente aqui. Ou você quer dizer que prefere lambdas de método único ao invés de curdar lambdas;(a,b)->
preferência sobrea->b->
, mesmo que seja mais longo?Ruby,
2627 bytesBasicamente, o mesmo que as soluções Python do xnor e do orlp,
com um toque (não é necessário adicionar 7, por causa do módulo negativo, economiza 1 byte em ruby, não sabe sobre python)Sem reviravoltas, a reviravolta foi apenas um caso grave de dissonância cognitiva. Esqueça. Realmente. :-)
fonte
Scala, 31 bytes
A versão ternária é 2 bytes mais longa
fonte
Noodel , 16 bytes
A equação extraída das respostas xor e orlp , mas como Noodel não tem uma capacidade máxima, foi necessário contornar isso.
Tente:)
Como funciona
fonte
Pitão , 16 bytes
Experimente aqui!
fonte