Calculadora de Custo de Evolução Pokemon GO


11

Cansado de sempre se perguntar quantos Pokémon você precisa capturar para obter essas evoluções de alto nível? Maravilha não mais! Agora você escreverá um programa ou função completa para calculá-lo para você!

O desafio:

Como entrada, seu programa receberá uma lista dos custos em doces para evoluir um Pokémon para o próximo nível. (Esta lista pode ser separada por qualquer delimitador de sua escolha ou como argumentos de função). Seu programa retornará ou imprimirá o número de Pokémon que devem ser capturados, incluindo o que será desenvolvido, para evoluir em todos os níveis fornecidos.

Como você calcula isso? Assim:
1. Adicione todos os custos com doces: 12 + 50 = 62
2. Subtraia 3 doces do total, sendo esse o Pokémon que você mantém para evoluir: 62 - 3 = 59
3. Divida esse número por 4 (3 para capturar, 1 por entregá-lo ao Professor), sempre considerando o ceil()resultado: ceil(59/4) = 15
4. Finalmente, adicione 1 a este total para obter o número total de Pokémon que você deve capturar, 16!

Exemplo Input -> Output:

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

Ganhando:

O aplicativo já ocupou a maior parte do espaço no seu telefone, portanto, seu programa precisa ser o mais curto possível. O programa completo ou função com a menor contagem de bytes será aceito em duas semanas! (com quaisquer laços sendo resolvidos pela entrada mais antiga enviada!)


3
Como é calculada a saída?
Leaky Nun

8
No futuro, use o Sandbox para resolver problemas em seus desafios e obter feedback sobre eles antes de postar.
El'endia Starman 23/08/16

7
Se você deseja uma lógica um pouco menos absurda para o tamanho curto do código, pode optar por "porque o aplicativo quase acabou com a bateria, você deseja que o código seja o mais curto possível, para que você possa digitá-lo antes que a bateria acabe".
Mego

2
A fórmula não deveria ser floor(Sum(L)/4)+1? A fórmula atual não funciona para somas divisíveis por 4. Por exemplo [400], retornaria 100, quando, na realidade, precisa ser 101 para que o extra evolua.
Emigna

6
Espero que alguém postar uma resposta em Go
Kodos Johnson

Respostas:




5

Brain-Flak 112 bytes

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

Experimente Online!

Explicação

Soma a pilha, subtrai uma, divide por quatro e adiciona uma.


Como executo isso ao experimentar online? Ele só gera 1 para mim para qualquer esquema de entrada que eu tentei.
orlp

1
Dá resposta errada para [4].
orlp

@orlp Fixed. Coloquei o código errado ao tentar online.
Post Rock Garf Hunter

3

C # REPL, 15 bytes

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

Transmite para Func<IEnumerable<int>, int>.


3

Na verdade, 4 bytes

Σ¼≈u

Experimente online!

Explicação:

Σ¼≈u
Σ     sum
 ¼    divide by 4
  ≈   floor
   u  add 1

1
Esses caracteres unicode não são 2 bytes cada?
user23127

1
@ user23127 Se este foi codificado em UTF-8, sim. Na verdade (e seu antecessor, seriamente), use o CP437.
Mego 24/08



2

BASH (sed + bc) 19

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

Entrada é uma +lista separada no stdin
Por exemplo:
echo '(19+35+5+200)'| sed 's~)~+4)/4~'|bc





1

CJam, 7 bytes

{:+4/)}

Experimente aqui!

Define um bloco sem nome que espera a entrada na pilha e deixa o resultado lá.
:+soma a lista, 4/divide o resultado por 4 e )incrementa isso.




1

JavaScript, 29 bytes

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

1

SILOS 100 99 103 caracteres + 22 para entrada de amostra

Código com equipamento de teste.

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

insira como uma série de comandos set para modificar os pontos do heap começando no ponto 512.
Experimente on-line!


Só porque o Pokemon Go não possui mais de 8 níveis de evolução (na verdade chega ao máximo em 3), não significa que você não precise lidar com grandes casos de teste.
Mego

@Mego a especificação claramente faz referência ao pokemon go e, portanto, podemos assumir que todas as entradas serão válidas. Eu teria postado uma versão muito melhor que de fato manipular a entrada separaated nova linha terminada com uma sentinela zero, mas o TIO está borked
Rohan Jhunjhunwala

@Mego, deixe-me esclarecer com o OP. Se este é inválido I pode modificá-lo para trabalhar para casees teste ainda maiores
Rohan Jhunjhunwala

Esta é realmente uma brecha padrão - você está assumindo regras não presentes no desafio.
Mego

O @Mego, modificado por um custo de três bytes, agora deve funcionar com milhares de evoluções.
Rohan Jhunjhunwala

0

Python 2, 40 bytes

import math
lambda s:math.ceil(sum(s)/4)

Isso não funciona porque sum(s)é um número inteiro e, /no Python 2, seria uma divisão inteira quando ambos os argumentos são inteiros.
Leaky Nun

@LeakyNun, o que você quer dizer? ele trabalha para mim
acrólito

Dá resposta errada para [4].
orlp
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.