이는 2016 ARML 경쟁 팀 문제 # 6의 일부에서 영감을 받았습니다.
도전은 다음과 같습니다.
일련의 숫자와 다른 문자 인 "와일드 카드 시퀀스"가 제공됩니다. 문자열은 다음 의사 코드로이 와일드 카드 시퀀스와 일치합니다.
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]
승리
2 월 14 일까지 최단 (유효한) (작업) 제출, 가장 빠른 제출 우승으로 동점.
25에 대한 올바른 대답 ***만하지 않는가 *2*?
{4, "w", "w", 6}더 나은 {4, w, w, 6})입니다 {"4", "w", "w", "6"}.
?은 응답자가 선택 하도록 지정하는 것이라고 생각합니다 .