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!)

Nikolai97
fonte
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:

9

05AB1E , 4 bytes

O4÷>

Explicação

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

Experimente online

Emigna
fonte
÷ é de 2 bytes ...
user23127
3
@ user23127: 05AB1E usa a codificação CP-1252.
Emigna
9

Geléia, 5 4 bytes

S:4‘

Experimente online!

Shum, número inteiro dividido :por 4e incremento .

PurkkaKoodari
fonte
8
; -; Estou 4 segundos atrasado
acrolith 23/08
Não funciona quando a soma é divisível por 4. #
milk
Dá resposta errada para [4].
orlp
Conserta. Aparentemente, as especificações mudaram quando eu estava dormindo.
PurkkaKoodari
5

Brain-Flak 112 bytes

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

Experimente Online!

Explicação

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

Post Rock Garf Hunter
fonte
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>.

leite
fonte
3

Na verdade, 4 bytes

Σ¼≈u

Experimente online!

Explicação:

Σ¼≈u
Σ     sum
 ¼    divide by 4
  ≈   floor
   u  add 1
Mego
fonte
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
3

Braquilog , 5 bytes

+:4/+

Experimente online!

Explicação

Uma resposta muito original…

+        Sum
 :4/     Integer division by 4
    +    Increment
Fatalizar
fonte
2

Python 2, 21 bytes

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

Ideone it!

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

Freira Furada
fonte
Dá resposta errada para [4].
orlp
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

Riley
fonte
1

Haskell, 17 bytes

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

Pyke, 4 bytes

seeh

Experimente aqui!

((sum(input)/2)/2)+1
Azul
fonte
1

Pitão, 5 bytes

h/sQ4

Experimente aqui!

Soma a entrada com sQ, divida por 4 com /4e, finalmente, aumente h.

Denker
fonte
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.

Denker
fonte
1

Retina , 18 17 bytes

A contagem de bytes assume a codificação ISO 8859-1.

$
¶4
.+|¶
$*
1111

A entrada é separada pela alimentação de linha.

Experimente online!

Martin Ender
fonte
@orlp yay para alterações de regras. fixo.
Martin Ender
1

R, 22 bytes

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

JavaScript, 29 bytes

x=>x.reduce((a,b)=>a+b)/4+1|0
Huntro
fonte
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!

Rohan Jhunjhunwala
fonte
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)
acrólito
fonte
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