Cela a été inspiré par une partie du problème d'équipe n ° 6 du concours ARML 2016.
Voici le défi:
Vous obtenez une "séquence générique", qui est une séquence de chiffres et un autre caractère. Une chaîne correspond à cette séquence générique par le pseudocode suivant:
w = wildcard
s = string
# s matches w iff
for all 0 >= i > wildcard.length, w[i] == '?' or s[i] == w[i]
Où '?' est un personnage de votre choix.
En termes de regex, imaginez juste l' '?'
être '.'
.
Le défi consiste à trouver tous les nombres carrés (l'exigence est jusqu'à 1 million) dont les représentations de chaînes décimales correspondent à cette séquence générique. Le "caractère générique" peut être n'importe quel caractère ASCII de votre choix, tant qu'il ne s'agit pas d'un chiffre, évidemment.
Par exemple, 4096
correspond à 4**6
et 4*9*
mais 4114
ne correspond pas non plus.
Contribution
L'entrée sera donnée sous la forme d'une séquence correspondant à l'expression régulière [0-9?]+
. Il peut s'agir d'une chaîne, d'un tableau de caractères ou d'un tableau d'octets de caractères en ASCII.
Production
La sortie sera une liste / ensemble / tableau de nombres que vous voulez, qui sont des carrés parfaits et correspondent à la séquence générique.
Exemples d'entrées valides:
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]
Exemples de sorties valides:
[1, 4, 9]
1 4 9
1, 4, 9
1-4-9
etc.
Caractéristiques
- Vous ne pouvez pas utiliser les fonctions intégrées pour trouver une liste de carrés dans une certaine plage
- Les échappatoires standard s'appliquent
- Vous devez être capable de gérer jusqu'à 1 000 000 (1 million)
- S'il est fourni avec l'entrée
1******
, il est correct d'imprimer[1000000]
. Il est également correct d'imprimer[1000000, 1002001, 1004004, 1006009, 1008016, 1010025, ...]
- Les séquences génériques ne commenceront jamais par le caractère générique; c'est-à-dire qu'ils correspondront toujours à des chaînes de même longueur.
Cas de 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]
Gagnant
Soumission la plus courte (valide) (en état de fonctionnement) avant le 14 février, départage par la première soumission gagnante.
25
une réponse valable est-elle pour ***
mais pas pour *2*
?
{4, "w", "w", 6}
(ou mieux encore, {4, w, w, 6}
), plutôt qu'un tableau de caractères, tel que {"4", "w", "w", "6"}
?
?
le choix sera fait par le répondeur.