Normalde, bir sayıyı her bir terim için
0veya1her 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*1Seçim
0ve1... çok ikili değil. Gerçek ikili genişlemeyi 2'lik güçlerle genişleterek gerçekleştiririz , ancak katsayısı1veya-1yerine:
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]
0yerine 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-1için geçerli bir çıkış 25?