Questo è stato ispirato da una parte del concorso ARML 2016 Team Problem # 6.
Ecco la sfida:
Ti viene data una "sequenza di caratteri jolly", che è una sequenza di cifre e un altro carattere. Una stringa corrisponde a questa sequenza di caratteri jolly con il seguente pseudocodice:
w = wildcard
s = string
# s matches w iff
for all 0 >= i > wildcard.length, w[i] == '?' or s[i] == w[i]
Dove '?' è un personaggio a tua scelta.
In termini di regex, immagina '?'di essere '.'.
La sfida è trovare tutti i numeri quadrati (il requisito è fino a 1 milione) le cui rappresentazioni di stringhe decimali corrispondono a questa sequenza di caratteri jolly. Il "carattere jolly" può essere qualsiasi carattere ASCII di tua scelta, purché non sia una cifra, ovviamente.
Ad esempio, 4096partite 4**6e 4*9*ma 4114non corrisponde neanche.
Ingresso
L'input verrà dato come una sequenza corrispondente alla regex [0-9?]+. Può essere una stringa, una matrice di caratteri o una matrice di byte dei caratteri in ASCII.
Produzione
L'output sarà un elenco / insieme / matrice di numeri delimitati da qualsiasi valore, che siano quadrati perfetti e corrispondano alla sequenza di caratteri jolly.
Esempi di input validi:
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]
Esempi di output validi:
[1, 4, 9]
1 4 9
1, 4, 9
1-4-9
eccetera.
specificazioni
- Non puoi usare i builtin per trovare un elenco di quadrati in un certo intervallo
- Si applicano scappatoie standard
- Devi essere in grado di gestire fino a 1 000 000 (1 milione)
- Se fornito con l'input
1******, è corretto stampare[1000000]. È anche corretto stampare[1000000, 1002001, 1004004, 1006009, 1008016, 1010025, ...] - Le sequenze di caratteri jolly non inizieranno mai con il carattere jolly; cioè, corrisponderanno sempre a stringhe della stessa lunghezza.
Casi test
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]
vincente
Invio più breve (valido) (funzionante) entro il 14 febbraio, vincita alla prima presentazione vincente.
25una risposta valida per ***ma non per *2*?
{4, "w", "w", 6}(o meglio ancora {4, w, w, 6}), piuttosto che una matrice di caratteri, come {"4", "w", "w", "6"}?
?deve essere scelto dal risponditore.