Ustawić:
Sieć społecznościowa podaje liczbę głosów, które ma post na dwa sposoby: liczbę głosów pozytywnych netto (liczba głosów pozytywnych - liczba głosów pozytywnych) oraz % głosów, które były głosami pozytywnymi , w zaokrągleniu do najbliższej liczby całkowitej (0,5 zaokrągla w górę). Liczba upvotów netto jest liczbą całkowitą (niekoniecznie dodatnią), a drugą gwarancją jest liczba całkowita od 0 do +100 włącznie. Liczba głosów pozytywnych i liczba głosów negatywnych są zarówno zerowymi, jak i dodatnimi 32-bitowymi liczbami całkowitymi (możesz określić podpisany lub niepodpisany). Załóżmy, że jeśli głosów jest zero, procentowy udział w głosowaniu jest zgłaszany jako zero.
Wyzwanie:
Biorąc pod uwagę te dwie liczby całkowite (wzrost liczby głosów netto i procent wzrostu liczby głosów), jaki jest najkrótszy program, jaki można napisać, który określa najniższą liczbę całkowitych głosów pozytywnych otrzymanego postu, przy spełnieniu wszystkich powyższych ograniczeń?
Ograniczenia wejściowe są gwarantowane. Jeśli dane wejściowe nie spełniają powyższych ograniczeń, zachowanie programu zależy od Ciebie. Dodatkowe nagrody, jeśli nie wejdzie w nieskończoną pętlę lub w inny sposób ulegnie awarii. Jeśli chcesz uzyskać więcej wskazówek, rozważ zwrócenie liczby ujemnej.
Główne zasady:
- To jest golf golfowy , więc wygrywa najkrótsze prawidłowe rozwiązanie (mierzone w bajtach).
- Nie pozwól, aby języki gry w golfa zniechęcały Cię do publikowania odpowiedzi w językach niekodujących golfa. Spróbuj znaleźć możliwie najkrótszą odpowiedź na „dowolny” język programowania. Dodatkowe wyróżnienia za język WWW po stronie klienta, taki jak Javascript.
- Jeśli masz ciekawe rozwiązania w wielu językach, opublikuj je osobno .
- Do odpowiedzi odnoszą się standardowe reguły , więc możesz używać STDIN / STDOUT, funkcji / metody z odpowiednimi parametrami i typem zwrotu lub pełnymi programami. Twoja decyzja.
- Domyślne luki są zabronione.
- Jeśli to możliwe, dodaj link z testem swojego kodu.
- Dodaj także wyjaśnienie dotyczące działania kodu.
- Pamiętaj, że jeśli wykonujesz operację dzielenia liczb całkowitych, która skraca (np. 20/3 = 6) zamiast zaokrąglać , może to nie być w pełni poprawne.
- Dodatkowe przypadki testowe, które eksplorują przypadki brzegowe w powyższych ograniczeniach, są mile widziane.
- Podczas gdy oczekiwany typ zwrotu jest liczbowy, zamiast wartości 0 można użyć wartości logicznej „fałsz” .
Przykładowe przypadki testowe:
Pierwsza kolumna to tylko numer referencyjny dołączony w celu ułatwienia dyskusji.
ref net %up answer
1 0 0 => 0
2 -5 0 => 0
3 -4 17 => 1
4 -3 29 => 2
5 -2 38 => 3
6 -1 44 => 4
7 0 50 => 1
8 5 100 => 5
9 4 83 => 5
10 3 71 => 5
11 2 63 => 5
12 1 56 => 5
13 1234 100 => 1234
14 800 90 => 894 (tip: don't refer to this as the "last test case;" others may be added.)
1000, 100
. Czy możesz potwierdzić, że oczekiwana odpowiedź to1000
?Odpowiedzi:
JavaScript (ES6), 47 bajtów
Pobiera dane wejściowe w składni curry
(n)(p)
, gdzie n to liczba głosów pozytywnych netto, a p to procent głosów pozytywnych. Może wrócićfalse
za0
.Wypróbuj online!
Skomentował
Skrzynie na brzeg
Niech F n (u) = u / (u - n / 2) * 50 + 0,5
Jeśli u = 0 i n = 0 , to F n (u) = NaN i F n (u) XOR p = p . Tak więc zwracamy u = 0, jeśli n = p = 0 (pierwsza iteracja pierwszego przypadku testowego) lub kontynuujemy rekurencję, jeśli p! = 0 (pierwsza iteracja siódmego przypadku testowego).
Jeśli u> 0 i w = n / 2 , wówczas M n (U) = + nieskończoność oraz - ponownie - M N (U) XOR P = P . O ile p = 0 , kontynuujemy następną iterację. (Dzieje się tak w 9 i 11 przypadku testowym.)
źródło
Stax , 17 bajtów
Uruchom i debuguj
To brutalna siła. Zaczyna się od 0 dla pozytywnych głosów kandydatów i rośnie, aż spełni formułę.
Rozpakowane, niepolowane i skomentowane, wygląda to tak.
Uruchom ten
źródło
Czysty ,
114107104 bajtówWypróbuj online!
Definiuje funkcję
$ :: Int Int -> Real
, w której argumentami są liczby całkowite ze znakiem, a zwracana wartość to liczba zmiennoprzecinkowa podwójnej precyzji, dokładnie reprezentowana przez 32-bitową liczbę całkowitą ze znakiem.Sprawdza każdą wartość
c
w równaniu,b=-cd/(d+1)
aby znaleźćb
satysfakcjonujące,a+c=b
ab/(b+c)=d
ponieważ najmniejszec
wyniki dają najmniejszeb
, bierze pierwszy element zestawu wszystkich rozwiązań.źródło
05AB1E , 13 bajtów [delikatnie złamany]
Wypróbuj online!
Wyjaśnienie:
Aby rozwiązać ten problem, założyłem dane wejściowe a, b i oczekiwany wynik x. Biorąc pod uwagę informacje w konfiguracji, dało mi to równanie:
Zmiana układu x daje
Jedyny przypadek testowy, w którym to nie działa, to 0, 50 - po prostu na stałe to sprawdziłem.
źródło
Idź 1.10, 154 bajtów
Wypróbuj na Go Playground! (TIO uruchamia Go 1.9, który nie ma matematyki.)
Wersja bez golfa
W celu dodania wyjaśnienia powyższy wzór dla r można uzyskać przez jednoczesne rozwiązanie
n=v-d
iu = 100 * v/(v + d)
dla v, gdzie v i d są odpowiednio liczbą głosów pozytywnych i negatywnych. Formuła pochodna jest niezdefiniowana dla v = 50, więc musimy obsłużyć tę sprawę (co robimy z pierwszą instrukcją if).źródło