Uma string cujo comprimento é um número triangular positivo (1, 3, 6, 10, 15 ...) pode ser organizada em um "triângulo de texto equilateral" adicionando alguns espaços e novas linhas (e mantendo-os na mesma ordem de leitura).
Por exemplo, a cadeia de comprimento 10 ABCDEFGHIJ
se torna:
A
B C
D E F
G H I J
Escreva um programa ou função que aceite essa sequência, exceto que ela conterá apenas os caracteres 0
e 1
. (Você pode assumir que a entrada é válida.)
Para o "triângulo de texto equilateral" resultante, imprima (imprima ou retorne) um dos quatro números que denota o tipo de simetria exibida:
Saída
2
se o triângulo tiver simetria bilateral. isto é, tem uma linha de simetria de qualquer canto até o ponto médio do lado oposto.Exemplos:
0 1 1 1 0 1 0 0 1 0 1 0 1 1 1 1 0 1 0 1 1 1
Saída
3
se o triângulo tiver simetria rotacional. isto é, poderia ser girado 120 ° sem alteração visual.Exemplos:
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
Saída
6
se o triângulo tem tanto simetria bilateral e rotação. isto é, corresponde às condições para a saída de ambos2
e3
.Exemplos:
0 1 0 0 0 1 0 0 1 0 1 0 0 0 0 1 0 0 0 0 0
Saída
1
se o triângulo não tiver simetria bilateral nem rotacional.Exemplos:
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
O código mais curto em bytes vence. O desempatador é a resposta anterior.
Além de uma nova linha à direita opcional, a sequência de entrada pode não ter preenchimento de espaço / nova linha ou estrutura - ela deve ser simples 0
e simples 1
.
Se desejar, você pode usar dois caracteres ASCII imprimíveis distintos no lugar de 0
e 1
.
Casos de teste
Tomado diretamente de exemplos.
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
"Girar" qualquer entrada em 120 ° resultará obviamente na mesma saída.