สิ่งนี้ได้รับแรงบันดาลใจจากส่วนหนึ่งของปัญหาการแข่งขัน ARML ประจำปี 2559
นี่คือความท้าทาย:
คุณได้รับ "ลำดับตัวแทน" ซึ่งเป็นลำดับตัวเลขและตัวละครอื่น สตริงตรงกับลำดับ wildcard นี้โดย pseudocode ต่อไปนี้:
w = wildcard
s = string
# s matches w iff
for all 0 >= i > wildcard.length, w[i] == '?' or s[i] == w[i]
ที่ไหน '?' เป็นตัวละครที่คุณเลือก
ในแง่ของการ regex เพียงจินตนาการที่จะเป็น'?''.'
ความท้าทายคือการหาหมายเลขสแควร์ทั้งหมด (ความต้องการสูงถึง 1 ล้าน) ซึ่งมีการแทนสตริงสตริงตรงกับลำดับสัญลักษณ์ตัวแทนนี้ "อักขระตัวแทน" สามารถเป็นอักขระ ASCII ใด ๆ ที่คุณเลือกได้ตราบใดที่ไม่ใช่ตัวเลข
ตัวอย่างเช่น4096จับคู่4**6และ4*9*แต่4114ไม่ตรงกัน
อินพุต
การป้อนข้อมูลจะได้รับการจับคู่เป็นลำดับ [0-9?]+regex นี่อาจเป็นสตริงอาร์เรย์อักขระหรืออาร์เรย์ไบต์ของอักขระใน 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 (1 ล้าน)
- ถ้าให้มาพร้อมกับการป้อนข้อมูลที่มันเป็นเรื่องที่ถูกต้องในการพิมพ์
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]
การชนะ
ส่งสั้น (ถูกต้อง) (ทำงาน) ภายในวันที่ 14 กุมภาพันธ์ผูกมัดโดยการส่งผลงานที่เร็วที่สุด
25คำตอบที่ถูกต้องสำหรับการ***แต่ไม่*2*?
{4, "w", "w", 6}(หรือยังดีกว่า{4, w, w, 6}) แทนที่จะเป็นอาร์เรย์ของอักขระเช่น{"4", "w", "w", "6"}?
?ผู้ตอบจะถูกเลือก