Это было вдохновлено частью задачи команды № 6 конкурса ARML 2016 года.
Вот проблема:
Вам дана «последовательность символов подстановки», которая представляет собой последовательность цифр и другого символа. Строка соответствует этой последовательности подстановочных знаков следующим псевдокодом:
w = wildcard
s = string
# s matches w iff
for all 0 >= i > wildcard.length, w[i] == '?' or s[i] == w[i]
Куда '?' это персонаж по вашему выбору.
С точки зрения регулярных выражений, просто представьте, что '?'
это так '.'
.
Задача состоит в том, чтобы найти все квадратные числа (требование до 1 миллиона), чьи десятичные строковые представления соответствуют этой последовательности символов подстановки. «Подстановочный знак» может быть любым символом ASCII по вашему выбору, если, конечно, это не цифра.
Так , например, 4096
спички 4**6
и , 4*9*
но 4114
не соответствует ни.
вход
Ввод будет дан как последовательность, соответствующая регулярному выражению [0-9?]+
. Это может быть строка, массив символов или байтовый массив символов в ASCII.
Вывод
Выходными данными будет список / набор / массив чисел, которые вы хотите разделить, которые являются идеальными квадратами и соответствуют последовательности символов подстановки.
Примеры допустимых входных данных:
1234567*90
1234567?90
1234567u90
['1', '2', '3', '4', '5', '6', '7', '*', '9', '0']
[49, 50, 51, 52, 53, 54, 55, 42, 57, 48]
[1, 2, 3, 4, 5, 6, 7, '*', 9, 0]
Примеры действительных результатов:
[1, 4, 9]
1 4 9
1, 4, 9
1-4-9
и т.п.
Характеристики
- Вы не можете использовать встроенные функции для поиска списка квадратов в определенном диапазоне.
- Применяются стандартные лазейки
- Вы должны быть в состоянии обработать до 1 000 000 (1 миллион)
- Если предоставляется вход
1******
, это правильно для печати[1000000]
. Также правильно печатать[1000000, 1002001, 1004004, 1006009, 1008016, 1010025, ...]
- Последовательности подстановочных знаков никогда не начинаются с подстановочного знака; то есть они всегда будут соответствовать строкам одинаковой длины.
Тестовые случаи
4**6 -> [4096, 4356]
1**1 -> [1521, 1681]
1** -> [100, 121, 144, 169, 196]
9****9 -> [908209, 915849, 927369, 935089, 946729, 954529, 966289, 974169, 986049, 994009]
9*9*** -> [919681, 929296]
1**0* -> [10000, 10201, 10404, 10609, 12100, 14400, 16900, 19600]
9***4 -> [91204, 94864, 97344]
выигрыш
Самая короткая (действительная) (рабочая) подача до 14 февраля, тай-брейк за самую раннюю подачу.
25
правильный ответ для, ***
но не для *2*
?
{4, "w", "w", 6}
(или еще лучше {4, w, w, 6}
), а не массивом символов, таким как {"4", "w", "w", "6"}
?
?
прояснения этого вопроса - указать, что должен выбрать ответчик.