Liczby jednoargumentowe zwykle reprezentują tylko nieujemne liczby całkowite, ale możemy je rozszerzyć tak, aby reprezentowały wszystkie liczby całkowite w następujący sposób:
- Dodatnia liczba całkowita N jest reprezentowana przez N
1
:5 -> 11111
- Ujemna liczba całkowita -N jest reprezentowana
0
przez następującą po niej literę N1
:-5 -> 011111
- Zero jest reprezentowane jako
0
Następnie możemy jednoznacznie przedstawić listę tych liczb, jeśli użyjemy 0
jako separatora:
3,-2,0,1
111,011,0,1
111 0 011 0 0 0 1
11100110001
Twoje zadanie: weź ciąg reprezentujący taką listę podpisanych liczb jednoargumentowych i przetłumacz go na listę liczb dziesiętnych.
Detale
Możesz założyć, że dane wejściowe to pełna lista podpisanych liczb jednoargumentowych. W szczególności twój program nie będzie musiał obsługiwać 1) pustych danych wejściowych lub 2) danych wejściowych, które kończą się separatorem.
Możesz założyć, że wielkość każdej liczby nie przekroczy 127. W przypadku języków o maksymalnych rozmiarach ciągów lub list możesz założyć, że dane wejściowe i wyjściowe będą pasować do struktur danych Twojego języka, ale Twój algorytm powinien teoretycznie działać dla listy dowolny rozmiar.
Twój program lub funkcja może wykonywać operacje we / wy na dowolny ze standardowych sposobów . Dane wejściowe mogą być ciągiem lub listą znaków, ciągami jednoznakowymi, liczbami całkowitymi lub wartościami logicznymi. Możesz użyć dowolnych dwóch znaków do przedstawienia 1
i 0
; jeśli nie używasz 1
i 0
, określ, jakich znaków używasz.
Dane wyjściowe muszą być liczbami dziesiętnymi w dowolnym rozsądnym formacie listy (w szczególności musi istnieć pewnego rodzaju separator między liczbami). Liczby ujemne powinny być oznaczone znakiem minus, chociaż jeśli twój język ma inny format ujemnych liczb całkowitych, również to zaakceptuję. Zero może być reprezentowane na wyjściu jako 0
lub -0
.
Przypadki testowe
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
) i przedrostek znaku ujemnego ( 0
) są takie same, chociaż nadal są jednoznaczne, ponieważ nie można mieć znaków ujemnych w środku liczby (czy 182--693-1
liczba? Nie, i żadne nie jest 1111011000101111
z tego samego powodu).
'0's
, nie jest to technicznie jednoznaczne. Dobre wyzwanie!