Đánh dấu các giá trị nhị phân được in dưới dạng hình bầu dục và gậy không quá dễ dàng ... Để giúp với điều đó, bạn phải viết một hàm (hoặc một chương trình) in các số trong biểu diễn nhị phân tùy chỉnh.
Vì vậy, tôi muốn lấy một số, giả sử 3 ( 00000011
) và xuất các bit ở định dạng do người dùng xác định, ví dụ với các cặp được phân tách bằng dấu cách:
00 00 00 11
hoặc, giả sử, theo thứ tự đảo ngược và với một số trang trí, ví dụ:
11_00_00_00
Hơn nữa, phải có khả năng hiển thị '0' và '1' dưới dạng các ký tự tùy chỉnh để phân biệt chúng tốt hơn, ví dụ:
XX oo oo oo
Vì vậy, thách thức là viết mã mà tất cả các thông số kỹ thuật sau đây.
Sự chỉ rõ
Hàm nhận đầu vào như thế này: f (A, mặt nạ, số không, số)
Thông số:
A - số đầu vào - bất kỳ số nguyên (không dấu) nào trong phạm vi 0-255.
mask - một tham số chuỗi xác định cấu trúc của đầu ra.
số không - một chuỗi có cùng độ dài, xác định glyphs 'zero' cho mỗi vị trí đầu ra.
những cái - một chuỗi có cùng độ dài, xác định glyphs 'một' cho mỗi khe đầu ra.
Quy tắc xây dựng đầu ra:
Nhìn vào hình ảnh này với ví dụ chặt chẽ để hiểu cách tạo đầu ra:
Vì vậy, chỉ các chữ số duy nhất trong mặt nạ được phân tích cú pháp và được thay thế bằng các bit tương ứng của A, các ký tự khác được giữ nguyên . Hơn nữa, nếu giá trị của bit đã lấy là 1 thì nó hiển thị trong đầu ra cuối cùng là "X" và nếu là 0 thì nó hiển thị là "o". Trong ví dụ trên, tất cả bốn bit được lấy là "1" vì vậy chúng ta thấy "X" trong tất cả các vị trí.
Nếu số đầu vào là 128, thì theo logic, đầu ra sẽ là X foo bar ooo
. Các ký tự trong tham số "số không" và "số": bất kỳ ký tự ASCII có thể in nào, giả sử chúng luôn được căn chỉnh với mặt nạ.
Ghi chú :
- Các bit được lập chỉ mục 0: bit thứ 0 là MSB.
- Giả sử rằng các chữ số 8,9 không được phép trong chuỗi mặt nạ.
- Chuỗi đầu vào bao gồm bất kỳ ký tự ASCII có thể in.
- 'Số không' và 'số' được căn chỉnh với mặt nạ.
- Đối với các ký tự / sửa đổi đặc biệt trong ngôn ngữ của bạn: chúng tôi có thể cho rằng chúng sẽ không xuất hiện trong chuỗi đầu vào.
Để rõ ràng, xem thêm ví dụ.
Đầu vào -> Ví dụ đầu ra
Xuất tất cả 8 bit theo thứ tự chung với một dấu phân cách không gian, theo ký hiệu hình bầu dục chung và hình que:
mask = "0123 4567"
zeros = "0000 0000"
ones = "1111 1111"
A=1 -> 0000 0001
Đầu ra theo thứ tự đảo ngược, theo ký hiệu gạch ngang và glyph:
mask = "| 7654 3210 |"
zeros= " ---- ---- "
ones = " ssss ssss "
A=1 -> | s--- ---- |
A=3 -> | ss-- ---- |
A=128-> | ---- ---s |
Các ký hiệu đa dạng trong một đầu ra, ví dụ: đối với dữ liệu được đóng gói:
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
Lặp lại các mẫu:
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 .... |
Cập nhật
Các quy tắc đã được đơn giản hóa một chút - chương trình phải chỉ in một số (không phải mảng / danh sách các số như đã đề xuất ban đầu).
A
xảy ra, vì nó giống nhau trong tất cả các trường hợp thử nghiệm