I numeri unari in genere rappresentano solo numeri interi non negativi, ma possiamo estenderli per rappresentare tutti i numeri interi come segue:
- Un numero intero positivo N è rappresentato come N
1:5 -> 11111 - Un numero intero negativo -N è rappresentato come
0seguito da N1's:-5 -> 011111 - Zero è rappresentato come
0
Possiamo quindi rappresentare un elenco di questi numeri senza ambiguità se utilizziamo 0come separatore:
3,-2,0,1
111,011,0,1
111 0 011 0 0 0 1
11100110001
Il tuo compito: prendi una stringa che rappresenta un tale elenco di numeri unari firmati e traducilo in un elenco di numeri decimali.
Dettagli
Si può presumere che l'input sia un elenco completo di numeri unari firmati. In particolare, il tuo programma non dovrà gestire 1) input vuoto o 2) input che termina con un separatore.
Puoi supporre che l'entità di ciascun numero non superi 127. Per le lingue con dimensioni massime di stringhe o elenchi, puoi supporre che l'input e l'output si adattino alle strutture di dati della tua lingua, ma l'algoritmo dovrebbe teoricamente funzionare per un elenco di qualsiasi dimensione.
Il programma o la funzione può eseguire l'I / O in uno dei modi standard . L'input può essere una stringa o un elenco di caratteri, stringhe a carattere singolo, numeri interi o valori booleani. È possibile utilizzare due caratteri qualsiasi per rappresentare 1e 0; se non usi 1e 0, specifica quali caratteri stai usando.
L'output deve essere composto da numeri decimali in qualsiasi formato di elenco ragionevole (in particolare, deve esserci una sorta di separatore tra numeri). I numeri negativi dovrebbero essere indicati con un segno meno, anche se se la tua lingua ha un formato diverso per gli interi negativi accetterò anche quello. Lo zero può essere rappresentato nell'output come 0o -0.
Casi test
1 -> 1
0 -> 0 (or -0, and similarly for the other test cases)
011 -> -2
1101 -> 2,1
1100 -> 2,0
11001 -> 2,-1
110001 -> 2,0,1
11100110001 -> 3,-2,0,1
00000001 -> 0,0,0,-1
01111011111111001111111111111110111111111111111100111111111111111111111110111111111111111111111111111111111111111111 -> -4,8,-15,16,-23,42
01111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111 -> -127
0) e il prefisso del segno negativo ( 0) sono gli stessi, anche se è ancora inequivocabile, dal momento che non è possibile avere segni negativi nel mezzo di un numero (è 182--693-1un numero? No, e nessuno dei due è 1111011000101111per lo stesso identico motivo).
'0's, non è tecnicamente unario. Buona sfida però!