Normalde, bir sayıyı her bir terim için
0
veya1
her bir terim için katsayısı olan 2 güçle atayarak ikili sayılara ayırırız :
25 = 1*16 + 1*8 + 0*4 + 0*2 + 1*1
Seçim
0
ve1
... çok ikili değil. Gerçek ikili genişlemeyi 2'lik güçlerle genişleterek gerçekleştiririz , ancak katsayısı1
veya-1
yerine:
25 = 1*16 + 1*8 + 1*4 - 1*2 - 1*1
Şimdi bu ikili görünüyor.
Herhangi bir pozitif sayı göz önüne alındığında, aşağıdakileri görmek önemsiz olmalıdır:
- Her tek sayının sonsuz sayıda gerçek ikili açılımı vardır
- Her çift sayının gerçek ikili genişletmesi yoktur
Dolayısıyla, gerçek bir ikili genişlemenin iyi tanımlanması için, genişlemenin en az , yani en kısa uzunlukta olması gerekir.
Herhangi bir pozitif, tek tamsayı göz önüne alındığında n
, gerçek ikili genişlemesini, en anlamlı basamaktan en az anlamlı basamağa (veya ters sırada) döndürün.
Kurallar:
- Bu olduğu gibi kod golf, bunu mümkün olan en kısa bayt sayısında yapmayı hedeflemelisiniz . Yerleşiklere izin verilir.
- Katsayıları temsil edebilen ve listeleyebilen herhangi bir çıktı kabul edilebilir: bir dizi, ayırıcılı bir katsayı dizisi, vb.
- Standart golf sahaları geçerlidir.
- Programınız, dilinizin standart tamsayı boyutundaki değerler için çalışmalıdır.
Test Durumları
25 -> [1,1,1,-1,-1]
47 -> [1,1,-1,1,1,1]
1 -> [1]
3 -> [1,1]
1234567 -> [1,1,-1,-1,1,-1,1,1,-1,1,-1,1,1,-1,1,-1,-1,-1,-1,1,1]
0
yerine standart hata ayıklayıcılar yazdırılırsa benim hatam değil -1
. Bitleri alan arayan ne demek istediğini bilir. (Hala önemsiz olmayan bir bit manipülasyon egzersizi, çünkü bir döndürme hakkı sadece 32 önemli bite sahipse çalışır. Örneğin 5 bitlik bir sayı 5'lik bir döndürme genişliğine ihtiyaç duyar.)
111-1-1
için geçerli bir çıkış 25
?