Вхід:
- Ціле число
nв діапазоні2 <= n <= 10 - Список натуральних чисел
Вихід:
Перетворіть цілі числа у їх бінарне подання (без жодних провідних нулів) та з'єднайте їх усі разом.
Потім визначте всі бінарні підрядки, які утворюють "двійковий огорожу", використовуючи nкількість огорож. Пробіли (нулі) між кожним стовпом огорожі не мають значення (принаймні 1), але самі огорожі повинні бути однакової ширини.
Тут регулярні вирази двійкових підрядків повинні відповідати кожному 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
Дивлячись на n=4приклади:
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
Потім ми виводимо числа, що використовують двійкові цифри збігів 'бінарні огорожі'.
Приклад:
Вхідні дані : n=4,L=[85,77,71]
Двійкове представлення цих цілих чисел, об'єднаних разом:
1010101 1001101 1000111(ПРИМІТКА: Пробіли додаються лише як пояснення для прикладу).
Оскільки n=4ми шукаємо підрядки, що відповідають регексу (1+)0+\10+\10+\1, і в цьому випадку ми можемо знайти дві:
1010101(у положенні (1010101) 1001101 1000111); і 11001101100011(в положенні 101010(1 1001101 100011)1)
Перший бінарний паркан використовує лише двійкові цифри від 85, а другий бінарний паркан використовує двійкові цифри з усіх трьох цілих чисел. Отже, вихід у цьому випадку буде:
[[85],[85,77,71]]
Правила виклику:
- Хоча це також згадується у наведеному вище прикладі, останнє речення є важливим: ми виводимо числа, для яких використовуються двійкові цифри у підрядку "двійковий паркан".
- Введення / виведення гнучко. Введенням може бути список / масив / потік цілих чисел, пробіл / кома / рядок з обмеженим рядком і т.д. Все залежить від вас, але, будь ласка, вкажіть, що ви використали у своїй відповіді.
- Порядок виведення списку сам по собі не має значення, але вихід кожного внутрішнього списку, звичайно, у тому ж порядку, що і список введення. Отже, з наведеного вище прикладу
[[85,77,71],[85]]є і допустимим результатом, але[[85],[77,85,71]]це не так. - Як ви вже помітили з прикладу (
85), двійкові цифри можуть використовуватися кілька разів. - Режекси повинні повністю відповідати підрядці. Так
110101чи010101ніколи не є дійсними «бінарними огорожами» (10101проте, iffn=3). - Елементи у списку вихідних даних не є унікальними, лише бінарні позиції «бінарних огорож» є унікальними. Якщо кілька «двійкових огорож» можна створити з однаковими цілими числами, ми додаємо їх кілька разів до списку вихідних даних.
Наприклад:n=2,L=[109, 45](двійковий1101101 101101) може формувати ці підрядка «довічного забору»:11011(в положенні(11011)01 101101);101(в положенні1(101)101 101101);11011(в положенні110(1101 1)01101);101(в положенні1101(101) 101101);11011(в положенні110110(1 1011)01);101(в положенні1101101 (101)101);101(у положенні1101101 101(101)), тож вихід був би[[109],[109],[109,45],[109],[109,45],[45],[45]].
Інший приклад:n=2,L=[8127](двійковий1111110111111) може формувати ці підрядка «довічного забору»:1111110111111(в положенні(1111110111111));11111011111(в положенні1(11111011111)1);111101111(в положенні11(111101111)11);1110111(в положенні111(1110111)111);11011(в положенні1111(11011)1111);101(у положенні11111(101)11111), тож вихід був би[[8127],[8127],[8127],[8127],[8127],[8127]]. - Якщо дійсна вихід неможливо, ви можете повернути порожній список або який - або інший вид продукції falsey (
null,false, видає повідомлення про помилку і т.д. Знову ж , ваш виклик).
Загальні правила:
- Це код-гольф , тому найкоротша відповідь у байтах виграє.
Не дозволяйте мовам з кодовим гольфом відштовхувати вас від публікації відповідей з мов, що не кодують гольф. Спробуйте придумати якомога коротшу відповідь на "будь-яку" мову програмування. - Стандартні правила застосовуються до вашої відповіді, тому вам дозволяється використовувати STDIN / STDOUT, функції / метод із відповідними параметрами та повним програмами типу повернення. Твій дзвінок.
- Лазівки за замовчуванням заборонені.
- Якщо можливо, додайте посилання з тестом для вашого коду (тобто TIO ).
- Також настійно рекомендується додавати пояснення до своєї відповіді.
Тестові приклади:
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]вірно для тестової вітрини 4? Я бачу паркан(1 10 11)
2, [10, 10]який повинен призвести, [[10],[10,10],[10]]якщо я зрозумію виклик