Una stringa Primenary ( binary-prime ) è una stringa che, quando scritta come una griglia binaria, ogni riga e colonna ha un totale primo.
È una spiegazione piuttosto vaga, quindi analizziamolo con un esempio funzionante ...
Per questo esempio useremo la stringa bunny
:
Innanzitutto, trova il punto di codice ASCII di ciascun carattere e la sua rappresentazione binaria:
Char | ASCII | Binary
b 98 1100010
u 117 1110101
n 110 1101110
n 110 1101110
y 121 1111001
Prendi questi valori binari, dall'alto verso il basso, e disponili nella griglia (aggiungendo zeri iniziali se necessario):
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
Quindi, conta il numero di 1
s in ciascuna riga e colonna:
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
Se, e solo se, ogni singolo totale è primo (come qui), allora la stringa è un primo binario valido.
La sfida
Il tuo compito è quello di creare una funzione o un programma che, quando viene data una stringa, restituisce / genera truthy
se la stringa è primitiva, e in falsy
altro modo.
Regole / Dettagli
- Si può presumere che i caratteri della stringa saranno sempre nell'intervallo ASCII
33-126
(incluso). - La stringa non sarà vuota.
- Una stringa primenaria non deve avere una lunghezza primi, ad esempio
W1n*
è valida, nonostante abbia 4 caratteri. - Questo è code-golf , quindi vince la risposta più breve (in byte), ma tutte le comunicazioni sono benvenute.
- Le scappatoie standard sono vietate.
Casi test
'husband' -> True
'HOTJava' -> True
'COmPaTIBILE' -> True
'AuT0HACk' -> True
'PPCW' -> False
'code-golf' -> False
'C++' -> False
'/kD' -> False
'HI' -> False
'A' -> False
C'è anche un esempio funzionante, ma incredibilmente dettagliato di Python su repl.it su cui puoi testare la tua soluzione.
False
, giusto?
0
e 1
non sono primi, e ogni stringa di input di 1-2 caratteri contenente solo caratteri nell'intervallo dato è garantita per contenere almeno uno 0
o 1
come somma verticale. È necessario aggiungere alcune stringhe di caratteri 1 e 2 come casi di test.
false
. 2 input di caratteri potrebbero, ma non nell'intervallo ASCII che stiamo utilizzando, quindi per questo scenario hai ragione.
husband
era valido? O qualcuno di loro? Grande problema, però!