Calculateur de coût Pokemon GO Evolution


11

Fatigué de toujours vous demander combien de Pokémon de plus vous devez attraper pour obtenir ces évolutions de haut niveau? Je ne me demande plus! Vous allez maintenant écrire un programme ou une fonction complète pour le calculer pour vous!

Le défi:

En entrée, votre programme recevra une liste des coûts en bonbons pour faire évoluer un Pokémon au niveau suivant. (Cette liste peut être séparée par n'importe quel délimiteur de votre choix ou comme arguments de fonction). Votre programme retournera ou imprimera ensuite le nombre de Pokémon à attraper, y compris celui qui sera évolué, pour évoluer à travers tous les niveaux donnés.

Comment calculez-vous cela? Comme ceci:
1. Additionnez tous les coûts des bonbons: 12 + 50 = 62
2. Soustrayez 3 bonbons du total, celui-ci étant du Pokémon que vous gardez pour évoluer: 62 - 3 = 59
3. Divisez ce nombre par 4 (3 pour attraper, 1 pour le donner à la Professeur), en prenant toujours ceil()le résultat: ceil(59/4) = 15
4. Enfin, ajoutez 1 à ce total pour obtenir le nombre total de Pokémon que vous devez attraper, 16!

Exemple Input -> Output:

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

Gagnant:

L'application a déjà occupé la majeure partie de l'espace sur votre téléphone, votre programme doit donc être aussi court que possible. Le programme ou la fonction complète avec le plus petit nombre d'octets sera accepté dans deux semaines! (tous les liens étant réglés par la première soumission soumise!)


3
Comment la sortie est-elle calculée?
Leaky Nun

8
À l'avenir, veuillez utiliser le bac à sable pour résoudre vos problèmes et obtenir des commentaires sur eux avant de publier.
El'endia Starman

7
Si vous voulez une justification légèrement moins absurde pour la longueur de code courte, vous pouvez aller avec "parce que l'application a presque tué votre batterie, vous voulez que votre code soit aussi court que possible, afin que vous puissiez le saisir avant que votre batterie ne meure."
Mego

2
La formule ne devrait-elle pas être floor(Sum(L)/4)+1? La formule actuelle ne fonctionne pas pour les sommes divisibles par 4. Par exemple, [400]elle renverrait 100, alors qu'en réalité, elle doit être de 101 pour que l'extra évolue.
Emigna

6
J'espère que quelqu'un publiera une réponse dans Go
Kodos Johnson

Réponses:




5

Brain-Flak 112 octets

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

Essayez-le en ligne!

Explication

Il additionne la pile, soustrait un, divise par quatre et en ajoute un.


Comment puis-je exécuter cela sur l'essayer en ligne? Il ne sort que 1 pour moi pour tout schéma d'entrée que j'ai essayé.
orlp

1
Donne une mauvaise réponse pour [4].
orlp

@orlp Fixed. J'ai mis le mauvais code pour l'essayer en ligne.
Ad Hoc Garf Hunter

3

C # REPL, 15 octets

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

S'exécute vers Func<IEnumerable<int>, int>.


3

En fait, 4 octets

Σ¼≈u

Essayez-le en ligne!

Explication:

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

1
Ces caractères Unicode ne sont-ils pas 2 octets chacun?
user23127

1
@ user23127 Si cela a été encodé en UTF-8, oui. En fait (et son prédécesseur Sérieusement) utilisez CP437.
Mego


2

Python 2, 21 octets

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

Ideone it!

Formule: ((sum(a)-1)//4)+1//est floor-div.


Donne une mauvaise réponse pour [4].
orlp

2

BASH (sed + bc) 19

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

L'entrée est une +liste distincte sur stdin
Par exemple:
echo '(19+35+5+200)'| sed 's~)~+4)/4~'|bc





1

CJam, 7 octets

{:+4/)}

Essayez-le ici!

Définit un bloc sans nom qui attend l'entrée sur la pile et y laisse le résultat.
:+additionne la liste, 4/divise le résultat par 4 et l' )incrémente.




1

JavaScript, 29 octets

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

1

SILOS 100 99 103 caractères + 22 pour l'entrée d'échantillon

Code avec harnais de test.

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

entrée comme une série de commandes set pour modifier les taches du tas à partir de la tache 512.
Essayez-le en ligne!


Tout simplement parce que Pokemon Go n'a pas plus de 8 niveaux d'évolution (il atteint en fait au maximum 3), cela ne signifie pas que vous n'êtes pas obligé de gérer des cas de test larget.
Mego

@Mego la spécification fait clairement référence à pokemon go, et donc nous pouvons supposer que toutes les entrées seront des entrées valides. J'aurais posté une bien meilleure version qui gère effectivement les entrées séparées par la nouvelle ligne terminées par une sentinelle zéro, mais le TIO est actuellement borked
Rohan Jhunjhunwala

@Mego permettez-moi de clarifier avec le PO. Si ce n'est pas valide, je peux le modifier pour qu'il fonctionne pour des cas de test encore plus grands
Rohan Jhunjhunwala

Il s'agit en fait d'une faille standard - vous supposez que les règles ne sont pas présentes dans le défi.
Mego

@Mego modifié pour un coût de trois octets, il devrait maintenant fonctionner jusqu'à des milliers d'évolutions.
Rohan Jhunjhunwala

0

Python 2, 40 octets

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

Cela ne fonctionne pas car sum(s)est un entier et /en Python 2 serait une division entière lorsque les deux arguments sont des entiers.
Leaky Nun

@LeakyNun que voulez-vous dire? ça marche pour moi
acrolith

Donne une mauvaise réponse pour [4].
orlp
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.