Це надихнуло частину змагань команд 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"}
?
?
його повинен обрати відповідач.