Ringraziamenti a @ Agawa001 per aver posto questa domanda.
Spiegazione
Il mio nuovo "keybore" ha solo 2 pulsanti, vale a dire +e -.
Il numero in memoria inizia alle 0.
Ogni volta che si preme +o -si incrementa / diminuisce la memoria esattamente per quante volte è stata premuta consecutivamente.
Pertanto, se si preme +4 volte, la prima volta si aggiunge 1, la seconda volta si aggiunge 2, la terza volta si aggiunge 3, la quarta volta si aggiunge 4, dandoti 10(dieci).
Ora, se premi -3 volte, la prima volta sottrae 1, la seconda volta 2, la terza volta 3, lasciandoti con 4(quattro).
TL; DR
Data una stringa di + e -, dividila ad ogni cambio di carattere. Quindi ogni stringa risultante di +simboli m aggiunge il numero del triangolo M e ogni stringa di -simboli n sottrae il numero del triangolo n.
Procedura dettagliata
Ora, se ancora non capisci, ti mostrerò come +++--+--crea 1.
Program | Counter | Memory
----------------------------
| 0 | 0
+ | +1 | 1
++ | +2 | 3
+++ | +3 | 6
+++- | -1 | 5
+++-- | -2 | 3
+++--+ | +1 | 4
+++--+- | -1 | 3
+++--+-- | -2 | 1
Compito
- Prenderai un intero positivo come input, come argomento funzionale o da STDIN.
- Quindi, verrà emesso / stampato il numero minimo di sequenze di tasti necessarie per creare quel numero utilizzando il metodo sopra.
Casi test
Poiché la riorganizzazione delle serie +o -dà lo stesso numero, per ciascuno di questi gruppi viene elencata solo la sequenza lessicograficamente più antica.
Input | Output | Possible corresponding sequences
-------------------------------------------------
4 | 5 | -+++-
6 | 3 | +++
9 | 5 | ++++-
11 | 7 | +++-+++
12 | 7 | +++++--, ++++-++
19 | 8 | -++++++-
39 | 12 | +++++++++---
40 | 13 | +++++++++---+, ++++++++-+++-
45 | 9 | +++++++++
97 | 20 | ++++++++++++++--+---, +++++++++++++-++++--, ++++++++++++-++++++-
361 | 34 | ++++++++++++++++++++++++++-+++-+++
Risorse extra
- Prova che è possibile creare qualsiasi numero : sostanzialmente, ripetendo
++-, è possibile ottenere qualsiasi numero pari. Per ottenere i numeri dispari, basta inserire un+alla fine. - Un altro modo generale per ottenere qualsiasi numero. Ad esempio, per generare
50, un modo è premere+50 volte e quindi premere-49 volte. - Soluzione dei primi 50 numeri .
- JSFiddle obbligatorio .
punteggio
Questo è code-golf . Vince la soluzione più breve in byte.
+++++--è anche un'alternativa, ma ho rimosso ++-++++poiché equivale a ++++-++). Ho ancora un altro caso che vorrei aggiungere in seguito nel caso qualcuno riesca a trovare una soluzione efficiente, se riesco a generarlo.
++-++++rimosso. Inoltre, questa era la MIA modifica, non LA TUA.
+++++--(o, equivalentemente, --+++++), motivo per cui ho sentito la necessità di modificare in primo luogo.