Esto fue inspirado por parte de la competencia ARML 2016 Equipo Problema # 6.
Aquí está el desafío:
Te dan una "secuencia comodín", que es una secuencia de dígitos y otro carácter. Una cadena coincide con esta secuencia comodín mediante el siguiente pseudocódigo:
w = wildcard
s = string
# s matches w iff
for all 0 >= i > wildcard.length, w[i] == '?' or s[i] == w[i]
Dónde '?' es un personaje de tu elección.
En términos de expresiones regulares, solo imagínense el '?'
ser '.'
.
El desafío es encontrar todos los números cuadrados (el requisito es de hasta 1 millón) cuyas representaciones de cadenas decimales coinciden con esta secuencia comodín. El "carácter comodín" puede ser cualquier carácter ASCII de su elección, siempre que no sea un dígito, obviamente.
Por ejemplo, 4096
partidos 4**6
y 4*9*
aunque 4114
no coincide tampoco.
Entrada
La entrada se dará como una secuencia que coincida con la expresión regular [0-9?]+
. Puede ser una cadena, una matriz de caracteres o una matriz de bytes de los caracteres en ASCII.
Salida
La salida será una lista / conjunto / conjunto de números delimitados por lo que desee que sean cuadrados perfectos y coincidan con la secuencia de comodines.
Ejemplos de entradas válidas:
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]
Ejemplos de salidas válidas:
[1, 4, 9]
1 4 9
1, 4, 9
1-4-9
etc.
Especificaciones
- No puede usar los builtins para encontrar una lista de cuadrados en un cierto rango
- Se aplican lagunas estándar
- Debe poder manejar hasta 1 000 000 (1 millón)
- Si se proporciona con la entrada
1******
, es correcto imprimir[1000000]
. También es correcto imprimir[1000000, 1002001, 1004004, 1006009, 1008016, 1010025, ...]
- Las secuencias comodín nunca comenzarán con el carácter comodín; es decir, siempre coincidirán con cadenas de la misma longitud.
Casos de prueba
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]
Victorioso
Envío más corto (válido) (en funcionamiento) antes del 14 de febrero, desempate por el ganador más temprano.
25
una respuesta válida para ***
pero no para *2*
?
{4, "w", "w", 6}
(o mejor aún {4, w, w, 6}
), en lugar de una matriz de caracteres, como {"4", "w", "w", "6"}
?
?
será elegido por el respondedor.