Kalkulator kosztów ewolucji Pokemon GO

11

Masz dość nieustannego zastanawiania się, ile jeszcze Pokémonów musisz złapać, aby uzyskać ewolucje na wysokim poziomie? Nic dziwnego, że już nie! Teraz napiszesz kompletny program lub funkcję, aby go obliczyć!

Wyzwanie:

Jako dane wejściowe, twój program otrzyma listę kosztów w cukierkach, aby rozwinąć Pokémona do następnego poziomu. (Ta lista może być oddzielona dowolnym wybranym ogranicznikiem lub jako argumenty funkcji). Twój program zwróci lub wydrukuje liczbę Pokémonów, które należy złapać, w tym tę, która będzie ewoluować, aby ewoluować przez wszystkie podane poziomy.

Jak to obliczyć? W ten sposób:
1. Zsumuj wszystkie koszty cukierków: 12 + 50 = 62
2. Odejmij 3 cukierki od sumy, to jest od jednego Pokémona, którego ewoluujesz: 62 - 3 = 59
3. Podziel tę liczbę przez 4 (3 dla złapania, 1 dla przekazania Profesor), zawsze biorąc ceil()wynik: ceil(59/4) = 15
4. Na koniec dodaj 1 do tej sumy, aby uzyskać całkowitą liczbę Pokémonów, które musisz złapać, 16!

Przykład Input -> Output:

[4] -> 2
[50] -> 13
[12, 50] -> 16
[25, 100] -> 32
[19, 35, 5, 200] -> 65

Zwycięski:

Aplikacja zajęła już większość miejsca w telefonie, więc Twój program musi być jak najkrótszy. Kompletny program lub funkcja o najmniejszej liczbie bajtów zostanie zaakceptowana za dwa tygodnie! (wszelkie powiązania są rozstrzygane przez najwcześniej przesłane zgłoszenie!)

Nikolai97
źródło
3
Jak obliczana jest wydajność?
Leaky Nun
8
W przyszłości skorzystaj z piaskownicy, aby wypracować supełki w swoich wyzwaniach i uzyskać opinie na ich temat przed opublikowaniem.
El'endia Starman
7
Jeśli chcesz nieco mniej bezsensownych uzasadnień krótkiej długości kodu, możesz użyć „ponieważ aplikacja prawie wyczerpała baterię, chcesz, aby Twój kod był tak krótki, jak to możliwe, abyś mógł wpisać go przed wyczerpaniem baterii”.
Mego
2
Czy formuła nie powinna być floor(Sum(L)/4)+1? Obecna formuła nie działa dla sum podzielnych przez 4. Na przykład [400]zwróci 100, podczas gdy w rzeczywistości musi być 101, aby dodatkowa ewoluowała.
Emigna
6
Mam nadzieję, że ktoś opublikuje odpowiedź w Go
Kodos Johnson

Odpowiedzi:

9

05AB1E , 4 bajty

O4÷>

Wyjaśnienie

O    # sum
 4÷  # integer division by 4
   > # increment

Wypróbuj online

Emigna
źródło
÷ to 2 bajty ...
user23127
3
@ user23127: 05AB1E używa kodowania CP-1252.
Emigna
9

Galaretka, 5 4 bajtów

S:4‘

Wypróbuj online!

Sum, liczba całkowita dzielona :przez 4i przyrost .

PurkkaKoodari
źródło
8
; -;
Spóźniłem się
Nie działa, gdy suma jest podzielna przez 4.
mleko
Daje złą odpowiedź na pytanie [4].
orlp
Poprawki Najwyraźniej specyfikacja zmieniła się, kiedy spałem.
PurkkaKoodari
5

Brain-Flak 112 bajtów

([]<([()])>){{}({}{})([][()])}{}{({}[()])<>(({}[()()()]<({}())>)){{}(<({}()()()()<({}[()])>)>)}{}<>}{}<>{}({}())

Wypróbuj online!

Wyjaśnienie

Sumuje stos, odejmuje jeden, dzieli przez cztery i dodaje jeden.

Ad Hoc Garf Hunter
źródło
Jak uruchomić to, wypróbowując online? Wyprowadza dla mnie tylko 1 dla każdego schematu wprowadzania danych, który próbowałem.
orlp
1
Daje złą odpowiedź na pytanie [4].
orlp
@orlp Naprawiono. Podaję zły kod, aby wypróbować go online.
Ad Hoc Garf Hunter
3

C # REPL, 15 bajtów

n=>n.Sum()/4+1;

Przesyłanie do Func<IEnumerable<int>, int>.

mleko
źródło
3

Właściwie 4 bajty

Σ¼≈u

Wypróbuj online!

Wyjaśnienie:

Σ¼≈u
Σ     sum
 ¼    divide by 4
  ≈   floor
   u  add 1
Mego
źródło
1
Czy te znaki Unicode nie są 2 bajtami?
user23127,
1
@ user23127 Jeśli byłyby zakodowane w UTF-8, tak. Właściwie (i jego poprzednik Poważnie) używaj CP437.
Mego
3

Brachylog , 5 bajtów

+:4/+

Wypróbuj online!

Wyjaśnienie

Bardzo oryginalna odpowiedź…

+        Sum
 :4/     Integer division by 4
    +    Increment
Fatalizować
źródło
2

Python 2, 21 bajtów

lambda a:~-sum(a)/4+1

Ideone to!

Formuła: ((sum(a)-1)//4)+1gdzie //jest floor-div.

Leaky Nun
źródło
Daje złą odpowiedź na pytanie [4].
orlp
2

BASH (sed + bc) 19

sed 's~)~+4)/4~'|bc

Dane wejściowe to +osobna lista dla standardowego wejścia
np .:
echo '(19+35+5+200)'| sed 's~)~+4)/4~'|bc

Riley
źródło
1

Haskell, 17 bajtów

(+1).(`div`4).sum
Diogenes Mota
źródło
1

Pyke, 4 bajty

seeh

Wypróbuj tutaj!

((sum(input)/2)/2)+1
niebieski
źródło
1

Pyth, 5 bajtów

h/sQ4

Wypróbuj tutaj!

Suma danych wejściowych za pomocą sQ, podziel przez 4 za pomocą /4i na końcu zwiększ h.

Denker
źródło
1

CJam, 7 bajtów

{:+4/)}

Wypróbuj tutaj!

Definiuje nienazwany blok, który oczekuje danych wejściowych na stosie i pozostawia tam wynik.
:+sumuje listę, 4/dzieli wynik przez 4 i )zwiększa to.

Denker
źródło
1

Siatkówka , 18 17 bajtów

Liczba bajtów zakłada kodowanie ISO 8859-1.

$
¶4
.+|¶
$*
1111

Wejście jest oddzielone od linii.

Wypróbuj online!

Martin Ender
źródło
@orlp yay na zmiany zasad. naprawiony.
Martin Ender
1

R, 22 bajty

floor(sum(scan())/4+1)
Frédéric
źródło
1

JavaScript, 29 bajtów

x=>x.reduce((a,b)=>a+b)/4+1|0
Huntro
źródło
1

SILOS 100 99 103 znaków + 22 do wprowadzania próbki

Kod z wiązką testową.

set 512 52
set 513 10
GOSUB e
GOTO f
funce
a = 0
i = 511
lblE
i + 1
b = get i
a + b
if b E
a / 4
a + 1
return
lblf
printInt a

dane wejściowe jako seria zestawów poleceń do modyfikowania miejsc na stosie, zaczynając od miejsca 512.
Wypróbuj online!

Rohan Jhunjhunwala
źródło
To, że Pokemon Go nie ma więcej niż 8 poziomów ewolucji (w rzeczywistości osiąga maksimum 3), nie oznacza, że ​​nie musisz zajmować się dużymi przypadkami testowymi.
Mego
@Mego specyfikacja wyraźnie odwołuje się do pokemon go, a zatem możemy założyć, że wszystkie dane wejściowe będą prawidłowe. Opublikowałbym znacznie lepszą wersję, która rzeczywiście obsługuje separację nowego wiersza zakończoną zerowym wartownikiem, ale TIO jest obecnie zablokowane
Rohan Jhunjhunwala
@Mego pozwól mi wyjaśnić z PO. Jeśli jest to nieprawidłowe, mogę go zmodyfikować, aby działał dla jeszcze większych przypadków testowych
Rohan Jhunjhunwala
To w rzeczywistości standardowa luka - zakładasz , że reguły nie występują w wyzwaniu.
Mego
@Mego zmodyfikowane kosztem trzech bajtów, teraz powinno działać do 1000 ewolucji.
Rohan Jhunjhunwala
0

Python 2, 40 bajtów

import math
lambda s:math.ceil(sum(s)/4)
acrolith
źródło
To nie działa, ponieważ sum(s)jest liczbą całkowitą, /aw Pythonie 2 będzie dzieleniem całkowitym, gdy oba argumenty są liczbami całkowitymi.
Leaky Nun
@LeakyNun co masz na myśli? to działa dla mnie
acrolith
Daje złą odpowiedź na pytanie [4].
orlp