Bu, 2016 ARML yarışması Takım Sorunu # 6'nın bir parçasıydı.
İşte zorluk:
Size bir rakam dizisi ve başka bir karakter olan bir "joker karakter dizisi" verilir. Bir dize, bu joker karakter dizisiyle aşağıdaki sahte kodla eşleşir:
w = wildcard
s = string
# s matches w iff
for all 0 >= i > wildcard.length, w[i] == '?' or s[i] == w[i]
Nerede '?' seçtiğiniz bir karakterdir.
Regex açısından, sadece hayal '?'olmaya '.'.
Zorluk, ondalık dizgi gösterimleri bu joker karakter dizisiyle eşleşen tüm kare sayılarını (gereksinim 1 milyona kadardır) bulmaktır. "Joker karakter", bir rakam olmadığı sürece, seçtiğiniz herhangi bir ASCII karakteri olabilir.
Örneğin, 4096maçları 4**6ve 4*9*fakat 4114ikisinden biri uyuşmuyor.
Giriş
Giriş normal ifadeyle eşleşen bir sıra olarak verilecektir [0-9?]+. Bu, bir dize, bir karakter dizisi veya ASCII'deki karakterlerin bayt dizisi olabilir.
Çıktı
Çıktı, mükemmel kareler olan ve joker karakter dizisiyle eşleşen, istediğiniz sınırlandırılmış liste / küme / sayı dizisi olacaktır.
Geçerli girdi örnekleri:
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]
Geçerli çıktı örnekleri:
[1, 4, 9]
1 4 9
1, 4, 9
1-4-9
vb.
Özellikler
- Belirli bir aralıktaki karelerin bir listesini bulmak için yerleşikleri kullanamazsınız
- Standart Loopholes Uygula
- 1 000 000'e (1 milyon) kadar işlem yapabilmelisiniz
- Giriş ile birlikte verilirse
1******, yazdırmak doğrudur[1000000]. Yazdırmak da doğru[1000000, 1002001, 1004004, 1006009, 1008016, 1010025, ...] - Joker karakter dizileri hiçbir zaman joker karakterle başlamaz; yani, her zaman aynı uzunlukta dizelerle eşleşeceklerdir.
Test Durumları
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]
Kazanan
14 Şubat'a kadar en kısa (geçerli) (çalışan) gönderim, en erken gönderim kazanarak eşitlik.
25geçerli bir cevap var ***ama değil *2*?
{4, "w", "w", 6}(veya daha iyisi {4, w, w, 6}) gibi özel bir karakter dizisi gibi bir karakter dizisi olabilir {"4", "w", "w", "6"}mi?
?, cevaplayan tarafından seçilecek olduğunu belirtmek olacaktır .