Giriş:
n
Aralıktaki bir tam sayı2 <= n <= 10
- Pozitif tamsayıların listesi
Çıktı:
Tam sayıları ikili gösterimlere (baştaki sıfır olmadan) dönüştürün ve hepsini birleştirin.
Ardından n
, çit direkleri miktarını kullanarak 'ikili çit' oluşturan tüm ikili alt dizeleri belirleyin . Her bir çit direği arasındaki boşlukların (sıfırlar) ilgisiz (en az 1), ancak çit direklerinin kendileri eşit genişlikte olmalıdır.
Burada ikili alt dizelerin her biri için eşleşmesi gereken normal ifadeler 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
Örneklere bakıldığında :
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
Daha sonra "ikili çitler" eşleşmelerinin ikili rakamlarını kullanan sayıları çıkarırız.
Misal:
Girdi: n=4
,L=[85,77,71]
Birleştirilen bu tamsayının ikili temsili şöyledir:
1010101 1001101 1000111
(NOT: Boşluklar yalnızca örnek için açıklama olarak eklenmiştir).
Çünkü n=4
regex ile eşleşen alt dizeleri ararız (1+)0+\10+\10+\1
, bu durumda iki tane bulabiliriz:
1010101
(konumda (1010101) 1001101 1000111
); ve 11001101100011
(konumda 101010(1 1001101 100011)1
)
İlk ikili çit, yalnızca gelen ikili basamakları kullanır 85
ve ikinci ikili çit, üç tamsayıdan gelen ikili basamakları kullanır. Yani bu durumda çıktı:
[[85],[85,77,71]]
Zorluk kuralları:
- Yukarıdaki örnekte de belirtilmiş olmasına rağmen, son cümle önemlidir: İkili basamakların kullanıldığı sayıları 'ikili çit' alt dizesinde çıkarırız.
- G / Ç esnektir. Giriş bir liste / dizi / tamsayı akışı, boşluk / virgül / satırsonu ayrılmış dize, vb olabilir. Çıktı bir 2B tam sayı listesi, tek bir sınırlandırılmış dize, bir dize listesi, STDOUT'a yazdırılan yeni satır, vb. Olabilir. Tamamen size kalmış, ancak lütfen yanıtınızda ne kullandığınızı belirtin.
- Listenin kendisinin çıktı sırası ilgisizdir, ancak her bir iç listenin çıktısı elbette giriş listesiyle aynı sıradadır. Yani yukarıdaki örnekle,
[[85,77,71],[85]]
geçerli bir çıktıdır, ancak[[85],[77,85,71]]
değildir. - Örnek (the
85
) ' den daha önce fark etmiş olabileceğiniz gibi , ikili rakamlar birden çok kez kullanılabilir. - Normal ifadeler, alt dize ile tamamen eşleşmelidir. Öyleyse
110101
ya010101
da hiç geçerli bir 'ikili çit' değildir (10101
ancak, iffn=3
). - Çıktı listesindeki öğeler benzersiz değil, sadece 'ikili çitlerin' ikili konumları benzersizdir. Aynı tamsayılarla birden fazla 'ikili çit' oluşturulabilirse, bunları çıkış listesine birçok kez ekleriz.
Örneğin:n=2
,L=[109, 45]
(ikili1101101 101101
), bu iki terimli çit 'altdizgelerin oluşturabilir:11011
(pozisyonda(11011)01 101101
);101
(konumda1(101)101 101101
);11011
(konumda110(1101 1)01101
);101
(konumda1101(101) 101101
);11011
(konumda110110(1 1011)01
);101
(konumda1101101 (101)101
);101
(pozisyonda1101101 101(101)
), böylece çıkış olur[[109],[109],[109,45],[109],[109,45],[45],[45]]
.
Başka bir örnek:n=2
,L=[8127]
(ikili1111110111111
), bu iki terimli çit 'altdizgelerin oluşturabilir:1111110111111
(pozisyonda(1111110111111)
);11111011111
(konumda1(11111011111)1
);111101111
(konumda11(111101111)11
);1110111
(konumda111(1110111)111
);11011
(konumda1111(11011)1111
);101
(pozisyonda11111(101)11111
), böylece çıkış olur[[8127],[8127],[8127],[8127],[8127],[8127]]
. - Geçerli bir çıkış mümkün değilse, boş bir liste veya başka tür bir falsey çıkışı döndürebilirsiniz (
null
,,false
bir hata atar, vb. Yine çağrınız).
Genel kurallar:
- Bu kod golf , bayt en kısa cevap kazanır.
Kod golf dillerinin, kod yazmayan dillerle yanıt göndermenizi engellemesine izin vermeyin. 'Herhangi bir' programlama dili için olabildiğince kısa bir cevap bulmaya çalışın. - Cevabınız için standart kurallar geçerlidir , bu nedenle STDIN / STDOUT, fonksiyonlar / yöntem uygun parametreler ve dönüş tipi, tam programlar ile kullanılabilir. Çağrınız.
- Varsayılan Loopholes yasaktır.
- Mümkünse, lütfen kodunuz için bir test içeren bir bağlantı ekleyin (örn. TIO ).
- Ayrıca, cevabınız için bir açıklama eklemeniz önemle tavsiye edilir.
Test senaryoları:
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 için geçerlidir? Çiti görüyorum(1 10 11)
2, [10, 10]
yol açmalıdır [[10],[10,10],[10]]
ben meydan correctl.y anlarsanız