Angka-angka unary biasanya hanya mewakili bilangan bulat non-negatif, tetapi kita dapat memperluasnya untuk mewakili semua bilangan bulat sebagai berikut:
- Bilangan bulat positif N direpresentasikan sebagai N
1
:5 -> 11111
- Integer negatif -N direpresentasikan sebagai
0
diikuti oleh N1
's:-5 -> 011111
- Nol direpresentasikan sebagai
0
Kami kemudian dapat mewakili daftar angka-angka ini dengan jelas jika kami gunakan 0
sebagai pemisah:
3,-2,0,1
111,011,0,1
111 0 011 0 0 0 1
11100110001
Tugas Anda: ambil string yang mewakili daftar nomor yang belum ditandatangani, dan terjemahkan ke dalam daftar angka desimal.
Detail
Anda dapat berasumsi bahwa input adalah daftar lengkap nomor unary yang ditandatangani. Secara khusus, program Anda tidak perlu menangani 1) input kosong atau 2) input yang berakhir dengan pemisah.
Anda dapat mengasumsikan bahwa besarnya setiap angka tidak akan melebihi 127. Untuk bahasa dengan ukuran string atau daftar maksimum, Anda dapat mengasumsikan bahwa input dan output akan sesuai dengan struktur data bahasa Anda, tetapi algoritma Anda secara teoritis harus bekerja untuk daftar ukuran apapun.
Program atau fungsi Anda dapat melakukan I / O dengan salah satu cara standar . Input dapat berupa string atau daftar karakter, string karakter tunggal, bilangan bulat, atau boolean. Anda dapat menggunakan dua karakter apa saja untuk mewakili 1
dan 0
; jika Anda tidak menggunakan 1
dan 0
, tentukan karakter yang Anda gunakan.
Output harus angka desimal dalam format daftar yang masuk akal (khususnya, harus ada semacam pemisah antara angka). Angka negatif harus ditunjukkan dengan tanda minus, meskipun jika bahasa Anda memiliki format berbeda untuk bilangan bulat negatif, saya juga akan menerimanya. Nol dapat direpresentasikan dalam output sebagai 0
atau -0
.
Uji kasus
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
) dan awalan tanda negatif ( 0
) adalah sama, meskipun masih tidak ambigu, karena Anda tidak dapat memiliki tanda-tanda negatif di tengah-tengah angka (apakah 182--693-1
angka? Tidak, dan tidak ada 1111011000101111
untuk alasan yang sama persis).
'0's
, itu secara teknis tidak unary. Tantangan bagus!