Es ist nicht so einfach, die als Ovale und Sticks gedruckten Binärwerte zu betrachten ... Um dies zu unterstützen, müssen Sie eine Funktion (oder ein Programm) schreiben, die Zahlen in einer benutzerdefinierten Binärdarstellung druckt.
Ich möchte also eine Zahl, z. B. 3 ( 00000011
), nehmen und die Bits in einem benutzerdefinierten Format ausgeben, beispielsweise mit durch Leerzeichen getrennten Paaren:
00 00 00 11
oder beispielsweise in umgekehrter Reihenfolge und mit einigen Dekorateuren, z.
11_00_00_00
Darüber hinaus muss es möglich sein, '0' und '1' als benutzerdefinierte Zeichen anzuzeigen, um sie besser unterscheiden zu können, z.
XX oo oo oo
Die Herausforderung besteht also darin, den Code zu schreiben, der dies alles innerhalb der folgenden Spezifikation tut.
Spezifikation
Die Funktion nimmt folgende Eingabe vor: f (A, Maske, Nullen, Einsen)
Parameter:
A - Eingangsnummer - eine beliebige (vorzeichenlose) Ganzzahl im Bereich von 0 bis 255.
mask - Ein String-Parameter, der den Aufbau der Ausgabe definiert.
Nullen - Eine Zeichenfolge mit derselben Länge definiert 'Null'-Glyphen für jeden Ausgangssteckplatz.
one - Eine Zeichenfolge mit der gleichen Länge definiert 'eine' Glyphe für jeden Ausgabeschlitz.
Regeln für die Ausgabekonstruktion:
Schauen Sie sich dieses Bild mit einem Beispiel genau an, um zu verstehen, wie die Ausgabe generiert wird:
Es werden also nur die einzelnen Ziffern in der Maske analysiert und durch entsprechende Bits von A ersetzt. Andere Zeichen bleiben unverändert . Wenn der Wert des aufgenommenen Bits 1 ist, wird es in der endgültigen Ausgabe als "X" angezeigt, und wenn es 0 ist, wird es als "o" angezeigt. Im obigen Beispiel sind alle vier genommenen Bits "1", so dass wir "X" in allen Slots sehen.
Wenn die Eingabenummer 128 wäre, wäre die Ausgabe logischerweise X foo bar ooo
. Zeichen in den Parametern "Nullen" und "Einsen": Bei allen druckbaren ASCII-Zeichen wird davon ausgegangen, dass sie immer an der Maske ausgerichtet sind.
Anmerkungen :
- Bits sind 0-indiziert: Das 0. Bit ist das MSB.
- Angenommen, die Ziffern 8,9 sind in der Maskenzeichenfolge nicht zulässig.
- Die Eingabezeichenfolgen enthalten alle druckbaren ASCII-Zeichen.
- 'Nullen' und 'Einsen' sind auf die Maske ausgerichtet.
- Für Sonderzeichen / Modifikatoren in Ihrer Sprache: Wir können davon ausgehen, dass sie nicht in der Eingabezeichenfolge angezeigt werden.
Weitere Informationen finden Sie in der Übersicht.
Eingabe -> Ausgabebeispiele
Geben Sie alle 8 Bits in gemeinsamer Reihenfolge mit einem Leerzeichen in gemeinsamer Oval-and-Stick-Notation aus:
mask = "0123 4567"
zeros = "0000 0000"
ones = "1111 1111"
A=1 -> 0000 0001
Ausgabe in umgekehrter Reihenfolge, in Strich-und-Glyphe-Notation:
mask = "| 7654 3210 |"
zeros= " ---- ---- "
ones = " ssss ssss "
A=1 -> | s--- ---- |
A=3 -> | ss-- ---- |
A=128-> | ---- ---s |
Verschiedene Notationen in einer Ausgabe, zB für gepackte Daten:
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
Wiederholte Muster:
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 .... |
Aktualisieren
Die Regeln wurden leicht vereinfacht - das Programm darf nur eine Nummer drucken (nicht Array / Liste von Nummern, wie es ursprünglich vorgeschlagen wurde).
A
tut, da es in allen Testfällen gleich ist