Vous êtes un pirate informatique professionnel et votre patron vient de vous ordonner d'aider un candidat à remporter les prochaines élections. Votre tâche consiste à modifier les données des machines à voter pour améliorer les résultats du candidat.
Les machines à voter enregistrent les résultats de vote sous la forme de deux entiers: le nombre de votes pour votre candidat ( v1
) et le nombre de votes pour son adversaire ( v2
).
Après des semaines de recherche, vous avez trouvé une faille de sécurité dans le système et vous pouvez augmenter la valeur de v1
par un entier x
et diminuer la valeur de v2
par la même chose x
. Mais il y a une contrainte, vous devez garder le code de hachage de sécurité constant:
- code de hachage de sécurité:
(v1 + v2*2) modulo 7
En outre, la valeur de x
doit être minimale pour que vos modifications puissent passer inaperçues.
Votre programme devrait accepter comme entrée v1
et v2
; il devrait générer la valeur optimale pour x
so v1>v2
.
Dans certains cas, vous ne pouvez pas pirater les résultats. vous n'êtes pas obligé de les gérer (cela pourrait entraîner des problèmes avec votre patron, mais c'est une autre histoire).
Cas de test
100,123 --> 14
47,23 --> 0
40,80 --> 21
62,62 --> 7
1134,2145 --> 511
la source
.0
(J'aime100.0 123.0
)?Réponses:
Python 2, 30 octets
u
ce sont nos votes, cet
sont leurs votes.la source
(t-u)/14*7
être juste(t-u)/2
?t-u == 16
. Alorsy<x?0:(y-x)/2-(y-x)/2%7+7;
, Je pensais que je devrais prendre la différence en la divisant en deux, puis trouver le plus proche multiple de 7. Comment êtes-vous arrivé à cela?Python 2, 30 octets
la source
y<x?0:(y-x)/2-(y-x)/2%7+7;
, Je pensais que je devrais prendre la différence en la divisant en deux, puis trouver le plus proche multiple de 7. Comment êtes-vous arrivé à cela?(b-a)/2
, nous/7*7
arrondissons les nombres au multiple de 7 le plus proche, puis+7
montons au suivant. Autrement dit, à moins que nous obtenions un nombre négatif, dans ce cas, nous gagnons quand même, nous ne pouvons que faire 0. Prendre lemax
avec 0 permet d’atteindre cet objectif. Certaines d'entre elles consistaient également à peaufiner l'expression et à l'exécuter sur les cas de test pour voir ce qui fonctionnait./7*7
est un type d'expression qui apparaît assez souvent dans le golf pour que je le considère comme un idiome. L'idée est den/7
prendre la parolen/7
, c'est-à-dire de trouver le nombre entier de multiples d'7
ajustement à l'intérieurn
. Ensuite, multiplier par le7
ramène à ce nombre multiple de7
.-2/7*7
, et puisque Python arrondit les divisions d'étage vers l'infini négatif,2/7
vaut -1, donc7*-7+1
0. Donc, les deux côtés donnent 0, ce qui fonctionne bien.Mathematica, 22 octets
Fonction pure avec des arguments
#
et#2
. Touche la profondeur de récursivité maximale si la différence est supérieure à7*2^16 = 458752
.Explication
la source
Gelée , 9 octets
Essayez-le en ligne!
Comment ça fonctionne
la source
En fait , 13 octets
Essayez-le en ligne!
Utilise la même
max((b-a)/14*7+7,0)
formule que xnor et orlp.Explication:
la source
Groovy, 41 à
37octetsC'est une fermeture sans nom. Merci à
xnor
etorlp
pour la formule etJames holderness
pour avoir signalé un bug.La solution précédente utilisait la
intdiv()
division entière, mais son comportement était différent de celui//
utilisé en python.Essayez-le ici!
la source
Haskell,
30 à24 octetsUn opérateur infixe prenant en premier le nombre de voix de votre candidat préféré. Utilise la même logique que les autres réponses d'arrondi avec
/14*7+7
.la source
until
:,a#b=until(\c->a+c>b-c)(+7)0
ou mieuxa%b=until(>(b-a)/2)(+7)0
. Bien qu'une formule arithmétique soit encore probablement plus courte.head[...]
est presque toujours possible de raccourcir[...]!!0
Fractional a
, je ne sais pas si cela est accepté. Avecdiv
c'est bien plus court, alors merci! Finalement utilisé l'approche mathématique - et en effet, il était encore deux octets plus court que jusqu'à. @ Laikoni: bon golf, je ne savais pas que celui-là, s'en souviendra.J, 15 octets
Assez intéressant, je travaillais sur un problème et je pensais avoir une solution, mais il s'avère que je me suis trompé. Tant pis. Essayez-le en ligne! Voici le résultat:
la source
CJam,
131215 octets]
en[
grâce à ETHproductions.Volé de manière flagrante les méthodes orlp et xnor.
L'entrée est les deux nombres séparés par un espace:
100 123
Explication:
la source
D
est seulement13
. Et vous pouvez enregistrer un octet en incrémentant la valeur avant multiplication au lieu d’ajouter 7 par la suite.m]
se passait;m[
est le sol.Excel VBA,
2420 octetsImmediates fonction de fenêtre qui accepte une entrée à partir de cellules
A1
et deB1
et sorties à la fenêtre du VBE.Version du sous-programme, 43 octets
prend une entrée en
b, c
tant que variant \ integer et s'imprime dans la fenêtre VBE immédiatela source
Julia 0.5 , 26 octets
Essayez-le en ligne!
la source
PHP,
4139 octetsprend les arguments de la ligne de commande; courir avec
-r
.75 octets supplémentaires juste pour gérer $ a> $ b: - /la source
Japt , 14 octets
Exécutez-le ici!
Merci à ETHproductions d’avoir supprimé 3 octets!
la source
f
accepte un argument et prend un multiple de ce nombre, je pense doncV-U /2+7 f7 w0
pouvoir économiser trois octets.05AB1E , 9 octets
Essayez-le en ligne!
Explication
Ou une fonction correspondante avec le même nombre d'octets opérant sur une paire de nombres
Essayez-le en ligne!
la source
Dyalog APL , 14 octets
Prend
v1
comme argument droit etv2
comme argument gauche.0 ⌈
le maximum de zéro et7 ×
Sept fois1 + (
...)
un plus ...⌊
le sol de14 ÷⍨
un quatorzième de-
la différence (entre les arguments)TryAPL en ligne!
la source
Befunge, 19 octets
Essayez-le en ligne!
Cela repose sur une formule légèrement différente de celle utilisée par orlp et xnor, car l'interpréteur de référence Befunge a des règles d'arrondi différentes de celles de Python. Befunge n'a pas non plus le luxe d'une
max
opération.Le calcul de base ressemble à ceci:
Examiner le code plus en détail:
la source
Go , 36 octets
func(a,b int)int{return(b-a)/14*7+7}
Essayez-le en ligne!
la source
JavaScript (ES6), 31 octets
Afficher l'extrait de code
la source
Java 8, 31 octets
(a,b)->b<a?0:(a=(b-a)/2)+7-a%7;
Ceci est une expression lambda assignable à
IntBinaryOperator
.a est le vote de votre candidat, b est celui de votre adversaire.
java arrondit la division avec les entiers positifs, elle
+7-a%7
est donc utilisée pour augmenter la valeur jusqu'au prochain multiple de 7.la source
a->b->(b=(b-a)/14*7+7)>0?b:0
est plus court de 3 octets, mais j'aime un peu plus votre approche, donc +1 de moi. Presque chaque réponse donnée utilise déjàmax((b-a)/14*7+7,0)
..a->b->(b=(b-a)/14*7+7)>0?b:0
renvoie également le résultat directement: essayez-le ici. Ou voulez-vous dire que vous préférez les lambdas à une méthode plutôt que les lambdas au curry;(a,b)->
préférence plusa->b->
, même si c'est plus long?Ruby,
26 à27 octetsFondamentalement identique à la solution Python de xnor et orlp,
avec une torsion (inutile d’ajouter 7, en raison de la modulo négative, enregistre 1 octet dans ruby, je ne connais pas python)Aucune torsion, la torsion était juste un mauvais cas de dissonance cognitive. Oublie. Vraiment. :-)
la source
Scala, 31 octets
La version ternaire est plus longue de 2 octets
la source
Noodel , 16 octets
L'équation tirée des réponses xor et orlp , mais puisque Noodel ne dispose pas d'une capacité maximale, il a fallu contourner ce problème .
Essayez-le :)
Comment ça fonctionne
la source
Pyth , 16 octets
Essayez-le ici!
la source