Um bit de paridade , é uma das formas mais simples de uma soma de verificação. Primeiro, você deve escolher a paridade, par ou ímpar. Digamos que escolhemos par. Agora, precisamos de uma mensagem para transmitir. Digamos que nossa mensagem seja "Foo". Isso está escrito em binário como:
01000110 01101111 01101111
Agora, contamos o número total de 1
's' lá, que é 15. Como 15 é um número ímpar, devemos adicionar um bit extra ao final de nossa mensagem e agora teremos um número par de bits 'on' . Este último bit adicionado é conhecido como "bit de paridade". Se tivéssemos escolhido uma paridade ímpar para nossa soma de verificação, teríamos que adicionar um '0' extra para que o número de bits permanecesse ímpar.
O desafio:
Você deve escrever um programa ou função que determine qual é o bit de paridade correto para uma string. Seu programa deve receber duas entradas:
Uma corda
s
. Essa é a mensagem na qual a soma de verificação será calculada. Isso será restrito aos 95 caracteres imprimíveis ASCII.Um caractere ou sequência de caracteres única
p
, que seráe
paridade par ouo
paridade ímpar.
e produza um valor truthy-falsey representando o bit de paridade correto. Verdadeiramente se for um 1
, e falsey se for um 0
.
Construções internas que contam o número de bits "ativados" em uma sequência ou caractere não são permitidas. Por exemplo, uma função f
que faz isso: f('a') == 3
ou f('foo') == 16
é banida. Qualquer outra coisa, como a conversão de base, é um jogo justo.
Teste de E / S:
(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
Este é um codegolf, então as brechas padrão se aplicam e a resposta mais curta em bytes vence.
Entre os melhores
str(int(s, 2)).count('1')
:? Não, eu não consideraria essa uma única função interna que viola essa regra. Minha edição deixa mais claro?
char == single_char_string
. Eu também editei isso no post.
o
tem até paridade.