Sie sind ein professioneller Hacker und Ihr Chef hat Ihnen gerade befohlen, einem Kandidaten zu helfen, eine bevorstehende Wahl zu gewinnen. Ihre Aufgabe ist es, die Wahlmaschinendaten zu ändern, um die Ergebnisse des Kandidaten zu verbessern.
Abstimmungsgeräte speichern Abstimmungsergebnisse als zwei ganze Zahlen: die Anzahl der Stimmen für Ihren Kandidaten ( v1
) und die Anzahl der Stimmen für seinen Gegner ( v2
).
Nach wochenlangen Recherchen haben Sie eine Sicherheitslücke im System gefunden und können den Wert von v1
um eine ganze Zahl erhöhen x
und den Wert von v2
um dieselbe verringern x
. Es gibt jedoch eine Einschränkung: Sie müssen den Sicherheits-Hash-Code konstant halten:
- Sicherheits-Hash-Code:
(v1 + v2*2) modulo 7
Außerdem muss der Wert für x
minimal sein, damit Ihre Änderungen unbemerkt bleiben können.
Ihr Programm sollte als Eingabe akzeptieren v1
und v2
; es sollte den optimalen Wert für x
so ausgeben v1>v2
.
In einigen Fällen können Sie die Ergebnisse nicht hacken. Sie müssen nicht damit umgehen (dies kann zu Problemen mit Ihrem Chef führen, aber das ist eine andere Geschichte).
Testfälle
100,123 --> 14
47,23 --> 0
40,80 --> 21
62,62 --> 7
1134,2145 --> 511
quelle
.0
(Gefällt mir) gefolgt werden100.0 123.0
?Antworten:
Python 2, 30 Bytes
u
ist unsere Stimmen,t
ist ihre Stimmen.quelle
(t-u)/14*7
einfach sein(t-u)/2
?t-u == 16
. Dann isty<x?0:(y-x)/2-(y-x)/2%7+7;
, Ich dachte, ich sollte die Differenz in zwei Hälften teilen und dann das nächste Vielfache von 7 finden. Wie bist du dazu gekommen?Python 2, 30 Bytes
quelle
y<x?0:(y-x)/2-(y-x)/2%7+7;
, Ich dachte, ich sollte die Differenz in zwei Hälften teilen und dann das nächste Vielfache von 7 finden. Wie bist du dazu gekommen?(b-a)/2
wir/7*7
auf das nächste Vielfache von 7 ab und+7
gehen dann zum nächsten aufwärts. Das heißt, es sei denn, wir würden eine negative Zahl erhalten. In diesem Fall können wir trotzdem eine 0 machen. Wenn wir diemax
mit 0 nehmen, wird dies erreicht. Einiges davon bestand auch darin, den Ausdruck zu optimieren und ihn in den Testfällen auszuführen, um zu sehen, was funktioniert./7*7
ist eine Art Ausdruck, der beim Golfen oft genug auftaucht, so dass ich ihn als eine Redewendung betrachte. Die Idee ist, dasn/7
Wort zu ergreifenn/7
, dh herauszufinden, wie viele ganze Vielfache in das Wort7
passenn
. Dann7
bringt das Multiplizieren mit auf dieses Vielfache von7
.-2/7*7
, und da die Python- Bodenteilung in Richtung negative Unendlichkeit rundet,2/7
ist -1, also7*-7+1
0. Also geben beide Seiten 0, was gut funktioniert.Mathematica, 22 Bytes
Reine Funktion mit Argumenten
#
und#2
. Erreicht die maximale Rekursionstiefe, wenn die Abweichung größer als ist7*2^16 = 458752
.Erläuterung
quelle
Gelee , 9 Bytes
Probieren Sie es online!
Wie es funktioniert
quelle
Eigentlich 13 Bytes
Probieren Sie es online!
Verwendet dieselbe
max((b-a)/14*7+7,0)
Formel wie xnor und orlp.Erläuterung:
quelle
Groovy, 41
37BytesDies ist eine namenlose Schließung. Danke an
xnor
undorlp
für die Formel undJames holderness
für den Hinweis auf einen Fehler.Die vorherige Lösung, die
intdiv()
für die Ganzzahldivision verwendet wurde, verhält sich jedoch anders als//
in Python.Probieren Sie es hier aus!
quelle
Haskell,
3024 BytesEin Infix-Operator, der zuerst die Anzahl der Stimmen Ihres bevorzugten Kandidaten erfasst. Verwendet die gleiche Logik wie die anderen Antworten zum Runden mit
/14*7+7
.quelle
until
:a#b=until(\c->a+c>b-c)(+7)0
oder bessera%b=until(>(b-a)/2)(+7)0
. Obwohl eine arithmetische Formel wahrscheinlich immer noch kürzer ist.head[...]
fast immer auf[...]!!0
Fractional a
, ich bin nicht sicher, ob das akzeptiert wird. Damit istdiv
es zwar kürzer, also danke! Verwendete schließlich den mathematischen Ansatz - und tatsächlich waren es noch zwei Bytes kürzer als bis. @Laikoni: Nettes Golfen, wusste nichts davon, werde mich daran erinnern.J, 15 Bytes
Ein bisschen interessant, ich habe an einem Problem gearbeitet und dachte, ich hätte eine Lösung, aber wie sich herausstellte, habe ich mich geirrt. Naja. Probieren Sie es online! Hier ist das Ergebnis:
quelle
CJam,
131215 Bytes]
um[
dank ETHproductions.Offensichtlich Orlp und Xnor Methoden gestohlen.
Eingabe sind die beiden durch ein Leerzeichen getrennten Zahlen:
100 123
Erläuterung:
quelle
D
ist nur13
. Und Sie können ein Byte speichern, indem Sie den Wert vor der Multiplikation erhöhen, anstatt danach 7 zu addieren.m]
ist ein Höchstbetrag.m[
ist Boden.Excel VBA,
2420 BytesImmediates Fensterfunktion , die eine Eingabe von Zellen stattfindet
A1
undB1
und gibt an den Fenstern immediates VBE.Unterprogrammversion, 43 Bytes
Übernimmt die Eingabe
b, c
als variant \ integer und druckt in das VBE-Direktfensterquelle
Julia 0,5 , 26 Bytes
Probieren Sie es online!
quelle
PHP,
4139 BytesNimmt Eingaben von Befehlszeilenargumenten entgegen. renn mit
-r
.75 zusätzliche Bytes, nur um $ a> $ b zu handhaben: - /quelle
Japt , 14 Bytes
Führe es hier aus!
Vielen Dank an ETHproductions für das Abschneiden von 3 Bytes!
quelle
f
Akzeptiert ein Argument und Stockwerke bis zu einem Vielfachen dieser Zahl, so kann man meiner MeinungV-U /2+7 f7 w0
nach drei Bytes sparen.05AB1E , 9 Bytes
Probieren Sie es online!
Erläuterung
Oder eine entsprechende Funktion mit der gleichen Anzahl von Bytes, die mit einem Nummernpaar arbeitet
Probieren Sie es online!
quelle
Dyalog APL , 14 Bytes
Nimmt
v1
als rechtes Argument undv2
als linkes Argument.0 ⌈
das Maximum von Null und7 ×
sieben Mal1 + (
...)
eins plus ...⌊
der Boden von14 ÷⍨
ein vierzehntel von-
der Unterschied (zwischen den Argumenten)TryAPL online!
quelle
Befunge, 19 Bytes
Probieren Sie es online!
Dies basiert auf einer etwas anderen Formel als die von orlp und xnor verwendete, da der Befunge-Referenzinterpreter andere Rundungsregeln für Python verwendet. Befunge hat auch nicht den Luxus eines
max
Operation.Die Grundberechnung sieht folgendermaßen aus:
Den Code genauer untersuchen:
quelle
Los , 36 Bytes
func(a,b int)int{return(b-a)/14*7+7}
Probieren Sie es online!
quelle
JavaScript (ES6), 31 Byte
Code-Snippet anzeigen
quelle
Java 8, 31 Bytes
(a,b)->b<a?0:(a=(b-a)/2)+7-a%7;
Dies ist ein Lambda-Ausdruck, dem zugewiesen werden kann
IntBinaryOperator
.a ist die Stimme deines Kandidaten, b die deines Gegners.
java rundet für die Division mit positiven ganzen Zahlen ab und
+7-a%7
wird verwendet, um den Wert auf das nächste Vielfache von 7 zu erhöhen.quelle
a->b->(b=(b-a)/14*7+7)>0?b:0
ist 3 Bytes kürzer, aber ich mag deine Herangehensweise mehr, also +1 von mir. Fast jede Antwort verwendet bereitsmax((b-a)/14*7+7,0)
..a->b->(b=(b-a)/14*7+7)>0?b:0
gibt das Ergebnis auch direkt zurück: Probieren Sie es hier aus. Oder meinen Sie, Sie bevorzugen Lambdas mit einer einzigen Methode gegenüber dem Curry von Lambdas?(a,b)->
Vorzug vora->b->
, obwohl es länger ist?Ruby,
2627 BytesGrundsätzlich das Gleiche wie die Python-Lösung von xnor und orlp,
mit einem Twist (keine Notwendigkeit, 7 zu addieren, da negatives Modulo 1 Byte in Ruby spart, keine Ahnung von Python)Keine Verdrehung, die Verdrehung war nur ein schlimmer Fall von kognitiver Dissonanz. Vergiss es. Ja wirklich. :-)
quelle
Scala, 31 Bytes
Die ternäre Version ist 2 Bytes länger
quelle
Nudel , 16 Bytes
Gezogen Gleichung von xor und orlp Antworten, aber da noodel keinen max Fähigkeit hat mußte das Umgehen.
Versuch es:)
Wie es funktioniert
quelle
Pyth , 16 Bytes
Probieren Sie es hier aus!
quelle