Zostało to zainspirowane częścią konkursu ARML 2016 Problem zespołu nr 6.
Oto wyzwanie:
Otrzymujesz „sekwencję symboli zastępczych”, która jest sekwencją cyfr i innego znaku. Ciąg pasuje do tej sekwencji symboli wieloznacznych według następującego pseudokodu:
w = wildcard
s = string
# s matches w iff
for all 0 >= i > wildcard.length, w[i] == '?' or s[i] == w[i]
Gdzie '?' jest postacią twojego wyboru.
Jeśli chodzi o wyrażenia regularne, wyobraź sobie, że '?'jest '.'.
Wyzwanie polega na znalezieniu wszystkich liczb kwadratowych (wymaganie to do 1 miliona), których ciąg dziesiętny odpowiada ciągowi symboli zastępczych. „Znak wieloznaczny” może być dowolnym wybranym przez ciebie znakiem ASCII, o ile oczywiście nie jest cyfrą.
Na przykład, 4096mecze 4**6i 4*9*ale 4114nie pasuje albo.
Wejście
Dane wejściowe zostaną podane jako sekwencja pasująca do wyrażenia regularnego [0-9?]+. Może to być ciąg znaków, tablica znaków lub tablica bajtów znaków w ASCII.
Wynik
Wynikiem będzie dowolna lista / zestaw / tablica liczb, które są idealnymi kwadratami i pasują do sekwencji symboli wieloznacznych.
Przykłady prawidłowych danych wejściowych:
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]
Przykłady prawidłowych wyników:
[1, 4, 9]
1 4 9
1, 4, 9
1-4-9
itp.
Dane techniczne
- Nie można używać wbudowanych funkcji do znajdowania listy kwadratów w określonym zakresie
- Obowiązują standardowe luki
- Musisz być w stanie obsłużyć do 1 000 000 (1 milion)
- Jeśli jest wyposażony w dane wejściowe
1******, drukowanie jest prawidłowe[1000000]. Prawidłowe jest również drukowanie[1000000, 1002001, 1004004, 1006009, 1008016, 1010025, ...] - Sekwencje symboli wieloznacznych nigdy nie zaczynają się od znaku wieloznacznego; oznacza to, że zawsze będą pasować do ciągów o tej samej długości.
Przypadki testowe
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]
Zwycięski
Najkrótsze (ważne) (działające) zgłoszenie do 14 lutego, rozstrzygnięcie po wygraniu najwcześniejszego zgłoszenia.
25ważna jest odpowiedź na, ***ale nie na *2*?
{4, "w", "w", 6}(lub jeszcze lepiej {4, w, w, 6}), a nie tablica znaków, na przykład {"4", "w", "w", "6"}?
?ma wybrać osoba odpowiadająca.