Geléia , 14 12 bytes
J’ƲœṗZ⁻¦µU⁼
Experimente online!
fundo
Começamos examinando os índices baseados em 0 da sequência de entrada.
H H e H H e l e H H e l l l e H H e l l o l l e H
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24
Para obter as linhas do triângulo, podemos dividir a sequência antes dos índices 1 , 1 + 3 = 4 , 1 + 3 + 5 = 9 e 1 + 3 + 5 + 7 = 16 . Como (n + 1) ² = n² + (2n + 1) , essas somas são precisamente os quadrados perfeitos positivos na lista de índices. Se também dividirmos a string antes de 0 , isso é tão simples quanto dividir antes de todos os índices baseados em 0 que são quadrados perfeitos.
Após a divisão, obtemos as seguintes strings.
""
"H"
"HeH"
"HeleH"
"HellleH"
"HellolleH"
Em seguida, substituímos a sequência vazia no início por todos os caracteres na primeira coluna.
"HHHHH"
"H"
"HeH"
"HeleH"
"HellleH"
"HellolleH"
A tarefa agora é reduzida para verificar se a reversão de todas as cadeias produz a mesma matriz de cadeias.
Como funciona
Primeiro J
gera todos os índices baseados em 1 da sequência de entrada J
e depois os diminui ’
para gerar todos os índices baseados em 0. Ʋ
testa todos os índices baseados em 0 quanto à esquadria. Para o nosso exemplo acima, isso gera a seguinte matriz booleana.
1 1 0 0 1 0 0 0 0 1 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0
Em seguida, chamamos œṗ
para particionar a sequência de entrada, por exemplo,
H H e H H e l e H H e l l l e H H e l l o l l e H
antes de todos 1 's (na verdade, todos os elementos truthy). Para o nosso exemplo, isso gera a seguinte matriz de strings.
['',
'H',
'HeH',
'HeleH',
'HellleH',
'HellolleH'
]
Z⁻¦
é sem dúvida a parte mais interessante desta resposta. Vamos analisar o mais direto Z1¦
primeiro.
¦
é o esparso rápido. Consome dois links da pilha, especificamente 1
e Z
neste caso. Primeiro Z
é aplicado ao seu argumento: a matriz de strings de antes. Z
é o átomo zip e lê a matriz de cadeias / matriz de caracteres 2D por colunas, produzindo
['HHHHH',
'eeee',
'Hlll',
'ell',
'Hlo',
'el',
'Hl',
'e',
'H'
]
O que costumava ser o lado esquerdo da sequência de entrada e a primeira coluna da matriz de sequências agora se torna a primeira sequência .
Agora ¦
espreita 1
e encontra um único índice: 1 . Portanto, a primeira string na matriz original é substituída pela primeira no valor de retorno Z
; seqüências de caracteres em outros índices permanecem inalteradas.
['HHHHH',
'H',
'HeH',
'HeleH',
'HellleH',
'HellolleH'
]
Vamos chamar essa matriz A .
Usamos em Z⁻¦
vez de Z1¦
, mas isso não faz diferença: ⁻
compara a matriz de strings com a string de entrada pela desigualdade, produzindo 1, uma vez que elas não são iguais. A diferença entre os dois é que Z⁻¦
é diádico porque ⁻
é, permitindo-nos escrever em œṗZ⁻¦
vez de œṗ¹Z1¦
. Isso ocorre porque uma díade ( œṗ
) seguida por uma mônada ( œṗ¹Z1¦
) é uma bifurcação (a mônada é aplicada ao argumento da cadeia / sequência de entrada e o valor retornado é passado como o argumento correto œṗ
), enquanto uma díade seguida por outra díade (ou no final da cadeia) é um gancho , ou seja, seu argumento correto é o argumento da cadeia.
Tudo o que resta a fazer é verificar a palindromicidade. µ
começa uma nova cadeia (monádico), que é argumento é Um . O átomo de reversãoU
inverte todas as seqüências em A (mas não o próprio A ) e ⁼
compara o resultado com A para obter igualdade. O Booleano 1 retornado indica um triângulo totalmente palindrômico; outras seqüências retornariam 0 .