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.