Ciąg, którego długość jest dodatnią liczbą trójkątną (1, 3, 6, 10, 15 ...), można ułożyć w „równoboczny trójkąt tekstowy”, dodając spacje i znaki nowej linii (i utrzymując go w tej samej kolejności czytania).
Na przykład ciąg o długości 10 ABCDEFGHIJ
staje się:
A
B C
D E F
G H I J
Napisz program lub funkcję, która pobiera taki ciąg, z wyjątkiem tego, że zawiera tylko znaki 0
i 1
. (Możesz założyć, że dane wejściowe są prawidłowe.)
Dla wynikowego „równobocznego trójkąta tekstowego” wyprowadzaj (drukuj lub zwracaj) jedną z czterech liczb oznaczających rodzaj wykazywanej symetrii:
Dane wyjściowe,
2
jeśli trójkąt ma dwustronną symetrię. tzn. ma linię symetrii od dowolnego rogu do punktu środkowego przeciwnej strony.Przykłady:
0 1 1 1 0 1 0 0 1 0 1 0 1 1 1 1 0 1 0 1 1 1
Wyjście,
3
jeśli trójkąt ma symetrię obrotową. tzn. można go obrócić o 120 ° bez zmiany wizualnej.Przykłady:
0 1 0 0 1 1 0 1 0 0 0 0 1 1 0 0 0 0 1 0 1 0 1 1 1 1 1 1 1 0 1 0 1 1 1 1 0 1 0 0 1 1 0 0 0 1 0 0 0 0 1 0 0 1 1 1
Wyjście,
6
jeśli trójkąt ma symetrię zarówno dwustronną, jak i obrotową. tzn. odpowiada warunkom wyprowadzania zarówno2
i3
.Przykłady:
0 1 0 0 0 1 0 0 1 0 1 0 0 0 0 1 0 0 0 0 0
Wyprowadzane,
1
jeśli trójkąt nie ma symetrii dwustronnej ani obrotowej.Przykłady:
1 1 0 0 0 0 0 0 1 1 0 1 1 1 0 1 1 1 1 1 1 1 1 1 1 1 1 1 0 0 0 1 1 1 1 1 1
Najkrótszy kod w bajtach wygrywa. Tiebreaker to wcześniejsza odpowiedź.
Oprócz opcjonalnej końcowym znakiem nowej linii, ciąg wejściowy nie może mieć przestrzeń / lub struktury dopełnienie nowej linii - powinna to być zwykły 0
„s i 1
” s.
W razie potrzeby możesz użyć dowolnych dwóch odrębnych drukowalnych znaków ASCII zamiast 0
i 1
.
Przypadki testowe
Zaczerpnięte bezpośrednio z przykładów.
011 -> 2
101 -> 2
001010 -> 2
1111010111 -> 2
0100110100 -> 3
0011000010 -> 3
101111111010111 -> 3
101001100010000100111 -> 3
0 -> 6
1 -> 6
000 -> 6
100101 -> 6
0000100000 -> 6
110000 -> 1
001101 -> 1
1101111111 -> 1
111111000111111 -> 1
„Obracanie” dowolnego wejścia o 120 ° spowoduje oczywiście tę samą moc wyjściową.