Spojrzenie na wartości binarne wydrukowane jako owale i patyki nie jest takie proste ... Aby temu zaradzić, musisz napisać funkcję (lub program), która drukuje liczby w niestandardowej reprezentacji binarnej.
Więc chcę wziąć liczbę, powiedzmy 3 ( 00000011
) i wypisać bity w formacie zdefiniowanym przez użytkownika, na przykład z parami oddzielonymi spacjami:
00 00 00 11
lub powiedzmy w odwrotnej kolejności i z niektórymi dekoratorami, np .:
11_00_00_00
Ponadto musi istnieć możliwość pokazania „0” i „1” jako niestandardowych znaków, aby lepiej je odróżnić, np .:
XX oo oo oo
Wyzwanie polega więc na napisaniu kodu, który robi to wszystko, zgodnie z następującą specyfikacją.
Specyfikacja
Funkcja pobiera dane wejściowe w następujący sposób: f (A, maska, zera, jedynki)
Parametry:
A - liczba wejściowa - dowolna (niepodpisana) liczba całkowita z zakresu 0–255.
mask - parametr ciągu określający konstrukcję wyjścia.
zera - ciąg o tej samej długości, definiuje „zero” glifów dla każdego gniazda wyjściowego.
te - ciąg o tej samej długości, definiuje „jeden” glif dla każdego gniazda wyjściowego.
Zasady konstrukcji wyjściowej:
Przyjrzyj się dokładnie temu obrazowi z przykładem, aby zrozumieć, w jaki sposób generowane są dane wyjściowe:
Więc tylko pojedyncze cyfry w masce są analizowane i zastępowane przez odpowiednie bity, inne znaki są lewo jak ma to miejsce . Ponadto, jeśli wartość pobranego bitu wynosi 1, to pojawia się on na końcowym wyjściu jako „X”, a jeśli jest równy 0, pokazuje się jako „o”. W powyższym przykładzie wszystkie cztery pobrane bity to „1”, więc we wszystkich gniazdach widzimy „X”.
Gdyby liczba wejściowa wynosiła 128, to logicznie wyjściem byłoby X foo bar ooo
. Znaki w parametrach „zera” i „jedynki”: dowolne znaki ASCII, które można wydrukować, zakładają, że zawsze są wyrównane znakami do maski.
Uwagi :
- Bity są indeksowane 0: 0 bit to MSB.
- Załóżmy, że cyfry 8,9 nie są dozwolone w ciągu maski.
- Ciągi wejściowe obejmują dowolne znaki ASCII do wydruku.
- „Zero” i „jedynki” są wyrównane znakami z maską.
- W przypadku znaków specjalnych / modyfikatorów w Twoim języku: możemy założyć, że nie pojawią się one w ciągu wejściowym.
Dla przejrzystości zobacz więcej przykładów.
Dane wejściowe -> Przykłady wyjściowe
Wypisz wszystkie 8 bitów we wspólnej kolejności za pomocą separatora spacji, we wspólnej notacji owal-patyk:
mask = "0123 4567"
zeros = "0000 0000"
ones = "1111 1111"
A=1 -> 0000 0001
Dane wyjściowe w odwrotnej kolejności, w notacji myślnik i glif:
mask = "| 7654 3210 |"
zeros= " ---- ---- "
ones = " ssss ssss "
A=1 -> | s--- ---- |
A=3 -> | ss-- ---- |
A=128-> | ---- ---s |
Różne zapisy w jednym wyjściu, np. Dla spakowanych danych:
mask = "0 | 123 4567"
zeros= " --- ----"
ones = "X kkk ssss"
A= 15 -> | --- ssss
A= 16 -> | --k ----
A= 32 -> | -k- ----
A= 128 -> X | --- ----
A= 255 -> X | kkk ssss
Powtarzające się wzory:
mask = "| 7 66 555 4444 |"
zeros= " . .. ... .... "
ones = " 0 00 000 0000 "
A= 0 -> | . .. ... .... |
A= 1 -> | 0 .. ... .... |
A= 2 -> | . 00 ... .... |
A= 3 -> | 0 00 ... .... |
A= 4 -> | . .. 000 .... |
Aktualizacja
Reguły zostały nieco uproszczone - program musi wydrukować tylko jeden numer (nie tablicę / listę liczb, jak pierwotnie zaproponowano).
A
dzieje, ponieważ jest tak samo we wszystkich przypadkach testowych