Disclaimer: mentre sono stato su questo sito per scopi di intrattenimento per un po 'di tempo, questa è la mia prima domanda, quindi ti prego di perdonare eventuali errori minori.
sfondo
Quando ci assegna i compiti, il mio insegnante è davvero fastidioso e scrive tutti i problemi che dobbiamo fare individualmente. Come tale, mi ci vuole un'eternità a copiare quali problemi devo fare. Ho pensato di semplificarmi la vita, gli avrei inviato un programma che avrebbe potuto rendere la lista dei problemi occupare meno spazio.
Durante la stesura di un elenco di numeri di pagina o di problemi, utilizziamo un trattino per indicare un intervallo. Ad esempio, 19-21
diventa 19, 20, 21
. Se c'è uno spazio tra, vengono utilizzati due intervalli separati da virgola: 19-21, 27-31
diventa 19, 20, 21, 27, 28, 29, 30, 31
.
In questo momento, probabilmente stai pensando: "sembra piuttosto banale". In effetti, questo è già stato risposto qui e qui .
Tuttavia, c'è un problema. Se abbiamo un intervallo con cifre consecutive uguali, le cifre ripetute possono essere escluse. Ad esempio: 15, 16, 17
diventa 15-7
e 107, 108, 109
diventa 107-9
. Per un bonus, se l'ultima cifra uguale consecutiva è 1 maggiore e l'ultima cifra del limite superiore è inferiore o uguale a quella del valore inferiore, è possibile omettere quanto segue (scusate se suonava confuso; forse alcuni esempi lo chiariranno) . 109-113
diventa 109-3
, poiché un'ultima cifra più bassa implica aumentare il 10s posto.
Sfida
Il tuo programma dovrebbe prendere un elenco di numeri interi tramite input (qualunque sia lo standard per la tua lingua o una funzione). È possibile decidere se questo elenco è separato da virgole, separato da spazi o come un elenco / array effettivo.
Stampa il modo più breve (prima ordinato per numero di intervalli, quindi la somma dei caratteri inclusi negli intervalli) per rappresentare quell'elenco usando questa notazione. Ogni intervallo tratteggiato deve trovarsi sulla stessa riga, ma gli intervalli possono essere separati da virgole o nuove righe (sono consentite nuove righe o virgole finali). Questi intervalli devono essere in ordine.
Dato che il nostro Wi-Fi nella nostra scuola è terribile , devo renderlo il più piccolo possibile per inviarlo a lui. Vince il codice più breve (in byte).
bonus
Il mio insegnante è sciatto, quindi ci sono alcune cose che potrebbero aiutarlo. I bonus multipli si accumulano attraverso la moltiplicazione, ad esempio un bonus del -10% (x 90%) e un bonus del -25% (x 75%) = 90% * 75% = x 67,5% (bonus del -32,5%).
- A volte li mette nell'ordine sbagliato (non è un insegnante di matematica). Prendi un bonus del -20% se il tuo programma può accettare numeri interi non ordinati dal minimo al massimo.
- Il nostro libro è strano e ogni sezione inizia a contare i problemi a -10. Se il tuo programma può accettare numeri negativi, prendi un -25%.
- Se accetta il bonus di un'ultima cifra inferiore aumentando il posto di 10, ad esempio
25-32
riducendo a25-2
, prendi un bonus del -50%.
Casi test
In: 1, 2, 3, 4, 5
Out: 1-5
In: 3, 4, 5, 9, 10, 11, 12
Out: 3-5, 9-12
In: 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160
Out: 149-60
In: 1 2 3 4
Out: 1-4
For bonuses:
In: 109, 110, 111, 112, 113
Out: 109-3
In: 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29
Out: 19-9
In: -3, -2, -1, 0, 1, 2
Out: -3-2
In: -3, -2, -1
Out: -3--1
Una risposta sarà accettata sabato 19 dicembre 2015.
GLHF!
149 150 151 152 153 154 155 156 157 178 159 160
?
19-9
per 19,20,...,29
e non 19-29
come il testo comporta. Quindi qual è corretto?
1-4 9-2
?