Pokemon GO Evolution Calculator


11

Stanco di chiederti sempre quanti altri Pokémon devi catturare per ottenere evoluzioni di alto livello? Non chiedo più! Ora scriverai un programma o una funzione completa per calcolarlo per te!

La sfida:

Come input, il tuo programma riceverà un elenco dei costi in caramelle per far evolvere un Pokémon al livello successivo. (Questo elenco può essere separato da qualsiasi delimitatore di tua scelta o come argomento di funzione). Il tuo programma quindi restituirà o stamperà il numero di Pokémon che devono essere catturati, incluso quello che si evolverà, per evolversi attraverso tutti i livelli indicati.

Come si calcola questo? In questo modo:
1. Aggiungi tutti i costi delle caramelle: 12 + 50 = 62
2. Sottrai 3 caramelle dal totale, essendo questo da uno dei Pokémon che tieni in evoluzione: 62 - 3 = 59
3. Dividi questo numero per 4 (3 per catturare, 1 per darlo al Professore), prendendo sempre ceil()il risultato: ceil(59/4) = 15
4. Infine, aggiungi 1 a questo totale per ottenere il numero totale di Pokémon che devi catturare, 16!

Esempio Input -> Output:

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

Vincente:

L'app ha già occupato gran parte dello spazio sul telefono, quindi il programma deve essere il più breve possibile. Il programma completo o la funzione con il numero di byte più piccolo verrà accettato tra due settimane! (con eventuali vincoli risolti dalla prima iscrizione inviata!)


3
Come viene calcolato l'output?
Leaky Nun,

8
In futuro, utilizza Sandbox per risolvere i nodi delle tue sfide e ottenere feedback su di esse prima di pubblicare.
El'endia Starman,

7
Se si desidera una logica leggermente meno assurda per la lunghezza del codice breve, è possibile scegliere "poiché l'app ha quasi esaurito la batteria, si desidera che il codice sia il più corto possibile, quindi è possibile inserirlo prima che la batteria si esaurisca."
Mego,

2
La formula non dovrebbe essere floor(Sum(L)/4)+1? La formula attuale non funziona per somme divisibili per 4. Ad esempio [400], restituirebbe 100, quando in realtà deve essere 101 per far evolvere quella extra.
Emigna,

6
Spero che qualcuno pubblichi una risposta su Go
Kodos Johnson,

Risposte:




5

Brain-Flak 112 byte

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

Provalo online!

Spiegazione

Somma la pila, ne sottrae una, la divide per quattro e ne aggiunge una.


Come posso eseguirlo provandolo online? Produce 1 solo per me per qualsiasi schema di input che ho provato.
orlp,

1
Fornisce una risposta errata per [4].
orlp

@orlp Risolto. Ho inserito il codice sbagliato nel provarlo online.
Ad Hoc Garf Hunter

3

C # REPL, 15 byte

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

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


3

In realtà, 4 byte

Σ¼≈u

Provalo online!

Spiegazione:

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

1
Questi caratteri unicode non sono 2 byte ciascuno?
user23127

1
@ user23127 Se questo fosse codificato in UTF-8, sì. In realtà (e seriamente il suo predecessore) usano CP437.
Mego



2

BASH (sed + bc) 19

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

L'input è un +elenco separato su stdin
Ad esempio:
echo '(19+35+5+200)'| sed 's~)~+4)/4~'|bc





1

CJam, 7 byte

{:+4/)}

Provalo qui!

Definisce un blocco senza nome che prevede l'input nello stack e lascia il risultato lì.
:+somma l'elenco, 4/divide il risultato per 4 e lo )incrementa.




1

JavaScript, 29 byte

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

1

SILOS 100 99 103 caratteri + 22 per input di esempio

Codice con cablaggio di prova.

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

input come una serie di comandi set per modificare i punti dell'heap a partire dal punto 512.
Provalo online!


Solo perché Pokemon Go non ha più di 8 livelli di evoluzione (al massimo è 3), non significa che non sei tenuto a gestire casi di test più ampi.
Mego,

@Mego la specifica fa chiaramente riferimento a pokemon go, e quindi possiamo supporre che tutti gli input saranno input validi. Avrei pubblicato una versione molto migliore che in effetti gestisce l'input separato di nuova riga terminato con una sentinella zero, ma il TIO è attualmente corrotto
Rohan Jhunjhunwala

@Mego mi permetta di chiarire con l'OP. Se questo non è valido, posso modificarlo in modo che funzioni anche per casi di test ancora più grandi
Rohan Jhunjhunwala

Questa è in realtà una scappatoia standard : stai assumendo regole non presenti nella sfida.
Mego,

@Mego modificato per un costo di tre byte, ora dovrebbe funzionare fino a 1000 di evoluzioni.
Rohan Jhunjhunwala,

0

Python 2, 40 byte

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

Questo non funziona perché sum(s)è un numero intero e /in Python 2 sarebbe una divisione intera quando entrambi gli argomenti sono numeri interi.
Leaky Nun,

@LeakyNun cosa intendi? funziona per me
acrolith,

Fornisce una risposta errata per [4].
orlp,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.