Вхід:
- Ціле число
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]]
якщо я зрозумію виклик