Унарні числа зазвичай представляють лише неотримані цілі числа, але ми можемо розширити їх на представлення всіх цілих чисел наступним чином:
- Позитивне ціле число N представлено у вигляді N
1
:5 -> 11111
- Від'ємне ціле число -N подається у вигляді
0
N1
:-5 -> 011111
- Нуль представлений як
0
Потім ми можемо представити список цих чисел однозначно, якщо використовуватимемо 0
як роздільник:
3,-2,0,1
111,011,0,1
111 0 011 0 0 0 1
11100110001
Ваше завдання: візьміть рядок, що представляє такий список підписаних одинакових чисел, і перекладіть його у список десяткових чисел.
Деталі
Ви можете припустити, що вхід - це повний список підписаних одинакових чисел. Зокрема, вашій програмі не доведеться обробляти 1) порожній вхід або 2) вхід, який закінчується роздільником.
Ви можете припустити, що величина кожного числа не буде перевищувати 127. Для мов з максимальним розміром рядків або списків ви можете припустити, що введення та вихід будуть відповідати структурам даних вашої мови, але ваш алгоритм теоретично повинен працювати для списку будь-якого розміру.
Ваша програма чи функція можуть виконувати введення-виведення будь-яким із стандартних способів . Введенням може бути рядок або список символів, односимвольні рядки, цілі числа або булеві символи. Ви можете використовувати будь-які два символи для представлення 1
та 0
; якщо ви не використовуєте 1
і 0
, будь ласка, вкажіть, які символи ви використовуєте.
Вихідні дані повинні бути десятковими числами у будь-якому розумному форматі списку (зокрема, має бути якийсь роздільник між числами). Негативні цифри слід позначати знаком мінус, хоча якщо ваша мова має інший формат для від'ємних цілих чисел, я також прийму це. Нуль може бути представлений у висновку як 0
або -0
.
Тестові справи
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
) і префікс негативного знаку ( 0
) однакові, хоча це все одно однозначно, оскільки ви не можете мати негативні знаки в середині числа (це 182--693-1
число? Ні, і жодна не 1111011000101111
з точно тієї ж причини).
'0's
, технічно він не є одинарним. Хороший виклик, хоча!