これは、2016 ARMLコンテストチーム問題#6の一部に触発されました。
ここに課題があります:
数字と別の文字のシーケンスである「ワイルドカードシーケンス」が与えられます。文字列は、次の疑似コードによってこのワイルドカードシーケンスと一致します。
w = wildcard
s = string
# s matches w iff
for all 0 >= i > wildcard.length, w[i] == '?' or s[i] == w[i]
どこ '?' お好みのキャラクターです。
正規表現に関しては、を想像し'?'
てみてください'.'
。
問題は、10進数の文字列表現がこのワイルドカードシーケンスと一致するすべての平方数(要件は最大100万個)を見つけることです。「ワイルドカード文字」は、明らかに数字でない限り、任意の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(100万)を処理できる必要があります。
- 入力とともに提供されている場合は、
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"}
?
?
は、それが回答者によって選択されることを指定することだと思います。