Un bit de parité est l'une des formes les plus simples d'une somme de contrôle. Tout d'abord, vous devez choisir la parité, paire ou impaire. Disons que nous choisissons même. Maintenant, nous avons besoin d'un message à transmettre. Disons que notre message est "Foo". Ceci est écrit en binaire comme:
01000110 01101111 01101111
Maintenant, nous comptons le nombre total de 1
's là-dedans, qui est 15. Puisque 15 est un nombre impair, nous devons ajouter un bit supplémentaire à la fin de notre message, et nous aurons maintenant un nombre pair de bits' on ' . Ce dernier bit ajouté est appelé "bit de parité". Si nous avions choisi une parité impaire pour notre somme de contrôle, nous aurions dû ajouter un «0» supplémentaire afin que le nombre de bits reste impair.
Le défi:
Vous devez écrire un programme ou une fonction qui détermine le bit de parité correct pour une chaîne. Votre programme doit prendre deux entrées:
Une chaîne,
s
. C'est le message sur lequel la somme de contrôle sera calculée. Cela sera limité aux 95 caractères ASCII imprimables.Un caractère ou une chaîne de caractères unique
p
, qui sera soite
pour la parité paire, soito
pour la parité impaire.
et produire une valeur true-falsey représentant le bit de parité correct. Vérité si c'est un 1
, et falsey si c'est un 0
.
Les commandes internes qui comptent le nombre de bits "on" dans une chaîne ou un caractère ne sont pas autorisées. Par exemple, une fonction f
qui fait cela: f('a') == 3
ou f('foo') == 16
est interdite. Tout le reste, comme la conversion de base, est un jeu équitable.
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
Il s'agit de codegolf, donc les failles standard s'appliquent et la réponse la plus courte en octets l'emporte.
Classement
str(int(s, 2)).count('1')
? Non, je ne considérerais pas cela comme une fonction intégrée unique qui viole cette règle. Ma modification le rend-elle plus claire?
char == single_char_string
. J'ai également modifié cela dans le post.
o
a même la parité.