การป้อนข้อมูล:
- จำนวนเต็ม
n
ในช่วง2 <= n <= 10
- รายการจำนวนเต็มบวก
เอาท์พุท:
แปลงจำนวนเต็มเป็นตัวแทนไบนารีของพวกเขา (โดยไม่มีเลขศูนย์นำหน้า) และเข้าร่วมพวกเขาทั้งหมดเข้าด้วยกัน
จากนั้นกำหนดสตริงย่อยไบนารีทั้งหมดที่เป็น 'รั้วไบนารี' โดยใช้n
จำนวนการโพสต์รั้ว ช่องว่าง (ศูนย์) ระหว่างแต่ละโพสต์รั้วนั้นไม่เกี่ยวข้อง (อย่างน้อย 1) แต่โพสต์รั้วนั้นควรมีความกว้างเท่ากัน
ที่นี่ regexes สตริงย่อยควรตรงกับแต่ละn
:
n Regex to match to be a 'binary fence' Some examples
2 ^(1+)0+\1$ 101; 1100011; 1110111;
3 ^(1+)0+\10+\1$ 10101; 1000101; 110011011;
4 ^(1+)0+\10+\10+\1$ 1010101; 110110011011; 11110111100001111001111;
etc. etc. You get the point
ดูn=4
ตัวอย่าง:
1010101
^ ^ ^ ^ All fence posts have a width of one 1
^ ^ ^ with one or more 0s in between them
110110011011
^^ ^^ ^^ ^^ All fence posts have a width of two 1s
^ ^^ ^ with one or more 0s in between them
11110111100001111001111
^^^^ ^^^^ ^^^^ ^^^^ All fence posts have a width of four 1s
^ ^^^^ ^^ with one or more 0s in between them
จากนั้นเราจะส่งออกตัวเลขที่ใช้เลขฐานสองของการจับคู่ 'รั้วไบนารี'
ตัวอย่าง:
อินพุต: n=4
,L=[85,77,71]
การเป็นตัวแทนไบนารีของจำนวนเต็มเหล่านี้รวมกันคือ:
1010101 1001101 1000111
(หมายเหตุ: ช่องว่างจะถูกเพิ่มเป็นการชี้แจงเท่านั้นสำหรับตัวอย่าง)
เนื่องจากn=4
เรามองหาสตริงย่อยที่ตรงกับ regex (1+)0+\10+\10+\1
ซึ่งในกรณีนี้เราสามารถหาสอง:
1010101
(ที่ตำแหน่ง(1010101) 1001101 1000111
); และ11001101100011
(ที่ตำแหน่ง101010(1 1001101 100011)1
)
กรอบไบนารีแรกใช้เฉพาะเลขฐานสองจาก85
และกรอบไบนารีตัวที่สองใช้เลขฐานสองจากเลขจำนวนเต็มทั้งสาม ดังนั้นผลลัพธ์ในกรณีนี้จะเป็น:
[[85],[85,77,71]]
กฏท้าทาย:
- แม้ว่ามันจะถูกกล่าวถึงในตัวอย่างข้างต้นประโยคสุดท้ายเป็นสิ่งสำคัญ: เราส่งออกตัวเลขที่ใช้เลขฐานสองในสตริงย่อย 'การล้อมรั้วไบนารี'
- I / O ยืดหยุ่นได้ อินพุตสามารถเป็นรายการ / อาร์เรย์ / สตรีมของสตริงจำนวนเต็ม, space / comma / newline และอื่น ๆ เอาต์พุตสามารถเป็นรายการจำนวนเต็ม 2D, สตริงแบบมีตัวคั่นเดี่ยว, สตริงรายการ, บรรทัดใหม่ที่พิมพ์ไปยัง STDOUT เป็นต้น ทั้งหมดขึ้นอยู่กับคุณ แต่โปรดระบุสิ่งที่คุณใช้ในคำตอบของคุณ
- ลำดับผลลัพธ์ของรายการนั้นไม่เกี่ยวข้อง แต่ผลลัพธ์ของรายการภายในแต่ละรายการนั้นแน่นอนในลำดับเดียวกันกับรายการอินพุต ดังนั้นด้วยตัวอย่างข้างต้น
[[85,77,71],[85]]
เป็นผลลัพธ์ที่ถูกต้องเช่นกัน แต่[[85],[77,85,71]]
ไม่ใช่ - ดังที่คุณอาจสังเกตเห็นจากตัวอย่าง (the
85
) คุณสามารถใช้เลขฐานสองได้หลายครั้ง - regexes ควรจับคู่ซับสตริงทั้งหมด ดังนั้น
110101
หรือ010101
ไม่เคยเป็น 'รั้วไบนารี' ที่ถูกต้อง (10101
อย่างไรก็ตาม iffn=3
) - รายการในรายการผลลัพธ์ไม่ซ้ำกันเฉพาะตำแหน่งฐานสองของ 'กรอบไบนารี' เท่านั้น หากสามารถสร้าง 'รั้วไบนารี' หลายรายการด้วยจำนวนเต็มเท่ากันเราจะเพิ่มหลายครั้งในรายการผลลัพธ์
ตัวอย่างเช่น:n=2
,L=[109, 45]
(ไบนารี1101101 101101
) สามารถสร้างสตริงย่อย 'binary fence' เหล่านี้:11011
(ที่ตำแหน่ง(11011)01 101101
);101
(ที่ตำแหน่ง1(101)101 101101
);11011
(ที่ตำแหน่ง110(1101 1)01101
);101
(ที่ตำแหน่ง1101(101) 101101
);11011
(ตำแหน่ง110110(1 1011)01
);101
(ที่ตำแหน่ง1101101 (101)101
);101
(ตำแหน่ง1101101 101(101)
)[[109],[109],[109,45],[109],[109,45],[45],[45]]
ดังนั้นการส่งออกจะเป็น
อีกตัวอย่าง:n=2
,L=[8127]
(ไบนารี1111110111111
) สามารถสร้างสตริงย่อย 'binary fence' เหล่านี้:1111110111111
(ที่ตำแหน่ง(1111110111111)
);11111011111
(ที่ตำแหน่ง1(11111011111)1
);111101111
(ที่ตำแหน่ง11(111101111)11
);1110111
(ตำแหน่ง111(1110111)111
);11011
(ที่ตำแหน่ง1111(11011)1111
);101
(ตำแหน่ง11111(101)11111
)[[8127],[8127],[8127],[8127],[8127],[8127]]
ดังนั้นการส่งออกจะเป็น - หากไม่มีการส่งออกที่ถูกต้องเป็นไปได้คุณสามารถกลับรายการที่ว่างเปล่าหรือบางประเภทอื่น ๆ ของการส่งออก falsey (
null
,false
โยนข้อผิดพลาดอื่น ๆ อีกครั้งการโทรของคุณ)
กฎทั่วไป:
- นี่คือcode-golfดังนั้นคำตอบที่สั้นที่สุดในจำนวนไบต์ชนะ
อย่าปล่อยให้ภาษาที่ใช้รหัสกอล์ฟกีดกันคุณไม่ให้โพสต์คำตอบด้วยภาษาที่ไม่ได้เป็น codegolfing พยายามหาคำตอบสั้น ๆ ที่เป็นไปได้สำหรับภาษาโปรแกรม 'ใด ๆ ' - กฎมาตรฐานจะใช้สำหรับคำตอบของคุณดังนั้นคุณจึงได้รับอนุญาตให้ใช้ STDIN / STDOUT ฟังก์ชั่น / วิธีการที่มีพารามิเตอร์ที่เหมาะสมและชนิดผลตอบแทนโปรแกรมเต็มรูปแบบ การโทรของคุณ
- ช่องโหว่เริ่มต้นเป็นสิ่งต้องห้าม
- หากเป็นไปได้โปรดเพิ่มลิงก์พร้อมทดสอบรหัสของคุณ (เช่นTIO )
- นอกจากนี้ขอแนะนำให้เพิ่มคำอธิบายสำหรับคำตอบของคุณ
กรณีทดสอบ:
Input: Output
(the binary below the output are added as clarification,
where the parenthesis indicate the substring matching the regex):
4, [85,77,71] [[85],[85,77,71]]
(1010101) 1001101 1000111; 101010(1 1001101 100011)1
2, [109,45] [[109],[109],[109,45],[109],[109,45],[45],[45]]
(11011)01 101101; 1(101)101 101101; 110(1101 1)01101; 1101(101) 101101; 110110(1 1011)01; 1101101 (101)101; 1101101 101(101)
3, [990,1,3,3023,15,21] [[990,1,3,3023],[990,1,3,3023],[1,3,3023],[21]]
(1111011110 1 11 1)01111001111 1111 10101; 11110(11110 1 11 101111)001111 1111 10101; 1111011110 (1 11 101111001111) 1111 10101; 1111011110 1 11 101111001111 1111 (10101)
2, [1,2,3,4,5,6,7,8,9,10] [[1,2,3],[2,3],[4,5],[5],[5,6,7],[6,7],[6,7],[8,9],[9],[10]]
(1 10 11) 100 101 110 111 1000 1001 1010; 1 (10 1)1 100 101 110 111 1000 1001 1010; 1 10 11 (100 1)01 110 111 1000 1001 1010; 1 10 11 100 (101) 110 111 1000 1001 1010; 1 10 11 100 10(1 110 111) 1000 1001 1010; 1 10 11 100 101 (110 11)1 1000 1001 1010; 1 10 11 100 101 1(10 1)11 1000 1001 1010; 1 10 11 100 101 110 111 (1000 1)001 1010; 1 10 11 100 101 110 111 1000 (1001) 1010; 1 10 11 100 101 110 111 1000 1001 (101)0
3, [1,2,3,4,5,6,7,8,9,10] [[4,5],[8,9]]
1 10 11 (100 101 )110 111 1000 1001 1010; 1 10 11 100 101 110 111 (1000 1001) 1010
10, [1,2,3,4,5,6,7,8,9,10] []
No binary fences are possible for this input
6, [445873,2075] [[445873,2075],[445873,2075],[445873,2075]]
(1101100110110110001 1)00000011011; 110(1100110110110001 100000011)011; 1101100(110110110001 100000011011)
2, [8127] [[8127],[8127],[8127],[8127],[8127],[8127]]
(1111110111111); 1(11111011111)1; 11(111101111)11; 111(1110111)111; 1111(11011)1111; 11111(101)11111
2, [10,10] [[10],[10,10],[10]]
(101)0 1010; 10(10 1)010; 1010 (101)0
4, [10,10,10] [[10,10],[10,10,10],[10,10]]
(1010 101)0 1010; 10(10 1010 1)010; 1010 (1010 101)0
[1,2,3]
ถูกต้องสำหรับ testcase 4 ใช่ไหม ฉันเห็นรั้ว(1 10 11)
2, [10, 10]
ซึ่งจะส่งผลให้[[10],[10,10],[10]]
หากฉันเข้าใจความถูกต้องของการแก้ไข