Первичная ( двоичная-простая ) строка - это строка, которая при записи в виде двоичной сетки каждая строка и столбец имеет простое общее число.
Это довольно расплывчатое объяснение, поэтому давайте разберем его с проработанным примером ...
Для этого примера мы будем использовать строку bunny
:
Сначала найдите кодовую точку ASCII каждого символа и его двоичное представление:
Char | ASCII | Binary
b 98 1100010
u 117 1110101
n 110 1101110
n 110 1101110
y 121 1111001
Возьмите эти двоичные значения сверху вниз и расположите их в сетке (при необходимости добавляя начальные нули):
1 1 0 0 0 1 0
1 1 1 0 1 0 1
1 1 0 1 1 1 0
1 1 0 1 1 1 0
1 1 1 1 0 0 1
Затем посчитайте количество 1
s в каждой строке и столбце:
1 1 0 0 0 1 0 > 3
1 1 1 0 1 0 1 > 5
1 1 0 1 1 1 0 > 5
1 1 0 1 1 1 0 > 5
1 1 1 1 0 0 1 > 5
v v v v v v v
5 5 2 3 3 3 2
Если и только если каждое отдельное общее число является простым (например, здесь), тогда строка является допустимым двоичным простым числом.
Соревнование
Ваша задача - создать функцию или программу, которая при задании строки возвращает / выводит, truthy
если строка является основной, и в falsy
противном случае.
Правила / Подробнее
- Вы можете предположить, что символы строки всегда будут в диапазоне ASCII
33-126
(включительно). - Строка не будет пустой.
- Primenary строка не не должна иметь основную длину - например,
W1n*
действует, несмотря на наличие 4 -х символов. - Это код-гольф , поэтому выигрывает самый короткий ответ (в байтах) - но все предложения приветствуются.
- Стандартные лазейки запрещены.
Тестовые случаи
'husband' -> True
'HOTJava' -> True
'COmPaTIBILE' -> True
'AuT0HACk' -> True
'PPCW' -> False
'code-golf' -> False
'C++' -> False
'/kD' -> False
'HI' -> False
'A' -> False
Существует также рабочий, но невероятно подробный пример Python на repl.it, с которым вы можете протестировать свое решение.
False
, правильно?
0
и 1
не являются простыми, и каждая входная строка из 1-2 символов, содержащая только символы в данном диапазоне, гарантированно содержит по крайней мере один 0
или 1
в виде вертикальной суммы. Вы должны добавить несколько строк из 1 и 2 символов в качестве тестовых случаев.
false
. Могут быть введены 2 символьных входа, но не в диапазоне ASCII, который мы используем, поэтому для этого сценария вы правы.
husband
это действительно? Или любой из них? Большая проблема, хотя!