Біт парності , є одним з найпростіших форм контрольної суми. По-перше, ви повинні вибрати паритет, парний чи непарний. Скажімо, ми вибираємо навіть. Тепер нам потрібне повідомлення для передачі. Скажімо, наше повідомлення "Foo". Це пишеться у двійковій формі як:
01000110 01101111 01101111
Тепер ми підраховуємо загальну кількість 1
"s" там, яка дорівнює 15. Оскільки 15 - непарне число, ми повинні додати ще один додатковий біт до кінця повідомлення, і тепер у нас буде парне число "on" біт . Цей останній доданий біт відомий як "біт парності". Якби ми вибрали непарний паритет для нашої контрольної суми, нам доведеться додати додаткові «0», щоб число біт залишалося непарним.
Змагання:
Ви повинні написати програму або функцію, яка визначає, що є правильним бітом парності для рядка. Ваша програма повинна взяти два входи:
Рядок,
s
. Це повідомлення, на яке буде розрахована контрольна сума. Це буде обмежено 95 символами для друку ASCII.Символьний або одиночний рядок символів
p
, який буде абоe
для парного парності, абоo
для непарного паритету.
і виробляють значення truthy-falsey, що представляє правильний біт парності. Truthy, якщо це a 1
, і Falsey, якщо це a 0
.
Вбудовані, які рахують кількість бітів "on" у рядку чи символу, не дозволяються. Наприклад, функція, f
яка виконує це: f('a') == 3
або f('foo') == 16
заборонена. Все інше, наприклад перетворення базових, - це чесна гра.
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
Це кодовий гольф, тому застосовуються стандартні лазівки, і найкоротша відповідь у байтах виграє.
Таблиця лідерів
str(int(s, 2)).count('1')
:? Ні, я б не вважав це єдиною вбудованою функцією, яка порушує це правило. Чи робить це моя редакція більш зрозумілою?
char == single_char_string
. Я також відредагував це на посаді.
o
має рівний паритет.