Ein Paritätsbit ist eine der einfachsten Formen einer Prüfsumme. Zuerst müssen Sie die gerade oder ungerade Parität auswählen. Nehmen wir an, wir holen gerade. Nun brauchen wir eine Nachricht zum Senden. Angenommen, unsere Nachricht lautet "Foo". Dies ist in binärer Form geschrieben als:
01000110 01101111 01101111
Jetzt zählen wir die Gesamtzahl der darin enthaltenen 1
Bits, also 15. Da 15 eine ungerade Zahl ist, müssen wir am Ende unserer Nachricht ein zusätzliches Bit hinzufügen, und es wird nun eine gerade Anzahl von Ein-Bits angezeigt . Dieses zuletzt hinzugefügte Bit ist als "Paritätsbit" bekannt. Wenn wir eine ungerade Parität für unsere Prüfsumme gewählt hätten, müssten wir eine zusätzliche '0' hinzufügen, damit die Anzahl der Ein-Bits ungerade bleibt.
Die Herausforderung:
Sie müssen ein Programm oder eine Funktion schreiben, die das korrekte Paritätsbit für eine Zeichenfolge bestimmt. Ihr Programm muss zwei Eingaben annehmen:
Eine Zeichenfolge
s
. Dies ist die Meldung, für die die Prüfsumme berechnet wird. Dies ist auf die 95 druckbaren ASCII-Zeichen beschränkt.Ein Zeichen oder eine einzelne Zeichenfolge
p
, die entwedere
für gerade Parität odero
für ungerade Parität steht.
und einen Wahrheits-Falsey- Wert erzeugen , der das korrekte Paritätsbit darstellt. Wahrheit, wenn es eine ist 1
, und Falschheit, wenn es eine ist 0
.
Builtins, die die Anzahl der Ein-Bits in einer Zeichenfolge oder einem Zeichen zählen, sind nicht zulässig. Zum Beispiel eine Funktion f
, die dies tut: f('a') == 3
oder f('foo') == 16
die gesperrt ist. Alles andere, wie die Basisumwandlung, ist Freiwild.
Test IO:
(without the quotes)
s: "0"
p: 'e'
output: 0
s: "Foo"
p: 'e'
output: 1
s: "Hello World!"
p: 'o'
output: 0
s: "Alex is right"
p: 'e'
output: 1
s: "Programming Puzzles and Code-Golf"
p: 'e'
output: 0
s: "Programming Puzzles and Code-Golf"
p: 'o'
output: 1
Dies ist Codegolf, daher gelten Standardlücken, und die kürzeste Antwort in Bytes gewinnt.
Bestenliste
str(int(s, 2)).count('1')
? Nein, ich würde das nicht als einzelne eingebaute Funktion betrachten, die gegen diese Regel verstößt. Macht meine Bearbeitung es klarer?
char == single_char_string
. Das habe ich auch in den Beitrag eingearbeitet.
o
hat eben Parität.