Contribution:
- Un entier
n
dans la plage2 <= n <= 10
- Une liste d'entiers positifs
Production:
Convertissez les entiers en leur représentation binaire (sans zéros non significatifs) et joignez-les tous ensemble.
Déterminez ensuite toutes les sous-chaînes binaires qui forment une «clôture binaire» en utilisant une n
quantité de poteaux de clôture. Les espaces (zéros) entre chaque poteau de clôture ne sont pas pertinents (au moins 1), mais les poteaux de clôture eux-mêmes doivent tous être de largeur égale.
Ici, les expressions rationnelles les sous-chaînes binaires doivent correspondre pour chacun 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
En regardant les n=4
exemples:
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
Nous sortons ensuite les nombres qui utilisent les chiffres binaires des correspondances «clôtures binaires».
Exemple:
Entrée: n=4
,L=[85,77,71]
La représentation binaire de ces nombres entiers réunis est:
1010101 1001101 1000111
(REMARQUE: les espaces ne sont ajoutés qu'à titre de clarification pour l'exemple).
Depuis n=4
, nous recherchons des sous-chaînes correspondant à l'expression régulière (1+)0+\10+\10+\1
, auquel cas nous pouvons en trouver deux:
1010101
(à la position (1010101) 1001101 1000111
); et 11001101100011
(en position101010(1 1001101 100011)1
)
La première clôture binaire utilise uniquement des chiffres binaires de 85
et la deuxième clôture binaire utilise des chiffres binaires des trois entiers. Ainsi, la sortie dans ce cas serait:
[[85],[85,77,71]]
Règles du défi:
- Bien qu'elle soit également mentionnée dans l'exemple ci-dessus, la dernière phrase est importante: nous affichons les numéros pour lesquels des chiffres binaires sont utilisés dans la sous-chaîne «clôture binaire».
- Les E / S sont flexibles. L'entrée peut être une liste / tableau / flux d'entiers, une chaîne délimitée par un espace / virgule / nouvelle ligne, etc. La sortie peut être une liste entière 2D, une seule chaîne délimitée, une liste de chaînes, une nouvelle ligne imprimée sur STDOUT, etc. Tout dépend de vous, mais veuillez indiquer ce que vous avez utilisé dans votre réponse.
- L'ordre de sortie de la liste elle-même n'est pas pertinent, mais la sortie de chaque liste interne est bien sûr dans le même ordre que la liste d'entrée. Donc, avec l'exemple ci-dessus,
[[85,77,71],[85]]
est également une sortie valide, mais[[85],[77,85,71]]
ne l'est pas. - Comme vous l'avez peut-être déjà remarqué dans l'exemple (le
85
), les chiffres binaires peuvent être utilisés plusieurs fois. - Les expressions régulières doivent correspondre entièrement à la sous-chaîne. Donc
110101
ou010101
ne sont jamais des «clôtures binaires» valides (10101
est cependant ssin=3
). - Les éléments de la liste de sortie ne sont pas uniques, seules les positions binaires des «clôtures binaires» sont uniques. Si plusieurs «clôtures binaires» peuvent être créées avec le ou les mêmes nombres entiers, nous les ajoutons plusieurs fois à la liste de sortie.
Par exemple:n=2
,L=[109, 45]
(binaire1101101 101101
) peut former ces sous - chaînes « de clôture binaire »:11011
(en position(11011)01 101101
);101
(en position1(101)101 101101
);11011
(en position110(1101 1)01101
);101
(en position1101(101) 101101
);11011
(en position110110(1 1011)01
);101
(en position1101101 (101)101
);101
(à la position1101101 101(101)
), donc la sortie serait[[109],[109],[109,45],[109],[109,45],[45],[45]]
.
Un autre exemple:n=2
,L=[8127]
(binaire1111110111111
) peut former ces sous - chaînes « de clôture binaire »:1111110111111
(en position(1111110111111)
);11111011111
(en position1(11111011111)1
);111101111
(en position11(111101111)11
);1110111
(en position111(1110111)111
);11011
(en position1111(11011)1111
);101
(à la position11111(101)11111
), donc la sortie serait[[8127],[8127],[8127],[8127],[8127],[8127]]
. - Si aucune sortie valide est possible, vous pouvez retourner une liste vide ou un autre type de sortie Falsey (
null
,false
, jette une erreur, etc. Encore une fois, votre appel).
Règles générales:
- C'est le code-golf , donc la réponse la plus courte en octets l'emporte.
Ne laissez pas les langues de golf de code vous décourager de publier des réponses avec des langues autres que le golf de code. Essayez de trouver une réponse aussi courte que possible pour «n'importe quel» langage de programmation. - Des règles standard s'appliquent à votre réponse, vous êtes donc autorisé à utiliser STDIN / STDOUT, fonctions / méthode avec les paramètres appropriés et des programmes complets de type retour. Ton appel.
- Les failles par défaut sont interdites.
- Si possible, veuillez ajouter un lien avec un test pour votre code (par exemple TIO ).
- De plus, l'ajout d'une explication à votre réponse est fortement recommandé.
Cas de 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]
valide pour le testcase 4? Je vois la clôture(1 10 11)
2, [10, 10]
ce qui devrait entraîner [[10],[10,10],[10]]
si je comprends bien le défi correctl.y