Jesteś profesjonalnym hakerem, a twój szef właśnie kazał ci pomóc kandydatowi wygrać nadchodzące wybory. Twoim zadaniem jest zmiana danych maszyn do głosowania, aby poprawić wyniki kandydata.
Maszyny do głosowania przechowują wyniki głosowania w postaci dwóch liczb całkowitych: liczby głosów dla twojego kandydata ( v1
) i liczby głosów dla jego przeciwnika ( v2
).
Po tygodniach badań odkryłeś lukę bezpieczeństwa w systemie i możesz zwiększyć wartość v1
o liczbę całkowitą x
i zmniejszyć wartość o v2
to samo x
. Ale jest ograniczenie, musisz utrzymywać stały kod skrótu bezpieczeństwa:
- kod skrótu bezpieczeństwa:
(v1 + v2*2) modulo 7
Ponadto wartość parametru x
musi być minimalna, aby zmiany mogły pozostać niezauważone.
Twój program powinien przyjąć jako wejście v1
i v2
; powinien wygenerować optymalną wartość dla x
tego v1>v2
.
Istnieją przypadki, w których nie można zhakować wyników; nie musisz sobie z nimi poradzić (może to prowadzić do problemów z szefem, ale to już inna historia).
Przypadki testowe
100,123 --> 14
47,23 --> 0
40,80 --> 21
62,62 --> 7
1134,2145 --> 511
źródło
.0
(Lubię to100.0 123.0
)?Odpowiedzi:
Python 2, 30 bajtów
u
to nasze głosy,t
to ich głosy.źródło
(t-u)/14*7
być po prostu(t-u)/2
?t-u == 16
. Następniey<x?0:(y-x)/2-(y-x)/2%7+7;
, Pomyślałem, że powinienem wziąć różnicę podziel ją na pół, a następnie znajdź najbliższą wielokrotność 7. Jak do tego doszedłeś?Python 2, 30 bajtów
źródło
y<x?0:(y-x)/2-(y-x)/2%7+7;
, Pomyślałem, że powinienem wziąć różnicę podziel ją na pół, a następnie znajdź najbliższą wielokrotność 7. Jak do tego doszedłeś?(b-a)/2
,/7*7
zaokrąglamy w dół do najbliższej wielokrotności 7, a następnie+7
przechodzimy do następnej w górę. To znaczy, chyba że otrzymalibyśmy liczbę ujemną, w którym to przypadku i tak wygrywamy, możemy po prostu zrobić 0. Biorącmax
z 0, osiągamy to. Niektóre z nich polegały również na poprawieniu wyrażenia i uruchomieniu go na testowych skrzynkach, aby zobaczyć, co działa./7*7
Jest to rodzaj wyrażenia, które pojawia się wystarczająco często w golfie, że uważam to za idiom. Chodzi o to, abyn/7
zabrać głosn/7
, tzn. Dowiedzieć się, ile całych wielokrotności7
dopasowania mieści się w środkun
. Następnie pomnożenie przez7
powoduje, że liczba jest równa wielokrotności7
.-2/7*7
, a ponieważ podział podłogi w Pythonie zaokrągla się w kierunku ujemnej nieskończoności,2/7
wynosi -1, więc7*-7+1
wynosi 0. Tak więc obie strony dają 0, co działa dobrze.Mathematica, 22 bajty
Czysta funkcja z argumentami
#
i#2
. Uzyskuje maksymalną głębokość rekurencji, jeśli rozbieżność jest większa niż7*2^16 = 458752
.Wyjaśnienie
źródło
Galaretka , 9 bajtów
Wypróbuj online!
Jak to działa
źródło
Właściwie 13 bajtów
Wypróbuj online!
Używa tej samej
max((b-a)/14*7+7,0)
formuły, której używają xnor i orlp.Wyjaśnienie:
źródło
Groovy, 41
37bajtówTo jest nienazwane zamknięcie. Dzięki
xnor
iorlp
za formułę orazJames holderness
za wskazanie błędu.Poprzednie rozwiązanie używane
intdiv()
do dzielenia liczb całkowitych, ale zachowuje się inaczej niż//
w Pythonie.Wypróbuj tutaj!
źródło
Haskell,
3024 bajtówOperator infix, który najpierw bierze liczbę głosów preferowanego kandydata. Używa tej samej logiki, co inne odpowiedzi zaokrąglania za pomocą
/14*7+7
.źródło
until
:a#b=until(\c->a+c>b-c)(+7)0
lub lepieja%b=until(>(b-a)/2)(+7)0
. Chociaż wzór arytmetyczny jest prawdopodobnie prawdopodobnie krótszy.head[...]
można prawie zawsze skrócić do[...]!!0
Fractional a
, nie jestem pewien, czy to jest akceptowane. Zediv
to jest jednak krótszy, więc dzięki! W końcu zastosował matematyczne podejście - i rzeczywiście był o kolejne dwa bajty krótszy niż przedtem. @Laikoni: fajna gra w golfa, nie wiedziałam o tym, zapamięta.J, 15 bajtów
Trochę interesujące, pracowałem nad problemem i myślałem, że mam rozwiązanie, ale jak się okazuje, byłem w błędzie. No cóż. Wypróbuj online! Oto wynik:
źródło
CJam,
131215 bajtów]
na[
dzięki ETHproductions.Rażąco ukradł metody Orlpa i Xnora.
Dane wejściowe to dwie liczby oddzielone spacją:
100 123
Wyjaśnienie:
źródło
D
jest tylko13
. I możesz zapisać bajt, zwiększając wartość przed pomnożeniem zamiast dodawać 7 później.m]
jest sufit;m[
jest podłoga.Excel VBA,
2420 bajtówImmediates funkcji okna, które przyjmuje sygnał wejściowy z komórek
A1
iB1
i wyjścia do okna Vbe immediates.Wersja podprogramu, 43 bajty
pobiera dane wejściowe
b, c
jako wariant \ liczba całkowita i wypisuje do okna VBE natychmiastźródło
Julia 0,5 , 26 bajtów
Wypróbuj online!
źródło
PHP,
4139 bajtówpobiera dane wejściowe z argumentów wiersza poleceń; biegać z
-r
.75 dodatkowych bajtów tylko do obsługi $ a> $ b: - /źródło
Japt , 14 bajtów
Uruchom tutaj!
Dziękujemy produktom ETH za zrzucenie 3 bajtów!
źródło
f
akceptuje argument i podłogi do wielokrotności tej liczby, więc myślę, że możesz takV-U /2+7 f7 w0
zapisać trzy bajty.05AB1E , 9 bajtów
Wypróbuj online!
Wyjaśnienie
Lub odpowiednia funkcja z tą samą liczbą bajtów działająca na parze liczb
Wypróbuj online!
źródło
Dyalog APL , 14 bajtów
Przyjmuje
v1
jako prawy argument iv2
lewy argument.0 ⌈
maksymalnie zero i7 ×
siedem razy1 + (
...)
jeden plus ...⌊
podłoga14 ÷⍨
czternasta z-
różnica (między argumentami)Wypróbuj APL online!
źródło
Befunge, 19 bajtów
Wypróbuj online!
Opiera się to na nieco innej formule niż ta używana przez orlp i xnor, ponieważ interpreter referencyjny Befunge ma inne reguły zaokrąglania niż Python. Befunge również nie ma luksusu
max
operacji.Podstawowe obliczenia wyglądają następująco:
Szczegółowy przegląd kodu:
źródło
Idź , 36 bajtów
func(a,b int)int{return(b-a)/14*7+7}
Wypróbuj online!
źródło
JavaScript (ES6), 31 bajtów
Pokaż fragment kodu
źródło
Java 8, 31 bajtów
(a,b)->b<a?0:(a=(b-a)/2)+7-a%7;
Jest to wyrażenie lambda, które można przypisać
IntBinaryOperator
.a to głosy twojego kandydata, b to twój przeciwnika.
java zaokrągla w dół dla dzielenia z dodatnimi liczbami całkowitymi, więc
+7-a%7
służy do zwiększania wartości do następnej wielokrotności 7.źródło
a->b->(b=(b-a)/14*7+7)>0?b:0
jest 3 bajty krótszy, ale bardziej podoba mi się twoje podejście, więc daj +1 ode mnie. Prawie każda udzielona odpowiedź już wykorzystujemax((b-a)/14*7+7,0)
...a->b->(b=(b-a)/14*7+7)>0?b:0
zwraca również wynik bezpośrednio: Wypróbuj tutaj. A może masz na myśli, że wolisz lambdy jednoprocesowe od curd lamb;(a,b)->
preferencja ponada->b->
, nawet jeśli jest dłuższa?Rubin,
2627 bajtówZasadniczo to samo co rozwiązanie Python xnora i orlpa, z niespodzianką
(nie trzeba dodawać 7, z powodu ujemnego modulo, zapisuje 1 bajt w ruby, nie wiem o python)Bez skrętu, skręt był po prostu złym przypadkiem dysonansu poznawczego. Zapomnij o tym. Naprawdę. :-)
źródło
Scala, 31 bajtów
Wersja trójskładnikowa jest dłuższa o 2 bajty
źródło
Noodel , 16 bajtów
Wyciągnął równanie z XOR i orlp odpowiedzi, ale ponieważ Noodel nie mają max zdolność musiał obejść to.
Spróbuj:)
Jak to działa
źródło
Pyth , 16 bajtów
Wypróbuj tutaj!
źródło