Ini terinspirasi oleh bagian dari kompetisi Tim ARML 2016 Problem # 6.
Inilah tantangannya:
Anda diberi "urutan wildcard", yang merupakan urutan digit dan karakter lain. Sebuah string cocok dengan urutan wildcard ini dengan pseudocode berikut:
w = wildcard
s = string
# s matches w iff
for all 0 >= i > wildcard.length, w[i] == '?' or s[i] == w[i]
Dimana '? adalah karakter pilihan Anda.
Dalam hal regex, bayangkan saja '?'itu '.'.
Tantangannya adalah untuk menemukan semua angka kuadrat (persyaratannya hingga 1 juta) yang representasi desimalnya cocok dengan urutan wildcard ini. "Karakter wildcard" dapat berupa karakter ASCII pilihan Anda, asalkan bukan digit, jelas.
Misalnya, 4096cocok 4**6dan 4*9*tetapi 4114tidak cocok.
Memasukkan
Input akan diberikan sebagai urutan yang cocok dengan regex [0-9?]+. Ini bisa berupa string, array karakter, atau array byte karakter di ASCII.
Keluaran
Output akan berupa daftar / set / array angka apa pun yang Anda inginkan, yang merupakan kuadrat sempurna dan cocok dengan urutan wildcard.
Contoh input yang valid:
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]
Contoh output yang valid:
[1, 4, 9]
1 4 9
1, 4, 9
1-4-9
dll.
Spesifikasi
- Anda tidak boleh menggunakan builtin untuk menemukan daftar kotak dalam rentang tertentu
- Celah Standar Berlaku
- Anda harus dapat menangani hingga 1 000 000 (1 juta)
- Jika diberikan dengan input
1******, sudah benar untuk mencetak[1000000]. Juga benar untuk mencetak[1000000, 1002001, 1004004, 1006009, 1008016, 1010025, ...] - Urutan wildcard tidak akan pernah dimulai dengan karakter wildcard; artinya, mereka akan selalu mencocokkan string dengan panjang yang sama.
Uji Kasus
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]
Kemenangan
Pengajuan terpendek (valid) (bekerja) paling lambat 14 Februari, diikat oleh pemenang pengajuan paling awal.
25jawaban yang valid untuk ***tetapi tidak untuk *2*?
{4, "w", "w", 6}(atau lebih baik lagi {4, w, w, 6}), daripada array karakter, seperti {"4", "w", "w", "6"}?
?akan dipilih oleh penjawab.