Jalea , 14 12 bytes
J’ƲœṗZ⁻¦µU⁼
Pruébalo en línea!
Antecedentes
Comenzamos mirando los índices basados en 0 de la cadena 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 obtener las filas del triángulo, podemos dividir la cadena antes de los índices 1 , 1 + 3 = 4 , 1 + 3 + 5 = 9 y 1 + 3 + 5 + 7 = 16 . Como (n + 1) ² = n² + (2n + 1) , estas sumas son precisamente los cuadrados positivos y perfectos en la lista de índice. Si también dividimos la cadena antes de 0 , esto es tan simple como dividir antes de todos los índices basados en 0 que son cuadrados perfectos.
Después de dividir, obtenemos las siguientes cadenas.
""
"H"
"HeH"
"HeleH"
"HellleH"
"HellolleH"
A continuación, reemplazamos la cadena vacía al principio con todos los caracteres en la primera columna.
"HHHHH"
"H"
"HeH"
"HeleH"
"HellleH"
"HellolleH"
La tarea ahora se reduce a verificar si invertir todas las cadenas produce la misma matriz de cadenas.
Cómo funciona
Primero J
genera todos los índices basados en 1 de la cadena de entrada J
, luego los disminuye ’
para producir todos los índices basados en 0. Ʋ
prueba todos los índices basados en 0 para la cuadratura. Para nuestro ejemplo de arriba, esto produce la siguiente 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
A continuación, llamamos œṗ
a particionar la cadena de entrada, por ejemplo,
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 los 1 '(en realidad, todos los elementos de verdad). Para nuestro ejemplo, esto produce la siguiente matriz de cadenas.
['',
'H',
'HeH',
'HeleH',
'HellleH',
'HellolleH'
]
Z⁻¦
es posiblemente la parte más interesante de esta respuesta. Analicemos el más directo Z1¦
primero.
¦
Es el escaso rápido. Consume dos enlaces de la pila, específicamente 1
y Z
en este caso. Primero Z
se aplica a su argumento: la matriz de cadenas de antes. Z
es el átomo zip y lee la matriz de cadenas / matriz de caracteres 2D por columnas, produciendo
['HHHHH',
'eeee',
'Hlll',
'ell',
'Hlo',
'el',
'Hl',
'e',
'H'
]
Lo que solía ser el lado izquierdo de la cadena de entrada y la primera columna de la matriz de cadenas ahora se convierte en la primera cadena .
Ahora ¦
mira 1
y encuentra un solo índice: 1 . Por lo tanto, la primera cadena en la matriz de cadenas original se reemplaza con la primera cadena en el valor de retorno de Z
; Las cadenas de otros índices no se ven afectadas.
['HHHHH',
'H',
'HeH',
'HeleH',
'HellleH',
'HellolleH'
]
Vamos a llamar a esta matriz A .
Usamos en Z⁻¦
lugar de Z1¦
, pero esto no hace ninguna diferencia: ⁻
compara la matriz de cadenas con la cadena de entrada para la desigualdad, produciendo 1 ya que no son iguales. La diferencia entre los dos es que Z⁻¦
es diádica porque ⁻
nos permite escribir en œṗZ⁻¦
lugar de œṗ¹Z1¦
. Esto se debe a que una díada ( œṗ
) seguida de una mónada ( œṗ¹Z1¦
) es una bifurcación (la mónada se aplica al argumento de la cadena / la cadena de entrada, y el valor devuelto se pasa como el argumento correcto a œṗ
), mientras que una díada seguida por otra díada (o al final de la cadena) es un gancho , es decir, su argumento correcto es el argumento de la cadena.
Todo lo que queda por hacer es verificar la palindrómica. µ
comienza una nueva cadena (monádico) que está argumento es una . El átomo invertidoU
invierte todas las cadenas en A (pero no A en sí), luego ⁼
compara el resultado con A para la igualdad. El 1 booleano devuelto indica un triángulo totalmente palindrómico; otras cadenas devolverían 0 .
Japt ,
252117 bytesGuardado 2 bytes gracias a @obarakon
¡Pruébalo en línea!
Cómo funciona
Tenga en cuenta que no necesitamos verificar ambos lados; Si los lados no son iguales, al menos una de las filas no es un palíndromo.
fuente
05AB1E , 18 bytes
Utiliza la codificación 05AB1E . Pruébalo en línea!
fuente
gÅÉ£ÐíQs€¬āÈÏJÂQ*
gÅÉ£
zorro astuto ... Subestimo esoslist-commands.py
Jalea ,
1816 bytesPruébalo en línea!
Gracias a Jonathan Allan por los ahorros triviales pero no tan obvios de -2 bytes.
fuente
JƲ0;œṗ⁸ZḢ$ṭ$ŒḂ€Ạ
J²‘Ṭœṗ⁸ZḢ$ṭ$ŒḂ€Ạ
½
? AhoraJ
tiene más sentido ...JavaScript (ES6), 112 bytes
t
yu
recoger los lados para que puedan ser probados al final.fuente
C #, 184 bytes
Pensé que la solución se veía bien hasta que llegué a la parte del palíndromo
Versión sin golf:
fuente
e=..
a la línea de bucle for para guardar un byte? No es necesario contar las nuevas líneas en el recuento de bytes, así que supongo que no.....; i < s;e = f.Substring(s - k)){c+=....
Java 8,
358301bytesLa entrada es a
String
, la salida es aboolean
.Explicación:
Pruébalo aquí
fuente
Jalea ,
2021 bytes+2 bytes: liberé el código defectuoso :(
-1 byte : pasé de moldear como enteros impares a particionar en índices cuadrados
Un enlace monádico que acepta una lista de personajes y devuelve
1
(Verdad) o0
(Falsey).Nota: esto utiliza la parte de la especificación que limita la entrada a una longitud cuadrada.
Pruébalo en línea! o ver el conjunto de pruebas .
Esto puede simplificarse a 17 bytes al observar que si todas las filas son palíndromos, solo un "lado" necesita verificación (
JƲ0;œṗ⁸ZḢ$ṭ$ŒḂ€Ạ
), sin embargo, Erik the Outgolfer ya notó este hecho y lo usó en su respuesta, así que les he dado el método de construcción de triángulos para guardar Un byte allí.Además, eso a su vez puede mejorarse a 16 bytes al observar que a la partición en índices verdaderos no le importa si hay un exceso en el argumento izquierdo (
J²‘Ṭœṗ⁸ZḢ$ṭ$ŒḂ€Ạ
).¿Cómo?
fuente
Mathematica, 156 bytes
entrada
fuente
If[<stuff>, True, False]
con solo<stuff>
? Y creo queAnd@@(...)
es más corto queCount[...,True]==s
, lo que también significa que no tienes que definirlos
como una variable."1202"
y"160625052"
).PHP , 97 bytes
Pruébalo en línea!
fuente
Java, 136 bytes
Utiliza una
MutableList<Character>
colección de Eclipsefuente
Perl 5 , 81 + 1 (
-p
) = 82 bytesPruébalo en línea!
Salidas
undef
(es decir, en blanco, nulo) para verdadero, cualquier número para falsofuente
Excel VBA, 87 bytes
Función de ventana inmediata anónima de VBE que toma entrada de la celda
[A1]
y salidas a la ventana inmediata de VBEfuente
Python 2 ,
128118115 bytesPruébalo en línea!
fuente