Ingresso:
- Un numero intero
n
nell'intervallo2 <= n <= 10
- Un elenco di numeri interi positivi
Produzione:
Converti gli interi nella loro rappresentazione binaria (senza zero iniziali) e uniscili tutti insieme.
Quindi determinare tutte le sottostringhe binarie che formano una 'recinzione binaria' utilizzando la n
quantità di pali della recinzione. Gli spazi (zeri) tra ogni paletto sono irrilevanti (almeno 1), ma i paletti stessi devono essere tutti della stessa larghezza.
Qui le regex che le sottostringhe binarie devono corrispondere per ciascuna n
:
n Regex to match to be a 'binary fence' Some examples
2 ^(1+)0+\1$ 101; 1100011; 1110111;
3 ^(1+)0+\10+\1$ 10101; 1000101; 110011011;
4 ^(1+)0+\10+\10+\1$ 1010101; 110110011011; 11110111100001111001111;
etc. etc. You get the point
Guardando gli n=4
esempi:
1010101
^ ^ ^ ^ All fence posts have a width of one 1
^ ^ ^ with one or more 0s in between them
110110011011
^^ ^^ ^^ ^^ All fence posts have a width of two 1s
^ ^^ ^ with one or more 0s in between them
11110111100001111001111
^^^^ ^^^^ ^^^^ ^^^^ All fence posts have a width of four 1s
^ ^^^^ ^^ with one or more 0s in between them
Trasmettiamo quindi i numeri che usano cifre binarie delle "recinzioni binarie" corrispondenti.
Esempio:
Ingresso: n=4
,L=[85,77,71]
La rappresentazione binaria di questi numeri interi uniti insieme è:
1010101 1001101 1000111
(NOTA: gli spazi vengono aggiunti solo come chiarimento per l'esempio).
Poiché n=4
, cerchiamo sottostringhe corrispondenti al regex (1+)0+\10+\10+\1
, nel qual caso possiamo trovarne due:
1010101
(nella posizione (1010101) 1001101 1000111
); e 11001101100011
(in posizione 101010(1 1001101 100011)1
)
Il primo recinto binario utilizza solo cifre binarie da 85
e il secondo recinto binario utilizza cifre binarie da tutti e tre i numeri interi. Quindi l'output in questo caso sarebbe:
[[85],[85,77,71]]
Regole della sfida:
- Anche se è anche menzionato nell'esempio sopra, l'ultima frase è importante: vengono visualizzati i numeri per i quali vengono utilizzate le cifre binarie nella sottostringa "binary fence".
- L'I / O è flessibile. L'input può essere un elenco / array / flusso di numeri interi, spazio / virgola / stringa delimitata da nuova riga, ecc. L'output può essere un elenco intero 2D, una singola stringa delimitata, un elenco di stringhe, una nuova riga stampata su STDOUT, ecc. Tutto a te, ma per favore, indica cosa hai usato nella tua risposta.
- L'ordine di output dell'elenco stesso è irrilevante, ma l'output di ciascun elenco interno è ovviamente nello stesso ordine dell'elenco di input. Quindi, con l'esempio sopra,
[[85,77,71],[85]]
è anche un output valido, ma[[85],[77,85,71]]
non lo è. - Come avrai già notato dall'esempio (il
85
), le cifre binarie possono essere utilizzate più volte. - Le regex dovrebbero corrispondere interamente alla sottostringa. Quindi
110101
o010101
non sono mai valide 'recinzioni binarie' (10101
è comunque iffn=3
). - Gli elementi nella lista di output non sono univoci, solo le posizioni binarie delle "recinzioni binarie" sono uniche. Se è possibile creare più 'recinzioni binarie' con gli stessi numeri interi, li aggiungiamo più volte all'elenco di output.
Ad esempion=2
,L=[109, 45]
(binario1101101 101101
) può formare questi sottostringhe 'recinzione binario':11011
(in posizione(11011)01 101101
);101
(in posizione1(101)101 101101
);11011
(in posizione110(1101 1)01101
);101
(in posizione1101(101) 101101
);11011
(in posizione110110(1 1011)01
);101
(in posizione1101101 (101)101
);101
(in posizione1101101 101(101)
), quindi l'uscita sarebbe[[109],[109],[109,45],[109],[109,45],[45],[45]]
.
Un altro esempio:n=2
,L=[8127]
(binario1111110111111
) può formare questi sottostringhe 'recinzione binario':1111110111111
(in posizione(1111110111111)
);11111011111
(in posizione1(11111011111)1
);111101111
(in posizione11(111101111)11
);1110111
(in posizione111(1110111)111
);11011
(in posizione1111(11011)1111
);101
(in posizione11111(101)11111
), quindi l'uscita sarebbe[[8127],[8127],[8127],[8127],[8127],[8127]]
. - Se nessuna uscita valida è possibile, si può restituire un elenco vuoto o qualche altro tipo di output Falsey (
null
,false
, getta un errore, ecc Anche in questo caso, la chiamata).
Regole generali:
- Questo è code-golf , quindi vince la risposta più breve in byte.
Non lasciare che le lingue di code-golf ti scoraggino dal pubblicare risposte con lingue non codegolfing. Prova a trovare una risposta il più breve possibile per "qualsiasi" linguaggio di programmazione. - Per la tua risposta valgono regole standard , quindi puoi usare STDIN / STDOUT, funzioni / metodo con i parametri corretti e tipo di ritorno, programmi completi. La tua chiamata.
- Sono vietate le scappatoie predefinite .
- Se possibile, aggiungi un link con un test per il tuo codice (ad es. TIO ).
- Inoltre, si consiglia vivamente di aggiungere una spiegazione per la risposta.
Casi test:
Input: Output
(the binary below the output are added as clarification,
where the parenthesis indicate the substring matching the regex):
4, [85,77,71] [[85],[85,77,71]]
(1010101) 1001101 1000111; 101010(1 1001101 100011)1
2, [109,45] [[109],[109],[109,45],[109],[109,45],[45],[45]]
(11011)01 101101; 1(101)101 101101; 110(1101 1)01101; 1101(101) 101101; 110110(1 1011)01; 1101101 (101)101; 1101101 101(101)
3, [990,1,3,3023,15,21] [[990,1,3,3023],[990,1,3,3023],[1,3,3023],[21]]
(1111011110 1 11 1)01111001111 1111 10101; 11110(11110 1 11 101111)001111 1111 10101; 1111011110 (1 11 101111001111) 1111 10101; 1111011110 1 11 101111001111 1111 (10101)
2, [1,2,3,4,5,6,7,8,9,10] [[1,2,3],[2,3],[4,5],[5],[5,6,7],[6,7],[6,7],[8,9],[9],[10]]
(1 10 11) 100 101 110 111 1000 1001 1010; 1 (10 1)1 100 101 110 111 1000 1001 1010; 1 10 11 (100 1)01 110 111 1000 1001 1010; 1 10 11 100 (101) 110 111 1000 1001 1010; 1 10 11 100 10(1 110 111) 1000 1001 1010; 1 10 11 100 101 (110 11)1 1000 1001 1010; 1 10 11 100 101 1(10 1)11 1000 1001 1010; 1 10 11 100 101 110 111 (1000 1)001 1010; 1 10 11 100 101 110 111 1000 (1001) 1010; 1 10 11 100 101 110 111 1000 1001 (101)0
3, [1,2,3,4,5,6,7,8,9,10] [[4,5],[8,9]]
1 10 11 (100 101 )110 111 1000 1001 1010; 1 10 11 100 101 110 111 (1000 1001) 1010
10, [1,2,3,4,5,6,7,8,9,10] []
No binary fences are possible for this input
6, [445873,2075] [[445873,2075],[445873,2075],[445873,2075]]
(1101100110110110001 1)00000011011; 110(1100110110110001 100000011)011; 1101100(110110110001 100000011011)
2, [8127] [[8127],[8127],[8127],[8127],[8127],[8127]]
(1111110111111); 1(11111011111)1; 11(111101111)11; 111(1110111)111; 1111(11011)1111; 11111(101)11111
2, [10,10] [[10],[10,10],[10]]
(101)0 1010; 10(10 1)010; 1010 (101)0
4, [10,10,10] [[10,10],[10,10,10],[10,10]]
(1010 101)0 1010; 10(10 1010 1)010; 1010 (1010 101)0
[1,2,3]
valido per testcase 4? Vedo la recinzione(1 10 11)
2, [10, 10]
che dovrebbe risultare [[10],[10,10],[10]]
se capisco la sfida correctl.y