Un po 'di parità , è una delle forme più semplici di un checksum. Innanzitutto, devi scegliere la parità, pari o dispari. Diciamo che scegliamo pari. Ora, abbiamo bisogno di un messaggio da trasmettere. Diciamo che il nostro messaggio è "Foo". Questo è scritto in binario come:
01000110 01101111 01101111
Ora contiamo il numero totale di 1
'in', che è 15. Dato che 15 è un numero dispari, dobbiamo aggiungere un bit in più alla fine del nostro messaggio e ora avremo un numero pari di 'on' bit . Quest'ultimo bit aggiunto è noto come "bit di parità". Se avessimo scelto una parità dispari per il nostro checksum, avremmo aggiunto un ulteriore "0" in modo che il numero di bit on rimanga dispari.
La sfida:
È necessario scrivere un programma o una funzione che determina quale sia il bit di parità corretto per una stringa. Il tuo programma deve avere due input:
Una stringa,
s
. Questo è il messaggio su cui verrà calcolato il checksum. Questo sarà limitato ai 95 caratteri ASCII stampabili.Una stringa di caratteri o caratteri singoli
p
, che saràe
per parità pari oo
per parità dispari.
e produce un valore di verità-falsità che rappresenta il bit di parità corretto. Verità se è una 1
e falsità se è una 0
.
I builtin che contano il numero di bit "on" in una stringa o in un carattere non sono consentiti. Ad esempio, una funzione f
che fa ciò: f('a') == 3
o f('foo') == 16
è vietata. Qualsiasi altra cosa, come la conversione di base, è un gioco equo.
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
Questo è codegolf, quindi si applicano scappatoie standard e vince la risposta più breve in byte.
Classifica
str(int(s, 2)).count('1')
? No, non la considero una singola funzione integrata che viola tale regola. La mia modifica lo rende più chiaro?
char == single_char_string
. L'ho anche modificato nel post.
o
ha anche la parità.