Dies wurde von einem Teil des ARML-Wettbewerbs Team Problem # 6 2016 inspiriert.
Hier ist die Herausforderung:
Sie erhalten eine "Platzhalterfolge", bei der es sich um eine Folge von Ziffern und einem anderen Zeichen handelt. Eine Zeichenfolge entspricht dieser Platzhalterfolge mit dem folgenden Pseudocode:
w = wildcard
s = string
# s matches w iff
for all 0 >= i > wildcard.length, w[i] == '?' or s[i] == w[i]
Wo '?' ist ein Charakter Ihrer Wahl.
Stellen Sie sich in Bezug auf Regex das '?'vor '.'.
Die Herausforderung besteht darin, alle quadratischen Zahlen zu finden (die Anforderung beträgt bis zu 1 Million), deren Dezimalzeichenfolgen mit dieser Platzhalterfolge übereinstimmen. Das "Platzhalterzeichen" kann ein beliebiges ASCII-Zeichen Ihrer Wahl sein, sofern es sich offensichtlich nicht um eine Ziffer handelt.
Zum Beispiel 4096stimmt 4**6und stimmt 4*9*aber 4114auch nicht überein.
Eingang
Die Eingabe erfolgt als Sequenz, die dem regulären Ausdruck entspricht [0-9?]+. Dies kann eine Zeichenfolge, ein Zeichenarray oder ein Bytearray der Zeichen in ASCII sein.
Ausgabe
Die Ausgabe erfolgt durch eine beliebige Liste / Menge / Anordnung von Zahlen, die perfekte Quadrate sind und mit der Platzhalterfolge übereinstimmen.
Beispiele für gültige Eingaben:
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]
Beispiele für gültige Ausgaben:
[1, 4, 9]
1 4 9
1, 4, 9
1-4-9
etc.
Spezifikationen
- Sie dürfen keine eingebauten Elemente verwenden, um eine Liste von Quadraten in einem bestimmten Bereich zu finden
- Standardschlupflöcher gelten
- Sie müssen in der Lage sein, bis zu 1 000 000 (1 Million) zu verarbeiten.
- Wenn mit der Eingabe versehen
1******, ist das Drucken korrekt[1000000]. Es ist auch richtig zu drucken[1000000, 1002001, 1004004, 1006009, 1008016, 1010025, ...] - Platzhaltersequenzen beginnen niemals mit dem Platzhalterzeichen. Das heißt, sie stimmen immer mit Zeichenfolgen gleicher Länge überein.
Testfälle
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]
Gewinnen
Kürzeste (gültige) (Arbeits-) Einreichung bis zum 14. Februar, Gleichstand durch frühesten Gewinner der Einreichung.
25eine gültige Antwort für, ***aber nicht für *2*?
{4, "w", "w", 6}(oder noch besser {4, w, w, 6}) sein, anstatt ein Array von Zeichen wie {"4", "w", "w", "6"}?
?welche vom Antwortenden zu wählen ist.