Pokemon GO Evolution Calculadora de costos

11

¿Cansado de preguntarte siempre cuántos Pokémon más necesitas atrapar para obtener esas evoluciones de alto nivel? ¡Extrañar más! ¡Ahora escribirá un programa o función completa para calcularlo por usted!

El reto:

Como entrada, su programa recibirá una lista de los costos en dulces para evolucionar a un Pokémon al siguiente nivel. (Esta lista puede estar separada por cualquier delimitador de su elección, o como argumentos de función). Luego, tu programa devolverá o imprimirá la cantidad de Pokémon que debes atrapar, incluido el que se desarrollará, para evolucionar a través de todos los niveles dados.

¿Cómo se calcula esto? Así:
1. Suma todos los costos de dulces: 12 + 50 = 62
2. Resta 3 dulces del total, esto es del único Pokémon que conservas para evolucionar: 62 - 3 = 59
3. Divide este número entre 4 (3 para atrapar, 1 para dárselo al Profesor), siempre tomando el ceil()resultado: ceil(59/4) = 15
4. Finalmente, suma 1 a este total para obtener el número total de Pokémon que debes atrapar, ¡16!

Ejemplo Input -> Output:

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

Victorioso:

La aplicación ya ha ocupado la mayor parte del espacio en su teléfono, por lo que su programa debe ser lo más breve posible. ¡Se aceptará el programa completo o la función con el recuento de bytes más pequeño en dos semanas! (¡con cualquier vínculo resuelto por la entrada presentada más temprano!)

Nikolai97
fuente
3
¿Cómo se calcula la salida?
Leaky Nun
8
En el futuro, utilice el Sandbox para resolver problemas en sus desafíos y obtener comentarios sobre ellos antes de publicar.
El'endia Starman el
77
Si desea una razón un poco menos absurda para la longitud del código corto, podría optar por "porque la aplicación casi ha agotado la batería, desea que el código sea lo más corto posible, para que pueda escribirlo antes de que se agote la batería".
Mego
2
¿No debería ser la fórmula floor(Sum(L)/4)+1? La fórmula actual no funciona para sumas divisibles por 4. Por ejemplo [400], devolvería 100, cuando en realidad debe ser 101 para que evolucione el extra.
Emigna
66
Espero que alguien publique una respuesta en Go
Kodos Johnson

Respuestas:

9

05AB1E , 4 bytes

O4÷>

Explicación

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

Pruébalo en línea

Emigna
fuente
÷ son 2 bytes ...
usuario23127
3
@ user23127: 05AB1E usa la codificación CP-1252.
Emigna
9

Jalea, 5 4 bytes

S:4‘

Pruébalo en línea!

Sum, entero dividido :por 4e incrementado .

PurkkaKoodari
fuente
8
; -;
Llego
No funciona cuando la suma es divisible por 4.
leche
Da una respuesta incorrecta para [4].
orlp
Arreglos. Al parecer, la especificación cambió cuando estaba durmiendo.
PurkkaKoodari
5

Brain-Flak 112 bytes

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

¡Pruébelo en línea!

Explicación

Suma la pila, resta uno, divide entre cuatro y agrega uno.

Ad Hoc Garf Hunter
fuente
¿Cómo ejecuto esto en probarlo en línea? Solo genera 1 para mí para cualquier esquema de entrada que haya probado.
orlp
1
Da una respuesta incorrecta para [4].
orlp
@orlp fijo. Puse el código incorrecto en probarlo en línea.
Ad Hoc Garf Hunter
3

C # REPL, 15 bytes

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

Lanza a Func<IEnumerable<int>, int>.

Leche
fuente
3

En realidad, 4 bytes

Σ¼≈u

Pruébalo en línea!

Explicación:

Σ¼≈u
Σ     sum
 ¼    divide by 4
  ≈   floor
   u  add 1
Mego
fuente
1
¿No son estos caracteres unicode de 2 bytes cada uno?
usuario23127
1
@ user23127 Si esto se codificó en UTF-8, sí. En realidad (y su predecesor en serio) usa CP437.
Mego
2

Python 2, 21 bytes

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

Ideone it!

Fórmula: ((sum(a)-1)//4)+1donde //está floor-div.

Monja permeable
fuente
Da una respuesta incorrecta para [4].
orlp
2

BASH (sed + bc) 19

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

La entrada es una +lista separada en stdin
Eg:
echo '(19+35+5+200)'| sed 's~)~+4)/4~'|bc

Riley
fuente
1

Haskell, 17 bytes

(+1).(`div`4).sum
Diógenes Mota
fuente
1

Pyth, 5 bytes

h/sQ4

Pruébalo aquí!

Suma la entrada con sQ, divide entre 4 con /4y finalmente incrementa h.

Denker
fuente
1

CJam, 7 bytes

{:+4/)}

Pruébalo aquí!

Define un bloque sin nombre que espera la entrada en la pila y deja el resultado allí.
:+suma la lista, 4/divide el resultado entre 4 e )incrementa eso.

Denker
fuente
1

Retina , 18 17 bytes

El recuento de bytes asume la codificación ISO 8859-1.

$
¶4
.+|¶
$*
1111

La entrada está separada por salto de línea.

Pruébalo en línea!

Martin Ender
fuente
@orlp yay para cambios de reglas. fijo.
Martin Ender
1

R, 22 bytes

floor(sum(scan())/4+1)
Frédéric
fuente
1

JavaScript, 29 bytes

x=>x.reduce((a,b)=>a+b)/4+1|0
Huntro
fuente
1

SILOS 100 99 103 caracteres + 22 para entrada de muestra

Código con arnés de prueba.

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

ingrese como una serie de comandos establecidos para modificar los puntos del montón comenzando en el punto 512. ¡
Pruébelo en línea!

Rohan Jhunjhunwala
fuente
El hecho de que Pokemon Go no tenga más de 8 niveles de evolución (en realidad tiene un máximo de 3), no significa que no se requiera que manejes casos de prueba más grandes.
Mego
@Mego la especificación claramente hace referencia a pokemon go, y por lo tanto podemos suponer que todas las entradas serán entradas válidas. Hubiera publicado una versión mucho mejor que de hecho maneja la entrada separada de nueva línea terminada con un centinela cero, pero el TIO actualmente está bloqueado
Rohan Jhunjhunwala
@Mego déjame aclarar con el OP. Si esto no es válido, puedo modificarlo para que funcione para casos de prueba aún más grandes
Rohan Jhunjhunwala
Esto es en realidad una escapatoria estándar : está asumiendo que las reglas no están presentes en el desafío.
Mego
@Mego modificado por un costo de tres bytes, ahora debería funcionar hasta miles de evoluciones.
Rohan Jhunjhunwala
0

Python 2, 40 bytes

import math
lambda s:math.ceil(sum(s)/4)
acrolito
fuente
Esto no funciona porque sum(s)es un número entero y /en Python 2 sería una división entera cuando ambos argumentos son enteros.
Leaky Nun
@LeakyNun, ¿qué quieres decir? funciona para mí
acrolith
Da una respuesta incorrecta para [4].
orlp