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 .
Japonês ,
252117 bytesGuardado 2 bytes graças a @obarakon
Teste online!
Como funciona
Observe que não precisamos verificar os dois lados; se os lados não forem os mesmos, pelo menos uma das linhas não é um palíndromo.
fonte
05AB1E , 18 bytes
Usa a codificação 05AB1E . Experimente online!
fonte
gÅÉ£ÐíQs€¬āÈÏJÂQ*
gÅÉ£
você sly fox ... Eu subestimar aqueleslist-commands.py
Geléia ,
1816 bytesExperimente online!
Agradecemos a Jonathan Allan pela economia trivial, mas não tão óbvia, de -2 bytes.
fonte
JƲ0;œṗ⁸ZḢ$ṭ$ŒḂ€Ạ
J²‘Ṭœṗ⁸ZḢ$ṭ$ŒḂ€Ạ
½
? AgoraJ
faz mais sentido ...JavaScript (ES6), 112 bytes
t
eu
colete os lados para que possam ser testados no final.fonte
C #, 184 bytes
Pensei que a solução estava com boa aparência até chegar à parte do palíndromo
Versão não destruída:
fonte
e=..
para a linha do loop for para salvar um byte? Não há necessidade de contar as novas linhas na contagem de bytes, portanto, suponho que você não esteja.....; i < s;e = f.Substring(s - k)){c+=....
Java 8,
358301 bytesEntrada é a
String
, saída é aboolean
.Explicação:
Experimente aqui.
fonte
Geléia ,
2021 bytes+2 bytes - eu liberei o código de buggy :(
-1 byte - movi de moldagem como números inteiros ímpares para particionamento em índices quadrados
Um link monádico que aceita uma lista de caracteres e retorna
1
(Truthy) ou0
(Falsey).Nota: isso usa a parte da especificação que limita a entrada a um comprimento quadrado.
Experimente online! ou veja a suíte de testes .
Isso pode ser simplificado para 17 bytes , observando que, se todas as linhas são palíndromos, apenas um "lado" precisa ser
JƲ0;œṗ⁸ZḢ$ṭ$ŒḂ€Ạ
checado ( ); no entanto, Erik, o Outgolfer, já notou esse fato e o usou na resposta. isso o método de construção do triângulo para eles um byte lá.Além disso, isso pode ser aprimorado para 16 bytes , observando que o particionamento nos índices de verdade não se importa se houver excesso no argumento esquerdo (
J²‘Ṭœṗ⁸ZḢ$ṭ$ŒḂ€Ạ
).Quão?
fonte
Mathematica, 156 bytes
entrada
fonte
If[<stuff>, True, False]
com apenas<stuff>
? E acho queAnd@@(...)
é mais curto queCount[...,True]==s
, o que também significa que você não precisa definirs
como variável."1202"
e"160625052"
).PHP , 97 bytes
Experimente online!
fonte
Java, 136 bytes
Usa uma
MutableList<Character>
das coleções do Eclipsefonte
Perl 5 , 81 + 1 (
-p
) = 82 bytesExperimente online!
Saídas
undef
(ou seja, em branco, nulo) para true, qualquer número para falsefonte
Excel VBA, 87 bytes
Função de janela imediata VBE anônima que recebe entrada da célula
[A1]
e sai para a janela imediata VBEfonte
Python 2 ,
128118115 bytesExperimente online!
fonte